Calculate Distance Using Spherical Geometry
On this page
While basic queries using spherical distance are supported by the
2d index, consider moving to a
2dsphere index if your data is primarily longitude and latitude.
2d index supports queries that calculate distances on a Euclidean plane (flat surface). The index also supports the following query operators and command that calculate distances using spherical geometry:
These three queries use radians for distance. Other query types do not.
For spherical query operators to function properly, you must convert distances to radians, and convert from radians to the distances units used by your application.
- distance to radians: divide the distance by the radius of the sphere (e.g. the Earth) in the same units as the distance measurement.
- radians to distance: multiply the radian measure by the radius of the sphere (e.g. the Earth) in the units system that you want to convert the distance to.
The equatorial radius of the Earth is approximately
3,963.2 miles or
The following query would return documents from the
places collection within the circle described by the center
[ -74, 40.74 ] with a radius of
The following spherical query, returns all documents in the collection
100 miles from the point
[ -74, 40.74 ].
The output of the above command would be:
For spherical queries, use the
2dsphere index result.
The use of
2d index for spherical queries may lead to incorrect results, such as the use of the
2d index for spherical queries that wrap around the poles.
If specifying latitude and longitude coordinates, list the longitude first and then latitude:
- Valid longitude values are between
180, both inclusive.
- Valid latitude values are between
90, both inclusive.
distanceMultiplier option of the
geoNear command returns distances only after multiplying the results by an assigned value. This allows MongoDB to return converted values, and removes the requirement to convert units in application logic.
distanceMultiplier in spherical queries provides results from the
geoNear command that do not need radian-to-distance conversion. The following example uses
distanceMultiplier in the
geoNear command with a spherical example:
The output of the above operation would resemble the following: