Cum să implementați caracteristicile geospațiale MongoDB

Cum Sa Implementati Caracteristicile Geospatiale Mongodb



Caracteristica geospațială a MongoDB oferă o modalitate simplă de stocare a datelor geografice într-o bază de date. În esență, putem stoca datele geospațiale în MongoDB ca obiecte GeoJSON. GeoJSON este un format gratuit și open-source care depinde de notația obiect JavaScript cu date geografice simple. Această funcționalitate este importantă pentru aplicațiile care necesită servicii bazate pe locație, cum ar fi procesul de cartografiere, bazat pe căutarea locației și altele. Acest articol acoperă caracteristica geospațială cu exemplul de implementare.

Adăugarea de documente în colecția pentru caracteristici geospațiale

Pentru a demonstra funcționalitatea caracteristicii MongoDB Geospatial, avem nevoie de documentele pentru colecția specifică. Inserăm câteva documente în colecția „zonă”, așa cum se arată în continuare:

db.area.insertMany( [
{
Nume: „Parcul pentru copii” ,
locație: { tip: 'Punct' , coordonate: [ - 60,97 , 30,77 ] },
categorie: 'Grădină'
},
{
Nume: „Zona pentru studenți” ,
locație: { tip: 'Punct' , coordonate: [ - 60,9928 , 30,7193 ] },
categorie: 'Grădină'
},
{
Nume: 'Teren de fotbal' ,
locație: { tip: 'Punct' , coordonate: [ - 60,9375 , 30,8303 ] },
categorie: 'Stadiu'
}
])

Avem documente care conțin date de locație, cum ar fi coordonatele. În plus, creăm un index geospațial pe teren pentru a optimiza performanța interogărilor geospațiale.









Exemplul 1: Utilizarea operatorului de interogare $geoIntersects

În primul rând, avem operatorul $geoIntersects al caracteristicii geospațiale care se intersectează cu obiectul furnizat. Luați în considerare următoarea implementare a operatorului $geoIntersects:



db.area.find({ locație: { $geoIntersects: { $geometry: { tip: 'Punct' ,

coordonate: [ - 60,97 , 30,77 ] } } } })

În exemplu, numim colecția „zonă” împreună cu operația „găsire”. Metodei find(), trecem seturile de câmpuri „locație” operatorului de interogare $geoIntersects al caracteristicii geospațiale. Acesta este folosit pentru a verifica dacă punctul specificat se intersectează cu geometria care este stocată în câmpul de geometrie.





Apoi, operatorul $geoIntesects ia operatorul $geometry unde câmpul de tip este setat cu valoarea „Punct” și câmpul de coordonate este dat cu valorile „coordonate”. Aici, $geometria este definită pentru comparația geospațială.

Următoarea ieșire este locul în care documentul așteptat este preluat și unde câmpul de geometrie conține un obiect geometric care se intersectează cu punctul specificat:



Exemplul 2: Utilizarea operatorului de interogare $near

Operatorul $near este, de asemenea, caracteristica geospațială care este utilizată pentru a efectua interogări geospațiale pentru a identifica documentele care sunt aproape geografic de un anumit loc. Preia documentele care sunt aranjate în funcție de apropierea lor de locația specificată. Aici, oferim implementarea operatorului $near:

db.area.find(
{
Locație:
{ $near :
{
$geometry: { tip: 'Punct' ,  coordonate: [ - 60,9667 , 30,78 ] },
$minDistanța: 1000 ,
$maxDistance: 5000
}
}
}
)

În exemplu, definim câmpul „locație” al colecției „zonă” în cadrul operațiunii „găsire”. Apoi, setăm operatorul de interogare $near al caracteristicii geospațiale la acel câmp „locație”. Operatorul $near caută punctul apropiat cu punctul de coordonate dat. Apoi, folosim parametrii $minDistance și $maxDistance din operatorul $near care sunt furnizați cu anumite valori pentru a prelua documentele în intervalul de distanță specificat de la punctul dat.

Documentul este preluat în rezultatul care se află în apropierea locațiilor specificate sau a punctelor de interes dintr-o colecție de „zonă” geospațială:

Exemplul 3: Utilizarea operatorului de interogare $nearsphere

Alternativ, avem operatorul $nearsphere care este similar cu operatorul $near, dar $nearSphere ia în considerare forma sferică a Pământului atunci când calculează distanțe.

