我正在开发一个node.js web-app,我正在使用mongoose和MongoDB进行存储。这是一个gelocation应用程序。所以有时我必须找到存储在数据库中的10个最近的地方。我有这种方法来计算这个距离:
var haversine = function(p1, p2) {
var R = 6371; // km
var dLat = toRad(p2.lat-p1.lat);
var dLon = toRad(p2.lon-p1.lon);
var lat1 = toRad(p1.lat);
var lat2 = toRad(p2.lat);
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d;
}
其中p1和p2是点{lat:Integer,lon:Integer}。
那么,我该怎么做才能找到最近的地方?
答案 0 :(得分:3)
如果我不理解这个问题,请道歉,但如果你已经在MongoDB中存储了lat和lon,为什么不确保该密钥上的Geo索引并使用MongoDB本身来查找最近的点。
假设location
键上的地理索引由lat和lon组成,您只需发出类似于以下内容的内容:
db.places.find( { location : { $near : [lon,lat] } } ).limit(10)
哪个应该找到数据库中最近的十个位置到lon,lat。
中定义的位置您可以在documentation处找到有关地理空间索引的更多信息。