2012-02-29 15 views
2

私は、中心(緯度、経度)と半径で識別される円形領域のリストを持っています。そして、私は緯度と経度で特定される地点のリストを持っています。それぞれのポイントについて、私はそれが来る地域を見つけたいと思っています。両方のリストが何百万にも及ぶことに注意してください。ポイントと地域を照合する効率的な方法

これを行う最も効率的な方法は何ですか?

よろしくお願いいたします。

答えて

0

MongoDBは、境界クエリーをサポートしているため、特定のシェイプ内のポイントを探すことができます。サークル(中心+半径)はサポートされているタイプの1つです。だから、あなたはこのような何かを行うことができ、あなたは場所フィールド(db.places.ensureIndex({ loc : "2d" })または類似の)上で定義された地理空間のインデックスを持っていると仮定:ここに発見される

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

さらに詳しい情報:

http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-BoundsQueries

+0

を感謝アダム。あなたが気にしないなら、フォローアップの質問 - MongoDBは、100万の円形領域があり、各場所に新しい 'within'クエリがあると考えるとうまく機能しますか?地理空間インデックスを除いて、最適化する方法はありますか? – user1240043

+0

実際にそれを実行せずに言うのは難しいです。インデックス化されたgeohashingはうまく機能しますが、私はそれを言うことができます。 $ within演算子は、パフォーマンスに関してあまりよく知られていません。 RAMにデータセットを保存しておけば、CPUバウンドにならない場合、なぜ高速でないのか分かりません。ただ一つの方法:テスト、テスト、テスト.... :) –

+0

インデックス/クエリの設定に助けが必要な場合や、結果を投稿してフィードバックを得たい場合は、mongodb-ユーザーのGoogleグループ - 私たちはかなり反応があります:) –

関連する問題