2つの円の差から結果の領域でMongoDBで地理空間検索を実行することは可能ですか?半径xの円Aと半径yの別の円Bがあり、y>xであるとします。B-A内にあるすべてのポイントを見つける必要があります。これはMongoDBで可能ですか。MongoDBがポリゴン検索をサポートしていることは知っていますが、もっと良い方法があるかもしれません。私はmongoidを使用するRailsアプリケーションからMongoを使用していることに注意してください。
1 に答える
はい、可能です。$within
演算子を使用します。
http://www.mongodb.org/display/DOCS/Geospatial+Indexing/#GeospatialIndexing-Querying
境界クエリ
$nearの代わりに$withinを使用して、図形内のアイテムを検索できます。結果は距離で並べ替えられないため、この並べ替えが不要な場合はクエリが高速になる可能性があります。タイプ$box(長方形)、$ center(円)、および$ polygon(凹多角形と凸多角形)の形状がサポートされています。すべての境界クエリには、境界の一部として形状の境界が暗黙的に含まれていますが、浮動小数点の不正確さのため、これを厳密に信頼することはできません。
長方形内のすべての点をクエリするには、左下隅と右上隅を指定する必要があります。円は中心点と半径で指定されます。
center = [50、50] radius = 10 db.places.find({"loc":{"$ within":{"$ center":[center、radius]}}})
1つのアプローチは、両方の円内の点を見つけて、セットの共通部分を作成することです。これは、円が同心である場合、または同心ではないがいくつかの重複領域がある場合の両方の場合に機能します。