MongoDB Jeo-uzaysal Özellikleri Nasıl Uygulanır?

Mongodb Jeo Uzaysal Ozellikleri Nasil Uygulanir



MongoDB'nin coğrafi özelliği, coğrafi verileri bir veritabanında depolamak için basit bir yol sağlar. Temel olarak, coğrafi verileri MongoDB'de GeoJSON nesneleri olarak saklayabiliriz. GeoJSON, basit coğrafi verilerle JavaScript Nesne Gösterimi'ne dayanan ücretsiz ve açık kaynaklı bir formattır. Bu işlevsellik, haritalama işlemi, konum arama ve diğerleri gibi konuma dayalı hizmetler gerektiren uygulamalar için önemlidir. Bu makale, örnek uygulamayla jeouzaysal özelliği ele almaktadır.

Jeo-uzaysal Özellikler İçin Koleksiyona Belge Ekleme

MongoDB Geospatial özelliğinin işlevselliğini göstermek için belirli bir koleksiyona ait belgelere ihtiyacımız var. Aşağıda gösterildiği gibi “alan” koleksiyonuna birkaç belge ekliyoruz:

db.area.insertMany( [
{
isim: 'Çocuk Parkı' ,
konum: { tür: 'Nokta' , koordinatlar: [ - 60.97 , 30.77 ] },
kategori: 'Bahçe'
},
{
isim: 'Öğrenci Alanı' ,
konum: { tür: 'Nokta' , koordinatlar: [ - 60,9928 , 30.7193 ] },
kategori: 'Bahçe'
},
{
isim: 'Futbol sahası' ,
konum: { tür: 'Nokta' , koordinatlar: [ - 60.9375 , 30.8303 ] },
kategori: 'Stadyum'
}
] )

Koordinat gibi konum verilerini içeren belgelerimiz var. Ek olarak, jeouzaysal sorguların performansını optimize etmek için sahada bir jeouzaysal dizin oluşturuyoruz.









Örnek 1: $geoIntersects Sorgu Operatörünü Kullanma

İlk olarak, jeouzaysal özelliğin, sağlanan nesneyle kesişen $geoIntersects operatörüne sahibiz. $geoIntersects operatörünün aşağıdaki uygulamasını düşünün:



db.area.find({ konum: { $geoIntersects: { $geometri: { type: 'Nokta' ,

koordinatlar: [ - 60.97 , 30.77 ] } } } })

Örnekte “bulma” işlemiyle birlikte “alan” koleksiyonunu da diyoruz. Find() yöntemine “location” alan setlerini geospatial özelliğinin $geoIntersects sorgu operatörüne aktarıyoruz. Bu, belirtilen noktanın geometri alanında saklanan geometri ile kesişip kesişmediğini kontrol etmek için kullanılır.





Daha sonra $geoIntesects operatörü, tip alanının “Nokta” değeriyle ayarlandığı ve koordinatlar alanının “koordinatlar” değerleriyle verildiği $geometry operatörünü alır. Burada, coğrafi karşılaştırma için $geometri tanımlanır.

Aşağıdaki çıktı, beklenen belgenin alındığı ve geometri alanının belirtilen noktayla kesişen geometrik bir nesne içerdiği yerdir:



Örnek 2: $near Sorgu Operatörünü Kullanmak

$near operatörü aynı zamanda belirli bir yere coğrafi olarak yakın olan belgeleri tanımlamak için jeouzaysal sorgular yapmak için kullanılan jeouzaysal özelliktir. Belirtilen lokasyona yakınlıklarına göre düzenlenmiş dokümanları alır. Burada $near operatörünün uygulanmasını sağlıyoruz:

db.area.find(
{
konum:
{ $yakın:
{
$geometri: { type: 'Nokta' ,  koordinatlar: [ - 60.9667 , 30.78 ] },
$dakikaMesafe: 1000 ,
$maxMesafe: 5000
}
}
}
)

Örnekte “bulma” işlemi içerisinde “alan” koleksiyonunun “konum” alanını tanımlıyoruz. Daha sonra geospatial özelliğinin $near sorgu operatörünü o “location” alanına ayarlıyoruz. $near operatörü, verilen koordinat noktasına sahip yakın noktayı arar. Daha sonra $near operatöründe belirli değerlerle sağlanan $minDistance ve $maxDistance parametrelerini kullanarak verilen noktadan belirtilen uzaklık aralığındaki belgeleri alıyoruz.

Belge, coğrafi bir 'alan' koleksiyonunda belirtilen konumların veya ilgi çekici noktaların yakınında bulunan çıktıdan alınır:

Örnek 3: $nearsphere Sorgu Operatörünü Kullanmak

Alternatif olarak, $nearSphere operatörüne benzeyen $nearSphere operatörümüz de vardır, ancak $nearSphere, mesafeleri hesaplarken Dünyanın küresel şeklini hesaba katar.

