서울시 도로소통정보 시각화(with folium)-(1)

2023. 11. 21. 18:05Python

서울시는 현재 TOPIS라는 시스템에서 현재 도로소통정보에 대한 데이터를 제공하고 있다. 해당 데이터를 활용하여 folium으로 시각화를 진행해보려고 한다.

활용해야될 데이터부터 간단히 알아보자.

전국표준노드링크

https://www.its.go.kr/nodelink/nodelinkRef

출처 : 국가교정보센터(ITS)

전국에 존재하는 교통망에 대한 정보를 표준화를 진행하여 교통정보 실시간 교환에 대한 운용효울성 확보와 대국민 교정보 제공 편의증진을 위해 만들어진 표준교통망DB로 현재 서울시에서도 이를 활용하여 실시간으로 교통정보를 제공하고 있다.

 

전국표준노드링크 .shp 파일

데이터를 다운로드 받게되면 위와같은 파일들을 볼 수 있으며 파이썬으로 .shp 파일을 불러오기 위해서는 위의 데이터 모두 같은 directory에 존재해야한다.

 

우선 도로에 해당하는 링크에 대한 정보가 필요하니 이를 파이썬으로 불러와보면 

import pandas as pd
import geopandas as gpd
import folium
import pandas as pd
from shapely.geometry import MultiLineString, LineString

link_df=gpd.read_file(".\[2023-11-13]NODELINKDATA\MOCT_LINK.shp",encoding='euc-kr')
link_df['geometry'] = link_df['geometry'].to_crs('EPSG:4326') # 위도경도 좌표계 변환

.shp파일을 불러오기 위해서는 geopandas라는 라이브러리가 설치되어 있어야하며 해당 파일을 열게 되면 geometry라는 컬럼이 우리가 알던 좌표계가 아닌 특수한 좌표계로 되어있기 때문에 위도경도 좌표계 변환이 필요하다.

 

링크 .shp 파일의 컬럼정보

링크아이디, 시작노드, 종료노드, 차선수, 도로 타입 , 좌표정보 등등 여러 데이터가 포함되어 있다. 여기서 서울시가 관리하는 링크만 추출해서 사용하려면 LINK_ID를 활용하면 되는데 앞자리 숫자 3자리가 지역을 나타내는 코드로서 100~124까지의 LINK_ID가 서울시에서 관리하는 코드로 이를 추출해서 시각화하면

 

folium 을 이용한 서울시 도로망 시각화

 

해당 그래프를 위한 코드는 아래와 같다.

temp=link_df['LINK_ID'].apply(lambda x:int(x[:3]))
slink_df=link_df[(temp>=100)&(temp<=124)] ### 서울 코드 100~124

# 시각화 함수
def linechart(df):
    m = folium.Map(location=[37.5665, 126.9780], zoom_start=15)
    for _, row in df.iterrows():
        if isinstance(row['geometry'], MultiLineString) and len(row['geometry'].geoms) > 1:
            for line_string in row['geometry'].geoms:
                coordinates = [(lat, lon) for lon, lat in line_string.coords]
                folium.PolyLine(locations=coordinates, color='blue').add_to(m)
        else:
            coordinates = [(lat, lon) for lon, lat in zip(*row['geometry'].xy)]
            folium.PolyLine(locations=coordinates, color='blue').add_to(m)
    return m

linechart(slink_df)

 

 

서울시 표준링크 매핑정보

https://topis.seoul.go.kr/refRoom/openRefRoom_3_3.do

해당 데이터는 서울시에서 서비스에 활용하고 있는 표준링크를 매핑한 정보로 TOPIS나 열린광장데이터를 이용해 다운받을 수 있다.

서울시 서비스링크와 도로표준링크 매핑 데이터

해당 데이터를 활용하면 서울시에서 활용하는 도로링크에 대한 서비스 정보를 활용해 분석에 활용할 수 있게되는데 데이터를 잠시 보면

좀 더 큰 단위의 서비스링크에 여러개의 표준링크아이디가 매핑되어 있는것을 확인할 수 있으며  이를 사용해서 표준노드링크데이터와 조인을 이용해서 데이터를 합쳐보자.

 

slink_df1=pd.merge(left=link_df,right=slinkmap, left_on='LINK_ID', right_on = '표준링크아이디',how='inner')

 

이 데이터와 좀 전에 만들어둔 slink_df(서울시코드를 이용한 데이터)를 시각화를 통해 비교해보면

서울시코드를 이용해 추출한 표준링크(파랑) vs 서울시서비스링크를 이용해 추출한 표준링크(빨강)

 

다음과 같은 결과를 확인할 수 있으며 파란색이 서울시 코드를 이용한 도로망이며, 빨간색은 서울시에서 제공하는 서비스링크를 이용해 매핑한 데이터이다.

서울시의 서비스링크에 해당하는 도로들은 서울시의 주요도로만 포함되어 있는 것을 볼 수 있으며 모든 도로에 대한 서비스를 하지 않는다라는 것을 알 수 있다.

 

이제 다음시간에는 이를 바탕으로 도로소통정보와 융합해 각 도로별로 평균속도에 대한 정보를 색으로 표현해 시각화하는 방법에 대해서 알아보겠다.