2013-01-18 1 views
2

여러 폴리곤을 동일한 형태로 병합 및 단순화하지만 훨씬 적은 폴리곤을 사용하는 것이 가장 효율적인 방법입니다.파이썬으로 폴리곤을 효율적으로 병합 및 축소하기

polygon reduction

나는 구글지도에 US Census data에 의해 정의 된대로, 우편 번호 지역을 그래프로 시도하고 있습니다. Django의 우수한 GeoDjango 프레임 워크와 내가 django-census-places 앱을 만든 해킹을 사용하여, 나는 데이터베이스에서 자신의 영역을 설명하는 수천 개의 zip과 lat/lng 벡터를 갖게되었습니다.

저는 벡터를 내보내고 자바 스크립트를 렌더링하여 Google지도에서 선택한 지퍼를 그릴 수 있도록 작성했습니다. 그러나, 내가 겪어 본 문제는 엄청나게 느리다는 것입니다. 하나의 우편 번호조차도 수천 개의 폴리곤을 포함 할 수 있습니다. 이 출력을 JSON으로 전처리하여 캐시 할 수 있지만 몇 분 안에 모든 삼각형을로드하는 데 몇 분이 걸립니다. 대다수는 여러 우편 번호의 전체 개요에만 관심이 있기 때문에 중복됩니다.

참고로이 질문은 this과 비슷하지만 같지 않습니다. 오버랩이 없다고 생각하기 때문에 나는 겹치는 폴리곤에 관심이 없다.

편집 : This 질문도 매우 비슷합니다.

답변

0

다각형을 병합하려면 boolean union operation을 수행해야합니다. 파이썬에서 어떻게하는지 잘 모르겠지만 자바 스크립트에 대해서도 언급 했으므로 Delphi, C++ 및 C#로 작성된 Clipper 라이브러리의 JavaScript 번역본은 here입니다.

클리핑 라이브러리의 기능을 매우 잘 보여주는 온라인 데모 here도 있습니다.

+0

데모 페이지에서 "시간"제목의 숫자는 초 또는 분입니까? –

+0

나는 밀리 초를 추측 할 것입니다. 벤치 마크를 지우고 다른 클립 작업을 수행하십시오. 눈이 볼 수있는 것보다 훨씬 빠르게 작동하므로 초 또는 분이 아닙니다. –

1

GeoDjango의 여러 기능 중 하나는 전체 범위의 부울 다각형 연산자입니다. 내가해야하는 일은 각 MultiPolygon 객체에서 union()을 호출하여 전체 영역을 설명하는 MultiPolygon을 얻는 것입니다. 점수의 감소는 규모의 순서입니다.

관련 문제