db.area.find(
{
konum: {
$nearSphere: {
$geometri: {
tip : 'Nokta' ,
koordinatlar : [ - 60.9667 , 30.78 ]
},
$dakikaMesafe: 1000 ,
$maxMesafe: 5000
}
}
}
)

Örnekte, jeouzaysal sorgunun $nearsphere operatörünü kullanıyoruz. Burada $nearspehere operatörü, en yakın noktaları sorguda belirtilen noktalara yakın olan belgeyi arar ve noktalar koordinat alanı dizisine ayarlanır.

Bundan sonra $minDistance ve $maxDistance parametrelerini oluşturarak sonuçları hassaslaştırıyoruz. $minDistance parametresi, döndürülen belgelerin belirtilen noktaya en az 1000 metre uzaklıkta olmasını sağlarken, $maxDistance parametresi ise sonuçları 5000 metreden fazla uzakta olmayan konumlarla sınırlandırır.

Belge, belirtilen koordinatlara sahip noktadan belirli bir metre uzaklıktaki bir konumla çıktıda görüntülenir:

Örnek 4: $geoWithin Sorgu Operatörünü Kullanma

Daha sonra, MongoDB'de, tamamen daire gibi belirli bir şekil içinde olan belgeleri bulmak için jeouzaysal sorgular için kullanılan $geoWithin operatörüne sahibiz. $geoWithin sorgusunun aşağıdaki gösterimini görelim:

db.area.find({ konum:

{ $geoİçinde:

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

Örnekte, 2 boyutlu bir küre üzerinde belirli bir dairesel alan içindeki “alan” koleksiyonuna ait belgeleri bulmak için $geoWithin operatörünü kullanıyoruz. Bunun için, $geoWithin operatörünün içinde, iki argümanı muhtemelen buradaki koordinat noktasını temsil eden merkez noktası ve mil cinsinden mesafe değerini temsil eden dairenin yarıçapı olarak alan $centerSphere operatörünü belirtiyoruz.

Ortaya çıkan belge, verilen merkez noktası ve yaklaşık 3 mil yarıçapı tarafından tanımlanan dairenin içine düşen bir jeo-uzaysal noktayı temsil eden aşağıda elde edilir:

Örnek 5: $geoNear Sorgu Operatörünün Kullanımı

Ayrıca, $geoNear operatörü aynı zamanda toplama hattı için kullanılan bir jeo-uzaysal operatördür. Jeo-uzaysal bir sorgulama gerçekleştirir ve belirli bir noktaya yakınlıklarına göre sıralanmış belgeleri döndürür. Burada toplama hattının içinde çağrılan $geoNear operatörünü verdik.

db.area.aggregate([
{
$geoYakın: {
yakın: { type: 'Nokta' , koordinatlar: [ - 60.99279 , 30.719296 ] },
mesafeAlan: 'dist.hesaplanan' ,
Maksimum uzaklık: 2 ,
sorgu: { kategori: 'Bahçe' },
Loc'ları dahil et: 'uzak.konum' ,
küresel: doğru
}
}
])

Örnekte MongoDB'nin toplama yöntemini çağırıyoruz ve bunun içinde $geoNear operatörünü tanımlıyoruz. $geoNear operatörü, sorgu davranışını belirlemek için çeşitli parametrelerle ayarlanır. Öncelikle arama için referans noktası olarak “koordinat” değerlerini sağlayan “near” parametresini ayarlıyoruz.

Daha sonra “distanceField” parametresini kullanarak sağlanan alanı sonuç alanı olarak belirtiyoruz. Bu ayarlanan sonuç alanı, her belge ile referans noktası arasındaki mesafeyi saklar. Daha sonra metre cinsinden maksimum mesafeyi temsil eden “2” değeri ile “maxDistance” parametresini tanımlıyoruz.

Bundan sonra, belgeleri “kategori” alanına göre filtreleyen ve yalnızca “kategori”si “Parklar” olan belgeleri dikkate alan “sorgu” parametremiz var. Daha sonra konum bilgisini içerecek “includeLocs” parametresini çağırıyoruz. Son olarak, 2 boyutlu küresel koordinat sistemini kullanarak mesafeleri hesaplayan “true” değeriyle “spherical” parametresini belirliyoruz.

Toplama ardışık düzeni, çıktıdaki bilgileri uygun şekilde parametreye göre görüntüleyen belgeyi temsil eder. Aşağıdaki 'hesaplanan mesafe' alanı her belgenin referans noktasına olan mesafesini görüntüler:

Çözüm

MongoDB'nin coğrafi yeteneklerinin konum tabanlı bilgileri verimli bir şekilde işlememize ve sorgulamamıza yardımcı olduğunu öğrendik. Örnek program ile geospatial özelliğinin çeşitli operatörlerini kullanarak uygulanmasını öğrendik. Çok çeşitli uygulamalar için de faydalı olan daha birçok işlevsellik ve yöntemimiz var.