ST_Union을 사용하여 ArcGIS for Desktop과 동일하게 달성하는 방법은 무엇입니까?


11

PostGIS의 ST_Union을 사용하여 ArcGIS for Desktop의 디졸브 도구와 동등한 기능을 달성하려고하는데 예상 한 결과를 얻지 못하는 것 같습니다.

Polygon Geometry에 특정 속성이있는 하나의 테이블이 있습니다. (FID, Locstat, Loccnt, Shape와 같은)

내 쿼리는 다음과 같습니다.

SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;

1
어떤 결과를 얻고 있으며 어떤 결과를 얻고 있는지 설명 할 수 있습니까? 실행 중 : SELECT AsText (ST_Union ...) FROM ...이 오류를 찾는 데 도움이 될 수 있습니다.
Micha

표에서 ArcGIS 결과에 따라 6842 레코드가 있습니다. 쿼리를 사용할 때 6842 레코드를 얻는 곳에서 1683 레코드를 가져와야합니다. 또한 ST_Aggr_Union을 시도하여 여러 null 지오메트리로 742 개의 레코드를 제공합니다.
Dhams

답변:


14

그룹 별 필드에 포함 된 내용으로 인해 문제가 발생했을 수 있습니다.

ST_UNION은 집계 함수로, GROUP매개 변수 로 지정한 내용에 따라 분해 됩니다.

입력 한 내용은 다음과 같습니다.

SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;

이것에 따르면, 당신 fid은 아마도 고유 식별자 일 것입니다 boundaryshape. 그리고 기하학 인. 이것의 문제는 고유 ID를 공유하는 기능이 동일한 형상을 가질 가능성이 거의 없다는 것입니다. 따라서 ST_Union아마도 다음과 같은 것으로 끝날 것입니다.

Input:   
fid     boundaryshape  
1         11  
1         12  
1         11  
1         13  
2         12  
2         13  
2         12  
3          5  
3          2  
3          4  

Output:  
fid     boundaryshape  
1        (11 + 11)  
1        12  
1        13  
2        (12 + 12)  
2        13  
3        2  
3        4  
3        5

이 경우 실제로 동일한 중복 형상을 여러 개 가지고 있지 않으면 fid제거하려는 고유 식별자를 기반으로 해산해야합니다 . 이 경우에도를 기준으로 그룹화 fid하면되며 유니온은 형상 복제를 처리합니다.

나는 다음을 시도 할 것이다 :

SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;

공통 속성을 기반으로 모든 기능을 해산 한 결과를 얻을 수 있습니다 fid.

PostGIS 사이트의 도움말 문서는 다음과 같습니다. ST_Union

맨 아래에 나열된 첫 번째 예를 참조하여 그룹 별 섹션에 형상이 포함되어 있지 않은지 확인하십시오.


1
경우에 따라 유니온을 수행하기 전에 형상을 그리드에 스냅하는 것이 좋습니다. SELECT ST_Union (ST_SnapToGrid (geom, 0.0001)) FROM geo_area group by level_identifier;
Maxim Eliseev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.