PostGIS를 사용하여 많은 작은 다각형을 결합하여 더 큰 다각형을 형성 하시겠습니까?


47

postgis에서 SRID 27700을 사용하는 다음 레이어가 있습니다.

여기에 이미지 설명을 입력하십시오

영국의 모든 관리 지역이며 (색상 그룹에서 볼 수 있듯이) 각 지역에는 카운티를 지정하는 텍스트 필드가 있습니다.

내가하고 싶은 것은 주어진 카운티의 작은 것에서 큰 카운티 다각형을 만드는 것입니다. 따라서 그림의 모든 청록색 다각형은 그 안에 모든 폴리를 포함하는 단일 외부 링에서 하나의 큰 다각형을 형성합니다 모든 자주색, 갈색, 분홍색, 회색 등과 같은 색상은 모두 하나의 다각형을 형성해야합니다.

나는 이미 다음을 시도했다.

insert into parishesmerged (geometry)
select astext(multi(ST_Union(the_geom))) as the_geom from parishes
group by county_name

그러나 깨진 형상을 계속 생성하여 더 처리하는 데 큰 문제가 있습니다.

주요 출력 영역이있는 간단한 카운티 레벨 맵을 만들려고합니다.

어떤 솔루션도 Postgis에있을 필요는 없으며 전체 OS4Geo 스택, 최신 버전의 QGis 및 스틱을 흔들 수있는 것보다 많은 유틸리티가 설치되어 있습니다.

내가 가지고 있지 않은 유일한 것은 ArcGis와 같은 큰 소년들입니다 (어딘가에 오래된 맵 정보가있을 수 있지만)


기록을 위해 내가 만들고자하는 데이터 세트는 .NET을 사용하여 GIS 응용 프로그램을 작성하려는 .NET 프로그래머를 대상으로 작성중인 GIS 책을 동반하는 것입니다.


아래 제안을 시도한 후 가장 효과가 좋은 것은 'Paul Ramseys'솔루션이었습니다.

나는 이제 책에 충분히 단순하지만 흥미로운 지리 공간 SQL을 보여주기에 충분히 복잡한 멋진 counties & boroughs 파일을 가지고 있습니다.

Paul의 솔루션이 궁극적으로 저에게 도움이 된 솔루션 이었지만 다각형 맵을 단순화하고 복잡성을 더 줄이는 것과 같은 다른 답변을 얻었습니다.

그러나이 작업을 수행하면서 관찰 한 것은 ST_Collect가 실제로 ST_Union보다 빠르지 만 실행을 위해 실행되는 것은 깨진 형상을 주로 담당 한 것입니다. 내 생각에 핵심 기능의 정확도가 떨어지면서 속도가 증가합니다.


이 프로세스를 "디졸브"라고합니다. PostGIS에 익숙하지는 않지만 ST_Union 명령을 사용하여 디졸브를 수행 할 수 있다고 생각합니다 .
— dmahr

dmahr 안녕, 정화 주셔서 감사합니다, 당신은 내 질문을 읽으면 그러나 당신은 내가 이미 :-) 시도 볼 수 있습니다, 그것은 불렀다 무엇인지 확실하지 않았다
— Shawty 더

죄송합니다. 보지 못했습니다. astext(multi())부분 없이 select 문을 사용해 보셨습니까 ? 다른 PostGIS 디졸브 예제에서 보는 것에서 벗어나고 있습니다.
— dmahr

아직 시도하지 않을 것입니다. Tks. 디졸브 예제에 대한 링크가 있습니까?
— shawty

"단일 외부 링"을 원한다면 명시 적으로 편집하십시오. (내 답변 참조)
— 피터 크라우스

답변:


43

ST_Union은 작동하지만 라인 작업은 거의 깨끗하지 않습니다. 따라서 작은 것들의 경계가 모두 완벽하게 좋아지는 것은 아닙니다. 꼭지점을 정렬 할 확률을 높이기 위해 그리드에 부드럽게 맞출 수는 있지만 여전히 작동하지 않는 몇 가지 사례가 있습니다. 그것들은 공차를 넘어서거나 정점이 쌍을 이루지 않는 장소가있을 것이므로 한쪽에는 정점이 있고 다른쪽에는 정점이 있습니다.

 CREATE TABLE merged AS
 SELECT ST_Union(ST_SnapToGrid(the_geom,0.0001)) 
 FROM parishes
 GROUP BY county_name;

PostGIS 2.0을 사용하는 경우 공차가있는 토폴로지 구조를 구축하면 운이 좋으면 원하는 답을 얻을 수 있습니다.


도형 수정에 대한 좋은 실마리이지만 "... 모든 폴리를 포함하는 단일 외부 링에서 하나의 큰 다각형 ..."에 대해?
— 피터 크라우스

