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

Query de ubicaciones dentro de un círculo en una esfera

Puedes consultar datos de ubicación dentro de un círculo en la superficie de una esfera. Usa estas consultas para obtener datos dentro de un casquete esférico.

Para consultar datos de ubicación dentro de un círculo en una esfera, utilice $geoWithin con el $centerSphere operador. En el $centerSphere operador, especifica las coordenadas y el radio del círculo dentro del cual deseas query:

db.<collection>.find( {
<location field> : {
$geoWithin : {
$centerSphere: [
[ <longitude>, <latitude> ],
<radius>
]
}
}
} )
  • Al especificar las coordenadas de longitud y latitud, enumere primero la longitud y luego la latitud.

    • Los valores de longitud válidos están entre -180 y 180, ambos inclusive.

    • Los valores de latitud válidos están entre -90 y 90, ambos inclusive.

  • En el operador $centerSphere, especifica el radio del círculo en radianes. Para convertir otras unidades a y desde radianes, consulta Convertir distancia a radianes para operadores esféricos.

    • Este ejemplo calcula la distancia en kilómetros. Para convertir kilómetros a radianes, divide el valor en kilómetros por 6378.1.

  • $geoWithin no requiere un índice geoespacial. Sin embargo, un índice geoespacial mejora el rendimiento de las query. Solo el índice geoespacial 2dsphere admite $geoWithin. Para obtener más información, consulta Crea un índice 2dsphere.

Crea una colección places que contenga estos documentos:

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 consultar la colección, use $geoWithin con el operador $centerSphere:

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

La consulta devuelve documentos donde el campo loc está dentro de un radio de 10 kilómetros de un punto en la longitud -1.76 y latitud 51.16.

Salida:

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

Volver

Intersecciones

En esta página