MongoDB Bound Queries: How do I convert mile to radian?

Viewed 15899

I have a collection of stores with a geospacial index on the location propery.

What I am trying to do is given the user's latitude, latitude and a search radius (mi), I want to return the list of stores that are within those parameters.

I saw the following example on the MongoDB documentation (http://www.mongodb.org/display/DOCS/Geospatial+Indexing), but it looks like the distance is in radians.

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

So, what is the formula to convert miles to radians?

Solution The awesome people at mongodb-user helped me find the answer. Basically, what I was really looking for was a way to limit the distance.

Per, the updated documentation, there is a 3rd parameter to the $near query: You can also use $near with a maximum distance

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

The value for $maxDistance is in radians; so, I had to take my distance in miles and divide it by 69.

Thank you!

2 Answers

In order to use mongodb $near queries with km bounds, you need to convert the radius value to km. By default mongodb $near accepts $maxDistance as radius.

Convert distance by 111.12 (one degree is approximately 111.12 kilometers) when using km, or leave distance as it is on using degree

let if your radius is in km then use

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

but if your radius in miles then convert it in km

Related