Udostępnij za pośrednictwem


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 handlowe w pobliżu mojej bieżącej lokalizacji" odpowiada za pomocą zapytania zbliżeniowego w wielu obiektach danych geoprzestrzennych.

Typowe przypadki użycia geoprzestrzennego obejmują, ale nie są ograniczone do następujących:

  • Analiza geolokalizacji, kierująca konkretnymi inicjatywami marketingu opartymi na lokalizacjach.
  • Personalizacja oparta na lokalizacji dla branż, takich jak handel detaliczny i opieka zdrowotna, aby poprawić środowisko użytkownika.
  • Ulepszenia logistyki dla branż takich jak transport, w których optymalizacja ma kluczowe znaczenie.
  • Analiza ryzyka dla branż, takich jak ubezpieczenie i finanse, aby uzupełnić inne metadane.
  • Świadomość sytuacyjna*, dla alertów i powiadomień opartych na proksmiity.

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 euklidesowych (płaskich). Ten typ jest przydatny w przypadku typowych zadań geometrycznych, takich jak linie pomiaru, przecinanie wielokątów i pomiar odległości między punktami.
  • Typ geografii reprezentuje dane w układzie współrzędnych okrągłych ziemi. Ten typ jest przydatny w przypadku typowych zadań geograficznych, takich jak określanie, czy lokalizacja znajduje się w określonych granicach i mierzenie 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 punktów geoprzestrzennych reprezentowanych przy użyciu specyfikacji GeoJSON. Struktury danych GeoJSON są zawsze prawidłowymi obiektami JSON, więc można je przechowywać i wykonywać zapytania za pomocą usługi Azure Cosmos DB bez żadnych wyspecjalizowanych narzędzi ani bibliotek.

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

  • Osoba
  • LineString
  • Polygon
  • MultiPolygon

Punkty

Punkt określa pojedynczą pozycję w przestrzeni. W danych geoprzestrzennych punkt reprezentuje dokładną lokalizację, która może być adresem ulicy sklepu spożywczego, kiosku, samochodu lub miasta. Punkt jest reprezentowany w formacie GeoJSON (i usłudze Azure Cosmos DB dla 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
  ]
}

Napiwek

Dla typu danych geografii 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 -180180.0 i stopnia, a wartości szerokości geograficznej są mierzone z równika i znajdują się między -90.0 stopniami i 90.0 stopniami.

Dla typu danych geometrycznych specyfikacja GeoJSON określa najpierw oś poziomą i oś pionową sekundę.

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 w systemie referencyjnym usługi WGS-84. Aby uzyskać więcej informacji, zobacz współrzędnych systemów referencyjnych.

Ciągi liniowe

LineStrings reprezentują serię co najmniej dwóch punktów w przestrzeni i segmentów linii łączących je. W danych geoprzestrzennych ciągi LineString są często używane do reprezentowania autostrad lub rzek.

W tym przykładzie ciąg wiersza jest używany 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 tworzy 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 licznika zegara. Wielokąt określony w kolejności wskazówek zegara reprezentuje odwrotność regionu w nim.

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

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

Napiwek

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

MultiPolygony

MultiPolygon jest tablicą zera lub większej liczby wielokątów. MultiPolygony 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]
        ]]]
}

Współrzędne systemy referencyjne

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

Obecnie najpopularniejszym systemem CRS jest World Geodetic System WGS-84. Urządzenia GPS i wiele usług mapowania, w tym Google Maps i interfejsów API map Bing, używają WGS-84. Usługa Azure Cosmos DB for NoSQL obsługuje indeksowanie i wykonywanie zapytań dotyczących danych geoprzestrzennych geografii przy użyciu tylko usługi WGS-84 CRS.

Tworzenie elementów z danymi przestrzennymi

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 wpisanym 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 i długości geograficznej, ale masz adresy fizyczne lub nazwę lokalizacji, poszukaj rzeczywistych współrzędnych 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 geokodowania map Bing, zobacz Usługi REST map Bing.