Räumliche Daten und GeoJSON-Standortdaten in Azure Cosmos DB for NoSQL

GILT FÜR: NoSQL

Azure Cosmos DB for NoSQL verfügt über integrierte räumliche Funktionen, um geometrische Formen oder tatsächliche Orte/Polygone auf einer Karte darzustellen.

Bei räumlichen Daten sind häufig Näherungsabfragen beteiligt. Beispielsweise wird die Frage „Alle Einzelhandelsstandorte in der Nähe meines aktuellen Standorts finden“ mithilfe einer Näherungsabfrage über mehrere räumliche Datenobjekte beantwortet.

Häufige räumlichen Anwendungsfällen sind unter anderem:

  • Geolocation-Analysen für bestimmte standortbasierte Marketinginitiativen.
  • Standortbasierte Personalisierung für Branchen wie Einzelhandel und Gesundheitswesen, um die Benutzererfahrung zu verbessern.
  • Verbesserung der Logistik für Branchen wie das Transportwesen, in denen Optimierung von entscheidender Bedeutung ist.
  • Risikoanalyse für Branchen wie Versicherungen und Finanzen zur Ergänzung anderer Metadaten.
  • Situationsbewusstsein* für näherungsbasierte Warnungen und Benachrichtigungen.

Einführung in räumliche Daten

Räumliche Daten beschreiben die Position und Form von Objekten im Raum. In den meisten Anwendungen entsprechen diese Punkte und Formen Objekten auf der Erde und räumlichen Daten. Räumliche Daten dienen zur Darstellung des Orts einer Person, einer Sehenswürdigkeit, der Umgrenzung einer Stadt oder eines Sees.

Azure Cosmos DB for NoSQL unterstützt zwei räumliche Datentypen: den geometrischen und den geografischen Datentyp.

  • Der geometry -Datentyp stellt Daten in einem euklidischen (flachen) Koordinatensystem dar. Dieser Typ ist nützlich für allgemeine geometrische Aufgaben, z. B. das Messen von Linien, das Überschneiden von Polygonen und das Messen des Abstands zwischen Punkten.
  • Der geography -Datentyp stellt Daten in einem Erdkugel-Koordinatensystem dar. Dieser Typ ist nützlich für allgemeine geografische Aufgaben, z. B. um festzustellen, ob ein Ort innerhalb bestimmter Grenzen liegt, und um die Entfernung zwischen Orten zu messen.

Unterstützte Datentypen

Azure Cosmos DB for NoSQL unterstützt das Indizieren und Abfragen von räumlichen Punktdaten, die mithilfe der GeoJSON-Spezifikation dargestellt werden. GeoJSON-Datenstrukturen sind stets gültige JSON-Objekte, weshalb sie mit Azure Cosmos DB gespeichert und ohne spezielle Tools oder Bibliotheken abgefragt werden können.

Von Azure Cosmos DB werden folgende Arten von räumlichen Daten unterstützt:

  • Point
  • LineString
  • Polygon
  • MultiPolygon

Punkte

Ein Punkt kennzeichnet eine einzelne Position im Raum. In Geodaten stellt ein Punkt den exakten Ort dar, der die Adresse eines Lebensmittelgeschäfts, ein Kiosk, ein Auto oder eine Stadt sein kann. Ein Punkt wird in GeoJSON (und Azure Cosmos DB for NOSQL) mithilfe seines Koordinatenpaares (Längengrad und Breitengrad) dargestellt.

Betrachten Sie dieses Beispiel für einen GeoJSON-Punkt. Der Längengrad ist -122.12826822304672 und der Breitengrad ist 47.63980239335718.

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

Tipp

Für den Datentyp Geografie gibt die GeoJSON-Spezifikation zuerst den Längengrad und dann den Breitengrad an. Wie in anderen Kartenprogrammen sind Längen- und Breitengrade Winkel, die in Grad dargestellt werden. Längengradwerte werden ab dem Nullmeridian gemessen und liegen zwischen -180 und 180.0 Grad. Breitengradwerte werden ab dem Äquator gemessen und liegen zwischen -90.0 und 90.0 Grad.

