Docs Menu
Docs Home
/ /
2 d

Calcular distancias usando geometría esférica

Advertencia

Para consultas esféricas, utilice el 2dsphere resultado del índice.

El uso del índice 2d para consultas esféricas puede generar resultados incorrectos, como el uso del índice 2d para consultas esféricas que envuelven los polos.

El índice 2d admite consultas que calculan distancias en un plano euclidiano (superficie plana). También admite los siguientes operadores de consulta y comandos que calculan distancias mediante geometría esférica:

Nota

Si bien las queries básicas que utilizan la distancia esférica son compatibles con el índice 2d, considera pasar a un índice 2dsphere si tus datos son principalmente de longitud y latitud.

  • $nearSphere

  • $centerSphere

  • $near

  • $geoNear etapa de canalización con la spherical: true opción

Importante

Las operaciones mencionadas utilizan radianes para la distancia. Otros operadores de consulta esféricos, como, no lo hacen.$geoWithin

Para que los operadores de consulta esférica funcionen correctamente, debe convertir las distancias a radianes y convertir de radianes a las unidades de distancia utilizadas por su aplicación.

Para convertir:

  • distancia en radianes: dividir la distancia por el radio de la esfera (por ejemplo, la Tierra) en las mismas unidades que la medida de la distancia.

  • radianes a distancia: multiplica la medida en radianes por el radio de la esfera (por ejemplo, la Tierra) en el sistema de unidades al que quieres convertir la distancia.

El radio ecuatorial de la Tierra es de aproximadamente 3,963.2 millas o 6,378.1 kilómetros.

La siguiente query devolvería documentos de la colección places dentro del círculo descrito por el centro [ -74, 40.74 ] con un radio de 100 millas:

db.places.find( { loc: { $geoWithin: { $centerSphere: [ [ -74, 40.74 ] ,
100 / 3963.2 ] } } } )

Nota

Importante

Si especifica coordenadas de longitud y latitud, enumera 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.

Volver

Componentes internos del índice 2d