db.area.find(
{
Locație: {
$nearSphere: {
$geometry: {
tip : 'Punct' ,
coordonate: [ - 60,9667 , 30,78 ]
},
$minDistanța: 1000 ,
$maxDistance: 5000
}
}
}
)

În exemplu, folosim operatorul $nearsphere al interogării geospațiale. Operatorul $nearspehere caută aici documentul ale cărui puncte cele mai apropiate sunt aproape de punctele specificate în interogare, iar punctele sunt setate la matricea câmpului de coordonate.

După aceea, rafinăm rezultatele stabilind parametrii $minDistance și $maxDistance. Parametrul $minDistance asigură că documentele returnate sunt la cel puțin 1000 de metri distanță de punctul specificat, în timp ce parametrul $maxDistance limitează rezultatele la locațiile care nu sunt la mai mult de 5000 de metri distanță.

Documentul este afișat în ieșire cu o locație la un metru specificat de punctul cu coordonatele date:

Exemplul 4: Utilizarea operatorului de interogare $geoWithin

În continuare, avem operatorul $geoWithin în MongoDB care este folosit pentru interogări geospațiale pentru a găsi documentele care se află complet într-o formă specificată, cum ar fi un cerc. Să avem următoarea demonstrație a interogării $geoWithin:

db.area.find({ locație:

{ $geoWithin:

{ $centerSphere: [ [ - 60,93414657 , 30.82302903 ], 3 / 3963,2 ] } } })

În exemplu, folosim operatorul $geoWithin pentru a găsi documentele colecției „zonă” într-o anumită zonă circulară pe o sferă 2D. Pentru aceasta, specificăm operatorul $centerSphere în interiorul operatorului $geoWithin care ia cele două argumente drept punct central, care reprezintă probabil punctul de coordonate aici și raza cercului care reprezintă valoarea distanței în mile.

Documentul rezultat este preluat în cele ce urmează, care reprezintă un punct geospațial care se încadrează în cercul care este definit de punctul central dat și raza de aproximativ 3 mile:

Exemplul 5: Utilizarea operatorului de interogare $geoNear

În plus, operatorul $geoNear este, de asemenea, un operator geospațial care este utilizat pentru conducta de agregare. Efectuează o interogare geospațială și returnează documentele care sunt sortate după apropierea lor de un punct specificat. Aici, am dat operatorul $geoNear care este apelat în interiorul conductei de agregare.

db.area.aggregate([
{
$geoNear: {
lângă: { tip: 'Punct' , coordonate: [ - 60,99279 , 30,719296 ] },
distanceField: 'dist.calculat' ,
maxDistance: 2 ,
interogare: { categorie: 'Grădină' },
includeLocs: 'dist.location' ,
sferic: adevărat
}
}
])

În exemplu, numim metoda agregată a MongoDB și definim operatorul $geoNear în interiorul acesteia. Operatorul $geoNear este setat cu mai mulți parametri pentru a specifica comportamentul interogării. În primul rând, setăm parametrul „aproape” care furnizează valorile „coordonate” ca punct de referință pentru căutare.

Apoi, folosim parametrul „distanceField” pentru a specifica câmpul furnizat ca câmp de rezultat. Acest câmp de rezultat stabilit stochează distanța dintre fiecare document și punctul de referință. În continuare, definim parametrul „maxDistance” cu valoarea „2″ care reprezintă distanța maximă în metri.

După aceea, avem parametrul „interogare” care filtrează documentele după câmpul „categorie” și ia în considerare doar documentele în care „categoria” este „Parcuri”. Apoi apelăm parametrul „includeLocs” pentru a conține informațiile despre locație. În cele din urmă, specificăm parametrul „sferic” cu valoarea „adevărată” care calculează distanțele folosind un sistem de coordonate sferice 2D.

Conducta de agregare reprezintă documentul din ieșire care afișează informațiile în raport cu parametrul în mod corespunzător. Următorul câmp „dist.calculated” afișează distanța fiecărui document față de punctul de referință:

Concluzie

Am ajuns să știm că capacitățile geospațiale ale MongoDB ne ajută să gestionăm și să interogăm eficient informațiile bazate pe locație. Am învățat implementarea caracteristicii geospațiale folosind diferiții operatori cu programul exemplu. Avem multe mai multe funcționalități și metode care sunt, de asemenea, benefice pentru o gamă largă de aplicații.