Jika Anda mendapatkan kesalahan “bujur/lintang di luar batas” saat mencoba membuat indeks 2dsphere di MongoDB, itu bisa jadi karena koordinat bujur dan lintang Anda berada dalam urutan yang salah.
Saat membuat objek GeoJSON, Anda harus membuat daftar garis bujur terlebih dahulu, lalu garis lintang.
- Nilai bujur yang valid adalah antara
-180
dan180
, keduanya inklusif. - Nilai garis lintang yang valid adalah antara
-90
dan90
, keduanya inklusif.
Oleh karena itu, jika Anda mendapatkan kesalahan “bujur/lintang di luar batas”, periksa dokumen Anda untuk melihat urutan koordinat lintang dan bujur.
Contoh Kesalahan
Berikut ini contoh koleksi yang disebut bars
yang berisi dokumen dengan koordinat dalam urutan yang salah.
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } } { "_id" : 2, "name" : "The Downunder Bar", "location" : { "type" : "Point", "coordinates" : [ -16.92107838010542, 145.77621640842125 ] } }
Jika kita mencoba membuat indeks 2dsphere pada location
bidang, kami akan mendapatkan kesalahan.
Contoh:
db.bars.createIndex(
{ location : "2dsphere" }
)
Hasil:
{ "ok" : 0, "errmsg" : "Index build failed: 2bb26869-1dec-4484-b554-3ba55fc0c0de: Collection krankykranes.bars ( e1a99ee2-b77c-41a4-b833-25c4b3c599c3 ) :: caused by :: Can't extract geo keys: { _id: 1.0, name: \"Boardwalk Social\", location: { type: \"Point\", coordinates: [ -16.91929771855337, 145.7767525971982 ] } } longitude/latitude is out of bounds, lng: -16.9193 lat: 145.777", "code" : 16755, "codeName" : "Location16755" }
Contoh dengan Urutan Koordinat yang Benar
Ini koleksinya lagi, kecuali dengan urutan koordinat yang benar:
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ 145.77675259719823, -16.919297718553366 ] } } { "_id" : 2, "name" : "The Downunder Bar", "location" : { "type" : "Point", "coordinates" : [ 145.77621640842125, -16.92107838010542 ] } }
Sekarang mari kita buat indeks 2dsphere pada location
bidang:
db.bars.createIndex(
{ location : "2dsphere" }
)
Hasil:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Ini berarti bahwa itu diciptakan.
Kita dapat memeriksanya dengan getIndexes()
metode:
db.bars.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 3 } ]