시군구, 읍면동 등의 경계데이터를 받아 지도를 그리는 건 해봤으니, 이번에는 도로를 그려보는 걸 해볼 예정이다. 필요한 프로그램은 R프로그램으로 할 것이고, 패키지는 sf
, tidyverse
정도면 가능하다. 대략 아래의 이미지처럼 하나의 시군구를 선택해서 혹은 범위를 조정해서 그릴 부분을 정할 수 있다.
데이터 준비
주소기반산업지원서비스-주소정보제공 메뉴를 가면, 아래 화면이 보일텐데 “도로명주소 전자지도"를 선택하여 다운로드 신청을 한다. 지도데이터를 바로 받을 수는 없고, 신청하고 나서 허가나기까지 기다려야 한다. 하루면 보통 승인이 나는 것 같다. 개인이더라도 본인이름과 연락처, 신청하는 사유 등만 잘 기입하면 된다.
데이터 설명문서를 보면 총 11종의 데이터를 제공하고 있고, 여기서 나는 “실폭도로” 데이터를 사용해서 지도를 그릴 것이다.
도로명주소 전자지도
건물, 건물군, 도로구간, 실폭도로, 기초구간, 출입구, 기초구역, 행정구역경계(시도, 시군구, 읍면동, 법정리)등 11종을 제공합니다. 도로명주소 전자지도는 전국 광역시도 또는 시군구 단위로 파일을 제공하며, 신청 지역을 관할하는 기관장의 승인에 따라 다운로드가 가능합니다. 신청지역이 두 개 이상의 시군구일 경우 시도지사, 두 개 이상의 광역시도에 분포되있거나 전국일 경우 행정안전부의 승인 절차를 수행합니다.
- 좌표계안내 : 좌표계(ITRF2000), 기준타원체(GRS80), 투영법(UTM), 장반경(6,378,137m)
도로데이터를 이용하여 지도 그리기
데이터는 시군구기준으로 zip 파일로 묶여 있는데, 풀어보면 11종의 지도데이터 파일중 실폭도로 데이터는 TL_SPRD_RW
파일명으로 되어 있다. clean_names
은 데이터 헤더이름을 정돈해주는 기능이 있어 편리해서 필수로 사용하고 있다. 아래와 같이 도로데이터를 불러온다.
sprd_rw = read_sf("~/map_202402/서울특별시/11000/", "TL_SPRD_RW") |>
janitor::clean_names()
실폭도로 데이터가 꽤나 크기 때문에, 지도그래프가 그려지는데 시간이 많이 걸렸다. 이렇게 그려서 쓸일은 없기 때문에, 지역 범위를 좁혀 그려야 한다.
ggplot(sprd_rw) +
geom_sf()
서초구만 한번 그려보자.
sprd_rw2 = sprd_rw |> filter(sig_cd =='11650')
ggplot(sprd_rw2) +
geom_sf()
잘 안보이니, 조금 더 확대를 해보자. 여기는 예술의전당 근처 도로지도이다.
ggplot() +
geom_sf(data = sprd_rw |> filter(sig_cd =='11650')) +
coord_sf(xlim = c(956000, 956000 + 2000),
ylim = c(1942000, 1942000 + 1600))
도로만 있어서 잘 알아보기 어렵다면, 건물정보까지 추가로 더하면 얼핏 실제 지도같다. 건물정보는 나중에 한번 따로 정리해보려 한다.
ggplot() +
geom_sf(data = sprd_rw |> filter(sig_cd =='11650')) +
geom_sf(data = spbd_buld |> filter(sig_cd == '11650')) +
coord_sf(xlim = c(956000, 956000 + 2000),
ylim = c(1942000, 1942000 + 1600))
디자인이라고 할 건 없고, 그냥 흑백으로 표현해봤다.