Dati di posizione geospaziali e GeoJSON in Azure Cosmos DB per NoSQL

SI APPLICA A: NoSQL

Azure Cosmos DB per NoSQL include funzionalità geospaziali predefinite per rappresentare forme geometriche o posizioni/poligoni effettivi su una mappa.

I dati geospaziali spesso comportano query di prossimità. Ad esempio, la domanda "trovare tutte le posizioni di vendita al dettaglio vicino alla posizione corrente" viene risposta usando una query di prossimità su più oggetti dati geospaziali.

I casi d'uso geospaziali comuni includono, ma non sono limitati a:

  • Georilevazione analitica, guidando iniziative di marketing specifiche basate sulla posizione.
  • Personalizzazione basata sulla posizione, per settori come la vendita al dettaglio e il settore sanitario per migliorare l'esperienza utente.
  • Miglioramento della logistica, per settori come i trasporti in cui l'ottimizzazione è fondamentale.
  • Analisi dei rischi, per settori come assicurazione e finanza per integrare altri metadati.
  • Consapevolezza della situazione*, per avvisi e notifiche basati sul proxy.

Introduzione ai dati spaziali

I dati spaziali descrivono la posizione e la forma degli oggetti nello spazio. Nella maggior parte delle applicazioni, questi punti e forme corrispondono agli oggetti sulla terra e ai dati geospaziali. I dati spaziali possono essere utilizzati per rappresentare la posizione di una persona, un luogo di interesse o i confini di una città o di un lago.

Azure Cosmos DB per NoSQL supporta due tipi di dati spaziali: il tipo di dati geometry e il tipo di dati geography .

  • Il tipo geometry rappresenta i dati in un sistema di coordinate euclideo (piano). Questo tipo è utile per attività geometriche comuni, ad esempio la misurazione delle linee, l'intersecazione dei poligoni e la misurazione della distanza tra i punti.
  • Il tipo geography rappresenta i dati in un sistema di coordinate terrestri. Questo tipo è utile per le attività geografiche comuni, ad esempio per determinare se una posizione si trova all'interno di limiti specifici e misurare la distanza tra posizioni.

Tipi di dati supportati

Azure Cosmos DB per NoSQL supporta l'indicizzazione e l'esecuzione di query sui dati dei punti geospaziali rappresentati usando la specifica GeoJSON. Le strutture di dati GeoJSON sono sempre oggetti JSON validi, quindi possono essere archiviate e sottoposte a query usando Azure Cosmos DB senza librerie o strumenti specializzati.

Azure Cosmos DB supporta i tipi di dati spaziali seguenti:

  • Point
  • LineString
  • Polygon
  • MultiPolygon

Punti

Un punto indica una posizione singola nello spazio. Nei dati geospaziali, un punto rappresenta la posizione esatta, che può essere l'indirizzo di un negozio, un chiosco, un'automobile o una città. Un punto è rappresentato in GeoJSON (e Azure Cosmos DB per NOSQL) usando la coppia di coordinate (longitudine e latitudine).

Si consideri questo esempio di punto GeoJSON. La longitudine è -122.12826822304672 e la latitudine è 47.63980239335718.

{
  "type": "Point",
  "coordinates": [
    -122.12826822304672,
    47.63980239335718
  ]
}

Suggerimento

Per il tipo di dati geography, la specifica GeoJSON specifica prima la longitudine e quindi la latitudine. Come in altre applicazioni di mapping, longitudine e latitudine sono angoli e sono espresse in gradi. I valori di longitudine vengono misurati dal Meridiano primo e sono compresi tra -180 gradi e 180.0 gradi e i valori di latitudine vengono misurati dall'equatore e sono compresi tra -90.0 gradi e 90.0 gradi.

Per il tipo di dati geometry, la specifica GeoJSON specifica prima l'asse orizzontale e quindi l'asse verticale.

I tipi di dati spaziali possono essere incorporati in un elemento, come illustrato in questo esempio di un elemento della struttura che include i dati GeoJSON.

{
  "name": "Headquarters",
  "location": {
    "type": "Point",
    "coordinates": [
      -122.12826822304672,
      47.63980239335718
    ]
  },
  "category": "business-offices"
}

