Kako implementirati MongoDB geoprostorne značajke

Kako Implementirati Mongodb Geoprostorne Znacajke



Geoprostorna značajka MongoDB-a pruža jednostavan način pohranjivanja geografskih podataka u bazu podataka. U osnovi, možemo pohraniti geoprostorne podatke u MongoDB kao GeoJSON objekte. GeoJSON je besplatan format otvorenog koda koji ovisi o JavaScript objektnoj notaciji s jednostavnim geografskim podacima. Ova je funkcija važna za aplikacije koje zahtijevaju usluge na temelju lokacije kao što je proces mapiranja, na temelju pretraživanja lokacije i druge. Ovaj članak pokriva geoprostornu značajku s primjerom implementacije.

Dodavanje dokumenata u zbirku za geoprostorne značajke

Kako bismo demonstrirali funkcionalnost značajke MongoDB Geospatial, potrebni su nam dokumenti za određenu zbirku. U zbirku 'područje' umećemo nekoliko dokumenata kao što je prikazano u nastavku:

db.area.insertMany( [
{
Ime: 'Dječji park' ,
lokacija: { vrsta: 'Točka' , koordinate: [ - 60.97 , 30.77 ]},
kategorija: 'Vrt'
},
{
Ime: 'Studentski prostor' ,
lokacija: { tip: 'Točka' , koordinate: [ - 60.9928 , 30.7193 ]},
kategorija: 'Vrt'
},
{
Ime: 'Nogometni teren' ,
lokacija: { tip: 'Točka' , koordinate: [ - 60.9375 , 30.8303 ]},
kategorija: 'Stadion'
}
] )

Imamo dokumente koji sadrže podatke o lokaciji kao što su koordinate. Osim toga, stvaramo geoprostorni indeks na terenu kako bismo optimizirali izvedbu geoprostornih upita.









Primjer 1: Korištenje operatora upita $geoIntersects

Prvo, imamo $geoIntersects operator geoprostorne značajke koji se križa s navedenim objektom. Razmotrite sljedeću implementaciju operatora $geoIntersects:



