공간 데이터, 연결되어 보인다고 연결된 게 아닙니다

네트워크 통합부터 E2SFCA 접근성 분석까지

들어가며

공간 데이터를 다루다 보면 한 번쯤 이런 경험을 하게 됩니다.

QGIS나 지도 화면에서 보면 도로가 분명히 이어져 있는데, 파이썬에서 경로 분석을 돌려보면 엉뚱한 결과가 나옵니다. 두 지점 사이에 분명히 도로가 있고, 거리도 가까운데, 알고리즘은 ‘연결 없음’이라고 판단합니다. 처음에는 코드 버그를 의심하게 되지만, 원인은 전혀 다른 곳에 있는 경우가 많습니다.

“눈에 보이는 연결”과 “데이터 상의 연결”이 다르기 때문입니다.

파이썬의 네트워크 분석 라이브러리는 두 선분이 공간적으로 가까워도 연결되었다고 판단하지 않습니다. 공간 데이터를 그래프로 변환할 때 선분의 끝점 좌표가 노드로 등록되는데, 이때 좌표값이 float 수준에서 완전히 동일해야만 같은 노드로 인식됩니다. 서로 다른 출처의 공간 데이터를 합칠 때 이 문제가 심각해지는 이유는, 각 데이터가 서로 다른 정밀도와 기준으로 만들어졌기 때문에 육안으로는 이어 보이는 끝점들이 실제로는 수 센티미터~수 미터씩 어긋나 있기 때문입니다.

이 글은 25년 행정안전분야 정책현안 데이터 분석 사업의 전국 유인섬 응급의료 공백 해소 과제를 수행하면서 직접 겪은 이 문제와 해결 과정을 정리한 것입니다. 육상 도로망(873,579개 구간)과 해상 항로(752개)를 하나의 네트워크로 통합하는 과정에서, 데이터 상 분절 문제를 어떻게 발견하고 단계적으로 해소했는지를 공유합니다. 그리고 그렇게 만든 통합 네트워크를 기반으로 공간적 서비스 접근성을 정량화하는 E2SFCA 기법을 소개합니다.

이 글에서 다루는 작업

공간 데이터 분석 파이프라인에서 이 글이 다루는 위치는 다음과 같습니다.

• 공간 데이터 전처리: 이기종 데이터를 하나의 연결된 네트워크 그래프로 만드는 작업. 중복 선 제거, 교차점 생성, 끝점 스냅 등 5단계로 구성됩니다. (Part 1에서 다룹니다)
• 스냅 매칭: 격자 중심점과 의료기관을 네트워크 선상의 가장 가까운 노드에 붙이는 작업. Part 1에서 만든 네트워크가 전제 조건이 됩니다. (Part 2 도입부에서 다룹니다)
• 접근성 분석: 수요(인구)와 공급(병상 수)을 모두 반영한 E2SFCA 기법으로 격자별 접근성을 정량화합니다. (Part 2에서 다룹니다)


Part 1. 공간 데이터 통합 — 어떤 경우의 수를 고려해야 하는가

1-1. 문제 발견: 코드는 멀쩡한데 결과가 이상하다

전년도 사업 중, 전국 유인섬 473개의 응급의료 접근성을 분석하는 과제가 있었습니다. 섬에서 응급의료기관까지 이동하려면 육상 도로뿐 아니라 여객선·유도선 등 해상 경로도 거쳐야 합니다. 이 복합적인 이동 경로를 반영하기 위해 도로 네트워크 데이터와 항로 데이터를 하나의 통합 네트워크로 구성했습니다.

그런데 첫 접근성 분석을 돌렸을 때 결과가 완전히 어긋났습니다. 특정 섬에서 인근 응급의료기관까지의 경로가 전혀 계산되지 않았고, 실제로는 연결된 도로임에도 불구하고 도달 불가로 처리되는 경우가 속출했습니다.

QGIS에서 데이터를 직접 시각화해 보았더니, 원인을 파악할 수 있었습니다. 육안으로는 도로들이 서로 이어져 보였지만, 실제 데이터 상에서는 분절되어 있었습니다. 구체적으로 두 가지 유형의 문제가 확인됐습니다.

1-2. 분절이 발생하는 두 가지 경우

① 중복 선 문제

