Bagaimana Mengimplementasikan Fitur Geospasial MongoDB

Bagaimana Mengimplementasikan Fitur Geospasial Mongodb



Fitur geospasial MongoDB menyediakan cara mudah untuk menyimpan data geografis dalam database. Intinya, kita dapat menyimpan data geospasial di MongoDB sebagai objek GeoJSON. GeoJSON adalah format sumber terbuka dan gratis yang bergantung pada Notasi Objek JavaScript dengan data geografis sederhana. Fungsi ini penting bagi aplikasi yang membutuhkan layanan berdasarkan lokasi seperti proses pemetaan, pencarian berdasarkan lokasi, dan lain-lain. Artikel ini membahas fitur geospasial beserta contoh implementasinya.

Menambahkan Dokumen ke dalam Koleksi Fitur Geospasial

Untuk mendemonstrasikan fungsionalitas fitur Geospasial MongoDB, kami memerlukan dokumen untuk koleksi tertentu. Kami memasukkan beberapa dokumen ke dalam koleksi “area” seperti yang ditunjukkan berikut ini:

db.area.masukkanBanyak( [
{
nama: 'Taman Anak' ,
lokasi: { ketik: 'Titik' , koordinat: [ - 60,97 , 30.77 ] },
kategori: 'Kebun'
},
{
nama: 'Area Siswa' ,
lokasi: { ketik: 'Titik' , koordinat: [ - 60.9928 , 30.7193 ] },
kategori: 'Kebun'
},
{
nama: 'Lapangan sepak bola' ,
lokasi: { ketik: 'Titik' , koordinat: [ - 60.9375 , 30.8303 ] },
kategori: 'Stadion'
}
] )

Kami memiliki dokumen yang berisi data lokasi seperti koordinat. Selain itu, kami membuat indeks geospasial di lapangan untuk mengoptimalkan kinerja kueri geospasial.









Contoh 1: Menggunakan Operator Kueri $geoIntersects

Pertama, kita memiliki operator $geoIntersects pada fitur geospasial yang bersinggungan dengan objek yang disediakan. Pertimbangkan implementasi operator $geoIntersects berikut:



db.area.find({ lokasi: { $geoIntersects: { $geometry: { ketik: 'Titik' ,

koordinat: [ - 60,97 , 30.77 ] } } } })

Dalam contoh ini, kami memanggil kumpulan “area” bersama dengan operasi “temukan”. Untuk metode find(), kami meneruskan kumpulan kolom “lokasi” ke operator kueri $geoIntersects pada fitur geospasial. Ini digunakan untuk memeriksa apakah titik yang ditentukan berpotongan dengan geometri yang disimpan dalam bidang geometri.





Kemudian, operator $geoIntesects mengambil operator $geometry di mana bidang tipe diatur dengan nilai “Titik” dan bidang koordinat diberikan dengan nilai “koordinat”. Di sini, $geometry didefinisikan untuk perbandingan geospasial.

Output berikut adalah tempat dokumen yang diharapkan diambil dan bidang geometri berisi objek geometris yang berpotongan dengan titik yang ditentukan:



Contoh 2: Menggunakan Operator Kueri $near

Operator $near juga merupakan fitur geospasial yang digunakan untuk melakukan query geospasial untuk mengidentifikasi dokumen yang secara geografis dekat dengan tempat tertentu. Ini mengambil dokumen yang disusun menurut kedekatannya dengan lokasi yang ditentukan. Di sini, kami menyediakan implementasi operator $near:

db.area.temukan(
{
lokasi:
{ $dekat :
{
$geometri: { jenis: 'Titik' ,  koordinat: [ - 60.9667 , 30.78 ] },
$minJarak: 1000 ,
$jarak maksimal: 5000
}
}
}
)

Dalam contoh ini, kita mendefinisikan bidang “lokasi” dari koleksi “area” di dalam operasi “temukan”. Kemudian, kami menetapkan operator kueri $near dari fitur geospasial ke bidang “lokasi” tersebut. Operator $near mencari titik dekat dengan titik koordinat yang diberikan. Selanjutnya, kita menggunakan parameter $minDistance dan $maxDistance pada operator $near yang diberikan nilai tertentu untuk mengambil dokumen dalam rentang jarak yang ditentukan dari titik tertentu.

Dokumen tersebut diambil dalam keluaran yang dekat dengan lokasi atau tempat menarik tertentu dalam kumpulan “area” geospasial:

Contoh 3: Menggunakan Operator Kueri $nearsphere

Alternatifnya, kita mempunyai operator $nearsphere yang mirip dengan operator $near, namun $nearSphere memperhitungkan bentuk bola bumi saat menghitung jarak.

