개요

공공개방되는 공간정보에는 건물도 포함됩니다. 건물 데이터는 수치지형도, 건물통합데이터, 도로명주소 건물 등 정보소스가 있습니다. 실제 데이터를 보게되면 건물 형상 등에 차이가 존재합니다. 필자는 단순히 형상이 틀립니다가 아닌 틀린 정도를 수치로 표현하려 합니다. 

본 게시글의 이해를 위하여 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);

 

맺음말
저는 단순히 거리만을 산출했습니다. 건물유형 별 산출된 거리의 평균값과 표준편차를 구한다면 전체 수준에서 데이터 유사성 수준을 평가할 수 있습니다. 필자가 전하고자 하는 메시지는 한결같습니다. 공간DBMS의 올바른 활용만으로 가성비좋은 앱을 제작할 수 있습니다.
즐 코딩 하십시오~~
 

 

+ Recent posts