2

2dsphere インデックス コレクションに Point を挿入し、Polygon 内で見つけようとしています。

c = db.foo;
c.ensureIndex({'value.geometry': '2dsphere'});
c.insert({value: {geometry: {type: "Point", coordinates: [0, 0]}}});
c.findOne({'value.geometry': {$geoWithin: {$geometry:
    {"type":"Polygon","coordinates":[[[-90,-90],[90,-90],[90,90],[-90,90],[-90,-90]]]}}}})
// Point is found

ただし、幅が 180° を超えるポリゴンで同じことを行うと、ポイントが見つかりません。

c = db.foo;
c.ensureIndex({'value.geometry': '2dsphere'});
c.insert({value: {geometry: {type: "Point", coordinates: [0, 0]}}});
c.findOne({'value.geometry': {$geoWithin: {$geometry:
    {"type":"Polygon","coordinates":[[[-90.1,-90],[90.1,-90],[90.1,90],[-90.1,90],[-90.1,-90]]]}}}})
// no result -- why?

MongoDB のマニュアルには、これに関する情報が見つかりませんでした。なんで限界?

4

2 に答える 2

2

ポリゴンが経度 180 度を超えると、地球を逆方向に「閉じる」可能性があると思います。したがって、ポイント (0,0) は実際にはポリゴン内にはありません。ポイント (180,0) はおそらくです。(0,-90) や (0,90) のように、地球の「前面」部分にさらにいくつかのポイントを追加することで、必要なポリゴンを作成できる可能性があります。

于 2013-09-12T20:44:17.147 に答える