Hvordan implementere MongoDB geospatiale funksjoner

Hvordan Implementere Mongodb Geospatiale Funksjoner



Den geospatiale funksjonen til MongoDB gir en enkel måte å lagre de geografiske dataene i en database. I hovedsak kan vi lagre geospatiale data i MongoDB som GeoJSON-objekter. GeoJSON er et gratis og åpen kildekode-format som avhenger av JavaScript Object Notation med enkle geografiske data. Denne funksjonaliteten er viktig for apper som krever tjenester basert på plassering, for eksempel kartleggingsprosessen, basert på plasseringssøk og andre. Denne artikkelen dekker den geospatiale funksjonen med eksempelimplementeringen.

Legge til dokumenter i samlingen for geospatiale funksjoner

For å demonstrere funksjonaliteten til MongoDB Geospatial-funksjonen trenger vi dokumentene for den spesifikke samlingen. Vi setter inn noen få dokumenter i 'område'-samlingen som vist i følgende:

db.area.insertMany( [
{
Navn: 'Barneparken' ,
plassering: { type: 'Punkt' , koordinater: [ - 60,97 , 30,77 ] },
kategori: 'Hage'
},
{
Navn: 'Studentområde' ,
plassering: { type: 'Punkt' , koordinater: [ - 60,9928 , 30,7193 ] },
kategori: 'Hage'
},
{
Navn: 'Fotballbane' ,
plassering: { type: 'Punkt' , koordinater: [ - 60,9375 , 30,8303 ] },
kategori: 'Stadion'
}
])

Vi har dokumenter som inneholder stedsdata som koordinater. I tillegg lager vi en geospatial indeks på feltet for å optimere ytelsen til geospatiale spørringer.









Eksempel 1: Bruk av spørringsoperatøren $geoIntersects

For det første har vi den geospatiale funksjonens $geoIntersects-operator som krysser det angitte objektet. Vurder følgende implementering av $geoIntersects-operatøren:



