17

ロケーションプロパティに地理空間インデックスを持つ店舗のコレクションがあります。

私がやろうとしているのは、ユーザーの緯度、緯度、および検索半径 (mi) を指定して、それらのパラメーター内にある店舗のリストを返したいということです。

MongoDB ドキュメント ( http://www.mongodb.org/display/DOCS/Geospatial+Indexing ) で次の例を見ましたが、距離はラジアン単位のようです。

center = [50, 50]
radius = 10
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})

では、マイルをラジアンに変換する式は何ですか?

解決法 mongodb-user のすばらしい人たちが、答えを見つけるのを手伝ってくれました。基本的に、私が本当に探していたのは、距離を制限する方法でした.

更新されたドキュメントによると、$near クエリには 3 番目のパラメーターがあります。最大距離で $near を使用することもできます。

db.places.find( { loc : { $near : [50,50] , $maxDistance : 5 } } ).limit(20)

$maxDistance の値はラジアンです。そのため、距離をマイルで取り、69 で割る必要がありました。

ありがとうございました!

4

2 に答える 2

16

ドキュメントが言うように:

すべての距離はラジアンを使用します。これにより、選択した単位で距離を取得するために、地球の半径 (約 6371 km または 3959 マイル) を簡単に掛けることができます。逆に、クエリを実行するときは、地球の半径で割ります。

したがって、半径を地球の半径で割るだけです。あなたの例では、次のようになります。

radius = 10/3959
于 2010-10-07T09:42:39.230 に答える