2012-08-14 69 views
1

我正在開發一個node.js web應用程序,我正在使用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是點{緯度:整數,經度:整數}。

那麼,我該怎麼做才能找到最近的地方?

回答

3

道歉,如果我不理解問題,但如果您已經存儲在MongoDB中經緯度,爲什麼不只是確保該關鍵點的地理索引,並使用MongoDB本身來找到最近的點。

假設上location密鑰的地理指標組成的緯度和經度,你可以簡單地發出類似下面的內容:

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

哪些應該找到在數據庫中的位置最近的十個地方的經度定義,LAT。

有關地理空間索引的更多信息,請參見documentation

+0

謝謝!棒極了!!!! – 2012-08-14 09:46:41