Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Interrogazione di dati geospaziali con Amazon DocumentDB
Questa sezione spiega come interrogare i dati geospaziali con Amazon DocumentDB. Dopo aver letto questa sezione, sarai in grado di rispondere a come archiviare, interrogare e indicizzare i dati geospaziali in Amazon DocumentDB.
Argomenti
Panoramica di
I casi d'uso più comuni di Geospatial riguardano l'analisi di prossimità dei tuoi dati. Ad esempio, «trovare tutti gli aeroporti entro 50 miglia da Seattle» o «trovare i ristoranti più vicini a una determinata località». Amazon DocumentDB utilizza la specifica GeoJSON
Indicizzazione e archiviazione di dati geospaziali
Amazon DocumentDB utilizza il tipo GeoJSON «Point» per archiviare dati geospaziali. Ogni documento GeoJSON (o documento secondario) è generalmente composto da due campi:
-
tipo: la forma rappresentata, che indica ad Amazon DocumentDB come interpretare il campo «coordinate». Al momento, Amazon DocumentDB supporta solo punti
-
coordinate, una coppia di latitudine e longitudine rappresentata come oggetto in un array, [longitudine, latitudine]
Amazon DocumentDB utilizza anche indici 2dsphere per indicizzare i dati geospaziali. Amazon DocumentDB supporta i punti di indicizzazione. Amazon DocumentDB supporta l'interrogazione di prossimità con indicizzazione 2dsphere.
Consideriamo uno scenario in cui stai creando un'applicazione per il servizio di consegna di cibo. Vuoi memorizzare le coppie di latitudine e longitudine dei ristoranti in Amazon DocumentDB. Per farlo, crea prima un indice nel campo geospaziale che contenga la coppia di latitudine e longitudine.
use restaurantsdb db.usarestaurants.createIndex({location:"2dsphere"})
L'output di questo comando sarebbe simile a questo:
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Dopo aver creato un indice, puoi iniziare a inserire dati nella tua raccolta Amazon DocumentDB.
db.usarestaurants.insert({ "state":"Washington", "city":"Seattle", "name":"Thai Palace", "rating": 4.8, "location":{ "type":"Point", "coordinates":[ -122.3264, 47.6009 ] } }); db.usarestaurants.insert({ "state":"Washington", "city":"Seattle", "name":"Noodle House", "rating": 4.8, "location":{ "type":"Point", "coordinates":[ -122.3517, 47.6159 ] } }); db.usarestaurants.insert({ "state":"Washington", "city":"Seattle", "name":"Curry House", "rating": 4.8, "location":{ "type":"Point", "coordinates":[ -121.4517, 47.6229 ] } });
Esecuzione di query su dati geospaziali
Amazon DocumentDB supporta l'interrogazione di prossimità, inclusione e intersezione di dati geospaziali. Un buon esempio di ricerca di prossimità è la ricerca di tutti i punti (tutti gli aeroporti) che si trovano a meno di una certa distanza e più di una distanza da un altro punto (città). Un buon esempio di ricerca di inclusione consiste nel trovare tutti i punti (tutti gli aeroporti) che si trovano in uno specifico area/polygon (stato di New York). Un buon esempio di ricerca di intersezione è la ricerca di un poligono (stato) che si interseca con un punto (città). Puoi utilizzare i seguenti operatori geospaziali per ottenere informazioni dettagliate dai tuoi dati.
-
$nearSphere-$nearSphereè un operatore di ricerca che supporta la ricerca di punti dal più vicino al più lontano da un punto GeoJSON. -
$geoNear-$geoNearè un operatore di aggregazione che supporta il calcolo della distanza in metri da un punto GeoJSON. -
$minDistance-$minDistanceè un operatore di ricerca che viene utilizzato insieme$nearSphereo$geoNearper filtrare documenti che si trovano almeno alla distanza minima specificata dal punto centrale. -
$maxDistance-$maxDistanceè un operatore di ricerca utilizzato insieme$nearSphereo$geoNearper filtrare documenti che si trovano al massimo alla distanza massima specificata dal punto centrale. -
$geoWithin-$geoWithinè un operatore di ricerca che supporta la ricerca di documenti con dati geospaziali che esistono interamente all'interno di una forma specificata, ad esempio un poligono. -
$geoIntersects-$geoIntersectsè un operatore di ricerca che supporta la ricerca di documenti i cui dati geospaziali si intersecano con un oggetto GeoJSON specificato.
Nota
$geoNeare $nearSphere richiedono un indice 2dsphere nel campo GeoJSON da utilizzare nella query di prossimità.
Esempio 1
In questo esempio, imparerai come trovare tutti i ristoranti (punti) ordinati in base alla distanza più vicina da un indirizzo (punto).
Per eseguire tale interrogazione, è possibile utilizzare $geoNear per calcolare la distanza di un insieme di punti da un altro punto. Puoi anche aggiungerlo distanceMultiplier per misurare la distanza in chilometri.
db.usarestaurants.aggregate([ { "$geoNear":{ "near":{ "type":"Point", "coordinates":[ -122.3516, 47.6156 ] }, "spherical":true, "distanceField":"DistanceKilometers", "distanceMultiplier":0.001 } } ])
Il comando precedente restituirebbe i ristoranti ordinati per distanza (dal più vicino al più lontano) dal punto specificato. L'output di questo comando sarebbe simile a questo
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "state" : "Washington", "city" : "Seattle", "name" : "Noodle House", "rating" : 4.8, "location" : { "type" : "Point", "coordinates" : [ -122.3517, 47.6159 ] }, "DistanceKilometers" : 0.03422834547294996 } { "_id" : ObjectId("611f3da185009a81ad38e74a"), "state" : "Washington", "city" : "Seattle", "name" : "Thai Palace", "rating" : 4.8, "location" : { "type" : "Point", "coordinates" : [ -122.3264, 47.6009 ] }, "DistanceKilometers" : 2.5009390081704277 } { "_id" : ObjectId("611f3dae85009a81ad38e74c"), "state" : "Washington", "city" : "Seattle", "name" : "Curry House", "rating" : 4.8, "location" : { "type" : "Point", "coordinates" : [ -121.4517, 47.6229 ] }, "DistanceKilometers" : 67.52845344856914 }
Nota
numLe opzioni limit e per lo $geoNear stage, così come il limite predefinito di 100 documenti, sono obsolete in Amazon DocumentDB 8.0 (patch del motore versione 4.0.5748) e versioni successive. I seguenti esempi utilizzano limit e num si applicano solo ad Amazon DocumentDB 8.0 (Engine patch versione 4.0.4448) e versioni precedenti.
Per limitare il numero di risultati in una query, utilizza l'opzione or. limit num
limit:
db.usarestaurants.aggregate([ { "$geoNear":{ "near":{ "type":"Point", "coordinates":[ -122.3516, 47.6156 ] }, "spherical":true, "distanceField":"DistanceKilometers", "distanceMultiplier":0.001, "limit": 10 } } ])
num:
db.usarestaurants.aggregate([ { "$geoNear":{ "near":{ "type":"Point", "coordinates":[ -122.3516, 47.6156 ] }, "spherical":true, "distanceField":"DistanceKilometers", "distanceMultiplier":0.001, "num": 10 } } ])
Esempio 2
In questo esempio, imparerai come trovare tutti i ristoranti (punti) nel raggio di 2 chilometri da un indirizzo specifico (punto). Per eseguire tale interrogazione, è possibile utilizzare un valore minimo $minDistance e massimo $nearSphere compreso $maxDistance tra un punto GeoJSON
db.usarestaurants.find({ "location":{ "$nearSphere":{ "$geometry":{ "type":"Point", "coordinates":[ -122.3516, 47.6156 ] }, "$minDistance":1, "$maxDistance":2000 } } }, { "name":1 })
Il comando precedente restituirebbe ristoranti a una distanza massima di 2 chilometri dal punto specificato. L'output di questo comando sarebbe simile a questo
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
Limitazioni
Amazon DocumentDB non supporta l'interrogazione o l'indicizzazione di Polygons,,, e LineString. MultiPoint MultiPolygon MultiLineString GeometryCollection