1

我正在开发一个 node.js 网络应用程序,我在其中使用 mongoose 和 MongoDB 进行存储。这是一个地理定位应用程序。所以有时我必须找到存储在数据库中的 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}。

那么,我该怎么做才能找到最近的地方呢?

4

1 回答 1

2

抱歉,如果我不理解这个问题,但是如果您已经在 MongoDB 中存储了纬度和经度,为什么不确保该键上的地理索引并使用 MongoDB 本身来查找最近的点。

假设键上的地理索引location由 lat 和 lon 组成,您可以简单地发出类似于以下内容的内容:

db.places.find( { location : { $near : [lon,lat] } } ).limit(10)

哪个应该在您的数据库中找到与 lon,lat 定义的位置最近的十个位置。

您可以在地理空间索引文档中找到更多信息。

于 2012-08-14T01:11:50.383 回答