하나의 선처럼 보이지만, 좌표가 완전히 동일한 선이 2개 이상 중복 저장된 경우입니다. 여러 레이어를 통합하는 과정에서 발생합니다. 겹쳐진 선들이 서로 교차하거나 연결된 것으로 자동 처리되지 않기 때문에, 그래프 상에서는 별개의 고립된 구간이 됩니다. 보다 자세히 설명하자면, 접근성 분석을 위해서는 실제 도로가 끊기지 않는 한, 전체 네트워크망이 하나의 연결된 그래프여야 합니다. 그런데 중복 선이 존재하여 같은 위치에 선분 A와 선분 B가 겹쳐 있고 그래프를 구성하면 선분 A에 연결된 그래프와 선분 B에 연결된 그래프로 나뉘어집니다. 그 결과 실제로는 이어진 도로임에도 경로 계산이 불가능해집니다.

② 교차점·끝점 불일치 문제

육안으로는 두 도로가 교차하거나 이어진 것처럼 보이지만, 실제 좌표값이 수 미터 단위로 어긋나 있는 경우입니다. 이번 프로젝트에서는 특히 두 상황에서 이 문제가 두드러졌습니다.

• 도로 데이터가 시도(광역시·도) 단위로 분리 저장되어 있어, 시도 경계에서 인접한 구간의 끝점이 수 센티미터~수 미터 단위로 어긋나 있었습니다.
• 서로 다른 좌표 정밀도로 만들어진 도로 데이터와 항로 데이터를 병합할 때, 항구 인근에서 두 데이터의 연결 지점이 일치하지 않았습니다.

NetworkX와 같은 네트워크 분석 라이브러리는 끝점 좌표가 정확히 일치할 때만 두 선분을 연결된 것으로 인식합니다. 1mm의 오차라도 있으면 두 선분은 별개의 단절된 구간으로 처리됩니다.

1-3. 5단계 보정 프로세스

분절 문제를 해소하고 통합 네트워크를 구성하기 위해 아래 5단계를 순서대로 수행했습니다.

① 선형 데이터 표준화 (중복 선 제거) 

좌표가 완전히 동일한 중복 선분을 탐지하고 하나만 남겼습니다. 눈으로는 하나처럼 보이지만 실제로 2개 이상 겹쳐 저장된 선분들이 이 단계에서 정리됩니다.

② 교차점 생성 

도로 간, 도로와 항로 간 교차해야 하는 지점을 식별하고 교차점을 생성했습니다. 끝점 간의 거리 차이가 2m 이내이면 교차 지점으로 식별하는 기준을 적용했습니다.

③ 교차점 기준 선 분할 

앞 단계에서 생성한 교차점을 기준으로 선분을 정확히 분할했습니다. 교차점 위치에서 분할하면, 두 도로가 해당 지점에서 실제로 연결된 것으로 그래프가 인식합니다.

④ 도로·항로 끝점 스냅  2m 이내 자동 처리

끝점끼리 이어져야 하지만 어긋나 있는 지점을 자동으로 연결했습니다. 끝점 간 거리가 2m 이내인 경우 스냅(snap)을 통해 자동으로 붙이는 처리를 적용했습니다. 좌표 정밀도 차이로 수 센티미터~수 미터 단위로 어긋나 있던 끝점들이 하나로 합쳐졌습니다.

⑤ 수동 보정  100m 이상 이격 구간

자동 스냅으로 해결할 수 없는 100m 이상 이격 구간도 다수 존재했습니다. 원본 데이터 자체에 도로가 중간에 끊겨 있는 경우로, 자동화 처리로는 대응이 불가능했습니다. 실제 도로 흐름을 지도에서 직접 확인하며 끊긴 구간에 선분을 수동으로 추가·연결했습니다.

1-4. 통합 네트워크 완성

5단계 보정이 완료된 후, 도로구간·여객선 항로·유도선 항로·연결선 4종의 라인 데이터를 하나의 네트워크로 병합했습니다. 각 라인에는 식별번호·유형·구간명·길이·속도·소요시간·위치 좌표 속성이 표준화된 형태로 저장됐습니다.

좋은 분석은 좋은 데이터 인프라 위에서만 가능합니다. 이렇게 완성된 통합 네트워크는 이후 접근성 분석의 기반이 됩니다. 네트워크가 제대로 구성되어 있지 않으면, 아무리 정교한 분석 알고리즘을 적용해도 결과는 왜곡될 수밖에 없습니다.


Part 2. E2SFCA 기반 응급의료 접근성 분석

