임도 대장을 GIS 레이어로 옮겨달라는 요청을 받으면 대개 폴리라인을 그대로 디지타이징해서 넘기는 걸로 끝났다고 생각하기 쉽다. 문제는 그 다음이다. 방화선 배치나 수확 반출 루트를 짤 때 “이 지점에서 임도를 따라가면 최단거리가 얼마냐”를 물어보면, 화면상으로는 분명히 이어져 있는 선인데 네트워크 분석 결과가 엉뚱하게 끊기거나 아예 경로를 못 찾는 경우가 나온다. 원인은 대부분 눈에 안 보이는 토폴로지 문제다.
왜 화면에선 붙어 있는데 라우팅은 끊기는가
QGIS의 네트워크 분석이든 pgRouting이든, 선형 데이터를 그래프로 인식하려면 정점(vertex)과 정점이 좌표값까지 정확히 일치해야 하나의 노드로 묶인다. 육안으로는 두 선이 만나는 것처럼 보여도 좌표가 소수점 여섯째 자리에서 어긋나 있으면 프로그램은 그걸 별개의 끝점으로 처리한다. 임도처럼 현장 GPS 측량 데이터와 위성영상 트레이싱 결과를 이어 붙여 만든 레이어에서 특히 자주 나오는 증상이다. 스냅 허용오차를 넉넉하게 잡지 않고 급하게 이어 그리면 언더슈트(undershoot)로 미세한 틈이 남고, 반대로 교차로 부근에서 선을 너무 길게 끌어다 붙이면 오버슈트(overshoot)가 생겨 실제로는 만나지 않는 지점에서 만난 것처럼 계산된다.
또 하나 흔한 실수는 교차점에서 선을 분할하지 않는 것이다. 임도 본선과 지선이 X자로 교차하는 구간을 하나의 폴리라인으로 그대로 두면, 소프트웨어는 그 교차점을 정점으로 인식하지 못하고 지선 쪽으로 경로를 꺾을 방법이 없다고 판단해버린다. 현장에서 새로 뚫은 임도를 연차별로 추가하면서 기존 선형을 건드리지 않고 옆에 새 폴리라인만 이어 붙이는 작업을 반복하다 보면, 이런 미접합 구간이 레이어 전체에 누적된다.
QGIS 토폴로지 체커로 미리 걸러내기
본격적인 네트워크 분석에 들어가기 전에 QGIS 기본 제공 플러그인인 Topology Checker를 켜서 dangling node, 중복 정점, 교차 미분할 같은 규칙을 걸어두는 게 순서다. 임도 레이어처럼 선형 하나짜리 데이터는 “must not have dangles”와 “must not intersect” 규칙만 걸어도 절반 이상의 문제가 드러난다. 다만 임도는 막다른 지선이 정상적으로 존재하기 때문에 모든 댕글을 오류로 잡으면 안 되고, 실제 종점인지 미접합 구간인지는 항공정사영상이나 현장 GPX 트랙을 같이 띄워놓고 눈으로 한 번 더 확인해야 한다. 자동 검사 결과만 믿고 일괄 스냅을 걸었다가 원래 떨어져 있어야 할 두 지선이 붙어버리는 경우도 종종 발생한다.
기하 정합이 끝나면 v.clean(GRASS) 또는 QGIS의 “지오메트리 처리 > 라인 교차점에서 분할” 도구로 교차 구간을 실제 정점으로 쪼개준다. 이 단계를 건너뛰고 바로 라우팅을 돌리면, 겉보기엔 멀쩡한 네트워크인데도 특정 지선으로는 절대 진입할 수 없는 그래프가 만들어진다.
QGIS 내장 네트워크 분석과 pgRouting, 언제 무엇을 쓸까
토폴로지가 정리됐다면 도구를 고를 차례다. QGIS의 네트워크 분석 라이브러리(프로세싱 툴박스의 “최단경로” 계열)는 별도 서버 없이 바로 쓸 수 있고, 한두 개 노선의 최단거리나 서비스 영역을 빠르게 뽑아볼 때는 이걸로 충분하다. 반면 임도 전체 네트워크를 대상으로 여러 반출 지점에서 동시에 최적 경로를 비교하거나, 경사도·노면 상태 같은 가중치를 얹어 여러 시나리오를 반복 계산해야 한다면 PostgreSQL/PostGIS에 pgRouting을 얹는 쪽이 낫다. pgr_dijkstra나 pgr_astar 함수는 SQL 한 줄로 다중 출발지-도착지 조합을 한 번에 처리할 수 있어서, 반출 계획을 여러 안으로 놓고 비교 검토할 때 시간이 확실히 줄어든다.
가중치를 줄 때는 단순 거리보다 실제 통행 조건을 반영하는 게 현장 감각에 가깝다. 경사가 급한 구간이나 우기에 노면이 약해지는 구간에 비용을 더 얹어두면, 물리적으로는 짧아도 실제로는 잘 쓰지 않는 노선이 최단경로로 튀어나오는 일을 줄일 수 있다. 다만 이 가중치는 현장 경험치에 기반한 상대적 조정이지 정량화된 공식이 있는 건 아니라서, 처음에는 보수적으로 잡고 실제 반출 실적과 비교하면서 조금씩 보정해나가는 편이 안전하다.
작업 전 체크리스트
실무에서 놓치기 쉬운 부분만 추려보면 이렇다. 레이어 좌표계가 처음부터 끝까지 하나로 통일되어 있는지, 특히 GPS 수집분과 도면 트레이싱분을 합칠 때 좌표계가 섞이지 않았는지부터 본다. 스냅 허용오차는 축척과 데이터 출처에 맞춰 설정하되, 한 번 정하면 레이어 전체에 동일하게 적용해야 나중에 구간별로 다시 손대는 일이 없다. 교차점은 자동 분할 후에도 표본으로 몇 군데는 직접 줌인해서 확인하고, 막다른 지선과 미접합 오류를 구분할 때는 현장 자료를 반드시 대조한다. 네트워크가 완성되면 실제로 아는 두 지점을 골라 경로를 뽑아보고 상식적인 결과가 나오는지 검증하는 것도 빼먹지 않는 게 좋다.
임도 네트워크 데이터는 한 번 정리해두면 벌채 계획, 산불 진화 동선, 시설물 유지보수 순회까지 여러 업무에서 반복해서 꺼내 쓰게 된다. 처음 구축할 때 토폴로지를 꼼꼼히 잡아두는 수고가, 나중에 매번 경로가 이상하다며 레이어를 뜯어고치는 것보다 훨씬 적게 든다.