전체 목차 열기 · 10부 35장

PART 07 / CHAPTER 25

25 · 최단경로와 공원 출입구 접근성

출입구와 도로 연결을 포함해 주거지에서 공원까지의 보행거리를 계산합니다.

이 페이지에서

학습 목표: 출입구와 도로 연결을 포함해 주거지에서 공원까지의 보행거리를 계산합니다.

준비: 실행 환경 · 도구와 용어. 예제 자료는 별도 표시가 없는 한 합성 자료입니다.

개념

Snapping은 점을 가까운 네트워크 위치에 연결하는 처리입니다. 가장 가까운 노드로만 연결하면 길 중간에 있는 실제 출입구의 위치가 부정확해질 수 있습니다. 정밀 분석에서는 가까운 간선에 점을 투영하고 간선을 나누며 통행 가능한 연결선을 검증합니다.

출발지 연결 거리 + 네트워크 거리 + 도착 출입구 연결 거리를 합해야 출입구까지의 거리라는 의미가 분명해집니다. 연결선이 벽이나 하천을 가로지르면 사용할 수 없습니다.

그림으로 이해하기

가까운 공원과 걸어서 가까운 공원

직선거리: 200m

출발점과 공원 출입구 사이 직선거리는 200m입니다. 직선은 연못을 가로지르므로 보행 가능한 길이 아닙니다.

직선거리는 위치 간 근접성을 나타냅니다. 사이에 무엇이 있는지는 따로 검사해야 합니다.

그림 크게 보기 ↗

보행거리: 280m

통행 가능한 길을 따라 160m와 120m 구간을 지나면 출입구까지 280m입니다.

연결된 간선의 길이를 더합니다. 담장·횡단보도·출입구와 접근 연결선을 반영하면 결과가 다시 달라질 수 있습니다.

그림 크게 보기 ↗
직선 버퍼 안에 들어온다고 그 거리만큼 걸어서 도달할 수 있는 것은 아닙니다.

거리 개념을 비교하는 별도 가상 예입니다. 두 축의 축척을 같게 그렸으며 25장 코드의 335m 사례와는 다른 입력입니다.

직접 제작한 교육용 개념도 · 설명 근거: NetworkX 최단경로

왜 필요한가

공원 중심점까지 거리가 짧아도 담장과 출입구 때문에 실제 보행거리가 길 수 있습니다. 공원 면 전체를 목적지로 잡는 버퍼와 출입구 기반 보행 분석을 구별해야 합니다.

핵심 API

OSMnx distance.nearest_nodes는 그래프 CRS의 X/Y를 받습니다. NetworkX shortest_path_length는 도로상의 경로 길이를 계산합니다. 아래 예제는 연결선의 통행 가능성을 미리 확인했다고 가정한 합성 자료입니다.

최소 실행 예제

import networkx as nx

g = nx.Graph()
g.add_edge("street_a", "junction", length=120)
g.add_edge("junction", "park_gate", length=180)
origin_connector_m = 25
gate_connector_m = 10
network_m = nx.shortest_path_length(
    g, "street_a", "park_gate", weight="length")
total_m = origin_connector_m + network_m + gate_connector_m
assert network_m == 300 and total_m == 335
print("network:", network_m, "m; door-to-gate estimate:", total_m, "m")

조경·도시 실무 예제

건물 대표점 대신 실제 출입구가 있으면 우선 사용합니다. 여러 공원 출입구가 있으면 각 출입구까지의 가능한 거리를 비교하고 최솟값을 선택합니다. 도로망과 연결되지 않은 건물은 누락 비율도 보고합니다.

시각화와 결과 읽기

연결선은 점선, 실제 네트워크 경로는 굵은 실선으로 표시하세요. 출입구가 어느 쪽 담장에 있는지 보여 주면 우회 이유를 이해하기 쉽습니다.

흔한 오류

노드 스냅 거리만 더해도 실제 통행 가능성이 보장되는 것은 아닙니다. 동일 건물을 여러 출입구에 연결한 결과를 중복 집계하지 않습니다. length의 단위가 m인지 확인합니다.

연습문제

출입구를 하나 더 추가하고 최솟값이 어떻게 변하는지 비교하세요. 대문이 폐쇄되는 시간대가 있다면 어떤 속성을 추가할지 적으세요.

전체 예제 내려받기 · 실행: python chapter25.py

다음 단계

26 · 서비스권·등시간권과 보행 가정로 이어집니다.

출처

OSMnx distance/routing, NetworkX shortest_path_length. 확인 2026-09-30.