2-1. 분석 전 준비: 스냅 매칭

Part 1에서 만든 통합 네트워크를 실제 접근성 분석에 쓰려면, 분석 대상인 격자 중심점(수요)과 응급의료기관(공급)이 네트워크 선상에 위치해야 합니다. 현실에서 사람이 사는 위치와 병원의 좌표가 도로 위에 정확히 있지는 않기 때문입니다. 이 작업을 스냅 매칭(Snap Matching)이라고 부릅니다.

1. 유인섬 격자 중심점 생성: 유인섬 경계 데이터를 기반으로 100m × 100m 격자를 구성하고, 거주 인구가 있는 격자의 중심점 좌표를 생성합니다.

2. 네트워크 노드 추출: 통합 네트워크의 모든 끝점(노드) 좌표를 추출합니다. 이 노드 목록이 ‘스냅 대상 후보 지점’이 됩니다.

3. 최근접 노드 탐색: 각 격자 중심점과 의료기관 좌표에 대해 가장 가까운 네트워크 노드를 찾습니다. 대규모 좌표 탐색을 빠르게 처리하기 위해 cKDTree(공간 인덱싱 알고리즘)를 사용했습니다.

4. 스냅 처리: 격자 중심점과 의료기관을 해당 최근접 노드 위치로 이동시킵니다.

이 과정이 끝나면, 격자·의료기관·도로·항로 모두가 동일한 네트워크 위에 올라오게 됩니다. 비로소 ‘섬에서 응급의료기관까지 얼마나 걸리는가’를 계산할 수 있는 조건이 갖춰집니다.

2-2. 기존 접근성 분석의 한계

서비스 접근성을 분석하는 대표적인 방법으로 2SFCA(Two-Step Floating Catchment Area)가 있습니다. 공급과 수요를 모두 고려한다는 점에서 단순 시설 수 집계보다 발전된 방법이지만, 두 가지 한계가 있습니다.

➀ 공급-수요 상호작용은 반영하지만 수요 가중치가 없음

집수구역 내 모든 인구를 동일하게 취급합니다. 병원 바로 옆에 사는 사람과 집수구역 경계 끝에 사는 사람이 동일한 수요로 계산됩니다.

② 거리 감쇠(Distance Decay) 무시

집수구역 경계 바로 안쪽에 있는 병원과 걸어서 5분 거리의 병원을 동일하게 취급합니다. 현실에서는 거리가 멀수록 실제 이용 가능성이 낮아지는데, 이를 무시합니다.

이 두 가지 문제를 함께 해결한 기법이 E2SFCA(Enhanced Two-Step Floating Catchment Area)입니다.

2-3. E2SFCA란 무엇인가

E2SFCA는 공간적 접근성을 정량화하기 위해 의료·복지·교통 분야에서 널리 쓰이는 분석 기법입니다. 기존 2SFCA 방법론의 한계(임계 거리 내부를 동일 가중치로 처리)를 보완하여, 거리가 멀어질수록 접근성을 낮게 평가하는 감쇠 함수를 적용합니다. 공급자(시설)의 서비스 범위와 수요자(인구)의 접근 가능성을 현실에 가깝게 반영한다는 것이 핵심입니다.

구분2SFCAE2SFCA
분석 방식2단계 부동 집수구역 기반 계산2SFCA + 거리 감쇠 함수 적용
공급-수요 반영공급량 / 수요 인구 비율공급량 / 가중 수요 인구 비율
거리 감쇠접수 구역 내부를 동일 가중치로 처리거리가 멀수록 가중치 감소
경계 효과집수구역 경계에서 단절 발생시간 권역을 복수로 나눠 점진적 반영

이름 그대로 두 단계(Two-Step)에 걸쳐 계산됩니다. 분석 기준점을 전체 공간에 걸쳐 이동(Floating)시키며 연산하기 때문에 이 이름이 붙었습니다.

STEP 1 — 공급자(병원) 기준 서비스 비율 산출

각 병원 j에 대해 일정 시간 범위(예: 30분·1시간·2시간 권역) 내에 있는 수요 인구 Pᵢ를 파악합니다. 이때 멀리 있는 인구에는 더 낮은 가중치 W(dᵢⱼ)를 적용합니다(거리 감쇠). 병원의 공급 능력(응급병상 수) Sⱼ를 가중 인구 합계로 나누어 ‘병원 j의 서비스 공급 능력 비율 Rⱼ’를 구합니다.

