1

ストレージにmongooseとMongoDBを使用しているnode.js Webアプリを開発しています。位置情報アプリです。そのため、データベースに保存されている最寄りの 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: 整数、lon: 整数} です。

では、最寄りの場所を見つけるにはどうすればよいですか?

4

1 に答える 1

2

質問を理解していない場合はお詫びしますが、緯度と経度が既に MongoDB に保存されている場合は、そのキーの Geo インデックスを確保し、MongoDB 自体を使用して最も近いポイントを見つけてください。

lat と lon で構成されるキーの Geo インデックスを想定するとlocation、次のようなものを簡単に発行できます。

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

データベース内で、経度、緯度で定義された場所に最も近い 10 の場所を見つける必要があります。

詳細については、地理空間インデックスのドキュメントを参照してください。

于 2012-08-14T01:11:50.383 に答える