Menu Docs
Página inicial do Docs
/ /

Query para localizações próximas a um polígono

Você pode fazer uma query de dados de localização dentro do perímetro de um polígono especificado.

Para obter dados de localização dentro de um território, use o operador $geoWithin e especifique as coordenadas dos vértices do polígono:

db.<collection>.find( {
<location field> : {
$geoWithin : {
$geometry : {
type : "Polygon",
coordinates : [ <coordinates> ]
}
}
}
} )
  • Os valores no campo que você query com o operador $geoWithin devem estar no formato GeoJSON.

  • 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.

  • Quando você especifica o polígono coordinates, a primeira e a última coordenadas na array devem ser iguais. Isso fecha os limites do polígono.

  • $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"
}
] )

Use $geoWithin para fazer a query da collection. A seguinte query do $geoWithin especifica um polígono com quatro vér acessos (um retângulo) e retorna pontos dentro deste polígono:

db.places.find( {
loc: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [ [
[ -73.95, 40.80 ],
[ -73.94, 40.79 ],
[ -73.97, 40.76 ],
[ -73.98, 40.76 ],
[ -73.95, 40.80 ]
] ]
}
}
}
} )

Saída:

[
{
_id: ObjectId("63a4a8d67348ebdcd0a061f0"),
loc: { type: 'Point', coordinates: [ -73.97, 40.77 ] },
name: 'Central Park',
category: 'Park'
}
]

Voltar

Query

Nesta página