Paano Ipatupad ang Mga Tampok na Geospatial ng MongoDB

Paano Ipatupad Ang Mga Tampok Na Geospatial Ng Mongodb



Ang tampok na geospatial ng MongoDB ay nagbibigay ng isang tuwirang paraan upang maimbak ang geographic na data sa isang database. Sa pangkalahatan, maaari naming iimbak ang geospatial na data sa MongoDB bilang mga bagay na GeoJSON. Ang GeoJSON ay isang libre at open-source na format na nakasalalay sa JavaScript Object Notation na may simpleng geographical na data. Mahalaga ang functionality na ito para sa mga app na nangangailangan ng mga serbisyo batay sa lokasyon gaya ng proseso ng pagmamapa, batay sa paghahanap ng lokasyon, at iba pa. Sinasaklaw ng artikulong ito ang tampok na geospatial kasama ang halimbawang pagpapatupad.

Pagdaragdag ng Mga Dokumento sa Koleksyon para sa Mga Geospatial na Feature

Para ipakita ang functionality ng MongoDB Geospatial feature, kailangan namin ang mga dokumento para sa partikular na koleksyon. Nagpasok kami ng ilang mga dokumento sa koleksyon ng 'lugar' tulad ng ipinapakita sa sumusunod:

db.area.insertMany( [
{
pangalan: 'Park ng mga Bata' ,
lokasyon: { uri: 'Punto' , mga coordinate: [ - 60.97 , 30.77 ] },
kategorya: 'Hardin'
},
{
pangalan: 'Lugar ng Mag-aaral' ,
lokasyon: { uri: 'Punto' , mga coordinate: [ - 60.9928 , 30.7193 ] },
kategorya: 'Hardin'
},
{
pangalan: 'FootBall Ground' ,
lokasyon: { uri: 'Punto' , mga coordinate: [ - 60.9375 , 30.8303 ] },
kategorya: 'Istadyum'
}
])

Mayroon kaming mga dokumento na naglalaman ng data ng lokasyon gaya ng mga coordinate. Bukod pa rito, gumagawa kami ng geospatial index sa field para i-optimize ang performance ng mga geospatial na query.









Halimbawa 1: Paggamit ng $geoIntersects Query Operator

Una, mayroon kaming operator na $geoIntersects ng geospatial feature na nagsa-intersect sa ibinigay na bagay. Isaalang-alang ang sumusunod na pagpapatupad ng operator ng $geoIntersects:



db.area.find({ lokasyon: { $geoIntersects: { $geometry: { type: 'Punto' ,

mga coordinate: [ - 60.97 , 30.77 ] } } } })

Sa halimbawa, tinatawag namin ang 'lugar' na koleksyon kasama ang 'hanapin' na operasyon. Sa paraan ng find(), ipinapasa namin ang mga set ng field na 'lokasyon' sa $geoIntersects query operator ng geospatial na feature. Ito ay ginagamit upang suriin kung ang tinukoy na punto ay nag-intersect sa geometry na naka-imbak sa geometry field.





Pagkatapos, kinukuha ng operator ng $geoIntesects ang operator ng $geometry kung saan nakatakda ang field ng uri na may value na 'Point' at ibinibigay ang field ng mga coordinate kasama ang mga value ng 'coordinates.' Dito, ang $geometry ay tinukoy para sa geospatial na paghahambing.

Ang sumusunod na output ay kung saan ang inaasahang dokumento ay nakuha at kung saan ang geometry field ay naglalaman ng isang geometric na bagay na nagsa-intersect sa tinukoy na punto:



Halimbawa 2: Gamit ang $near Query Operator

Ang $near operator din ang geospatial na feature na ginagamit para gawin ang mga geospatial na query para matukoy ang mga dokumentong malapit sa isang lugar sa heograpiya. Kinukuha nito ang mga dokumento na nakaayos ayon sa kanilang kalapitan sa tinukoy na lokasyon. Dito, ibinibigay namin ang pagpapatupad ng $near operator:

