Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB geo distance/radius to useful units

I'm using MongoDB geospatial queries -- $near, geoNear, etc. -- and I'd like to know how to turn the dis result of the geoNear command as well as the radius argument for $within queries to/from readable units like miles or kilometers.

like image 692
Chris Forrette Avatar asked Aug 12 '10 18:08

Chris Forrette


3 Answers

Using geoNear command for a dis value in kilometers add the parameter:

distanceMultiplier: (6371 * Math::PI / 180.0)
like image 64
tandem Avatar answered Nov 11 '22 02:11

tandem


if your data is in geographic coordinates (i.e. 30.47921 N -121.45724 W) then you need to convert your underlying projection with the units you want (choose a projection that preserves distance) or you need to convert the distance in coordinates to something like miles.

Use the Haversine formula for calculations http://www.movable-type.co.uk/scripts/latlong.html

like image 4
TheSteve0 Avatar answered Nov 11 '22 02:11

TheSteve0


Note if you're using Mongodb version 2.6.0 there is a bug which always enables the new behavior for spherical coordinate systems to return distance in meters (based on WGS84 coordinates).

The documentation states that giving the $near parameter in legacy coordinates rather than GeoJSON should still return radians. This has been fixed in newer versions.

The bug report: Bug #13540

like image 1
jlapoutre Avatar answered Nov 11 '22 02:11

jlapoutre