나는 'SnapTo'에 대해 몰랐습니다. 나는 그것을 시도해 볼 것입니다 :-) Tks. 불행히도, 아직 PG 2를 사용하지 않고 있지만 업그레이드는 파이프 라인에 있습니다.
— shawty

구문이 올바른지 확실하지 않습니다. 당 postgis.net/docs/ST_Union.html은 , 제 2 매개 변수에 숫자를 받아에는 서명이 없습니다.
— Aren Cambre

네 말이 맞아, 괄호가 잘못된 곳에 있었어 편집했습니다.
— Paul Ramsey

이것과 동등한 mysql이 있습니까? 나는 계속 얻었고 Incorrect parameter count in the call to native function 'ST_Union'그것이 mysql 제한인지 모른다.
— Jayen

7

"... 모든 폴리를 포함하는 단일 외부 링에서 하나의 큰 다각형을 형성해야합니다 ..."라고 말합니다. ST_ExteriorRing이이 작업을 수행합니다.

SELECT ST_MakePolygon(ST_ExteriorRing(ST_Union(GEOM)))
FROM GEOMTABLE GROUP BY ATTRCOLUMN

제안 된대로 ST_Union ()을 사용하거나 ST_Collection ()으로 테스트 할 수 있습니다.


참고 : 작은 기울기 또는 "깨진 형상"을 피하기 위해 각 형상에 st_convexhull 및 / 또는 ST_Simplify를 사용할 수 있습니다.

SELECT ST_MakePolygon(ST_ExteriorRing(ST_union(ST_Simplify(GEOM,0.5))))
FROM GEOMTABLE GROUP BY ATTRCOLUMN

형상을 확인하고

SELECT * FROM (
   SELECT gid, ST_IsValid(geom) as valid, ST_IsSimple(geom) as simple 
   FROM GEOMTABLE) AS t  
WHERE NOT(valid AND simple); 

혼란스러워서 미안합니다. 내 설명에서 의미하는 것은 작은 것에서 생성 된 하나의 큰 다각형이었습니다. 컨텍스트 '외부 링'에 따라 사람들마다 다른 것을 의미 할 수 있다는 것을 알고 있습니다. 각 다각형 그룹 주위에 경계가 있습니다.
— shawty

7

ST_Collect 함수는 PostgreSQL의 용어에서 "집계"함수입니다.

" SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN"는 별개의 ATTRCOLUM 값에 대해 별도의 GEOMETRYCOLLECTION을 반환합니다.

http://postgis.net/docs/ST_Collect.html

참고 : ST_Collect는 ST_Union보다 훨씬 빠릅니다.


3
나는 그것을 시도하고 약간 다른 결과를 얻었지만 필요한 기하학 컬렉션입니까? 필자는 본질적으로 구멍이있는 큰 다각형 하나를 만들려고 노력하고 있습니다 (특히 Derbyshire & nottinghamshire에서는 더비와 노팅엄이 모두 중앙에 별도의 구역을 형성하고 있습니다. 속도 차이를 관찰 했으므로 말이죠.
— shawty

2

귀하의 질문에서 귀하가 Ordnance Survey의 경계선 제품을 사용하고 있다고 가정합니다. 이 경우 카운티 수준 데이터 세트가 이미 포함되어 있으므로 하위 수준의 교구 지역에서 직접 생성 할 필요가 없습니다.

Boundary-Line을 사용하지 않는 경우 OS OpenData 라이센스에 따라 무료이며 카운티 파일을 모양 파일로 사용하여 PostGIS에 직접로드 할 수 있으므로 권장합니다.


2
모르는 사람들을위한 링크를 제공하는 것은 어떻습니까? 감사.
— jonatr

1
안녕하세요 CHEnderson 당신은 사실 맞습니다. 그렇습니다 .OS Opendata의 경계 레이어 데이터 세트를 사용하고 있습니다. 불행히도 카운티 경계가 완전하지 않습니다. 실제 카운티의 형상 파일에는 카운티라는 이름의 파일 만 포함되며 런던 자치구에는 주변 지역이 포함됩니다 런던 및 기타 파일에는 모두 일부가 포함되어 있으며, 일부는 다른 것보다 낮고 낮습니다. 영국의 전체 개요가 들어있는 유일한 파일이며 결과적으로 하나의 계층에서 모든 상위 레벨 카운티와 도시 경계를 추출 할 수있는 기회는 교구 계층이므로 필자가 시도하는 이유입니다.
— shawty

관심있는 사람들을 위해 당신은 여기에서 카운티 경계 등을 다운로드 할 수 있습니다 : ordnancesurvey.co.uk/oswebsite/products/os-opendata.html
— shawty
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.