Bab ini memperkenalkan cara MongoDB menyimpan data geospasial. Untuk menggunakan fungsionalitas kueri geospasial MongoDB, kita perlu memahami cara menyimpan data geospasial.
Data geospasial terutama terdiri dari titik (points), garis (lines), dan bentuk geometris.
Suatu titik pada peta didefinisikan oleh koordinat longitud dan latitud. Beberapa titik membentuk sebuah garis, dan beberapa garis dapat membentuk berbagai bentuk.
Dalam aplikasi praktis: Lokasi sebuah toko, pertanyaan "di mana saya?", dan "dimana sekolah itu?" semua dapat direpresentasikan menggunakan koordinat. Mendeskripsikan luas suatu kampus atau mal memerlukan bentuk geometris.
Objek GeoJSON
MongoDB menggunakan objek GeoJSON untuk merepresentasikan informasi geospasial.
Tipe-tipe GeoJSON umum meliputi:
- Point - merepresentasikan titik koordinat
- LineString - merepresentasikan garis
- Polygon - merepresentasikan sebuah poligon
Format untuk menyimpan objek GeoJSON di dalam field MongoDB adalah sebagai berikut:
<field>: { type: <tipe geojson>, coordinates: <coordinates> }
Penjelasan:
-
- Nama field - type - Tipe GeoJSON
- coordinates - Sebuah array dari titik koordinat. Formatnya bervariasi untuk tipe-tipe GeoJSON yang berbeda.
Contoh:
location: {
type: "Point", // tipe data geospasial, dalam hal ini, itu adalah titik koordinat
coordinates: [-73.856077, 40.848447] // longitud, latitud
}
Penjelasan: Field lokasi menyimpan data geospasial dari tipe titik koordinat.
Titik Koordinat (Point)
Format:
{ type: "Point", coordinates: [ longitud, latitud ] }
Contoh:
{ type: "Point", coordinates: [ 40, 5 ] }
Garis (LineString)
Format:
{ type: "LineString", coordinates: [ titik1, titik2, ...] }
Contoh:
{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }
Poligon
Dapat terdiri dari satu atau lebih garis. Format:
{
type: "Polygon",
coordinates: [
garis1,
garis2,
....
]
}
Catatan: Koordinat awal dan akhir setiap segmen garis harus sama untuk membentuk bentuk tertutup.
Bentuk Terdiri dari Satu Segmen Garis
{
type: "Polygon",
coordinates: [
[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] // Titik koordinat dari segmen garis, perhatikan bahwa koordinat pertama dan terakhir sama.
]
}
Bentuk Terdiri dari Beberapa Segmen Garis
{
type : "Polygon",
coordinates : [
[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ], // Segmen garis 1
[ [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 2 ] , [ 2 , 2 ] ] // Segmen garis 2
]
}
Indeks Geospasial
MongoDB mendukung dua jenis indeks geospasial untuk mempercepat kueri data GeoJSON.
2dsphere
Ini adalah tipe indeks geometri sferis, yang berarti saat menghitung jarak antara dua titik, 2dsphere mempertimbangkan bumi sebagai sebuah bola.
Contoh pembuatan indeks 2dsphere:
db.collection.createIndex( { location : "2dsphere" } )
Membuat indeks untuk field lokasi.
2d
2D adalah jenis geometri datar yang digunakan untuk menghitung jarak antara dua titik seolah-olah mereka berada di bidang datar. Contoh pembuatan indeks 2D:
db.collection.createIndex( { location : "2d" } )
Ini membuat indeks untuk field lokasi.
Jenis Kueri Geospasial
Kueri geospasial semuanya terkait dengan perhitungan geometri. Berikut adalah jenis kueri yang didukung oleh MongoDB:
- $geoIntersects - Digunakan untuk mencocokkan dokumen dengan sebuah bentuk geometris tertentu yang berpotongan.
- $geoWithin - Mencocokkan dokumen yang terdapat dalam daerah geometris yang spesifik.
- $near - Biasanya digunakan untuk kueri dokumen yang paling dekat dengan titik koordinat tertentu.
Catatan: Untuk informasi lebih lanjut mengenai kueri geospasial, silakan lihat bab-bab berikutnya.