Come implementare le funzionalità geospaziali di MongoDB

Come Implementare Le Funzionalita Geospaziali Di Mongodb



La funzionalità geospaziale di MongoDB fornisce un modo semplice per archiviare i dati geografici in un database. Essenzialmente, possiamo archiviare i dati geospaziali in MongoDB come oggetti GeoJSON. GeoJSON è un formato gratuito e open source che dipende dalla notazione oggetto JavaScript con semplici dati geografici. Questa funzionalità è importante per le app che richiedono servizi basati sulla posizione come il processo di mappatura, basato sulla ricerca della posizione e altri. Questo articolo illustra la funzionalità geospaziale con l'implementazione di esempio.

Aggiunta di documenti alla raccolta per le funzionalità geospaziali

Per dimostrare la funzionalità della funzionalità geospaziale MongoDB, abbiamo bisogno dei documenti per la raccolta specifica. Inseriamo alcuni documenti nella raccolta “area” come mostrato di seguito:

db.area.insertMany( [
{
nome: 'Parco per bambini' ,
posizione: { tipo: 'Punto' , coordinate: [ - 60,97 , 30.77 ]},
categoria: 'Giardino'
},
{
nome: 'Area Studenti' ,
posizione: { tipo: 'Punto' , coordinate: [ - 60.9928 , 30.7193 ]},
categoria: 'Giardino'
},
{
nome: 'Campo da calcio' ,
posizione: { tipo: 'Punto' , coordinate: [ - 60.9375 , 30.8303 ]},
categoria: 'Stadio'
}
])

Abbiamo documenti che contengono i dati sulla posizione come le coordinate. Inoltre, creiamo un indice geospaziale sul campo per ottimizzare le prestazioni delle query geospaziali.









Esempio 1: utilizzo dell'operatore di query $geoIntersects

Innanzitutto, abbiamo l'operatore $geoIntersects della funzionalità geospaziale che si interseca con l'oggetto fornito. Considera la seguente implementazione dell'operatore $geoIntersects:



db.area.find({ posizione: { $geoIntersects: { $geometria: { tipo: 'Punto' ,

coordinate: [ - 60,97 , 30.77 ] } } } })

Nell'esempio, chiamiamo la raccolta 'area' insieme all'operazione 'trova'. Al metodo find(), passiamo i set di campi “location” all'operatore di query $geoIntersects della funzionalità geospaziale. Viene utilizzato per verificare se il punto specificato si interseca con la geometria memorizzata nel campo geometria.





Quindi, l'operatore $geoIntesects accetta l'operatore $geometry in cui il campo tipo è impostato con il valore 'Punto' e il campo coordinate viene fornito con i valori 'coordinate'. Qui viene definita la $geometria per il confronto geospaziale.

Il seguente output è dove viene recuperato il documento previsto e dove il campo della geometria contiene un oggetto geometrico che si interseca con il punto specificato:



Esempio 2: utilizzo dell'operatore $near Query

L'operatore $near è anche la funzionalità geospaziale utilizzata per eseguire query geospaziali per identificare i documenti geograficamente vicini a un determinato luogo. Recupera i documenti organizzati in base alla loro vicinanza alla posizione specificata. Qui forniamo l'implementazione dell'operatore $near:

db.area.find(
{
posizione:
{$vicino a:
{
$geometria: {tipo: 'Punto' , coordinate: [ - 60.9667 , 30.78 ]},
$minDistanza: 1000 ,
$Distanza massima: 5000
}
}
}
)

Nell'esempio definiamo il campo “location” della collection “area” all'interno dell'operazione “find”. Quindi, impostiamo l'operatore $near query della funzionalità geospaziale su quel campo 'posizione'. L'operatore $vicino cerca il punto vicino con le coordinate indicate. Successivamente, utilizziamo i parametri $minDistance e $maxDistance nell'operatore $near a cui vengono forniti determinati valori per recuperare i documenti entro l'intervallo di distanza specificato dal punto specificato.

Il documento viene recuperato nell'output che si trova vicino alle posizioni o ai punti di interesse specificati in una raccolta di 'aree' geospaziali:

Esempio 3: utilizzo dell'operatore di query $nearsphere

In alternativa abbiamo l'operatore $nearsphere che è simile all'operatore $near, ma $nearSphere tiene conto della forma sferica della Terra nel calcolo delle distanze.