db.area.find({ plassering: { $geoIntersects: { $geometry: { type: 'Punkt' ,

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

I eksemplet kaller vi «område»-samlingen sammen med «finn»-operasjonen. Til find()-metoden sender vi 'location'-feltsettene til $geoIntersects spørringsoperator for den geospatiale funksjonen. Denne brukes til å sjekke om det angitte punktet skjærer geometrien som er lagret i geometrifeltet.





Deretter tar $geoIntesects-operatoren $geometry-operatoren der typefeltet er satt med 'Point'-verdien og koordinatfeltet er gitt med 'koordinater'-verdiene. Her er $geometrien definert for den geospatiale sammenligningen.

Følgende utdata er der det forventede dokumentet hentes og hvor geometrifeltet inneholder et geometrisk objekt som skjærer det angitte punktet:



Eksempel 2: Bruk av $near Query Operator

$near-operatøren er også den geospatiale funksjonen som brukes til å gjøre de geospatiale spørringene for å identifisere dokumentene som er geografisk nær et gitt sted. Den henter dokumentene som er ordnet i henhold til deres nærhet til det angitte stedet. Her gir vi implementeringen av $near-operatøren:

db.area.find(
{
plassering:
{ $near :
{
$geometry: { type: 'Punkt' ,  koordinater: [ - 60,9667 , 30,78 ] },
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

I eksemplet definerer vi 'plassering'-feltet til 'område'-samlingen i 'finn'-operasjonen. Deretter setter vi $near-spørringsoperatøren for den geospatiale funksjonen til det 'sted'-feltet. $near-operatoren søker etter nærpunktet med det gitte koordinatpunktet. Deretter bruker vi parametrene $minDistance og $maxDistance i $near-operatøren som er utstyrt med visse verdier for å hente dokumentene innenfor det angitte avstandsområdet fra det gitte punktet.

Dokumentet hentes i utdataene som er i nærheten av de angitte stedene eller interessepunktene i en geospatial 'område'-samling:

Eksempel 3: Bruk av $nearsphere Query Operator

Alternativt har vi $nearsphere-operatoren som ligner $near-operatoren, men $nearSphere tar hensyn til jordens sfæriske form når avstandene beregnes.

db.area.find(
{
plassering: {
$nearSphere: {
$geometry: {
type: 'Punkt' ,
koordinater: [- 60,9667 , 30,78 ]
},
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

I eksemplet bruker vi $nearsphere-operatoren for den geospatiale spørringen. Operatoren $nearspehere søker her etter dokumentet hvis nærmeste punkter er nær punktene som er spesifisert i spørringen, og punktene settes til koordinatfeltmatrisen.

Etter det avgrenser vi resultatene ved å etablere parametrene $minDistance og $maxDistance. Parameteren $minDistance sikrer at de returnerte dokumentene er minst 1000 meter unna det angitte punktet, mens parameteren $maxDistance begrenser resultatene til plasseringene som ikke er mer enn 5000 meter unna.

Dokumentet vises i utdataene med en plassering innenfor en spesifisert meter fra punktet med gitte koordinater:

Eksempel 4: Bruke $geoWithin Query Operator

Deretter har vi $geoWithin-operatoren i MongoDB som brukes til geospatiale spørringer for å finne dokumentene som er helt innenfor en spesifisert form, for eksempel en sirkel. La oss få følgende demonstrasjon av $geoWithin-spørringen:

db.area.find({ plassering:

{ $geoWithin:

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

I eksemplet bruker vi $geoWithin-operatoren for å finne dokumentene til 'område'-samlingen innenfor et bestemt sirkulært område på en 2D-sfære. For dette spesifiserer vi $centerSphere-operatoren inne i $geoWithin-operatoren som tar de to argumentene som det sentriske punktet, som sannsynligvis representerer koordinatpunktet her, og sirkelens radius som representerer avstandsverdien i miles.

Det resulterende dokumentet hentes i det følgende som representerer et geospatialt punkt som faller innenfor sirkelen som er definert av det gitte midtpunktet og radiusen på omtrent 3 miles:

Eksempel 5: Bruk av $geoNear Query Operator

Dessuten er $geoNear-operatøren også en geospatial operatør som brukes for aggregeringsrørledningen. Den utfører en geospatial spørring og returnerer dokumentene som er sortert etter deres nærhet til et spesifisert punkt. Her har vi gitt $geoNear-operatøren som kalles inne i aggregeringsrørledningen.

db.area.aggregate([
{
$geoNear: {
nær: { type: 'Punkt' , koordinater: [ - 60,99279 , 30.719296 ] },
avstandsfelt: 'avstandsberegnet' ,
maxDistance: 2 ,
spørring: { kategori: 'Hage' },
includeLocs: 'dist.location' ,
sfærisk: sant
}
}
])

I eksemplet kaller vi aggregatmetoden til MongoDB og definerer $geoNear-operatøren inne i den. $geoNear-operatoren er satt med flere parametere for å spesifisere spørringsoppførselen. Først setter vi 'nær'-parameteren som gir 'koordinatverdiene' som et referansepunkt for søk.

Deretter bruker vi 'distanceField'-parameteren for å spesifisere det angitte feltet som utfallsfeltet. Dette angitte utfallsfeltet lagrer avstanden mellom hvert dokument og referansepunktet. Deretter definerer vi parameteren 'maxDistance' med verdien '2', som representerer den maksimale avstanden i meter.

Etter det har vi 'query'-parameteren som filtrerer dokumentene etter 'category'-feltet og kun vurderer dokumentene der 'category' er 'Parks'. Vi kaller deretter «includeLocs»-parameteren for å inneholde stedsinformasjonen. Vi spesifiserer til slutt den 'sfæriske' parameteren med den 'sanne' verdien som beregner avstandene ved hjelp av et 2D sfærisk koordinatsystem.

Aggregeringsrørledningen representerer dokumentet i utdataene som viser informasjonen mot parameteren tilsvarende. Følgende «dist.calculated»-felt viser avstanden til hvert dokument fra referansepunktet:

Konklusjon

Vi ble kjent med at de geospatiale egenskapene til MongoDB hjelper oss med å effektivt håndtere og spørre etter den stedsbaserte informasjonen. Vi lærte implementeringen av den geospatiale funksjonen ved å bruke de forskjellige operatørene med eksempelprogrammet. Vi har mange flere funksjoner og metoder som også er fordelaktige for et bredt spekter av bruksområder.