전국 관공서 위치중 성남시 관공서 위치만 추려 sungnam_df
데이터프레임으로 생성시킨다. 시군구 행정지도에서 성남시만 추출하여 지도도 별도로 준비한다.
먼저 성남시 기초 주소 및 위치정보를 데이터프레임으로 준비한다.
library(tidyverse)
library(sf)
## 성남시 관공서 위치
local_lonlat_df <- read_rds("data/local_lonlat_df.rds")
sungnam_df <- local_lonlat_df %>%
filter(str_detect(`기관명`, "성남"))
sungnam_df %>%
mutate(`홈페이지` = paste0("<a href=", `홈페이지`, ">", `홈페이지`, "</a>")) %>%
DT::datatable(escape=FALSE) %>%
DT::formatRound(c("lon", "lat"), digits=2)
행정지도에서 성남시와 3구만 추려 sungnam_sf
데이터프레임으로 만들어낸다.
## 성남시 시군구 지도
sigungu_sf <- st_read("data/shapefile/SIG_201902/TL_SCCO_SIG.shp")
Reading layer `TL_SCCO_SIG' from data source `C:\work\election\data\shapefile\SIG_201902\TL_SCCO_SIG.shp' using driver `ESRI Shapefile'
Simple feature collection with 250 features and 3 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: 746110.3 ymin: 1458754 xmax: 1387948 ymax: 2068444
epsg (SRID): NA
proj4string: +proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs
### 인코딩 변경
sigungu_sf$SIG_KOR_NM <- iconv(sigungu_sf$SIG_KOR_NM, from = "CP949", to = "UTF-8", sub = NA, mark = TRUE, toRaw = FALSE)
### 좌표계 변경: 웹 메르카도(web mercator)
sigungu_sf <- st_transform(sigungu_sf, "+proj=longlat +datum=WGS84")
### 성남시
sungnam_sf <- sigungu_sf %>%
filter(str_detect(SIG_KOR_NM, "성남"))
## 시각화
sungnam_sf %>%
select(SIG_KOR_NM) %>%
plot()
앞서 작업한 내용을 성남시청과 성남 3구청(수정구, 분당구, 중원구) 시각화하여 지도위에 올려본다.
library(leaflet)
## 라벨
pop_labels <- sprintf(
"<strong>%s</strong><br/>",
sungnam_sf$SIG_KOR_NM) %>% lapply(htmltools::HTML)
leaflet() %>%
addTiles() %>%
addProviderTiles(providers$OpenStreetMap) %>%
addMarkers(data=sungnam_df, lng=~lon, lat=~lat, clusterOptions = markerClusterOptions(),
popup = ~ as.character(paste0("<strong>", paste0("지방자치단체: ",`기관명`), "</strong><br>",
"-----------------------------------------------------------<br>",
"· 주소: ", `주소`, "<br>",
"· 전화번호: ", `전화번호`, "<br>",
"· 홈페이지: ", `홈페이지`, "<br>"))) %>%
addPolygons(data=sungnam_sf, opacity = 1.0, fillOpacity = 0.5,
weight = 1,
highlightOptions = highlightOptions(color = "black", weight = 3, bringToFront = TRUE),
label = pop_labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto"))