2010-10-07 9 views
16

Tengo una colección de tiendas con un índice geospacial en el lugar apropiado.MongoDB Bound Queries: ¿Cómo convierto milla a radianes?

Lo que estoy tratando de hacer es dada la latitud del usuario, la latitud y el radio de búsqueda (mi), quiero devolver la lista de tiendas que están dentro de esos parámetros.

Vi el siguiente ejemplo en la documentación de MongoDB (http://www.mongodb.org/display/DOCS/Geospatial+Indexing), pero parece que la distancia está en radianes.

center = [50, 50] 
radius = 10 
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}}) 

Entonces, ¿cuál es la fórmula para convertir millas a radianes?

Solución La gente increíble de mongodb-user me ayudó a encontrar la respuesta. Básicamente, lo que realmente estaba buscando era una forma de limitar la distancia.

Per, la documentación actualizada, hay una tercera parámetro a la cerca de $ consulta: También puede utilizar cerca de $ con una distancia máxima

db.places.find({ loc : { $near : [50,50] , $maxDistance : 5 } }).limit(20) 

El valor de $ maxDistance está en radianes; entonces, tuve que tomar mi distancia en millas y dividirla por 69.

¡Gracias!

+0

pude encontrar mi respuesta mediante la publicación de mi pregunta sobre la mongdb-usuario de Google Grupo (http://groups.google.com/group/mongodb-user/browse_thread/thread/d37c781bbfff5f08). – Abe

+4

Nota: dividir por 69 es una conversión aproximada de millas a * grados *, no radianes. Los grados son correctos aquí porque esta es una consulta simple ol '' $ near' (lo que significa '$ maxDistance' debe estar en las mismas unidades que las coordenadas), no una consulta esférica (que * do * requiere' $ maxDistance' para estar en radianes). –

Respuesta

15

Como documentos dicen:

Las distancias utilizan radianes. Esto le permite multiplicar fácilmente por el radio de la tierra (aproximadamente 6371 km o 3959 millas) para obtener la distancia en su elección de unidades. Por el contrario, divida por el radio de la tierra cuando haga consultas.

por lo que necesita dividir su radio por el radio de la tierra. en su ejemplo sería:

radius = 10/3959
+0

Lo siento, no creo que eso sea todo. No obtengo ningún resultado y cuando ejecuto el equivalente en SQL Server obtengo los resultados – Abe

+0

¿Qué versión de MongoDb utiliza? – walla

+0

Estoy usando la versión 1.6.3 para Windows 64 bit – Abe

Cuestiones relacionadas