2011-05-03 10 views
1

저는 경도가 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! 

번호를 변경하면 나는이 오류가 와서 갈 수 있도록 할 수 있습니다 자세한 배경 정보를 보려면 여기 내 테스트 케이스의 In PostGIS a polygon bigger than half the world is treated as it's opposite

참조하십시오. (-180, -80, x, 80)은 x < = -140과 같이 작동합니다. 모든 수에 대해 이와 같은 임계 값이 있지만 패턴을 찾을 수 없습니다. 같은 지역의 상자의 경우 일부는 작동하고 다른 상자는 작동하지 않습니다. 너비가 같은 상자의 경우 일부는 작동하고 다른 상자는 작동하지 않습니다.

생성되는 SQL을 볼 수 있지만 영역은 바이너리 (EWKB)로 표시되며 읽을 방법이 확실하지 않습니다.

누구든지 설명 할 수 있습니까?

답변