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.