R = S ÷ Σ(P × W(dᵢⱼ))

STEP 2 — 수요자(격자) 기준 최종 접근성 합산

이번에는 반대로 각 인구 격자 i를 기점으로, 일정 시간 범위 내에 있는 모든 병원의 Rⱼ 값을 거리 가중치를 적용해 합산합니다. 이 최종값 Aᵢ가 높을수록 해당 격자의 응급의료 접근성이 좋습니다.

A = Σ R × W(dᵢⱼ)

이 방식의 핵심 의미를 풀어보면 이렇습니다. STEP 1에서 ‘이 병원이 주변 인구를 얼마나 감당할 수 있는가’를 먼저 계산합니다. 주변에 인구가 많으면 Rⱼ값이 낮아져 그 병원의 실질적인 서비스 여력이 낮게 평가됩니다. STEP 2에서는 그 여력이 낮은 병원이라도 가까이 있다면 더 높은 가중치로 반영됩니다. 결국 A 점수는 ‘내 주변에 병원이 얼마나 여유 있게 있는가’를 종합적으로 나타냅니다.

2-4. E2SFCA 분석 결과 활용

E2SFCA로 산출한 접근성 점수는 단순한 수치 이상의 의미를 가집니다. 이 방법론은 응급의료 외에도 서비스 공급자(시설)와 수요자(인구)가 분리된 구조라면 어디에나 적용할 수 있습니다.

• 소방서·경찰서 등 안전 서비스 입지 분석
• 공공 어린이집·학교 등 교육·돌봄 서비스 배치 최적화
• 대중교통 취약지 발굴 및 노선 개편 근거 마련
• 복지관·경로당 등 고령 인구 대상 서비스 접근성 평가


마치며

이 글을 통해 공간 데이터를 다루는 분들께 두 가지를 전달하고 싶었습니다.

첫째, 공간 데이터는 ‘보이는 것’과 ‘데이터 상의 것’이 다릅니다.

여러 출처의 데이터를 통합할 때, 시각적으로 이어져 보이는 것과 그래프 분석이 인식하는 연결은 완전히 별개입니다. 중복 선 문제, 교차점·끝점 불일치 문제는 공간 데이터 엔지니어링에서 매우 흔하게 발생하는 함정이며, 이를 단계적으로 점검하고 보정하는 전처리 과정이 분석 품질의 토대가 됩니다.

둘째, 접근성 분석에는 글로벌 표준에 가까운 방법론이 있습니다.

반경 내 시설 수를 세는 단순한 방식에서 벗어나, E2SFCA처럼 공급-수요 상호작용과 거리 감쇠를 함께 반영하는 기법을 적용하면 현실에 훨씬 가까운 결과를 얻을 수 있습니다. 의료 외에도 다양한 공공 서비스 분야에서 유용하게 쓸 수 있는 기법이니, 지역 간 불균형을 데이터로 규명해야 하는 상황이라면 도입을 검토해 보시길 권합니다.

좋은 분석은 좋은 데이터 인프라 위에서, 그리고 현실을 잘 반영하는 알고리즘과 함께 완성됩니다.


참고자료

[1] QGIS Development Team (2024). QGIS 공식 문서 — Topology 개념: 언더슛/오버슛 문제와 스냅. https://docs.qgis.org/3.44/en/docs/gentle_gis_introduction/topology.html

[2] QGIS Development Team (2024). QGIS 공식 문서 — Topology Checker Plugin: 중복 선·끝점 불일치 검사. https://docs.qgis.org/3.44/en/docs/user_manual/plugins/core_plugins/plugins_topology_checker.html

[3] Luo, W. & Wang, F. (2003). Measures of Spatial Accessibility to Health Care in a GIS Environment: Synthesis and a Case Study in the Chicago Region (2SFCA 최초 제안). https://journals.sagepub.com/doi/10.1068/b29120

[4] Luo, W. & Qi, Y. (2009). An enhanced two-step floating catchment area (E2SFCA) method for measuring spatial accessibility to primary care physicians (E2SFCA 원전). https://www.sciencedirect.com/science/article/abs/pii/S1353829209000574

[5] D-Lab, UC Berkeley (2021). Working with spatial networks using NetworkX. https://dlab.berkeley.edu/news/working-spatial-networks-using-networkx