Azure Cosmos DB per NoSQL interpreta le coordinate come rappresentate per il sistema di riferimento WGS-84. Per altre informazioni, vedere Sistemi di riferimento delle coordinate.

LineStrings

LineStrings rappresentano una serie di due o più punti nello spazio e i segmenti lineari che li connettono. Nei dati geospaziali, gli oggetti linestring di solito vengono usati per rappresentare autostrade o fiumi.

In questo esempio viene utilizzata una stringa di linea per rappresentare una linea disegnata tra due punti.

{
  "type": "LineString",
  "coordinates": [
    [ 31.8, -5 ],
    [ 31.8, -4.7 ]
  ]
}

Poligoni

Un oggetto poligono è un perimetro costituito da punti connessi che forma un elemento LineString chiuso. I poligoni vengono comunemente utilizzati per rappresentare formazioni naturali come laghi o giurisdizioni politiche come città e stati.

I punti all'interno di un poligono devono essere specificati in senso antiorario. Un poligono specificato in senso orario rappresenta l'inverso dell'area al suo interno.

In questo esempio viene creato un poligono collegando più punti.

{
    "type":"Polygon",
    "coordinates":[ [
        [ 31.8, -5 ],
        [ 32, -5 ],
        [ 32, -4.7 ],
        [ 31.8, -4.7 ],
        [ 31.8, -5 ]
    ] ]
}

Suggerimento

La specifica GeoJSON richiede che per i poligoni validi l'ultima coppia di coordinate indicata corrisponda alla prima, in modo da creare una forma chiusa.

MultiPolygons

MultiPolygon è una matrice di zero o più poligoni. I multipolygon non possono sovrapporsi ai lati o avere un'area comune. Possono toccare uno o più punti.

Ecco un esempio di MultiPolygon.

{
    "type":"MultiPolygon",
    "coordinates":[[[
            [52.0, 12.0],
            [53.0, 12.0],
            [53.0, 13.0],
            [52.0, 13.0],
            [52.0, 12.0]
        ]],
        [[
            [50.0, 0.0],
            [51.0, 0.0],
            [51.0, 5.0],
            [50.0, 5.0],
            [50.0, 0.0]
        ]]]
}

Sistemi di riferimento delle coordinate

Poiché la forma della terra è irregolare, le coordinate dei dati geospaziali geografici sono rappresentate in molti sistemi di riferimento di coordinate (CRS). Ogni CRS ha i propri fotogrammi di riferimento e unità di misura. Ad esempio, il "National Grid of Britain" è un sistema di riferimento accurato per il Regno Unito, ma non al di fuori di questo.

Il più diffuso CRS attualmente in uso è il World Geodetic System WGS-84. Dispositivi GPS e molti servizi di mapping, tra cui Google Maps e le API di Bing Maps, utilizzano WGS-84. Azure Cosmos DB per NoSQL supporta l'indicizzazione e l'esecuzione di query sui dati geospaziali geografici usando solo WGS-84 CRS.

Creazione di elementi con dati spaziali

Quando si creano elementi che contengono valori GeoJSON, questi vengono indicizzati automaticamente con un indice spaziale. Questa indicizzazione predefinita si verifica in base ai criteri di indicizzazione del contenitore. I criteri di indicizzazione predefiniti, se non specificati, indicizzano accuratamente i dati GeoJSON. Se si usa un SDK in un linguaggio tipizzato in modo dinamico, ad esempio Python o Node.js, è necessario creare geoJSON valido.

var userProfileitem = {
    "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    "location":{
        "type":"Point",
        "coordinates":[ -122.12, 47.66 ]
    }
};

client.createitem(`dbs/${databaseName}/colls/${collectionName}`, userProfileitem, (err, created) => {
    // additional code within the callback
});

Se non si dispone delle informazioni sulla latitudine e la longitudine, ma si hanno gli indirizzi fisici o il nome della posizione, cercare le coordinate effettive usando un servizio online. I servizi come Bing Maps possono aiutare a trovare i dati geografici effettivi da un nome di posizione noto. Per altre informazioni sulla geocodifica di Bing Maps, vedere Servizi REST di Bing Maps.