2011-10-20 14 views
26

Estoy tratando de entender las búsquedas geoespaciales y MongoDB. Básicamente lo que quiero es que los usuarios puedan consultar documentos (imágenes) que se filman dentro de una distancia establecida desde la ubicación actual de los usuarios. Entonces, el usuario está buscando todas las imágenes que se toman a 1 km de donde está parado. Trato de usar el ejemplo siguiente pero no tengo idea de qué establecer como el valor de maxdistance.Unidades para usar para maxdistance y MongoDB?

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

Así que mi pregunta es ¿Cómo puedo configurar como si maxDistance Estoy buscando documentos dentro de un radio de 1 kilómetro?

Estoy totalmente atascado aquí.

Respuesta

62

Para utilizar las consultas de mongodb $near con km, debe convertir el valor del radio en km. Por defecto mongodb $ near acepta $maxDistance como radius.

Convertir la distancia por 111.12 (un grado es de aproximadamente 111.12 kilómetros) al utilizar km, o salir de la distancia, ya que es en el uso de grado

a su pregunta

lo puedo definir como maxDistance si estoy buscando documentos dentro de un radio de 1 km ?

puede utilizar esta

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

he respondido cómo utilizar mongo geospatial features here in detail. Se puede extraer de

+0

fresca, gracias! ¿Cuál es la diferencia entre $ near y $ nearSphere? –

+13

$ near supone un modelo ideal de una tierra plana, lo que significa que un arco de latitud (y) y longitud (x) representan la misma distancia en todas partes. Entonces tiene que convertir el radio en 111 o 69 para obtener los resultados. Pero $ nearSphere necesita convertir el radio en (6371 km o 3959 millas) para que funcione ... puede leer más sobre [aquí] (http : //www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-TheEarthisRoundbutMapsareFlat) – RameshVel

+0

¿Es posible consultar una fracción? – Karl

15

Desde la versión 2.4 de MongoDB puede especificar el radio directamente en metros como un valor de $ maxDistance, así:

db.<collection>.find({loc: {$near : 
           {$geometry : 
            { 
            type: 'Point', 
            coordinates: [<longitude> , <latitude>]  
            } 
           }, 
           $maxDistance: 10*100 
          } 
        }); 
+1

Depende del índice. Si el índice es '2d', esto no funcionará, porque un 2d-index asume el" formato de radian ". Si el índice por otro lado es '2dsphere', estás en lo correcto. :-) Documentación: https://docs.mongodb.com/manual/reference/operator/query/near/#query-on-legacy-coordinates – qualbeen

Cuestiones relacionadas