위경도 가져오기 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));
})
}")