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

Query para localizações próximas a um ponto em uma esfera

Nesta página

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

Você pode fazer query de dados de localização que aparecem próximos a um ponto específico em uma esfera.

Para consultar dados de localização próximos a um ponto especificado, utilize o operador $near :

db.<collection>.find( {
<location field> : {
$near : {
$geometry : {
type : "Point",
coordinates : [ <longitude>, <latitude> ]
},
$maxDistance : <distance in meters>
}
}
} )
  • 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.

  • Especifique a distância no campo $maxDistance em metros.

  1. 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"
    }
    ] )

    Os valores no campo loc são pontos GeoJSON.

  2. Para executar query de dados de localização com o operador $near , você deve criar um índice geoespacial no campo que contém os dados de localização.

    Crie um índice dsphere 2no campo loc :

    db.places.createIndex( { "loc": "2dsphere" } )

Use $near para consultar a coleção. A seguinte query do $near retorna documentos que têm um campo loc dentro 5000 metros de um ponto GeoJSON localizado em [ -73.92, 40.78 ]:

db.places.find( {
loc: {
$near: {
$geometry: {
type: "Point",
coordinates: [ -73.92, 40.78 ]
},
$maxDistance : 5000
}
}
} )

Saída:

[
{
_id: ObjectId("63f7c3b15e5eefbdfef81cab"),
loc: { type: 'Point', coordinates: [ -73.88, 40.78 ] },
name: 'La Guardia Airport',
category: 'Airport'
},
{
_id: ObjectId("63f7c3b15e5eefbdfef81caa"),
loc: { type: 'Point', coordinates: [ -73.97, 40.77 ] },
name: 'Central Park',
category: 'Park'
}
]

Os resultados são classificados por distância do ponto consultado, do mais próximo para o mais distante.

Voltar

Polígonos