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.