Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Menu Docs
Página inicial do Docs
/ /

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

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.

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

Nesta página