Dane lokalizacji geoprzestrzennych i GeoJSON w usłudze Azure Cosmos DB for NoSQL

DOTYCZY: NoSQL

Usługa Azure Cosmos DB for NoSQL ma wbudowaną funkcję geoprzestrzenną do reprezentowania kształtów geometrycznych lub rzeczywistych lokalizacji/wielokątów na mapie.

Dane geoprzestrzenne często obejmują zapytania zbliżeniowe. Na przykład pytanie "znajdź wszystkie lokalizacje sprzedaży detalicznej w pobliżu mojej bieżącej lokalizacji" jest odpowiedzią przy użyciu zapytania zbliżeniowego dla wielu obiektów danych geoprzestrzennych.

Typowe przypadki użycia geoprzestrzennego obejmują, ale nie są ograniczone do:

  • Analiza geolokalizacji, prowadząca konkretne inicjatywy marketingowe oparte na lokalizacjach.
  • Personalizacja oparta na lokalizacji w branżach takich jak handel detaliczny i opieka zdrowotna w celu poprawy środowiska użytkownika.
  • Ulepszenia logistyki w branżach takich jak transport, w których optymalizacja ma kluczowe znaczenie.
  • Analiza ryzyka dla branż, takich jak ubezpieczenie i finanse, w celu uzupełnienia innych metadanych.
  • Świadomość sytuacyjna*, dla alertów i powiadomień opartych na proxmiity.

Wprowadzenie do danych przestrzennych

Dane przestrzenne opisują położenie i kształt obiektów w przestrzeni. W większości aplikacji te punkty i kształty odpowiadają obiektom na ziemi i danych geoprzestrzennych. Dane przestrzenne mogą służyć do reprezentowania lokalizacji osoby, miejsca zainteresowania lub granicy miasta lub jeziora.

Usługa Azure Cosmos DB for NoSQL obsługuje dwa typy danych przestrzennych: typ danych geometrycznych i typ danych geograficznych .

  • Typ geometrii reprezentuje dane w układzie współrzędnych Euclidean (płaski). Ten typ jest przydatny w przypadku typowych zadań geometrycznych, takich jak linie pomiarowe, przecinające się wielokąty i pomiar odległości między punktami.
  • Typ geografii reprezentuje dane w układzie współrzędnych okrężnej ziemi. Ten typ jest przydatny w przypadku typowych zadań geograficznych, takich jak określanie, czy lokalizacja znajduje się w określonych granicach i pomiar odległości między lokalizacjami.

Obsługiwane typy danych

Usługa Azure Cosmos DB for NoSQL obsługuje indeksowanie i wykonywanie zapytań dotyczących danych punktu geoprzestrzennego reprezentowanych przy użyciu specyfikacji GeoJSON. Struktury danych GeoJSON są zawsze prawidłowymi obiektami JSON, dzięki czemu można je przechowywać i wykonywać zapytania przy użyciu usługi Azure Cosmos DB bez wyspecjalizowanych narzędzi lub bibliotek.

Usługa Azure Cosmos DB obsługuje następujące typy danych przestrzennych:

  • Punkt
  • Linestring
  • Wielokąt
  • Multipolygon

Punkty

Punkt oznacza pojedynczą pozycję w przestrzeni. W danych geoprzestrzennych punkt reprezentuje dokładną lokalizację, która może być adresem ulicznym sklepu spożywczego, kiosku, samochodu lub miasta. Punkt jest reprezentowany w formacie GeoJSON (i Azure Cosmos DB for NOSQL) przy użyciu pary współrzędnych (długość geograficzna i szerokość geograficzna).

Rozważmy ten przykładowy punkt GeoJSON. Długość geograficzna to -122.12826822304672 , a szerokość geograficzna to 47.63980239335718.

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

Porada

W przypadku typu danych geograficznych specyfikacja GeoJSON określa długość geograficzną pierwszy i szerokość geograficzną sekundy. Podobnie jak w innych aplikacjach mapowania, długość geograficzna i szerokość geograficzna są kątami i reprezentowane pod względem stopni. Wartości długości geograficznej są mierzone na podstawie stopnia i stopnia, a wartości szerokości geograficznej są mierzone z równika i znajdują się między -180180.0-90.0 stopniami i 90.0 stopniami.

