Share via


Georuimtelijke en GeoJSON-locatiegegevens in Azure Cosmos DB for NoSQL

VAN TOEPASSING OP: NoSQL

Azure Cosmos DB voor NoSQL heeft ingebouwde georuimtelijke functionaliteit om geometrische vormen of werkelijke locaties/veelhoeken op een kaart weer te geven.

Georuimtelijke gegevens bevatten vaak nabijheidsquery's. De vraag 'Alle winkellocaties in de buurt van mijn huidige locatie zoeken' wordt bijvoorbeeld beantwoord met behulp van een nabijheidsquery voor meerdere georuimtelijke gegevensobjecten.

Veelvoorkomende georuimtelijke gebruiksvoorbeelden zijn, maar zijn niet beperkt tot:

  • Geolocatieanalyse, het stimuleren van specifieke op locatie gebaseerde marketinginitiatieven.
  • Locatiegebaseerde personalisatie, voor sectoren zoals detailhandel en gezondheidszorg om de gebruikerservaring te verbeteren.
  • Logistieke verbetering, voor sectoren zoals transport waar optimalisatie essentieel is.
  • Risicoanalyse, voor branches zoals verzekeringen en financiën om andere metagegevens aan te vullen.
  • Situational awareness*, voor op proxmiity gebaseerde waarschuwingen en meldingen.

Inleiding tot ruimtelijke gegevens

Ruimtelijke gegevens beschrijven de positie en vorm van objecten in de ruimte. In de meeste toepassingen komen deze punten en vormen overeen met objecten op de aarde en georuimtelijke gegevens. Ruimtelijke gegevens kunnen worden gebruikt om de locatie van een persoon, een interessante plaats of de grens van een stad of een meer weer te geven.

Azure Cosmos DB voor NoSQL ondersteunt twee typen ruimtelijke gegevens: het gegevenstype geometrie en het geografische gegevenstype.

  • Het geometrietype vertegenwoordigt gegevens in een euclidisch (plat) coördinatensysteem. Dit type is handig voor algemene geometrische taken, zoals het meten van lijnen, het snijden van veelhoeken en het meten van de afstand tussen punten.
  • Het geografietype vertegenwoordigt gegevens in een round-earth-coördinatensysteem. Dit type is handig voor algemene geografische taken, zoals het bepalen of een locatie zich binnen specifieke grenzen bevindt en het meten van de afstand tussen locaties.

Ondersteunde gegevenstypen

Azure Cosmos DB voor NoSQL ondersteunt het indexeren en opvragen van georuimtelijke puntgegevens die worden weergegeven met behulp van de GeoJSON-specificatie. GeoJSON-gegevensstructuren zijn altijd geldige JSON-objecten, zodat ze kunnen worden opgeslagen en opgevraagd met behulp van Azure Cosmos DB zonder gespecialiseerde hulpprogramma's of bibliotheken.

Azure Cosmos DB ondersteunt de volgende typen ruimtelijke gegevens:

  • Punt
  • LineString
  • Polygoon
  • MultiPolygon

Punten

Een punt geeft één positie in de ruimte aan. In georuimtelijke gegevens vertegenwoordigt een punt de exacte locatie. Dit kan een adres zijn van een supermarkt, een kiosk, een auto of een stad. Een punt wordt weergegeven in GeoJSON (en Azure Cosmos DB voor NOSQL) met behulp van het bijbehorende coördinatenpaar (lengtegraad en breedtegraad).

Bekijk dit geoJSON-voorbeeldpunt. De lengtegraad is -122.12826822304672 en de breedtegraad is 47.63980239335718.

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

Tip

Voor het gegevenstype geografie geeft GeoJSON-specificatie eerst lengtegraad en breedtegraad tweede op. Net als bij andere toewijzingstoepassingen zijn lengtegraad en breedtegraad hoeken en worden ze weergegeven in termen van graden. Lengtegraadwaarden worden gemeten vanaf de prime meridian en liggen tussen -180 graden en 180.0 graden, en breedtegraadwaarden worden gemeten vanaf de evenaar en liggen tussen -90.0 graden en 90.0 graden.

