Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Convertir Distancia a Radianes para Operadores Esféricos

Los índices 2D admiten ciertos operadores del query que calculan las distancias mediante geometría esférica. Los operadores del query esféricos usan radianes para la distancia. Para usar operadores del query esféricos con un índice 2d, se deben convertir las distancias a radianes.

Los índices 2d soportan los siguientes operadores del query esférica:

Usar un índice 2d para consultas sobre datos esféricos puede devolver resultados incorrectos o un error. Por ejemplo, los índices 2d no admiten consultas esféricas que envuelvan los polos.

Si tus datos están almacenados como longitud y latitud y a menudo ejecutas consultas en superficies esféricas, utiliza un índice 2dsphere en lugar de un índice 2d.

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.

Para convertir la distancia a radianes, divide la distancia por el radio de la esfera (por ejemplo, la Tierra) en las mismas unidades que la medida de la distancia.

El radio ecuatorial de la Tierra es de aproximadamente 3.963,2 millas o 6.378,1 kilómetros.

Los siguientes ejemplos utilizan el operador $centerSphere para realizar query. El operador $centerSphere utiliza radianes para calcular la distancia.

Crear la colección contacts:

db.contacts.insertMany( [
{
name: "Evander Otylia",
phone: "202-555-0193",
address: [ 55.5, 42.3 ]
},
{
name: "Georgine Lestaw",
phone: "714-555-0107",
address: [ -74, 44.74 ]
}
] )

El campo address contiene legacy coordinate pairs.

La siguiente query devuelve documentos donde el campo address se encuentra dentro de un círculo con punto central [ -72, 44 ] y un radio de 200 millas:

db.contacts.find(
{
address:
{
$geoWithin:
{
$centerSphere:
[
[ -72, 44 ] ,
200 / 3963.2
]
}
}
}
)

Salida:

[
{
_id: ObjectId("647e565c6cdaf4dc323ec92d"),
name: 'Georgine Lestaw',
phone: '714-555-0107',
address: [ -74, 44.74 ]
}
]

En la query anterior, para convertir 200 millas a radianes, se dividieron las millas especificadas entre 3963,2.

La siguiente query devuelve documentos donde el campo address está dentro de un círculo con punto central [ 55, 42 ] y un radio de 500 kilómetros:

db.contacts.find(
{
address:
{
$geoWithin:
{
$centerSphere:
[
[ 55, 42 ] ,
500 / 6378.1
]
}
}
}
)

Salida:

[
{
_id: ObjectId("647e565c6cdaf4dc323ec92c"),
name: 'Evander Otylia',
phone: '202-555-0193',
address: [ 55.5, 42.3 ]
}
]

En la consulta anterior, para convertir 500 kilómetros a radianes, los kilómetros especificados se dividieron por 6378.1.

Volver

Internos

En esta página