1 성남시 - 시청과 구청

전국 관공서 위치중 성남시 관공서 위치만 추려 sungnam_df 데이터프레임으로 생성시킨다. 시군구 행정지도에서 성남시만 추출하여 지도도 별도로 준비한다.

1.1 성남시청과 3구청

먼저 성남시 기초 주소 및 위치정보를 데이터프레임으로 준비한다.

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)

1.2 성남시청과 3구청

행정지도에서 성남시와 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()

2 성남시청과 3구청 시각화

앞서 작업한 내용을 성남시청과 성남 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>",
                                                 "&middot; 주소: ", `주소`, "<br>",
                                                 "&middot; 전화번호: ", `전화번호`, "<br>",
                                                 "&middot; 홈페이지: ", `홈페이지`, "<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"))