db.area.find(
{
posizione: {
$vicinoSfera: {
$geometria: {
tipo : 'Punto' ,
coordinate : [ - 60.9667 , 30.78 ]
},
$minDistanza: 1000 ,
$Distanza massima: 5000
}
}
}
)

Nell'esempio utilizziamo l'operatore $nearsphere della query geospaziale. L'operatore $nearspehere qui cerca il documento i cui punti più vicini sono vicini ai punti specificati nella query e i punti vengono impostati sulla matrice del campo di coordinate.

Successivamente, perfezioniamo i risultati stabilendo i parametri $minDistance e $maxDistance. Il parametro $minDistance garantisce che i documenti restituiti siano ad almeno 1000 metri di distanza dal punto specificato, mentre il parametro $maxDistance limita i risultati alle posizioni che non distano più di 5000 metri.

Il documento viene visualizzato nell'output con una posizione entro un metro specificato dal punto con le coordinate specificate:

Esempio 4: utilizzo dell'operatore di query $geoWithin

Successivamente, abbiamo l'operatore $geoWithin in MongoDB che viene utilizzato per le query geospaziali per trovare i documenti che si trovano completamente all'interno di una forma specifica come un cerchio. Facciamo la seguente dimostrazione della query $geoWithin:

db.area.find({ posizione:

{$geoWithin:

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

Nell'esempio utilizziamo l'operatore $geoWithin per trovare i documenti della raccolta “area” all'interno di una determinata area circolare su una sfera 2D. Per questo, specifichiamo l'operatore $centerSphere all'interno dell'operatore $geoWithin che accetta i due argomenti come punto centrico, che probabilmente rappresenta le coordinate del punto qui, e il raggio del cerchio che rappresenta il valore della distanza in miglia.

Il documento risultante viene recuperato di seguito e rappresenta un punto geospaziale che rientra nel cerchio definito dal punto centrale dato e dal raggio di circa 3 miglia:

Esempio 5: utilizzo dell'operatore di query $geoNear

Inoltre, l'operatore $geoNear è anche un operatore geospaziale utilizzato per la pipeline di aggregazione. Esegue una query geospaziale e restituisce i documenti ordinati in base alla loro vicinanza a un punto specificato. Qui abbiamo fornito l'operatore $geoNear che viene chiamato all'interno della pipeline di aggregazione.

db.area.aggregate([
{
$geoVicino: {
vicino: { tipo: 'Punto' , coordinate: [ - 60.99279 , 30.719296 ]},
campodistanza: 'dist.calcolata' ,
distanza massima: 2 ,
query: { categoria: 'Giardino' },
includeLoc: 'località dist' ,
sferico: vero
}
}
])

Nell'esempio chiamiamo il metodo aggregato di MongoDB e definiamo al suo interno l'operatore $geoNear. L'operatore $geoNear è impostato con diversi parametri per specificare il comportamento della query. Per prima cosa impostiamo il parametro “near” che fornisce i valori delle “coordinate” come punto di riferimento per la ricerca.

Quindi, utilizziamo il parametro 'distanceField' per specificare il campo fornito come campo del risultato. Questo campo di risultato impostato memorizza la distanza tra ciascun documento e il punto di riferimento. Successivamente definiamo il parametro “maxDistance” con il valore “2″ che rappresenta la distanza massima in metri.

Successivamente abbiamo il parametro “query” che filtra i documenti in base al campo “categoria” e considera solo i documenti in cui la “categoria” è “Parchi”. Chiamiamo quindi il parametro 'includeLocs' per contenere le informazioni sulla posizione. Specifichiamo infine il parametro “sferico” con il valore “vero” che calcola le distanze utilizzando un sistema di coordinate sferiche 2D.

La pipeline di aggregazione rappresenta il documento nell'output che visualizza di conseguenza le informazioni rispetto al parametro. Il seguente campo “dist.calculated” visualizza la distanza di ciascun documento dal punto di riferimento:

Conclusione

Abbiamo scoperto che le capacità geospaziali di MongoDB ci aiutano a gestire e interrogare in modo efficiente le informazioni basate sulla posizione. Abbiamo imparato l'implementazione della funzionalità geospaziale utilizzando i suoi vari operatori con il programma di esempio. Disponiamo di molte più funzionalità e metodi che risultano vantaggiosi per un'ampia gamma di applicazioni.