db.area.find(
{
lokasyon:
{ $malapit :
{
$geometry: { uri: 'Punto' ,  coordinate: [ - 60.9667 , 30.78 ] },
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

Sa halimbawa, tinukoy namin ang field na 'lokasyon' ng koleksyon ng 'lugar' sa loob ng operasyong 'hanapin'. Pagkatapos, itinakda namin ang operator ng $near query ng geospatial na feature sa field na “lokasyon” na iyon. Hinahanap ng operator na $near ang malapit na punto gamit ang ibinigay na coordinates point. Susunod, ginagamit namin ang mga parameter na $minDistance at $maxDistance sa operator na $near na binibigyan ng ilang partikular na halaga upang makuha ang mga dokumento sa loob ng tinukoy na hanay ng distansya mula sa ibinigay na punto.

Ang dokumento ay kinukuha sa output na malapit sa tinukoy na mga lokasyon o mga punto ng interes sa isang geospatial na 'lugar' na koleksyon:

Halimbawa 3: Gamit ang $nearsphere Query Operator

Bilang kahalili, mayroon kaming operator na $nearsphere na katulad ng operator na $near, ngunit isinasaalang-alang ng $nearSphere ang spherical na hugis ng Earth kapag kinakalkula ang mga distansya.

db.area.find(
{
lokasyon: {
$nearSphere: {
$geometry: {
uri: 'Punto' ,
mga coordinate : [ - 60.9667 , 30.78 ]
},
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

Sa halimbawa, ginagamit namin ang $nearsphere operator ng geospatial na query. Ang $nearspehere operator dito ay naghahanap ng dokumento na ang pinakamalapit na mga punto ay malapit sa mga puntong tinukoy sa query, at ang mga puntos ay nakatakda sa coordinate field array.

Pagkatapos nito, pinipino namin ang mga resulta sa pamamagitan ng pagtatatag ng mga parameter na $minDistance at $maxDistance. Tinitiyak ng parameter na $minDistance na ang mga ibinalik na dokumento ay hindi bababa sa 1000 metro ang layo mula sa tinukoy na punto, habang nililimitahan ng parameter na $maxDistance ang mga resulta sa mga lokasyong hindi hihigit sa 5000 metro ang layo.

Ang dokumento ay ipinapakita sa output na may isang lokasyon sa loob ng isang tinukoy na metro mula sa punto na may ibinigay na mga coordinate:

Halimbawa 4: Gamit ang $geoWithin Query Operator

Susunod, mayroon kaming operator na $geoWithin sa MongoDB na ginagamit para sa mga geospatial na query upang mahanap ang mga dokumentong ganap na nasa loob ng isang tinukoy na hugis tulad ng isang bilog. Magkaroon tayo ng sumusunod na pagpapakita ng $geoWithin query:

db.area.find({ lokasyon:

{ $geoWithin:

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

Sa halimbawa, ginagamit namin ang operator na $geoWithin upang mahanap ang mga dokumento ng koleksyon ng 'lugar' sa loob ng isang partikular na pabilog na lugar sa isang 2D na globo. Para dito, tinukoy namin ang operator ng $centerSphere sa loob ng operator na $geoWithin na kumukuha ng dalawang argumento bilang centric point, na malamang na kumakatawan sa coordinates point dito, at ang radius ng bilog na kumakatawan sa halaga ng distansya sa milya.

Ang resultang dokumento ay kinukuha sa sumusunod na kumakatawan sa isang geospatial point na nasa loob ng bilog na tinukoy ng ibinigay na sentrong punto at ang radius na humigit-kumulang 3 milya:

Halimbawa 5: Gamit ang $geoNear Query Operator

Bukod dito, ang operator ng $geoNear ay isa ring geospatial operator na ginagamit para sa pipeline ng aggregation. Nagsasagawa ito ng geospatial na query at ibinabalik ang mga dokumento na pinagsunod-sunod ayon sa kanilang kalapitan sa isang tinukoy na punto. Dito, ibinigay namin ang operator na $geoNear na tinatawag sa loob ng pipeline ng aggregation.

db.area.aggregate([
{
$geoMalapit: {
malapit sa: { type: 'Punto' , mga coordinate: [ - 60.99279 , 30.719296 ] },
distanceField: 'dist.calculated' ,
maxDistance: 2 ,
query: { kategorya: 'Hardin' },
includeLocs: 'dist.location' ,
spherical: totoo
}
}
])

Sa halimbawa, tinatawag namin ang pinagsama-samang paraan ng MongoDB at tinukoy ang operator na $geoNear sa loob nito. Ang operator na $geoNear ay nakatakda na may ilang mga parameter upang tukuyin ang gawi ng query. Una, itinakda namin ang parameter na 'malapit' na nagbibigay ng mga halaga ng 'coordinate' bilang reference point sa paghahanap.

Pagkatapos, ginagamit namin ang parameter na 'distanceField' upang tukuyin ang ibinigay na field bilang field ng resulta. Ang hanay na field ng kinalabasan na ito ay nag-iimbak ng distansya sa pagitan ng bawat dokumento at ang reference point. Susunod, tinukoy namin ang parameter na 'maxDistance' na may halaga na '2' na kumakatawan sa maximum na distansya sa metro.

Pagkatapos nito, mayroon kaming parameter na 'query' na nagsasala ng mga dokumento ayon sa field na 'kategorya' at isinasaalang-alang lamang ang mga dokumento kung saan ang 'kategorya' ay 'Mga Parke'. Pagkatapos ay tinawag namin ang parameter na 'includeLocs' upang maglaman ng impormasyon ng lokasyon. Sa wakas ay tinukoy namin ang 'spherical' na parameter na may 'true' na halaga na kinakalkula ang mga distansya gamit ang isang 2D spherical coordinate system.

Ang aggregation pipeline ay kumakatawan sa dokumento sa output na nagpapakita ng impormasyon laban sa parameter nang naaayon. Ang sumusunod na field na 'dist.calculated' ay nagpapakita ng distansya ng bawat dokumento mula sa reference point:

Konklusyon

Nalaman namin na ang mga geospatial na kakayahan ng MongoDB ay tumutulong sa amin na mahusay na pangasiwaan at i-query ang impormasyong batay sa lokasyon. Natutunan namin ang pagpapatupad ng geospatial feature gamit ang iba't ibang operator nito na may halimbawang programa. Mayroon kaming marami pang mga pag-andar at pamamaraan na kapaki-pakinabang din para sa isang malawak na hanay ng mga aplikasyon.