2010-08-12 15 views
5

estoy usando MongoDB consultas geoespaciales - $near, geoNear, etc. - y me gustaría saber cómo convertir el resultado del comando disgeoNear así como la radius argumento para $within consultas hacia/desde unidades legibles como millas o kilómetros.MongoDB geo distancia/radio a unidades útiles

+0

Parece que hay una respuesta mucho mejor que la que marcó correcta. Es posible cambiarlo? – JohnAllen

Respuesta

4

si sus datos están en coordenadas geográficas (es decir, 30.47921 N -121.45724 W), entonces necesita convertir su proyección subyacente con las unidades que desee (elija una proyección que preserve la distancia) o necesita convertir la distancia en coordenadas a algo así como millas.

Usar la fórmula para el cálculo de Haversine http://www.movable-type.co.uk/scripts/latlong.html

+0

¡Gracias por tu respuesta! Mis datos son, de hecho, puntos de latitud/longitud, y pude usar la fórmula de Haversine para calcular la distancia entre los resultados y el punto de origen conectando ambos conjuntos de puntos lat/lon, pero todavía no estoy seguro de qué hacer específicamente con 'dis' y 'radio'. ¿Podría aclarar a qué se refería con "convertir su proyección subyacente"? Parece que podría ser más simple convertir 'dis' que enchufar ambos conjuntos lat/lon, ¿no? ¿Tendría que reorganizar la fórmula de Haversine para que se ajuste a mis necesidades aquí? Si es así, ¿a qué variable (s) de la ecuación se puede conectar 'dis'/'radius'? –

+1

Hola, Chris, tuve una pregunta similar (http://stackoverflow.com/questions/3878702/mongodb-bound-queries-how-do-i-convert-mile-to-radian). Si no les molesta, ¿pueden explicar con más detalle la solución? ¿Tienes que usar map/reduce? ¡Gracias de nuevo! – Abe

+0

Si están usando Mongo> 1.8, pueden usar el modelo esférico: http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-TheEarthisRoundbutMapsareFlat – TheSteve0

20

Uso de comandos geoNear por un valor dis en kilómetros agregar el parámetro:

distanceMultiplier: (6371 * Math::PI/180.0) 
1

Nota Si está utilizando la versión 2.6.0 mongodb hay una error que siempre permite que el nuevo comportamiento de los sistemas de coordenadas esféricas devuelva la distancia en metros (según las coordenadas WGS84).

La documentación indica que el dar el parámetro $near en coordenadas heredadas en lugar de GeoJSON aún debe devolver radianes. Esto ha sido arreglado en versiones más nuevas.

El informe de error: Bug #13540