Este capítulo apresenta como o MongoDB armazena dados geoespaciais. Para utilizar a funcionalidade de consulta geoespacial do MongoDB, primeiro precisamos entender como armazenar dados geoespaciais.
Os dados geoespaciais consistem principalmente em pontos, linhas e formas geométricas.
Um ponto em um mapa é definido por suas coordenadas de longitude e latitude. Múltiplos pontos formam uma linha e várias linhas podem formar várias formas.
Em aplicações práticas: A localização de uma loja, "Onde estou?", e "Onde fica a escola?" podem ser representadas usando coordenadas. Descrever a extensão de um campus ou de um shopping requer formas geométricas.
Objeto GeoJSON
O MongoDB utiliza objetos GeoJSON para representar informações geoespaciais.
Os tipos comuns de GeoJSON incluem:
- Point - representando um ponto de coordenada
- LineString - representando uma linha
- Polygon - representando um polígono
O formato para armazenar objetos GeoJSON em campos do MongoDB é o seguinte:
<campo>: { type: <tipo geojson>, coordinates: <coordenadas> }
Explicação:
-
- Nome do campo - type - Tipo GeoJSON
- coordinates - Uma matriz de pontos de coordenadas. O formato varia para diferentes tipos de GeoJSON.
Exemplo:
localizacao: {
type: "Point", // tipo de dado geoespacial, neste caso, é um ponto de coordenadas
coordinates: [-73.856077, 40.848447] // longitude, latitude
}
Explicação: O campo de localização armazena dados geoespaciais do tipo ponto de coordenada.
Ponto de Coordenada (Point)
Formato:
{ type: "Point", coordinates: [ longitude, latitude ] }
Exemplo:
{ type: "Point", coordinates: [ 40, 5 ] }
Linha (LineString)
Formato:
{ type: "LineString", coordinates: [ ponto1, ponto2, ...] }
Exemplo:
{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }
Polígono
Pode ser composto por uma ou mais linhas. Formato:
{
type: "Polygon",
coordinates: [
linha1,
linha2,
....
]
}
Nota: As coordenadas de início e fim de cada segmento de linha devem ser iguais para formar uma forma fechada.
Forma Composta por um Único Segmento de Linha
{
type: "Polygon",
coordinates: [
[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] // Pontos de coordenadas do segmento de linha, observe que as primeiras e últimas coordenadas são iguais.
]
}
Forma Composta por Múltiplos Segmentos de Linha
{
type : "Polygon",
coordinates : [
[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ], // Segmento de linha 1
[ [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 2 ] , [ 2 , 2 ] ] // Segmento de linha 2
]
}
Índice Geoespacial
O MongoDB suporta dois tipos de índices geoespaciais para acelerar a consulta de dados GeoJSON.
2dsphere
Este é um tipo de índice de geometria esférica, o que significa que ao calcular a distância entre dois pontos, 2dsphere considera a Terra como uma esfera.
Exemplo de criação de um índice 2dsphere:
db.colecao.createIndex( { localizacao : "2dsphere" } )
Cria um índice para o campo de localização.
2d
2D é um tipo de geometria planar usado para calcular a distância entre dois pontos como se estivessem em um plano. Exemplo de criação de um índice 2D:
db.colecao.createIndex( { localizacao : "2d" } )
Isso cria um índice para o campo de localização.
Tipos de Consulta Geoespacial
As consultas geoespaciais estão todas relacionadas a cálculos geométricos. Abaixo estão os tipos de consulta suportados pelo MongoDB:
- $geoIntersects - Usado para corresponder documentos com a interseção de formas geométricas específicas.
- $geoWithin - Corresponde a documentos contidos dentro de uma área geométrica especificada.
- $near - Normalmente usado para consultar documentos mais próximos de um ponto de coordenada específico.
Nota: Para mais informações sobre consultas geoespaciais, consulte os capítulos seguintes.