db.area.find({ lokacija: { $geoIntersects: { $geometry: { tip: 'Točka' ,

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

U primjeru pozivamo kolekciju 'područja' zajedno s operacijom 'pronađi'. Metodi find() prosljeđujemo skupove polja 'lokacija' operatoru upita $geoIntersects geoprostorne značajke. Ovo se koristi za provjeru siječe li se navedena točka s geometrijom koja je pohranjena u polju geometrije.





Zatim, $geoIntesects operator preuzima $geometry operator gdje je polje tipa postavljeno s vrijednošću 'Point', a polje koordinata dano je s vrijednostima 'koordinate'. Ovdje je $geometrija definirana za geoprostornu usporedbu.

Sljedeći izlaz je mjesto gdje se dohvaća očekivani dokument i gdje polje geometrije sadrži geometrijski objekt koji se siječe s navedenom točkom:



Primjer 2: Korištenje operatora upita $near

Operator $near također je geoprostorna značajka koja se koristi za geoprostorne upite za identifikaciju dokumenata koji su zemljopisno blizu određenog mjesta. Dohvaća dokumente koji su raspoređeni prema njihovoj blizini navedenoj lokaciji. Ovdje pružamo implementaciju operatora $near:

db.area.find(
{
mjesto:
{$blizu:
{
$geometry: { vrsta: 'Točka' ,  koordinate: [ - 60.9667 , 30.78 ]},
$minUdaljenost: 1000 ,
$maxDistance: 5000
}
}
}
)

U primjeru definiramo polje “location” zbirke “area” unutar operacije “find”. Zatim smo postavili operator upita $near geoprostorne značajke na to polje 'lokacija'. Operator $near traži najbližu točku sa zadanim koordinatama. Zatim koristimo parametre $minDistance i $maxDistance u operatoru $near koji imaju određene vrijednosti za dohvaćanje dokumenata unutar navedenog raspona udaljenosti od dane točke.

Dokument se dohvaća u izlazu koji je u blizini navedenih lokacija ili točaka interesa u zbirci geoprostornih područja:

Primjer 3: Korištenje operatora upita $nearsphere

Alternativno, imamo operator $nearsphere koji je sličan operatoru $near, ali $nearSphere uzima u obzir sferni oblik Zemlje kada izračunava udaljenosti.

db.area.find(
{
lokacija: {
$nearSphere: {
$geometry: {
tip: 'Točka' ,
koordinate : [ - 60.9667 , 30.78 ]
},
$minUdaljenost: 1000 ,
$maxDistance: 5000
}
}
}
)

U primjeru koristimo operator $nearsphere geoprostornog upita. Operator $nearspehere ovdje traži dokument čije su najbliže točke blizu točaka navedenih u upitu, a točke su postavljene na polje koordinatnog polja.

Nakon toga pročišćavamo rezultate uspostavljanjem parametara $minDistance i $maxDistance. Parametar $minDistance osigurava da su vraćeni dokumenti udaljeni najmanje 1000 metara od navedene točke, dok parametar $maxDistance ograničava rezultate na lokacije koje nisu udaljene više od 5000 metara.

Dokument se prikazuje u izlazu s lokacijom unutar određenog metra od točke sa zadanim koordinatama:

Primjer 4: Korištenje operatora upita $geoWithin

Zatim imamo operator $geoWithin u MongoDB-u koji se koristi za geoprostorne upite za pronalaženje dokumenata koji su u potpunosti unutar određenog oblika kao što je krug. Pogledajmo sljedeću demonstraciju $geoWithin upita:

db.area.find({ lokacija:

{ $geoUnutar:

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

U primjeru koristimo operator $geoWithin za pronalaženje dokumenata zbirke 'područja' unutar određenog kružnog područja na 2D sferi. U tu svrhu specificiramo operator $centerSphere unutar operatora $geoWithin koji uzima dva argumenta kao središnju točku, koja ovdje vjerojatno predstavlja točku s koordinatama, i radijus kruga koji predstavlja vrijednost udaljenosti u miljama.

Rezultirajući dokument se dohvaća u sljedećem obliku koji predstavlja geoprostornu točku koja pada unutar kruga definiranog danom središnjom točkom i radijusom od približno 3 milje:

Primjer 5: Korištenje operatora upita $geoNear

Štoviše, operator $geoNear također je geoprostorni operator koji se koristi za cjevovod agregacije. Izvodi geoprostorni upit i vraća dokumente koji su poredani prema njihovoj blizini određenoj točki. Ovdje smo dali operator $geoNear koji se poziva unutar cjevovoda agregacije.

db.area.aggregate([
{
$geoNear: {
blizu: { vrsta: 'Točka' , koordinate: [ - 60.99279 , 30.719296 ]},
DistanceField: 'dist.calculated' ,
najveća udaljenost: 2 ,
upit: { kategorija: 'Vrt' },
includeLocs: 'dist.location' ,
sferni: istina
}
}
])

U primjeru pozivamo agregatnu metodu MongoDB-a i unutar nje definiramo operator $geoNear. Operator $geoNear postavljen je s nekoliko parametara za određivanje ponašanja upita. Prvo postavljamo parametar 'blizu' koji daje vrijednosti 'koordinata' kao referentnu točku za pretraživanje.

Zatim koristimo parametar 'distanceField' da specificiramo navedeno polje kao polje ishoda. Ovo postavljeno polje ishoda pohranjuje udaljenost između svakog dokumenta i referentne točke. Zatim definiramo parametar “maxDistance” s vrijednošću “2″ koja predstavlja maksimalnu udaljenost u metrima.

Nakon toga imamo parametar 'upit' koji filtrira dokumente prema polju 'kategorija' i razmatra samo dokumente u kojima je 'kategorija' 'Parkovi'. Zatim pozivamo parametar 'includeLocs' da sadrži informacije o lokaciji. Na kraju specificiramo 'sferni' parametar s 'pravom' vrijednošću koja izračunava udaljenosti pomoću 2D sfernog koordinatnog sustava.

Cjevovod agregacije predstavlja dokument u izlazu koji prikazuje informacije prema parametru u skladu s tim. Sljedeće polje 'dist.calculated' prikazuje udaljenost svakog dokumenta od referentne točke:

Zaključak

Saznali smo da nam geoprostorne mogućnosti MongoDB-a pomažu u učinkovitom rukovanju i ispitivanju informacija temeljenih na lokaciji. Na primjeru programa naučili smo implementaciju geoprostorne značajke koristeći njezine različite operatore. Imamo mnogo više funkcionalnosti i metoda koje su također korisne za širok raspon primjena.