W przypadku typu danych geometrycznych specyfikacja GeoJSON określa najpierw oś poziomą i oś pionową drugą.

Typy danych przestrzennych można osadzać w elemencie, jak pokazano w tym przykładzie elementu obiektu zawierającego dane GeoJSON.

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

Usługa Azure Cosmos DB for NoSQL interpretuje współrzędne reprezentowane dla systemu referencyjnego WGS-84. Aby uzyskać więcej informacji, zobacz współrzędnych systemów referencyjnych.

Linestrings

LineStrings reprezentują serię co najmniej dwóch punktów w przestrzeni i segmenty linii, które je łączą. W danych geoprzestrzennych funkcja LineStrings jest często używana do reprezentowania autostrad lub rzek.

W tym przykładzie ciąg liniowy służy do reprezentowania linii rysowanej między dwoma punktami.

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

Wielokątów

Wielokąt jest granicą połączonych punktów, które tworzą zamknięty ciąg LineString. Wielokąty są często używane do reprezentowania naturalnych formacji, takich jak jeziora lub jurysdykcje polityczne, takie jak miasta i państwa.

Punkty w obrębie wielokąta muszą być określone w kolejności odwrotnej. Wielokąt określony w kolejności wskazówek zegara reprezentuje odwrotność regionu w nim.

W tym przykładzie jest tworzony wielokąt przez połączenie wielu punktów.

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

Porada

Specyfikacja GeoJSON wymaga, aby w przypadku prawidłowych wielokątów podana ostatnia para współrzędnych powinna być taka sama jak pierwsza, aby utworzyć zamknięty kształt.

MultiPolygons

MultiPolygon to tablica zera lub większej liczby wielokątów. Wielopolygony nie mogą nakładać się na boki ani nie mają żadnego wspólnego obszaru. Mogą dotykać co najmniej jednego punktu.

Oto przykład multipolygonu.

{
    "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]
        ]]]
}

Systemy referencyjne współrzędnych

Ponieważ kształt ziemi jest nieregularny, współrzędne geograficzne danych geoprzestrzennych są reprezentowane w wielu układach odniesienia współrzędnych (CRS). Każdy crS ma własne ramy odniesienia i jednostek miary. Na przykład "National Grid of Britain" to system referencyjny, który jest dokładny dla Zjednoczonego Królestwa, ale nie poza nim.

Najpopularniejszym systemem CRS używanym obecnie jest World Geodetic System WGS-84. Urządzenia GPS i wiele usług mapowania, w tym Mapy Google i interfejsy API Mapy Bing korzystają z usługi WGS-84. Usługa Azure Cosmos DB for NoSQL obsługuje indeksowanie i wykonywanie zapytań dotyczących danych geoprzestrzennych geografii tylko przy użyciu usługi WGS-84 CRS.

Tworzenie elementów za pomocą danych przestrzennych

Podczas tworzenia elementów zawierających wartości GeoJSON są one automatycznie indeksowane za pomocą indeksu przestrzennego. To domyślne indeksowanie odbywa się zgodnie z zasadami indeksowania kontenera. Domyślne zasady indeksowania, jeśli nie zostaną określone, dokładnie indeksują dane GeoJSON. Jeśli pracujesz z zestawem SDK w dynamicznie typowanym języku, na przykład Python lub Node.js, musisz utworzyć prawidłowy kod GeoJSON.

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

Jeśli nie masz informacji o szerokości geograficznej i długości geograficznej, ale masz fizyczne adresy lub nazwę lokalizacji, wyszukaj rzeczywiste współrzędne przy użyciu usługi online. Usługi takie jak Mapy Bing mogą pomóc w znalezieniu rzeczywistych danych geograficznych ze znanej nazwy lokalizacji. Aby uzyskać więcej informacji na temat Mapy Bing geokodowania, zobacz Mapy Bing usługi REST.