Für den geometrischen Datentyp gibt die GeoJson-Spezifikation zuerst die horizontale Achse und dann die vertikale Achse an.

Räumliche Datentypen können in ein Element eingebettet werden, wie in diesem Beispiel eines Anlageelements gezeigt, das die GeoJSON-Daten enthält.

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

Azure Cosmos DB for NoSQL interpretiert Koordinaten so, wie sie im WGS-84-Referenzsystem dargestellt werden. Weitere Informationen finden Sie unter Koordinatenreferenzsysteme.

LineStrings

LineStrings stellen eine Reihe von zwei oder mehr Punkten im Raum sowie die Liniensegmente dar, die diese verbinden. In Geodaten werden LineStrings häufig zum Darstellen von Straßen oder Flüssen verwendet.

In diesem Beispiel wird eine Linienzeichenfolge verwendet, um eine Linie darzustellen, die zwischen zwei Punkten gezogen wird.

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

Polygone

Ein Polygon ist eine Umgrenzung miteinander verbundener Punkte, die eine geschlossene LineString bilden. Polygone dienen meist zum Darstellen natürlicher Gebilde wie Seen oder geopolitischer Gebilde wie Städte und Staaten.

Punkte innerhalb eines Polygons müssen gegen den Uhrzeigersinn nacheinander angegeben werden. Ein Polygon, das im Uhrzeigersinn angegeben wird, stellt die Umkehrung der darin enthaltenen Region dar.

In diesem Beispiel wird ein Polygon erstellt, indem mehrere Punkte miteinander verbunden werden.

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

Tipp

Die GeoJSON-Spezifikation erfordert, dass für gültige Polygone das letzte angegebene Koordinatenpaar mit dem ersten identisch sein muss, um eine geschlossene Form zu bilden.

MultiPolygons

Bei MultiPolygons handelt es sich um ein Array mit null oder mehr Polygonen. MultiPolygons dürfen sich weder an den Seiten überschneiden noch gemeinsame Bereiche aufweisen. Sie dürfen sich allerdings an einzelnen oder mehreren Punkten berühren.

Hier sehen Sie ein Beispiel für ein 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]
        ]]]
}

Koordinatenreferenzsysteme

Da die Form der Erde unregelmäßig ist, werden Koordinaten räumlicher Geografiedaten in zahlreichen Koordinatenreferenzsystemen (Coordinate Reference System, CRS) abgebildet. Jedes CRS verfügt über seine eigenen Bezugsrahmen und Maßeinheiten. Das „National Grid of Britain“ ist beispielsweise ein Referenzsystem, das sehr genau für Großbritannien ist, außerhalb davon hingegen nicht.

Das am häufigsten verwendete KRS ist derzeit das World Geodetic System WGS 84. GPS-Geräte und viele Kartendienste einschließlich Google Maps- und Bing Maps-APIs verwenden WGS-84. Azure Cosmos DB for NoSQL unterstützt das Indizieren und Abfragen räumlicher Geografiedaten nur mit dem WGS-84-CRS.

Erstellen von Elementen mit räumlichen Daten

Wenn Sie Elemente erstellen, die GeoJSON-Werte enthalten, werden diese automatisch mit einem räumlichen Index indiziert. Diese Standardindizierung erfolgt gemäß der Indizierungsrichtlinie des Containers. Wenn die Standardindizierungsrichtlinie nicht angegeben ist, werden GeoJSON-Daten genau indiziert. Wenn Sie mit einem SDK in einer dynamisch typisierten Sprache wie Python oder Node.js arbeiten, müssen Sie gültige GeoJSON erstellen.

var userProfileitem = {
    "id":"cosmosdb",
    "location":{
        "type":"Point",
        "coordinates":[ -122.12, 47.66 ]
    }
};

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

Wenn Sie die Informationen zu Breiten- und Längengrad nicht haben, aber über die physischen Adressen und Ortsnamen verfügen, können Sie die tatsächlichen Koordinaten mithilfe eines Onlinedienstes nachschlagen. Dienste wie Bing Maps können bei der Suche nach den tatsächlichen Geografiedaten eines bekannten Ortsnamens helfen. Weitere Informationen zur Bing Maps-Geocodierung finden Sie unter Bing Maps REST-Dienste.