[GIS팁] 최소 경계 사각형 구하기(Minimum bounding rectangle)
기하학 객체(Geometry)의 범위를 구할때 통상 MBR을 Extent와 동일하게 생각하여 최대/최소 꼭지점만으로 구하다보니 여러 공간연산시 정밀하거나 응용시 의문을 가지며 사용하곤한다. 즉, 일반적으로 MBR은 1차 근사 공간 쿼리 또는 공간 인덱싱 목적을 위해 지리적 특징 또는 데이터세트 의 일반적인 위치를 나타내는 표시로 자주 사용됩니다.
그러나, 점들의 집합에서 만든 Convex Hull 등을 만들다 보면 그 MBR이 이 MBR이 아닌데 하곤한다.
그래서 MBR을 다시 세분화하여 구분한다.
(1) AABB(Axis Aligned Bounding Box) : 객체의 경계 상자를 계산하는 가장 쉬운 방법으로 정점의 최소 및 최대 좌표. (2) OMBB(Oriented Minimum Bounding Box) : 최소 방향 경계 상자는 가장 작은 영역 둘러싸는 사각형 좌표. |
예시화면1) 통상 MBR을 Extent와 동일 생각시 좌측 처럼 최소경계를 구합니다.
우측 파란색 사각형은 smallestSurroundingRectangleByWidth 라이브러리에 의해 생성되었으며,
빨간색 사각형은 smallestSurroundingRectangleByArea 라이브러리의 출력한 예 입니다.
예시화면2) 각 포인트의 분포도로 Convex Hull 생성후 MBR구하기
그러면, AABB(Axis Aligned Bounding Box)와 OMBB(Oriented Minimum Bounding Box)는 언제 구분되어 사용되어질것인지를 고민해보았습니다.
- 공간연산이나 쿼리시 AABB로 먼저 요청 처리하는데 유용하고, 그 다음은 해당 객체(Geometry)에 포함 등의 세부
연산을 하는 필터처럼 사용할 수 있습니다.
- 그러나 이러한 세부 연산이 복잡하거나 시간이 많이 소요되는 경우 OMBB로 한번더 필터링을 할 수도 있다.
- 그리고 최근 건축자동설계시스템이나 입지분석 등에서 토지방향성을 구할때 사용할 수도 있습니다.
- 예전글중 지적선과 일치한 건물선 적용 및 최대 직사각형과 조합한 건물 외곽 반영시 "영역내 최대 직사각형"
구하기로 토지의 방향을 구했는데 이것을 OMBB으로 수식을 버꿔서 사용하기로 했습니다.(하단 그림)
- 그리고 빌라짓기(단동 배치)시에도 너무 과도한 학습으로 최대 건축면적만을 위한 영역보다는 OMBB로 최대한
유사한 각도내의 영역을 구하는것으로 응용하였습니다. (상단 그림)
이러한 OMBB을 구하는 알고리즘이나 위에서 말한 라이브러리가 존재합니다.
그중에 캘리퍼스 알고리즘(Rotating calipers)을 반대로 간편하게 사용해보았습니다.
(1) 객체의 기하학적 무게중심점으로 0~360도 반복 회전합니다.
(2) 그리고 각각의 MBR에 대한 면적이 가장 작은 최적의 경계 상자를 구합니다.
(3) 용도에 맞게 최소/최대 면적 또는 최대/최소 변 길이 또는 가로/세로 비율 등으로 선택하여 사용한다