2013-03-20 4 views
1
)

geodjango와 postgis (1.x)를 사용하고 있습니다. 다중 폴리곤 목록을 결합하는 최선의 방법은 무엇입니까? 내가 가정 것에geodjango에서 다중 폴리곤 결합 문제 (

내가이

combined = multipolygon 
for item in items: 
    combined = combined.union(item.geom) #geom is a multipolygon 

처럼 여물을 반복하고있어 오히려 비효율적 보통이 잘 작동하지만 자주 오류 오류 기하학은 "GEOSUnion_r"GEOS C 함수에서 반환 확인 발생했습니다지고있어 . 이

{ "type": "MultiPolygon", "coordinates": 
[ [ [ [ -80.077576, 26.572225 ], 
     [ -80.037729, 26.571180 ], 
     [ -80.080279, 26.273744 ], 
     [ -80.147464, 26.310066 ], 
     [ -80.152851, 26.455851 ], 
     [ -80.138560, 26.538013 ], 
     [ -80.077576, 26.572225 ] 
] ] ] 
} 

사람이 anyideas이 있는가 도움이된다면 여기

오류가 던져되는 항목의 지리적 JSON 버전입니다? 최종 목표는이 폴리곤 n 개 목록 (좌표 _ 내부 = combined_area 사용)에있는 모든 위치 (다른 테이블)를 찾는 것입니다.

또한, 다각형은 geodjango 관리자의지도에 잘 나타납니다.

답변

0

언제든지 Union 집계 방법을 사용할 수 있습니다. 모든 것이 데이터베이스 수준에서 계산되기 때문에 좀 더 효율적이어야합니다. 즉, 파이썬에서 모든 것을 반복 할 필요가 없습니다.

combined_area = FooModel.objects.filter(...).aggregate(area=Union('geom'))['area'] 
final = BarModel.objects.filter(coordinates__within=combined_area) 
+0

팁을 주셔서 감사하겠습니다. "GEOSCONN 함수에서 GEOSUnion_r"을 반환 할 때 오류가 발생하는 이유는 무엇입니까? – kennethj

+0

내가 생각할 수있는 유일한 것은 기하 열이 null이거나 비어 있다는 것입니다. – miki725

+0

더 깨끗하지만, 그 방법은 문제가있는 도형을 만나면 null을 반환합니다. 도형이 비어 있지 않지만 포스트 그레스에서 직접 쿼리를 실행하려고 시도합니다. 주의 사항 : TopologyException : LINESTRING 사이의 노드가 아닌 교차점을 찾았습니다. 도형의 특정 조합에 영향을 미침 및 해당 경우 POSTGIS = "1.5.3"GEOS = "3.3.8-CAPI-1.7.8"PROJ = "Rel. 4.7.1, 2009 년 9 월 23 일 "LIBXML ="2.7.6 "USE_STATS – kennethj