Consulte um 2dsphere
índice
Nesta página
As seções seguintes descrevem as consultas suportadas pelo índice 2dsphere
.
Objeto GeoJSON delimitados por um polígono
O operador $geoWithin
consulta os dados de localização encontrados dentro de um polígono GeoJSON. Seus dados de localização devem ser armazenados no formato GeoJSON. Use a seguinte sintaxe:
db.<collection>.find( { <location field> : { $geoWithin : { $geometry : { type : "Polygon" , coordinates : [ <coordinates> ] } } } } )
O exemplo seguinte seleciona todos os pontos e formas que existem inteiramente dentro de um polígono GeoJSON:
db.places.find( { loc : { $geoWithin : { $geometry : { type : "Polygon" , coordinates : [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] } } } } )
Interseções de objetos GeoJSON
O operador $geoIntersects
faz query nos locais que cruzam um objeto GeoJSON especificado. Um local cruza o objeto se a interseção não estiver vazia. Isso inclui documentos que têm uma borda compartilhada.
O operador $geoIntersects
utiliza a seguinte sintaxe:
db.<collection>.find( { <location field> : { $geoIntersects : { $geometry : { type : "<GeoJSON object type>" , coordinates : [ <coordinates> ] } } } } )
O exemplo a seguir usa $geoIntersects
para selecionar todos os pontos e formas indexados que interseccionam com o polígono definido pela array coordinates
.
db.places.find( { loc : { $geoIntersects : { $geometry : { type : "Polygon" , coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] } } } } )
Proximidade de um ponto GeoJSON
As queries de proximidade retornam os pontos mais próximos do ponto definido e classificam os resultados por distância. Uma query de proximidade em dados GeoJSON requer um índice 2dsphere
.
Para fazer uma query para proximidade de um ponto GeoJSON, utilize o operador $near
. A distância está em metros.
O $near
utiliza a seguinte sintaxe:
db.<collection>.find( { <location field> : { $near : { $geometry : { type : "Point" , coordinates : [ <longitude> , <latitude> ] } , $maxDistance : <distance in meters> } } } )
Para obter exemplos, consulte $near
.
Consulte também o operador $nearSphere
e o estágio do aggregation pipeline $geoNear
.
ponto dentro de um círculo definido em uma esfera
Para selecionar todas as coordenadas de grade em uma "limite esférica" em uma esfera, use $geoWithin
com o operador $centerSphere
. Especifique uma matriz que contenha:
As coordenadas de grade do ponto central do círculo
O raio do círculo em radianos. Para calcular radianos, consulte Calcular distância usando geometria esférica.
Use a seguinte sintaxe:
db.<collection>.find( { <location field> : { $geoWithin : { $centerSphere : [ [ <x>, <y> ] , <radius> ] } } } )
O exemplo a seguir faz query de coordenadas de grade e retorna todos os documento em um raio de 10 milhas da longitude 88 W
e da latitude 30 N
. O exemplo converte a distância, 10 milhas, para radianos dividindo pelo raio equatorial aproximado da Terra, 3963,2 milhas:
db.places.find( { loc : { $geoWithin : { $centerSphere : [ [ -88 , 30 ] , 10 / 3963.2 ] } } } )