Delen via


Georuimtelijke en GeoJSON-locatiegegevens in Azure Cosmos DB for NoSQL

VAN TOEPASSING OP: NoSQL

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

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

Veelvoorkomende georuimtelijke gebruiksvoorbeelden zijn onder andere, maar zijn niet beperkt tot:

  • Geolocatieanalyses, die specifieke marketinginitiatieven op basis van locaties stimuleren.
  • Persoonlijke instellingen op basis van locatie, voor branches zoals detailhandel en gezondheidszorg om de gebruikerservaring te verbeteren.
  • Logistieke verbetering, voor branches zoals transport waarbij optimalisatie essentieel is.
  • Risicoanalyse, voor branches zoals verzekeringen en financiën om andere metagegevens aan te vullen.
  • Situational awareness*, voor waarschuwingen en meldingen op basis van proxmiity.

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 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 for NoSQL ondersteunt twee ruimtelijke gegevenstypen: het geometriegegevenstype en het geografische gegevenstype.

  • Het geometrietype vertegenwoordigt gegevens in een Euclidean (plat) coördinaatsysteem. Dit type is handig voor algemene geometrische taken, zoals meetlijnen, kruisende veelhoeken en meetafstand tussen punten.
  • Het geografietype vertegenwoordigt gegevens in een round-earthcoördinaatsysteem. Dit type is handig voor algemene geografische taken, zoals bepalen of een locatie binnen specifieke grenzen valt en de afstand tussen locaties meet.

Ondersteunde gegevenstypen

Azure Cosmos DB for NoSQL biedt ondersteuning voor 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:

  • Contact
  • LineString
  • Polygoon
  • MultiPolygon

Punten

Een punt geeft één positie in de ruimte aan. In georuimtelijke gegevens vertegenwoordigt een punt de exacte locatie, die een adres kan 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 coördinatenpaar (lengte- en breedtegraad).

Bekijk dit GeoJSON-punt in dit voorbeeld. De lengtegraad is -122.12826822304672 en de breedtegraad is 47.63980239335718.

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

Tip

Voor het geografische gegevenstype geeft geoJSON-specificatie eerst lengtegraad en breedtegraad tweede aan. Net als bij andere toewijzingstoepassingen zijn lengte- en breedtegraad hoeken en weergegeven in termen van graden. Lengtegraadwaarden worden gemeten vanuit de PrimeDian 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 eerst de horizontale as en de tweede verticale as op.

Ruimtelijke gegevenstypen kunnen worden ingesloten in een item, zoals wordt weergegeven in dit voorbeeld van een faciliteititem 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 volgens 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 wordt getekend.

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

Veelhoeken

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

Punten binnen een veelhoek moeten worden opgegeven in rechtsom. Een veelhoek die in rechtsom is opgegeven, vertegenwoordigt de inverse van de regio in het gebied.

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 polygonen het laatste opgegeven coördinaatpaar hetzelfde moet zijn als de eerste, om een gesloten shape te maken.

Meerderepolygonen

Een multipolygon is een matrix van nul of meer veelhoeken. Meerderepolygonen kunnen 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ördinaatreferentiesystemen (CRS). Elke CRS heeft een eigen referentieframe en maateenheden. Het "National Grid of Britain" is bijvoorbeeld een referentiesysteem dat nauwkeurig is voor het Verenigd Koninkrijk, maar niet buiten het.

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

Items maken met ruimtelijke gegevens

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

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

Als u niet beschikt over de informatie over breedtegraad en lengtegraad, maar wel de naam van de fysieke adressen of locatie 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 Maps REST Services voor meer informatie over geocodering in Bing Maps.