Partilhar via


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

APLICA-SE A: NoSQL

O Azure Cosmos DB para NoSQL tem funcionalidade geoespacial interna para representar formas geométricas ou locais/polígonos reais em um mapa.

Os dados geoespaciais geralmente envolvem consultas de proximidade. Por exemplo, a pergunta "encontrar todos os locais de varejo perto da minha localização atual" é respondida usando uma consulta de proximidade sobre vários objetos de dados geoespaciais.

Os casos de uso geoespacial comuns incluem, mas não estão limitados a:

  • Análise de geolocalização, impulsionando iniciativas específicas de marketing baseadas em localização.
  • Personalização baseada em localização, para setores como varejo e saúde para melhorar a experiência do usuário.
  • Aprimoramento da logística, para setores como transporte, onde a otimização é crítica.
  • Análise de Risco, para setores como seguros e finanças para complementar outros metadados.
  • Conhecimento situacional*, para alertas e notificações baseados na proximidade.

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, esses pontos e formas correspondem a objetos na Terra e dados geoespaciais. Os dados espaciais podem ser usados 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 dá suporte a dois tipos de dados espaciais: o tipo de dados de geometria e o tipo de dados de geografia .

  • O tipo de geometria representa dados em um sistema de coordenadas euclidiano (plano). Este tipo é útil para tarefas geométricas comuns, como medir linhas, cruzar polígonos e medir a distância entre pontos.
  • O tipo de geografia representa dados em um sistema de coordenadas de Terra redonda. Esse tipo é útil para tarefas geográficas comuns, como determinar se um local está dentro de limites específicos e medir a distância entre locais.

Tipos de dados suportados:

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

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

  • Ponto
  • LineString
  • Polígono
  • Multipolígono

Points

Um ponto denota uma única posição no espaço. Em dados geoespaciais, um Ponto representa a localização exata, que pode ser um endereço de uma mercearia, um quiosque, um automóvel ou uma cidade. Um ponto é representado no GeoJSON (e no Azure Cosmos DB para NOSQL) usando seu 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
  ]
}

Gorjeta

Para o tipo de dados geográficos, a especificação GeoJSON especifica longitude primeiro e latitude segundo. Como em outras aplicações de mapeamento, longitude e latitude são ângulos e representados em termos de graus. Os valores de longitude são medidos a partir do Meridiano Principal 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 o eixo horizontal primeiro e o eixo vertical segundo.

Os tipos de dados espaciais podem ser incorporados em um item, conforme mostrado neste exemplo de um item de recurso 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 conforme representadas pelo sistema de referência WGS-84. Para obter mais informações, consulte sistemas de referência de coordenadas.

LineStrings

LineStrings representam uma série de dois ou mais pontos no espaço e os segmentos de linha que os conectam. Em dados geoespaciais, LineStrings são comumente usados para representar rodovias ou rios.

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

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

Polígonos

Um Polígono é um limite de pontos conectados que forma uma LineString fechada. Polígonos são comumente usados para representar formações naturais como lagos ou jurisdições políticas como cidades e estados.

Os pontos dentro de um Polígono devem ser especificados em ordem anti-horário. Um Polígono especificado em ordem horária representa o inverso da região dentro dele.

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

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

Gorjeta

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

Multipolígonos

Um MultiPolygon é uma matriz de zero ou mais Polígonos. Os multipolígonos não podem sobrepor lados ou ter qualquer área comum. Podem tocar em um ou mais pontos.

Aqui está 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]
        ]]]
}

Sistemas de referência coordenados

Uma vez que a forma da Terra é irregular, as coordenadas dos dados geoespaciais geográficos são representadas em muitos sistemas de referência de coordenadas (CRS). Cada SIR tem os seus próprios quadros de referência e unidades de medida. Por exemplo, o "National Grid of Britain" é um sistema de referência é preciso para o Reino Unido, mas não fora dele.

O CRS mais popular em uso atualmente é o World Geodetic System WGS-84. Dispositivos GPS e muitos serviços de mapeamento, incluindo APIs do Google Maps e do Bing Maps, usam o WGS-84. O Azure Cosmos DB para NoSQL dá suporte à indexação e consulta de dados geoespaciais geográficos usando apenas o WGS-84 CRS.

Criação de itens com dados espaciais

Quando você cria itens que contêm valores GeoJSON, eles são automaticamente indexados com um índice espacial. Essa indexação padrão ocorre de acordo com a política de indexação do contêiner. A política de indexação padrão, se não for especificada, indexará com precisão os dados GeoJSON. Se você estiver trabalhando com um SDK em uma linguagem digitada dinamicamente como Python ou Node.js, deverá criar GeoJSON válido.

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

Se você não tiver as informações de latitude e longitude, mas tiver os endereços físicos ou o nome do local, procure as coordenadas reais usando um serviço online. Serviços como o Bing Maps podem ajudar a encontrar os dados geográficos reais de um nome de local conhecido. Para obter mais informações sobre a geocodificação do Bing Maps, consulte Serviços REST do Bing Maps.