Dados de localização Geoespacial e GeoJSON no Azure Cosmos DB para NoSQL

APLICA-SE A: NoSQL

O Azure Cosmos DB para NoSQL tem funcionalidades geoespaciais incorporadas para representar formas geométricas ou localizações/polígonos reais num mapa.

Os dados geoespaciais envolvem frequentemente consultas de proximidade. Por exemplo, a pergunta "localizar todas as localizações de revenda perto da minha localização atual" é respondida através de uma consulta de proximidade sobre vários objetos de dados geoespaciais.

Os casos comuns de utilização geoespacial incluem, mas não se limitam a:

  • Análise de geolocalização, impulsionando iniciativas de marketing específicas baseadas na localização.
  • Personalização baseada na localização, para indústrias como o retalho e os cuidados de saúde, para melhorar a experiência dos utilizadores.
  • Melhoria logística, para indústrias como o transporte em que a otimização é fundamental.
  • Análise de Riscos, para indústrias como seguros e finanças para complementar outros metadados.
  • Deteção de situações*, para alertas e notificações baseados em proxmiidade.

Introdução aos dados espaciais

Os dados espaciais descrevem a posição e a forma dos objetos no espaço. Na maioria das aplicações, estes pontos e formas correspondem a objetos na terra e dados geoespaciais. Os dados espaciais podem ser utilizados para representar a localização de uma pessoa, um local de interesse ou o limite de uma cidade ou um lago.

O Azure Cosmos DB para NoSQL suporta dois tipos de dados espaciais: o tipo de dados de geometria e o tipo de dados geográficos .

  • O tipo de geometria representa dados num sistema de coordenadas Euclidean (plano). Este tipo é útil para tarefas geométricas comuns, como medir linhas, interseccionar polígonos e medir a distância entre pontos.
  • O tipo de geografia representa dados num sistema de coordenadas de terra redonda. Este tipo é útil para tarefas geográficas comuns, como determinar se uma localização está dentro de limites específicos e medir a distância entre localizações.

Tipos de dados suportados

O Azure Cosmos DB para NoSQL suporta a indexação e consulta de dados de pontos geoespaciais representados com a especificação GeoJSON. As estruturas de dados GeoJSON são sempre objetos JSON válidos, pelo que podem ser armazenadas e consultadas com o Azure Cosmos DB sem quaisquer ferramentas ou bibliotecas especializadas.

O Azure Cosmos DB suporta os seguintes tipos de dados espaciais:

  • Ponto
  • LineString
  • Polígono
  • MultiPolygon

Pontos

Um Ponto indica uma única posição no espaço. Em dados geoespaciais, um Ponto representa a localização exata, que pode ser um endereço de rua de uma mercearia, um quiosque, um automóvel ou uma cidade. Um ponto é representado em GeoJSON (e Azure Cosmos DB para NOSQL) com o respetivo par de coordenadas (longitude e latitude).

Considere este exemplo de ponto GeoJSON. A longitude é -122.12826822304672 e a latitude é 47.63980239335718.

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

Dica

Para o tipo de dados geográfico , a especificação GeoJSON especifica a longitude primeiro e a latitude em segundo. Tal como noutras aplicações de mapeamento, a longitude e a latitude são ângulos e representadas em termos de graus. Os valores de longitude são medidos a partir do Meridiano Primário e estão entre -180 graus e 180.0 graus, e os valores de latitude são medidos a partir do equador e estão entre -90.0 graus e 90.0 graus.

Para o tipo de dados de geometria , a especificação GeoJSON especifica primeiro o eixo horizontal e o eixo vertical segundo.

Os tipos de dados espaciais podem ser incorporados num item, conforme mostrado neste exemplo de um item de instalação que inclui os dados GeoJSON.

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

O Azure Cosmos DB para NoSQL interpreta as coordenadas como representadas pelo sistema de referência WGS-84. Para obter mais informações, veja coordenar sistemas de referência.

LineStrings

As LineStrings representam uma série de dois ou mais pontos no espaço e os segmentos de linha que os ligam. Nos dados geoespaciais, as LineStrings são normalmente utilizadas para representar autoestradas ou rios.

Neste exemplo, é utilizada uma cadeia de linha para representar uma linha desenhada entre dois pontos.

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

Polígonos

Um Polygon é um limite de pontos ligados que forma uma LineString fechada. Os polígonos são normalmente utilizados para representar formações naturais como lagos ou jurisdições políticas como cidades e estados.

Os pontos dentro de um Polígono têm de ser especificados por ordem contra-relógio. Um Polígono especificado na ordem dos ponteiros do relógio representa o inverso da região dentro da mesma.

Neste exemplo, é criado um polígono ao ligar vários pontos.

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

Dica

A especificação GeoJSON requer que, para Polígonos válidos, o último par de coordenadas fornecido deve ser o mesmo que o primeiro, para criar uma forma fechada.

MultiPolygons

Um MultiPolygon é uma matriz de zero ou mais Polígonos. Os MultiPolygons não podem sobrepor-se a lados ou ter qualquer área comum. Podem tocar num ou mais pontos.

Eis um exemplo de um 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]
        ]]]
}

Coordenar sistemas de referência

Uma vez que a forma da terra é irregular, as coordenadas dos dados geoespaciais geográficos são representadas em muitos sistemas de referência coordenadas (CRS). Cada CRS tem os seus próprios fotogramas de referência e unidades de medição. Por exemplo, a "Rede Nacional da Grã-Bretanha" é um sistema de referência exato para o Reino Unido, mas não fora dele.

O CRS mais popular atualmente em utilização é o World Geodetic System WGS-84. Os dispositivos GPS e muitos serviços de mapeamento, incluindo o Google Maps e Mapas Bing APIs, utilizam o WGS-84. O Azure Cosmos DB para NoSQL suporta a indexação e a consulta de dados geoespaciais geográficos com o WGS-84 CRS apenas.

Criar itens com dados espaciais

Quando cria itens que contêm valores GeoJSON, estes são indexados automaticamente com um índice espacial. Esta indexação predefinida ocorre de acordo com a política de indexação do contentor. A política de indexação predefinida, se não for especificada, indexará com precisão dados GeoJSON. Se estiver a trabalhar com um SDK numa linguagem de tipo dinâmico, como Python ou Node.js, tem de criar Um GeoJSON válido.

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

Se não tiver as informações de latitude e longitude, mas tiver os endereços físicos ou o nome da localização, procure as coordenadas reais com um serviço online. Serviços como Mapas Bing podem ajudar a encontrar os dados geográficos reais a partir de um nome de localização conhecido. Para obter mais informações sobre Mapas Bing geocodificação, veja Mapas Bing SERVIÇOS REST.