Voor het gegevenstype geometrie geeft GeoJSON-specificatie de horizontale as eerst en de verticale as op de tweede.

Ruimtelijke gegevenstypen kunnen worden ingesloten in een item, zoals wordt weergegeven in dit voorbeeld van een faciliteitsitem dat de GeoJSON-gegevens bevat.

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

Azure Cosmos DB for NoSQL interpreteert coördinaten zoals weergegeven in het WGS-84-referentiesysteem. Zie Referentiesystemen coördineren voor meer informatie.

LineStrings

LineStrings vertegenwoordigt een reeks van twee of meer punten in de ruimte en de lijnsegmenten die deze met elkaar verbinden. In georuimtelijke gegevens worden LineStrings vaak gebruikt om snelwegen of rivieren weer te geven.

In dit voorbeeld wordt een lijntekenreeks gebruikt om een lijn weer te geven die tussen twee punten is getekend.

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

Veelhoeken

Een veelhoek is een grens van verbonden punten die een gesloten lijntekenreeks vormen. Veelhoeken worden vaak gebruikt om natuurlijke formaties zoals meren of politieke jurisdicties zoals steden en staten te vertegenwoordigen.

Punten binnen een veelhoek moeten worden opgegeven in volgorde met de klok mee. Een veelhoek die met de klok mee is opgegeven, vertegenwoordigt de inverse van de regio daarin.

In dit voorbeeld wordt een veelhoek gemaakt door meerdere punten te verbinden.

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

Tip

De GeoJSON-specificatie vereist dat voor geldige veelhoeken het laatst opgegeven coördinatenpaar hetzelfde moet zijn als het eerste, om een gesloten vorm te maken.

Meerderepolygonen

Een multipolygon is een matrix van nul of meer veelhoeken. MultiPolygons mogen geen zijden overlappen of een gemeenschappelijk gebied hebben. Ze kunnen op een of meer punten aanraken.

Hier volgt een voorbeeld van een 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]
        ]]]
}

Referentiesystemen coördineren

Omdat de vorm van de aarde onregelmatig is, worden coördinaten van geografische georuimtelijke gegevens weergegeven in veel coördinatenreferentiesystemen (CRS). Elke CRS heeft zijn eigen referentieframes en maateenheden. Het "National Grid of Britain" is bijvoorbeeld een referentiesysteem dat nauwkeurig is voor het Verenigd Koninkrijk, maar niet daarbuiten.

De populairste CRS die tegenwoordig in gebruik is, is het World Geodetic System WGS-84. GPS-apparaten en veel kaartservices, waaronder Google Maps en Bing Kaarten API's, maken gebruik van WGS-84. Azure Cosmos DB voor NoSQL biedt alleen ondersteuning voor het indexeren en opvragen van geografische gegevens met behulp van de WGS-84 CRS.

Items maken met ruimtelijke gegevens

Wanneer u items maakt die GeoJSON-waarden bevatten, worden deze automatisch geïndexeerd met een ruimtelijke index. Deze standaardindexering vindt plaats in overeenstemming met het indexeringsbeleid van de container. Als het standaardindexeringsbeleid niet is opgegeven, worden GeoJSON-gegevens nauwkeurig geïndexeerd. Als u met een SDK werkt in een dynamisch getypte taal zoals Python of Node.js, moet u een geldige GeoJSON maken.

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
});

Als u niet over de breedte- en lengtegraadgegevens beschikt, maar wel de fysieke adressen of locatienaam hebt, zoekt u de werkelijke coördinaten op met behulp van een onlineservice. Services zoals Bing Kaarten kunnen helpen bij het vinden van de werkelijke geografische gegevens van een bekende locatienaam. Zie Bing Kaarten REST Services voor meer informatie over Bing Kaarten geocodering.