0
我想讓我的REST API只發送給我一些特定半徑內的項目。我已經編寫了代碼來計算兩點之間的距離,並只發送給我所需半徑內的距離。但是,到目前爲止,我使用任意的經緯度作爲比較點。我如何使用自己的位置來實現這個算法?如何使用我的位置來計算使用緯度和經度的兩點之間的距離
app.get('/posts', function(req, res) {
// Get 'posts' collection from db
db.collection('posts', function(err, collection) {
// Get all documents in the 'posts' collection
collection.find().toArray(function(err, items) {
// Documents to send back
var results = []
//Function that calculates distance between two points.
function calculateDistance (lat1, lat2, lon1, lon2) {
var dLat = deg2rad(lat2-lat1);
var dLon = deg2rad(lon2-lon1);
var a =
(Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2))
;
var c = (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)));
var d = (6371 * c); // Distance in km
var e = (d/1.6) //Convert distance in km to miles.
return e
}
// Iterate over each document and check if the distance is correct
for (var i = 0; i < items.length; i++) {
var item = items[i]
if ((calculateDistance(item.latitude, 43.7035798, item.longitude, -72.2887838) > 25)) {
results.push(item)
}
}
res.send(results);
});
});
});
任何不使用MongoDB [**'$ near' **運算符並使用**'$ maxDistance ** **]的原因(https://docs.mongodb.com/manual/reference/operator/query/near/ #op._S_near)設置? –