Compartilhar via


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

APLICA-SE A: NoSQL

O Azure Cosmos DB for 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 "localizar todos os locais de varejo próximos à minha localização atual" é respondida usando uma consulta de proximidade em vários objetos de dados geoespaciais.

Os casos de uso geoespaciais comuns incluem, mas não se limitam a:

  • Análise de geolocalização, conduzindo iniciativas específicas de marketing com base 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 de logística, para setores como o de transporte em que a otimização é crítica.
  • Análise de risco, para setores como o de seguros e finanças para complementar outros metadados.
  • Reconhecimento de situação*, para alertas e notificações baseados em proximidade.

Introdução aos dados espaciais

Os dados espaciais descrevem a posição e a forma dos objetos no espaço. Na maioria dos aplicativos, esses pontos e formas correspondem aos objetos na Terra e dados geoespaciais. Os dados espaciais podem ser usados para representar a localização de uma pessoa, um lugar de interesse ou a divisa de uma cidade ou de um lago.

O Azure Cosmos DB for NoSQL dá suporte a dois tipos de dados espaciais: o tipo de dados geometria e o tipo de dados geografia.

  • O tipo geometria representa dados em um sistema de coordenadas euclidiano (plano). Esse tipo é útil para tarefas geométricas comuns, como medir linhas, cruzar polígonos e medir a distância entre pontos.
  • O tipo geografia representa dados em um sistema de coordenadas esféricas. 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 os locais.

Tipos de dados com suporte

O Azure Cosmos DB for NoSQL dá suporte à indexação e à consulta de dados de ponto geoespaciais representados usando a especificação GeoJSON. As estruturas de dados GeoJSON são sempre objetos JSON válidos e, portanto, podem ser armazenadas e consultadas usando o Azure Cosmos DB sem nenhuma ferramenta ou biblioteca especializada.

O Azure Cosmos DB é compatível com os seguintes tipos de dados espaciais:

  • Ponto
  • LineString
  • Polygon
  • MultiPolygon

Pontos

Um Ponto denota uma única posição no espaço. Em dados geoespaciais, um Ponto representa o local exato, que poderia ser um endereço de um supermercado, de um quiosque, de um automóvel ou de uma cidade. Um ponto é representado no GeoJSON (e no Azure Cosmos DB for 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
  ]
}

Dica

Para o tipo de dados geografia, a especificação GeoJSON especifica a longitude primeiro e a latitude depois. Assim como acontece em outros aplicativos de mapeamento, a longitude e a latitude são ângulos e são representados em 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 geometria, a especificação GeoJSON especifica o eixo horizontal primeiro e o eixo vertical depois.

Tipos de dados espaciais podem ser inseridos em um 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 for NoSQL interpreta coordenadas como representadas de acordo com o sistema de referência WGS-84. Para obter mais informações, confira sistemas de coordenadas de referência.

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, as LineStrings são comumente usadas para representar vias expressas 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 formam uma LineString fechada. Os polígonos são comumente usados para representar formações naturais, como lagos ou jurisdições políticas, como cidades e estados.

Os pontos em um Polígono devem ser especificados no sentido anti-horário. Um Polígono especificado no sentido horário 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 ]
    ] ]
}

Dica

A especificação GeoJSON exige que, para Polígonos válidos, o último par de coordenadas fornecido seja igual ao primeiro para criar uma forma fechada.

Multipolígonos

Um Multipolígono é uma matriz de zero ou mais polígonos. Os MultiPolygons não podem se sobrepor a lados ou ter qualquer área comum. Eles 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 de coordenadas

Como 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 CRS tem 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 para fora dele.

O CRS mais popular em uso hoje é o Sistema Geodésico Mundial WGS-84. Os dispositivos GPS e vários serviços de mapeamento, incluindo as APIs do Google Maps e do Bing Mapas usam WGS-84. O Azure Cosmos DB for NoSQL dá suporte à indexação e à consulta de dados geoespaciais geográficos usando apenas o CRS WGS-84.

Criar itens com dados espaciais

Quando você cria itens que contêm valores GeoJSON, eles são indexados automaticamente 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 especificada, indexará com precisão os dados GeoJSON. Se você estiver trabalhando com um SDK em uma linguagem dinamicamente tipada, como Python ou Node.js, deverá criar um 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 Mapas podem ajudar a localizar os dados de geografia reais de um nome de local conhecido. Para obter mais informações sobre geocodificação do Bing Mapas, confira Serviços REST do Bing Mapas.