2

経度 180 度を横切る長方形の領域を表現しようとしています。詳細な背景については、PostGIS では、世界の半分以上のポリゴンが反対のものとして扱われるを参照してください。

これが私のテストケースです:

from django.contrib.gis.geos import Polygon, MultiPolygon
from my_project.my_app.models import Photo

a = Polygon.from_bbox((30, -80, 180, 80))  # the part to the east of 180
b = Polygon.from_bbox((-180, -80, -160, 80))  # a part to the west of 180
c = Polygon.from_bbox((-180, -80, -100, 80))  # a larger part to the west of 180

ok   = MultiPolygon(a,b)
ok2  = MultiPolygon(c)
boom = MultiPolygon(a,c)

# This works
Photo.objects.filter(location__coveredby=ok)[:1]
# This also works so c is ok
Photo.objects.filter(location__coveredby=ok2)[:1]
# This gives "BOOM! Could not generate outside point!"
Photo.objects.filter(location__coveredby=boom)[:1]

# splitting c doesn't help
c1 = Polygon.from_bbox((-180, -80, -140, 80))
c2 = Polygon.from_bbox((-140, -80, -100, 80))
test = MultiPolygon(a,c1,c2)
Photo.objects.filter(location__coveredby=test)[:1]
# BOOM! Could not generate outside point!

数字を変更することで、このエラーを行ったり来たりさせることができます。(-180, -80, x, 80) は、たとえば x <= -140 の場合に機能します。数値ごとにこのようなしきい値がありますが、パターンが見つかりません。同じ面積のボックスの場合、機能するものと機能しないものがあります。同じ幅のボックスの場合、機能するものと機能しないものがあります。

生成されている SQL を確認できますが、領域はバイナリ (EWKB) で表されており、読み方がわかりません。

誰でもこれを説明できますか?

4

1 に答える 1

1

この質問をした後、gis.stackexchange.com について知ったので、そこでも質問しました。そこの善良な人々の助けを借りて、私は問題が何であるか(私は思う)と解決策を見つけました.

参照: https://gis.stackexchange.com/questions/9217/postgis-certain-multipolygons-cause-boom-could-not-generate-outside-point/9257#9257

于 2011-05-03T23:41:25.030 に答える