위경도 가져오기 geocode는 name을 유니크하게 받아오며,크롤링을 활용했기에 위도 경도가 연속해서 같게 나올 시 확인할 방법이 없어서 이런경우 결측으로 나타냈다. 그에 따라 daegu값이 대구 값과 같게 나와 결측임을 볼 수 있다.

library(devtools)
install_github('qkdrk777777/geocode')
library(geocode)
a=geocode(name=c('경주시사정동','경주시노서동','대구','daegu','대구'),plot=F,n=3)
## [1] "Connecting to remote server"
## $browserName
## [1] "phantomjs"
## 
## $version
## [1] "2.1.1"
## 
## $driverName
## [1] "ghostdriver"
## 
## $driverVersion
## [1] "1.2.0"
## 
## $platform
## [1] "windows-8.1-32bit"
## 
## $javascriptEnabled
## [1] TRUE
## 
## $takesScreenshot
## [1] TRUE
## 
## $handlesAlerts
## [1] FALSE
## 
## $databaseEnabled
## [1] FALSE
## 
## $locationContextEnabled
## [1] FALSE
## 
## $applicationCacheEnabled
## [1] FALSE
## 
## $browserConnectionEnabled
## [1] FALSE
## 
## $cssSelectorsEnabled
## [1] TRUE
## 
## $webStorageEnabled
## [1] FALSE
## 
## $rotatable
## [1] FALSE
## 
## $acceptSslCerts
## [1] FALSE
## 
## $nativeEvents
## [1] TRUE
## 
## $proxy
## $proxy$proxyType
## [1] "direct"
## 
## 
## $id
## [1] "9f5dd310-2631-11e9-86c6-f5eee9ba418d"
a
## $list
##           name      lat      lon
## 1 경주시사정동 35.83198 129.2055
## 2 경주시노서동 35.84416 129.2071
## 3         대구 35.87975 128.5667
## 
## $check
##    name lat lon
## 1 daegu  NA  NA
a=a$list
library(leaflet)
library(leaflet.extras)
#addDrawToolbar는 선 다각형 사각형을 바로 지도에 나타낼 수 있게 해준다.
leaflet() %>%
  addTiles() %>%
  addDrawToolbar(
    editOptions=editToolbarOptions(selectedPathOptions=selectedPathOptions())
  )
#addFullscreenControl은 스크린창 옵션을 생기게 하며 addMeasure는  거리 계산에 사용할 수 있다.
#"feet", "meters", "miles", and "kilometers"를 단위로 사용할 수 있다.

m=
  leaflet() %>% setView(a$lon,a$lat,9) %>%
  addTiles() %>%
  addProviderTiles(providers$JusticeMap.multi) %>%
  addDrawToolbar(
    editOptions=editToolbarOptions(selectedPathOptions=selectedPathOptions())
  ) %>%addMeasure(primaryLengthUnit="kilometers", secondaryLengthUnit="kilometers")%>%
  addFullscreenControl()%>%addFullscreenControl()


mydrawPolylineOptions <- function (allowIntersection = TRUE,
drawError = list(color = "#b00b00", timeout = 2500),
guidelineDistance = 20, metric = TRUE, feet = FALSE, zIndexOffset = 2000,
shapeOptions = drawShapeOptions(fill = FALSE), repeatMode = FALSE) {
  leaflet::filterNULL(list(allowIntersection = allowIntersection,
drawError = drawError, guidelineDistance = guidelineDistance,
metric = metric, feet = feet, zIndexOffset = zIndexOffset,
shapeOptions = shapeOptions,  repeatMode = repeatMode)) }

#addPulseMarkers를 통해 점을 찍을때 아이콘을 사용했다.
#addSearchOSM과 addReverseSearchOSM을 통해 주소검색이 가능하며, addResetmapbutton으로 리셋버튼을 생성하였다. addControl로 오른쪽 하단에 메시지를 넣었다. 또한 addStyleEditor를 통해 addDrawToolbar에서 생성한 점, 선, 다각형 등을 색과 투명도, 아이콘 등을 수정할 수 있다. 
l=leaflet() %>% flyTo(mean(a$lon),mean(a$lat),9)%>%addProviderTiles(providers$CartoDB.Positron)%>%addTiles()%>%  addPulseMarkers(
  lng=a$lon, lat=a$lat,  label=apply(a,1,function(x){paste0(x,collapse = ' ,')}),  icon = makePulseIcon())%>%
  addDrawToolbar(
    polylineOptions = mydrawPolylineOptions(metric=TRUE, feet=FALSE),
    editOptions=editToolbarOptions(selectedPathOptions=selectedPathOptions())
  ) %>%
  addMeasure(primaryLengthUnit="kilometers", secondaryLengthUnit="kilometers")%>%
  addFullscreenControl()%>%addSearchOSM()%>%addReverseSearchOSM()%>%
  addResetMapButton()%>%
  addControl("<P><B>Hint!</B> Search for ...<br/><ul><li>daegu</li><li>Seoul</li></P>",
position = "bottomright")  %>%
  addStyleEditor()


#여러개의 지도 종류를 한꺼번에 나타내기 위해 지도목록을 esri에 할당
esri <- grep("^Esri", providers, value = TRUE)

#레이어를 l에 겹치는 작업
for (provider in esri) {
  l <- l %>% addProviderTiles(provider, group = provider)
}

#addLayerControl로 겹쳐레이어의 라디오버튼을 만들어 주었으며, addMiniMap을 통해 좌측하단에 미니맵을 만들었다.
l %>%
  addLayersControl(baseGroups = names(esri),
                   options = layersControlOptions(collapsed = FALSE)) %>%
  addMiniMap(tiles = esri[[1]], toggleDisplay = TRUE,
             position = "bottomleft") %>%
  htmlwidgets::onRender("
    function(el, x) {
      var myMap = this;
      myMap.on('baselayerchange',
        function (e) {
          myMap.minimap.changeLayer(L.tileLayer.provider(e.name));
        })
    }")