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
何かが恋しいようですが、何をどこで理解できません。
助けていただければ幸いです。
注文と関係があるようです。 $ 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になる可能性があるためです。