Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB print distance between two points

Tags:

When I am firing this query on MongoDB, I am getting all the places in the proximity of 500 miles to the specified co-ordinates. But I want to know the exact distance between the specified co-ordinates and the result location.

db.new_stores.find({ "geometry": { $nearSphere: { $geometry: { type: "Point", coordinates: [ -81.093699, 32.074673 ] }, $maxDistance: 500 * 3963 } } } ).pretty() 

My Output looks like:

{     "_id" : ObjectId("565172058bc200b0db0f75b1"),     "type" : "Feature",     "geometry" : {         "type" : "Point",         "coordinates" : [             -80.148826,             25.941116         ]     },     "properties" : {         "Name" : "Anthony's Coal Fired Pizza",         "Address" : "17901 Biscayne Blvd, Aventura, FL"     } } 

I also want to know the distance of this place from the specified co-ordinate. I created 2dsphere index on geometry.

like image 678
work_in_progress Avatar asked Nov 23 '15 05:11

work_in_progress


People also ask

How do you find the distance between coordinates?

Distance between two points is the length of the line segment that connects the two points in a plane. The formula to find the distance between the two points is usually given by d=√((x2 – x1)² + (y2 – y1)²). This formula is used to find the distance between any two points on a coordinate plane or x-y plane.

How does Haversine formula work?

The haversine formula determines the great-circle distance between two points on a sphere given their longitudes and latitudes. Important in navigation, it is a special case of a more general formula in spherical trigonometry, the law of haversines, that relates the sides and angles of spherical triangles.

How do you find the distance between two coordinates in Python?

The math. dist() method returns the Euclidean distance between two points (p and q), where p and q are the coordinates of that point. Note: The two points (p and q) must be of the same dimensions.


1 Answers

You can use the $geoNear aggregate pipeline stage to produce a distance from the queried point:

 db.new_stores.aggregate([     { "$geoNear": {         "near": {             "type": "Point",             "coordinates": [ -81.093699, 32.074673 ]         },          "maxDistance": 500 * 1609,         "spherical": true,         "distanceField": "distance",         "distanceMultiplier": 0.000621371     }} ]).pretty() 

This allows you to specify "distanceField" which will produce another field in the output documents containing the distance from the queried point. You can also use "distanceMultiplier" to apply any conversion to the output distance as required ( i.e meters to miles, and noting that all GeoJSON distances are returned in meters )

There is also the geoNear command with similar options, but it of course does not return a cursor as output.

like image 123
Blakes Seven Avatar answered Oct 01 '22 10:10

Blakes Seven