Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Consulte um 2dsphere índice

Nesta página

  • Objeto GeoJSON delimitados por um polígono
  • Interseções de objetos GeoJSON
  • Proximidade de um ponto GeoJSON
  • ponto dentro de um círculo definido em uma esfera

As seções seguintes descrevem as consultas suportadas pelo índice 2dsphere .

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

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

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 .

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

Voltar

2dsphere