본문 바로가기
GIS Tech/GIS Data Process

WMS 를 이용하여 TOPIS 교통 링크 지도데이터 얻기

by mpv 2021. 1. 8.

서울시 교통정보 시스템 topis.seoul.go.kr/

 

서울시 교통정보 시스템 - TOPIS

 

topis.seoul.go.kr

에서 제공하는 교통 데이터는 아래에 나와있는 자료실 혹은

topis.seoul.go.kr/refRoom/openRefRoom_1.do

 

속도 정보 | 서울시 교통정보 시스템 - TOPIS

 

topis.seoul.go.kr

속도정보 탭에서 다음과 같이 다운로드 할 수 있다. 데이터 정제 과정을 생략하여 현재 GitHub(github.com/cdsnlab/SeoulTrafficData) 에서 데이터 열람이 가능하다. TOPIS에서는 기타 정보 > 기반 정보 에서 서울시 표준링크 매핑정보를 활용하여 ITS 표준노드링크정보 (nodelink.its.go.kr/)에서 데이터를 구하여 매핑하여 활용하는 것을 기대한 것으로 보이나, TOPIS 지도에 나와있는 데이터와는 달리 매핑이 완전하지 않아 데이터가 소실되기도 하였다. 

TOPIS 메인 교통 정보 페이지

데이터를 얻는 좋은 방법이라고는 말하긴 어렵지만, 공공데이터이기 때문에 큰 문제가 없을거라 생각하고 위 지도 링크 데이터가 있을법한 스크립트를 찾아보았다.

 

Chrome의 개발자 툴을 이용하여 요소를 보니 /js/map/layer.js라는 파일이 눈에 들어왔고 해당 파일의 js 코드를 살펴보았다.

그리고 가장 중요하게 지도를 initialization 하는 단계에서 MapLayer_Traffic_Level_1 ... Level_4까지 지도 layer를 준비하는 과정이 있엇고, 저 위에 있는 wmsUrl을 Console에서 쳐본 결과

이와 같은 URL을 얻었다.

 

해당 URL로 직접 접속하였을때는

이와 같이 XML 형태의 에러가 발생하였으나, 이내 WMS를 Python에서 활용하는 방법을 찾았다.

import geopandas as gpd
from requests import Request
from owslib.wfs import WebFeatureService

# URL for WFS backend
url = 'https://topisgeo.eseoul.go.kr:8443/geoserver/wms'

# Initialize
wfs = WebFeatureService(url=url)

우선 다음과 같이 owslib 라이브러리를 설치하여 wms 데이터를 가져온다.

wfs 객체의 contents 안에는 위와 같은 Layer정보가 있음을 알게되었고, 특히 VW_MAP_TRAFFIC1, 2, 3_1, 3_2, 4에 주목하였다. 이후

# Specify the parameters for fetching the data # typeNames=layer,
params = dict(service='wfs', version='1.1.1', typeName='utopis:VW_MAP_TRAFFIC4',
              request='GetFeature', outputFormat='application/json')
q = Request('GET', url, params=params).prepare().url
data = gpd.read_file(q)

다음과 같이 parameter를 설정하여 GeoDataFrame 형태의 data를 얻어내었다. 참고로 WFS의 파라미터 설정은 다음의 페이지를 참조하여 하면 된다: docs.geoserver.org/stable/en/user/services/wfs/reference.html. 본 글에서는 geojson의 형태의 데이터로 geopandas로 데이터를 읽기 위해 outputFormat='application/json'을 택하였으며, typeName은 layer 이름을 넣으면 된다.

좌표계의 경우

크롬의 Console에서 변수를 쳐 보았을때 EPSG:5181의 좌표계를 사용하는 것으로 확인된다.

댓글