two texto sumar suma near index geonear geolocalizacion funciones funcion ejemplo crear condicional concatenar campo calculos calculate calculado cadena buscarv 2dsphere mongodb geospatial distance getdistance

mongodb - texto - sumar si en tableau



Consultas enlazadas de MongoDB: ¿Cómo convierto millas a radianes? (2)

Tengo una colección de tiendas con un índice geoespacial en la propiedad de ubicación.

Lo que estoy tratando de hacer es darles la latitud, la latitud y el radio de búsqueda (mi) del usuario, 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 increíble gente de mongodb-user me ayudó a encontrar la respuesta. Básicamente, lo que realmente estaba buscando era una forma de limitar la distancia.

Según la documentación actualizada, hay un tercer parámetro para la consulta $ near: también puede usar $ near con una distancia máxima

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

El valor para $ maxDistance está en radianes; así que tuve que tomar mi distancia en millas y dividirla por 69.

¡Gracias!


Como dicen los doctores:

Todas las distancias usan radianes. Esto le permite multiplicarse fácilmente por el radio de la tierra (aproximadamente 6371 km o 3959 millas) para obtener la distancia en su elección de unidades. A la inversa, dividir por el radio de la tierra al hacer consultas.

así que simplemente necesitas dividir tu radio por el radio de la tierra. en tu ejemplo sería:

radius = 10/3959


Para utilizar mongodb $ cerca de consultas con límites de km, debe convertir el valor del radio a km. Por defecto, mongodb $ near acepta $ maxDistance como radio.

Convierta la distancia en 111.12 (un grado es aproximadamente 111.12 kilómetros) al usar km, o deje la distancia a medida que avanza usando el grado

Deje que si su radio está en km entonces use

db.places.find( { loc : { $near : [50,50] , $maxDistance : 10/111.12 } } )

pero si su radio en millas entonces conviértalo en km