임상도 셰이프파일을 받아서 바로 중첩분석이나 면적 통계를 돌렸다가 숫자가 이상하게 나온 경험, 공간정보 쪽에서 일하다 보면 한 번쯤은 겪는다. 폴리곤 경계선이 눈으로 보기엔 딱 붙어 있는데 실제로는 좌표가 미세하게 벌어져 있어서, 중첩분석 결과에 실제로는 존재하지 않는 좁고 긴 조각이 끼어들거나 반대로 두 폴리곤이 살짝 겹쳐서 면적이 중복 집계되는 식이다. 이 글에서는 그런 조각이 왜 생기는지가 아니라, 분석을 돌리기 전에 임상도 레이어 자체의 지오메트리 상태를 어떻게 점검하고 걸러내는지를 다룬다.
스캔·디지타이징 단계에서부터 어긋나는 경계
임상도는 대부분 과거 종이 임상도를 스캔해서 벡터화하거나, 여러 시기에 서로 다른 담당자가 구획을 나눠 작업한 결과물을 합쳐서 만든다. 이 과정에서 인접한 두 임상 구획의 경계선을 각자 따로 그리면, 스냅 설정을 켜두지 않은 이상 두 선은 완전히 일치하지 않는다. 축척이 큰 지도에서는 안 보이는 수준의 틈이지만, 좌표계를 투영좌표계로 바꾸고 줌을 당겨보면 어김없이 벌어져 있다. 여기에 임도·사면 경계처럼 다른 레이어와 겹쳐서 작업한 폴리곤은 외부 데이터의 좌표 소수점 자릿수 차이까지 얹혀서 틈이 더 벌어지는 경우도 흔하다.
QGIS Topology Checker로 문제 구간 찾아내기
QGIS에는 기본 제공되는 Topology Checker 플러그인이 있다. 플러그인 관리자에서 활성화한 뒤 규칙을 등록할 수 있는데, 임상도 품질검사에 실제로 쓸만한 조합은 세 가지 정도다. “Must not overlap”으로 폴리곤 간 겹침을, “Must not have gaps”로 인접 폴리곤 사이의 틈을, “Must not have duplicates”로 중복 digitizing된 폴리곤을 걸러낸다. 검사를 돌리면 오류 지점이 지도 위에 빨간 점으로 찍히고 하단 테이블에 좌표와 오류 유형이 쌓인다. 임소반 단위로 끊어서 검사하면 전체 레이어를 한 번에 돌리는 것보다 어디서 틀어졌는지 훨씬 빨리 짚어낼 수 있다.
자동 수정과 수동 수정을 섞어 쓰는 기준
오류가 수백 개씩 나오면 하나씩 손으로 고치는 건 현실적으로 불가능하다. Processing 툴박스의 “Fix geometries”는 자가교차나 유효하지 않은 폴리곤을 상당 부분 정리해주고, GRASS의 v.clean 도구는 snap·break·rmdupl·prune 같은 옵션을 체인으로 걸어서 틈과 중복을 한꺼번에 정리하는 데 유리하다. 다만 이 도구들이 자동으로 경계를 밀어붙이면서 작은 폴리곤이 통째로 사라지거나 엉뚱하게 합쳐지는 경우가 있어서, 자동 처리 전후로 폴리곤 개수와 전체 면적을 반드시 비교해봐야 한다. 임상 구획 하나가 통째로 날아갔는데 면적 합계만 보면 티가 안 나는 경우도 있다.
실무에서 챙겨야 할 체크포인트
스냅 허용오차는 좌표계 단위에 맞춰 잡아야 한다. 위경도 좌표계에서 쓰던 값을 그대로 투영좌표계에 넣으면 허용오차가 턱없이 작거나 커진다. 작업 전에는 원본 레이어를 반드시 따로 백업해두고, 수정은 복사본에서 진행한다. 검사와 수정이 끝나면 임상도 속성 코드가 지오메트리 수정 과정에서 깨지지 않았는지도 함께 확인한다. 현장조사 시즌이 지나고 받은 최신 버전과 기존 버전을 같은 작업공간에 올려두고 비교하면, 벌채나 산불 피해지처럼 실제로 구획이 바뀐 곳과 단순 디지타이징 오차를 구분하기도 쉬워진다.
정리
중첩분석이든 임상도 기반 면적 산출이든, 결과가 미묘하게 안 맞을 때 제일 먼저 의심해봐야 할 건 분석 로직이 아니라 입력 레이어의 지오메트리 상태인 경우가 많다. Topology Checker로 문제 구간을 찾고, Fix geometries와 v.clean으로 반복 작업을 줄이되, 자동 수정 결과는 반드시 눈으로 한 번 더 확인하는 순서를 지키면 나중에 통계 자료를 뒤집어야 하는 일을 줄일 수 있다.