RoNS 님의 블로그

[Cities]부동산 분석을 위한 OpenStreetMap 활용 (Part 2) 본문

Cities

[Cities]부동산 분석을 위한 OpenStreetMap 활용 (Part 2)

by_RoUS 2025. 3. 20. 23:16
728x90

 

부동산 분석을 위한 다양한 도구가 있지만, OpenStreetMap(OSM)은 강력한 공간 데이터와 경로 분석 기능을 제공하는 무료 오픈소스 플랫폼입니다. 이번 글에서는 OSM을 활용하여 특정 지역 내 이동 경로를 분석하는 방법을 소개합니다. 특히, Python과 OSRM(Open Source Routing Machine)을 활용하여 경로를 시각화하는 방법을 다룹니다.

1. 프로젝트 개요

부동산 분석에서 접근성(accessibility)은 매우 중요한 요소입니다. 특정 위치에서 주요 거점(예: 지하철역, 대형 쇼핑몰, 학교 등)까지의 이동 경로를 분석하면, 해당 부동산의 매력도를 평가할 수 있습니다. 이번 예제에서는 부산광역시 내 부경대학교에서 광안리역까지의 이동 경로를 분석합니다.

2. OSRM을 활용한 경로 분석

OSRM(Open Source Routing Machine)은 OSM 데이터를 기반으로 차량, 보행자, 자전거 등의 경로를 계산할 수 있는 강력한 엔진입니다. 우리는 Python의 requests, folium, polyline 라이브러리를 활용하여 경로 데이터를 가져오고 지도에 시각화합니다.

2.1 Python 코드 설명

아래의 코드를 실행하면 부경대학교에서 광안리역까지의 자전거 및 보행자 경로를 시각적으로 확인할 수 있습니다.

2.2 코드 실행 결과

위의 코드를 실행하면 busan_bike_route.html과 busan_foot_route.html 파일이 생성되며, 브라우저에서 이를 열어보면 다음과 같은 정보를 확인할 수 있습니다:

  • 자전거 경로: 파란색 선으로 표시되며, 이동 거리 및 예상 소요 시간이 제공됩니다.
  • 보행자 경로: 빨간색 선으로 표시되며, 동일하게 이동 거리 및 예상 소요 시간이 표시됩니다.
  • 출발지 및 도착지 마커: 초록색(출발지), 빨간색(도착지) 아이콘으로 경로 시작점과 끝점을 명확히 확인할 수 있습니다.

3. 부동산 분석에서의 활용 방안

이와 같은 경로 분석은 부동산 분석에서 매우 유용하게 활용될 수 있습니다.

  • 생활 편의성 분석: 주요 시설(학교, 병원, 쇼핑몰)과의 접근성을 분석하여 거주지 선택에 활용할 수 있습니다.
  • 도시 계획 및 정책 수립: 보행자 및 자전거 이동 경로를 분석하여 교통 정책 수립에 활용할 수 있습니다.
def get_route(mode, waypoints):
    """주어진 출발지와 도착지를 기반으로 OSRM에서 경로 데이터 가져오기"""
    
    loc = ";".join([f"{lon},{lat}" for lat, lon in waypoints])
    url = f"http://router.project-osrm.org/route/v1/{mode}/{loc}?overview=full"
    
    r = requests.get(url)
    if r.status_code != 200:
        return {}
    
    res = r.json()
    routes = polyline.decode(res['routes'][0]['geometry'])
    distance = res['routes'][0]['distance']  # 총 거리 (m)
    duration = res['routes'][0]['duration']  # 총 예상 소요 시간 (초)
    
    return {
        'route': routes,
        'start_point': waypoints[0],
        'end_point': waypoints[-1],
        'distance_km': round(distance / 1000, 2),
        'duration_min': round(duration / 60, 2)
    }

def visualize_route(route, mode):
    """경로를 Folium을 사용해 지도에 표시"""
    
    # 지도의 중심을 출발지와 도착지의 중간점으로 설정
    map_center = [(route['start_point'][0] + route['end_point'][0]) / 2,
                  (route['start_point'][1] + route['end_point'][1]) / 2]
    
    route_map = folium.Map(location=map_center, zoom_start=14)

    # 경로 그리기
    folium.PolyLine(
        route['route'],
        weight=6,
        color='blue' if mode == "bike" else 'red',
        opacity=0.7,
        tooltip=f"{mode.capitalize()} 경로: {route['distance_km']}km, {route['duration_min']}분"
    ).add_to(route_map)

    # 출발지 마커 (부경대)
    folium.Marker(
        location=[route['start_point'][0], route['start_point'][1]],
        icon=folium.Icon(icon='play', color='green'),
        popup="부경대 (출발지)"
    ).add_to(route_map)

    # 도착지 마커 (광안리역)
    folium.Marker(
        location=[route['end_point'][0], route['end_point'][1]],
        icon=folium.Icon(icon='stop', color='red'),
        popup="광안리역 (도착지)"
    ).add_to(route_map)

    return route_map
    
    # 부산광역시 (부경대 → 광안리역)
waypoints = [
    (35.137635, 129.100531),  # 부경대 (출발)
    (35.158015, 129.113173)   # 광안리역 (도착)
]

# 자전거 경로 요청
bike_route = get_route("bike", waypoints)

# 보행자 경로 요청
foot_route = get_route("foot", waypoints)

# 지도 생성
if bike_route and foot_route:
    bike_map = visualize_route(bike_route, "bike")
    foot_map = visualize_route(foot_route, "foot")
 

4. 결론

이번 글에서는 OpenStreetMap과 OSRM을 활용하여 특정 지역 내 경로를 분석하는 방법을 소개했습니다. Python을 사용하여 손쉽게 경로 데이터를 시각화할 수 있으며, 이를 부동산 분석에 적극 활용할 수 있습니다. 다음 글에서는 더 심층적인 GIS 데이터 분석을 다룰 예정입니다.

 

728x90