개요
공공개방되는 공간정보에는 건물도 포함됩니다. 건물 데이터는 수치지형도, 건물통합데이터, 도로명주소 건물 등 정보소스가 있습니다. 실제 데이터를 보게되면 건물 형상 등에 차이가 존재합니다. 필자는 단순히 형상이 틀립니다가 아닌 틀린 정도를 수치로 표현하려 합니다.
본 게시글의 이해를 위하여 Hausdorff Distance에 대한 이해가 필요합니다. Hausdorff Distance는 점으로 이루어진 두 집합(포인트세트) 간의 거리를 결정하는 방법입니다. 두 집합 사이의 근접점에서 떨어진 가장 먼 지점을 찾습니다. 일반적으로 두 점(Point)간의 거리는 최단거리가 정의되는 거리입니다. 그러나 다각형의 경우 모든 점이 최단거리일 수 없습니다.
이를 적용하여 개별 공간 객체의 Hausdorff Distance를 구하여 객체 형상의 유사성을 검사할 수 있습니다. 거리 값이 작을수록 건물의 형상은 유사하다라고 정의할 수 있습니다.
> 바로가기 : Hausdorff Distance (위키피디아)
> 바로가기 : Computing Geometric Similarity
본문
1. Hausdorff Distance의 이해
아래의 질의를 실행하여 객체의 좌표를 변경해가며 산출되는 거리를 보면 이해가 쉽습니다.
SELECT ST_HausdorffDistance('MULTIPOINT (0 0, 1 0)'::geometry, 'MULTIPOINT (0 2, 1 2, 2 2)'::geometry);
2. 검사 대상 데이터 준비
QGIS를 이용하여 건물통합 건물과 도로명주소 건물에서 여의도 지역만을 추출하여 4326좌표계로 전환한 후 PostGIS에 적재합니다. 실제 중첩한 형상을 보면 형상이 상당 부분 일치하지 않는 것을 볼 수 있습니다.
3. 거리 산출 수행 : ST_HausdorffDistance 함수 실행
수행 과정은 단순합니다. 그저 공간위상관계가 교차(ST_Intersects)하는 객체를 찾아 객체간 거리 산출(ST_HausdorffDistance) 함수를 적용하게 되면 두 건물간의 거리가 산출이 됩니다. 이를 통해 산출된 거리 값이 작을수록 두 건물은 유사한 형상을 가지고 있다라고 정의할 수 있습니다.
SELECT DISTINCT ON(TEST_BD_1.bd_mgt_sn) TEST_BD_1.bd_mgt_sn, TEST_BD_1.bld_nm, TEST_BD_2.buld_nm,
CAST(ST_HausdorffDistance(TEST_BD_1.geom, TEST_BD_2.geom) as numeric) as hdist1
FROM TEST_BD_1 INNER JOIN TEST_BD_2 ON ST_Intersects(TEST_BD_1.geom, TEST_BD_2.geom)
ORDER BY TEST_BD_1.bd_mgt_sn, ST_HausdorffDistance(TEST_BD_1.geom, TEST_BD_2.geom);
'꿀팁 - PostGIS' 카테고리의 다른 글
PostGIS 에서 Geometry 오류 수정 (3) | 2019.03.26 |
---|---|
수치지형도 등고선을 이용한 DEM 제작 방법 (2) | 2019.03.22 |
PostGIS에서 Voronoi Daiagram을 이용한 경계 분할 (0) | 2019.03.12 |
PostGIS에서 공간 테이블 좌표변환 (0) | 2019.01.09 |
Postgresql 좌표계 등록 및 한국 EPSG 코드 계수 값에 대하여 (1) | 2018.10.24 |