web-dev-qa-db-ja.com

mongodbは、ポイントがポリゴン内にあるかどうかを確認します

mongo 2.6

ポリゴンがいくらか保存されています。そして、私にはポイントがあります。このポイントが保存されているポリゴンのいずれかに適合するかどうかを知るにはどうすればよいですか

ドキュメントの例

{ ..., "polygons" : [ [ 17.60083012593064, 78.18557739257812 ], [ 17.16834652544664, 78.19381713867188 ], [ 17.17490690610013, 78.739013671875 ], [ 17.613919673106714, 78.73489379882812 ] ], ... }

すでにほぼ同じ質問があります Mongodb:ポイントが保存されたポリゴンの内側にあるかどうかを確認してください 。しかし、それは私にとっては機能していません-このクエリは少なくとも1つの結果(例の1つ)を与える必要があります-しかし、そうではありません。

db.areas.find( { polygons : { $geoIntersects : { $geometry : {type:"Point",coordinates:[17.3734, 78.4738]} } } } )

実際、ポリゴンの境界上の点を選択した場合、それは可能です。

$geoWithinメソッドは、mondodbドキュメントにあるように作業を行う必要があります。

しかし、これらのクエリはいずれも機能しません

db.areas.find( { polygons : { $geoWithin : { $geometry : {type:"Point",coordinates:[17.3734, 78.4738]} } } } ) - not supported with provided geometry

db.tradeareas.find( { polygons : { $geoWithin : { $geometry : {type:"Polygon",coordinates: inside_polygon} } } } ) - BadValue bad geo query

何かが恋しいようですが、何をどこで理解できません。

助けていただければ幸いです。

21
user3806072

注文と関係があるようです。 $ geoWithinを使用していて、ポリゴン内のポイントを見つけようとしている場合、その中にあるのは検索しているフィールドです。ただし、geoIntersectsはどちらの方向でも機能するため、ポリゴン内のポイント、またはポイントを含むポリゴンを検​​索できます。

db.geom.insert({"polygons":
                      {"type":"Polygon",
                         coordinates:
                          [[[ 17.60083012593064, 78.18557739257812], 
                            [ 17.16834652544664, 78.19381713867188], 
                            [ 17.17490690610013, 78.739013671875], 
                            [ 17.613919673106714, 78.73489379882812],
                            [ 17.60083012593064, 78.18557739257812]
                          ]]
                      }
                 }); 

db.geom.find({polygons:
                 {$geoIntersects:
                     {$geometry:{ "type" : "Point",
                          "coordinates" : [ 17.3734, 78.4738 ] }
                      }
                  }
             });

また、最後にポリゴンの最初のポイントを繰り返す必要があることに注意してください。最後のペアを削除すると、「$ err」:「クエリを正規化できません:BadValue badgeoquery」エラーが発生します。

MongoDBでは無効なジオメトリを挿入でき、2dsphereインデックスを追加しようとしたり、intersects/within/nearクエリを実行したりした場合にのみ文句を言うようです。これは、GeoJSONが有効なジオメトリでなくても有効なJSONになる可能性があるためです。

33
John Powell