db.area.temukan(
{
lokasi: {
$dekatSphere: {
$geometri: {
jenis : 'Titik' ,
koordinat : [ - 60.9667 , 30.78 ]
},
$minJarak: 1000 ,
$jarak maksimal: 5000
}
}
}
)

Dalam contoh ini, kami menggunakan operator $nearsphere pada kueri geospasial. Operator $nearspehere di sini mencari dokumen yang titik terdekatnya dekat dengan titik yang ditentukan dalam kueri, dan titik tersebut disetel ke larik bidang koordinat.

Setelah itu, kami menyempurnakan hasilnya dengan menetapkan parameter $minDistance dan $maxDistance. Parameter $minDistance memastikan bahwa dokumen yang dikembalikan setidaknya berjarak 1000 meter dari titik yang ditentukan, sedangkan parameter $maxDistance membatasi hasil pada lokasi yang berjarak tidak lebih dari 5000 meter.

Dokumen ditampilkan dalam keluaran dengan lokasi dalam meter tertentu dari titik dengan koordinat tertentu:

Contoh 4: Menggunakan Operator Kueri $geoWithin

Selanjutnya, kita memiliki operator $geoWithin di MongoDB yang digunakan untuk kueri geospasial guna menemukan dokumen yang seluruhnya berada dalam bentuk tertentu seperti lingkaran. Mari kita lihat demonstrasi query $geoWithin berikut ini:

db.area.find({ lokasi:

{ $geoDalam:

{ $centerSphere: [ [ - 60.93414657 , 30.82302903 ], 3 / 3963.2 ] } } })

Pada contoh, kita menggunakan operator $geoWithin untuk mencari dokumen kumpulan “area” dalam area melingkar tertentu pada bola 2D. Untuk ini, kita menentukan operator $centerSphere di dalam operator $geoWithin yang mengambil dua argumen sebagai titik sentris, yang kemungkinan mewakili titik koordinat di sini, dan jari-jari lingkaran yang mewakili nilai jarak dalam mil.

Dokumen yang dihasilkan diambil sebagai berikut yang mewakili titik geospasial yang berada di dalam lingkaran yang ditentukan oleh titik pusat tertentu dan radius kira-kira 3 mil:

Contoh 5: Menggunakan Operator Kueri $geoNear

Selain itu, operator $geoNear juga merupakan operator geospasial yang digunakan untuk jalur agregasi. Ia melakukan kueri geospasial dan mengembalikan dokumen yang diurutkan berdasarkan kedekatannya dengan titik tertentu. Di sini, kami telah memberikan operator $geoNear yang dipanggil di dalam pipa agregasi.

db.area.agregat([
{
$geoDekat: {
dekat: { ketik: 'Titik' , koordinat: [ - 60.99279 , 30.719296 ] },
jarakbidang: 'dist.dihitung' ,
Jarak maksimal: 2 ,
pertanyaan: { kategori: 'Kebun' },
termasukLocs: 'dist.lokasi' ,
bulat: benar
}
}
])

Dalam contoh ini, kita memanggil metode agregat MongoDB dan mendefinisikan operator $geoNear di dalamnya. Operator $geoNear diatur dengan beberapa parameter untuk menentukan perilaku kueri. Pertama, kita menetapkan parameter “dekat” yang memberikan nilai “koordinat” sebagai titik referensi untuk pencarian.

Kemudian, kami menggunakan parameter “distanceField” untuk menentukan bidang yang disediakan sebagai bidang hasil. Bidang hasil yang ditetapkan ini menyimpan jarak antara setiap dokumen dan titik referensi. Selanjutnya kita tentukan parameter “maxDistance” dengan nilai “2″ yang mewakili jarak maksimum dalam meter.

Setelah itu, kita memiliki parameter 'kueri' yang memfilter dokumen berdasarkan bidang 'kategori' dan hanya mempertimbangkan dokumen yang 'kategorinya' adalah 'Taman'. Kami kemudian memanggil parameter “includeLocs” untuk memuat informasi lokasi. Kami akhirnya menentukan parameter “bola” dengan nilai “benar” yang menghitung jarak menggunakan sistem koordinat bola 2D.

Pipa agregasi mewakili dokumen dalam output yang menampilkan informasi terhadap parameter yang sesuai. Bidang “dist.calculated” berikut menampilkan jarak setiap dokumen dari titik referensi:

Kesimpulan

Kami mengetahui bahwa kemampuan geospasial MongoDB membantu kami menangani dan menanyakan informasi berbasis lokasi secara efisien. Kami mempelajari implementasi fitur geospasial menggunakan berbagai operatornya dengan contoh program. Kami memiliki lebih banyak fungsi dan metode yang juga bermanfaat untuk berbagai aplikasi.