Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I dati geospaziali possono ora essere archiviati ed sottoposti a query usando Azure DocumentDB. Questo miglioramento offre strumenti avanzati per gestire e analizzare i dati spaziali, consentendo un'ampia gamma di applicazioni, ad esempio il rilevamento della posizione in tempo reale, l'ottimizzazione della route e l'analisi spaziale.
Ecco una rapida panoramica dei comandi e degli operatori geospaziali ora supportati:
Operatori di query geospaziali
$geoIntersects
Seleziona i documenti in cui una geometria specificata si interseca con la geometria dei documenti. Utile per trovare documenti che condividono qualsiasi parte dello spazio con una determinata geometria.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$geoWithin
Seleziona documenti con dati geospaziali che esistono interamente all'interno di una forma specificata. Questo operatore viene usato per trovare documenti all'interno di un'area definita.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$box
Definisce un'area rettangolare usando due coppie di coordinate (angoli inferiore sinistro e superiore destro). Usato con l'operatore $geoWithin per trovare i documenti all'interno di questo rettangolo. Ad esempio, trovare tutte le posizioni all'interno di un'area rettangolare su una mappa.
db.collection.find({
location: {
$geoWithin: {
$box: [[lowerLeftLong, lowerLeftLat], [upperRightLong, upperRightLat]]
}
}
})
$center
Definisce un'area circolare utilizzando un punto centrale e un raggio in radianti. Usato con l'operatore $geoWithin per trovare documenti all'interno di questo cerchio.
db.collection.find({
location: {
$geoWithin: {
$center: [[longitude, latitude], radius]
}
}
})
$centerSphere
Simile a $center, ma definisce un'area sferica usando un punto centrale e un raggio in radianti. Utile per i calcoli di geometria sferica.
db.collection.find({
location: {
$geoWithin: {
$centerSphere: [[longitude, latitude], radius]
}
}
})
$geometry
Specifica un oggetto GeoJSON per definire una geometria. Usato con operatori geospaziali per eseguire query basate su forme complesse.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [longitude, latitude]
}
}
}
})
$maxDistance
Specifica la distanza massima da un punto per una query geospaziale. Usato con $near gli operatori e $nearSphere . Ad esempio, trovare tutte le località entro 2 km da un determinato punto.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$minDistance
Specifica la distanza minima da un punto per una query geospaziale. Usato con $near gli operatori e $nearSphere .
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$minDistance: distance
}
}
})
$polygon
Definisce un poligono usando una matrice di coppie di coordinate. Usato con l'operatore $geoWithin per trovare documenti all'interno di questo poligono.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$near
Trova i documenti vicini a un punto specificato. Restituisce i documenti ordinati in base alla distanza dal punto. Ad esempio, trovare i ristoranti più vicini alla posizione di un utente.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$nearSphere
Simile a $near, ma esegue calcoli su una superficie sferica. Utile per calcoli di distanza più accurati sulla superficie terrestre.
db.collection.find({
location: {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
Fase di aggregazione geospaziale
$geoNear
Esegue una query geospaziale per restituire i documenti ordinati in base alla distanza da un punto specificato. Può includere criteri di query aggiuntivi e informazioni sulla distanza restituita.
db.collection.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [longitude, latitude]
},
distanceField: "distance",
spherical: true
}
}
])
Considerazioni e funzionalità non supportate
Attualmente, l'esecuzione di query con un poligono GeoJSON a anello singolo la cui area supera un singolo emisfero non è supportata. In questi casi, Azure DocumentDB restituisce il messaggio di errore seguente:
Error: Custom CRS for big polygon is not supported yet.Un indice composito che usa un indice regolare e un indice geospaziale non è consentito. Per esempio:
db.collection.createIndex({a: "2d", b: 1}); Error: Compound 2d indexes are not supported yetI poligoni con fori non sono attualmente supportati per l'uso con $geoWithin query. Anche se l'inserimento di un poligono con fori non è limitato, alla fine ha esito negativo con il messaggio di errore seguente:
Error: $geoWithin currently doesn't support polygons with holesIl campo chiave è sempre obbligatorio nella fase di aggregazione $geoNear. Se il campo chiave non è presente, si verifica l'errore seguente:
Error: $geoNear requires a 'key' option as a StringLe
$geoNearfasi ,$neare$nearSpherenon hanno requisiti di indice rigorosi, quindi queste query non avranno esito negativo se manca un indice.
Contenuti correlati
- Altre informazioni sulla compatibilità MQL (MongoDB Query Language) con MongoDB.
- Esaminare le opzioni per la migrazione da MongoDB ad Azure DocumentDB.