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

Query para localizações dentro de um círculo em uma esfera

Nesta página

  • Sobre esta tarefa
  • Antes de começar
  • Procedimento
  • Saiba mais

Você pode consultar dados de localização dentro de um círculo na superfície de uma esfera. Use essas queries para retornar dados dentro de um limite esférico de .

Para executar query de dados de localização dentro de um círculo em uma esfera, utilize $geoWithin com o operador $centerSphere . No operador $centerSphere , especifique as coordenadas e o raio do círculo para a query:

db.<collection>.find( {
<location field> : {
$geoWithin : {
$centerSphere: [
[ <longitude>, <latitude> ],
<radius>
]
}
}
} )
  • Quando você especificar coordenadas de longitude e latitude, liste primeiro a longitude e depois a latitude.

    • Os valores de longitude válidos estão entre -180 e 180, ambos inclusos.

    • Os valores de latitude válidos estão entre -90 e 90, ambos inclusos.

  • No operador $centerSphere , especifique o raio do círculo em radianos. Para converter outras unidades de e para radianos, consulte Converter distância para radianos para operadores esféricos.

    • Este exemplo calcula a distância em quilômetros. Para converter quilômetros para radianos, divida o valor do quilômetro por 6378.1.

  • $geoWithin não exige um índice geoespacial. No entanto, um índice geoespacial melhora o desempenho da query. Somente o índice geoespacial 2dsphere suporta $geoWithin. Para mais informações, consulte Criar um índice 2dsphere.

Crie uma coleção places que contenha estes documento:

db.places.insertMany( [
{
loc: { type: "Point", coordinates: [ -73.97, 40.77 ] },
name: "Central Park",
category : "Park"
},
{
loc: { type: "Point", coordinates: [ -73.88, 40.78 ] },
name: "La Guardia Airport",
category: "Airport"
},
{
loc: { type: "Point", coordinates: [ -1.83, 51.18 ] },
name: "Stonehenge",
category : "Monument"
}
] )

Para fazer query da collection, use $geoWithin com o operador $centerSphere :

db.places.find( {
loc: {
$geoWithin: {
$centerSphere: [
[ -1.76, 51.16 ],
10 / 6378.1
]
}
}
} )

A query retorna documentos onde o campo loc está dentro de um raio de 10 quilômetros de um ponto na longitude -1.76, latitude 51.16.

Saída:

[
{
_id: ObjectId("63fd205e4a08b5e248c03e32"),
loc: { type: 'Point', coordinates: [ -1.83, 51.18 ] },
name: 'Stonehenge',
category: 'Monument'
}
]

Voltar

Interseções

Próximo

Versões