Leaflet包:从入门到跑路(一)
文章目錄
- 前言
- 基本用法
- 實現(xiàn)過程
- 1. 初始化底圖控件
- 2. 添加底圖
- 2.1 底圖透明度的修改
- 3. 關(guān)于管道操作符“%>%”
- 4. 添加地圖控件
- 5. 給地圖添加圖標(biāo)(Markers)
- 6.在地圖上畫點
- 7. 利用maps包提供的數(shù)據(jù)繪制地圖
- 8.讀取本地shapefile并進行繪制
- 結(jié)語
前言
作為一位不太地道且熱愛可視化的Giser,在學(xué)習(xí)R語言的過程中,總會思考如何將R語言運用到地圖上來,畢竟地圖才是我們的王道,離開了地圖,以后還怎么吃飯嘛。
那說到可視化,除了我們熟知的Kepler.gl,可以進行地圖的交互式可視化操作,在R語言里,也有幾個優(yōu)秀的交互式地圖可視化的包,其中Leaflet包,也就是今天的主角,是目前最受歡迎的交互式地圖可視化的開源JavaScript庫之一
leaflet包來自于htmlwidgets包(某個專為R語言量身定制的可視化JS庫),優(yōu)點在于簡單易上手,可以使用LeafletJS庫,實現(xiàn)地圖的交互式平移、縮放,也可以實現(xiàn)任意地圖的組合顯示。
基本用法
leaflet包的基本用法:
實現(xiàn)過程
1. 初始化底圖控件
首先我們需要用leaflet函數(shù)對地圖控件進行初始化,它會生成一個地圖容器,我們之后所以的地圖控件都會在這個容器里面進行操作,可以理解成Arcgis里面的空白文檔。
m <- leaflet()2. 添加底圖
接下來我們需要添加底圖,需要使用addTiles函數(shù),這里默認采用的底圖是OSM的底圖,即街區(qū)Tiles
library(leaflet) x <- leaflet() %>%addTiles()
當(dāng)然除了OSM底圖,leaflet包還提供了許多其他底圖,如果想要添加的話,只需要再調(diào)用addProviderTiles函數(shù)即可,格式具體如下:
如果要使用第三方的底圖的話,只要在參數(shù)providers$后面加tiles供應(yīng)商的名字就行了,如下:
# 使用Stamen.Toner的tiles m6 <- leaflet() %>%addProviderTiles(providers$Stamen.Toner)2.1 底圖透明度的修改
那么多豐富的底圖,作為小孩子才會挑,那大人都是都想疊加上面,那么這時候就不得不考慮底圖透明度的問題了,因為只有半透明的時候才能看得到疊加在下面的其他底圖嘛,這時候leaflet包提供了一個對底圖進行修改的參數(shù):option,也就是你可以輸入一些自定義的內(nèi)容給option,然后它會幫你修改疊加的底圖。
那問題來了,怎么輸入想要的內(nèi)容給option呢?
這里官方爸爸說我給它專門準(zhǔn)備了一個函數(shù):providerTileOptions(),有什么無理的需求都可以通過這個函數(shù)告訴options,拿透明度來舉例,providerTileOptions()里面有個opacity參數(shù),這個參數(shù)是設(shè)置透明度的,opacity從0(完全透明)到1(完全不透明)。具體實現(xiàn)看下面:
leaflet() %>%addTiles()%>%addProviderTiles("NASAGIBS.ViirsEarthAtNight2012",#使用夜光遙感影像,并設(shè)置透明度為0.6options = providerTileOptions(opacity=0.6)) %>%addProviderTiles(providers$Stamen.TonerLines,#疊加一層tiles,顯示公路和街道,并設(shè)置透明度為0.35options = providerTileOptions(opacity=0.35))3. 關(guān)于管道操作符“%>%”
還有許多的底圖也可以通過上述的方法進行添加,這里就不一一贅述了。
在上面的代碼里面,我們可以發(fā)現(xiàn)一種奇怪的符號:“%>%”,那這是什么符號呢?
依據(jù)官方的說法,這種符號叫“管道操作符”,它的作用就是將前一條語句作為一個變量,傳遞給下一條語句,并且作為第一個參數(shù)使用,這樣就免去重復(fù)嵌套的麻煩,舉個栗子:
第一種寫法:
m <- leaflet() a <- addTiles(m) addMarkers(a,lng=113.544840,lat=22.216005,popup="紀(jì)念孫中山市政公園")第二種寫法:
m <-leaflet() %>%addTiles()%>%addMarkers(lng = 113.544840,lat=22.216005,popup="紀(jì)念孫中山市政公園")上述兩種寫法的結(jié)果是一樣的,leaflet() %>% addTiles() 相當(dāng)于 addTiles(leaflet())
4. 添加地圖控件
一般而言,地圖控件包括以下:
(1)setView() ,設(shè)定地圖的view(包括center位置和zoom level);(2)flyTo(),切換到一個指定的location或zoom-level,使用光滑的pan-zoom;(3)fitBounds() ,設(shè)定地圖矩形區(qū)域邊界。view將限制在[lng1, lat1] - [lng2, lat2];(4)flyToBounds() ,切換到一個指定的地圖矩形區(qū)域邊界,使用光滑的pan/zoom;(5)setMaxBounds() ,限定地圖矩形區(qū)域最大邊界; (6)clearBounds() ,清除地圖矩形區(qū)域邊界,然后view將只會受地圖層的經(jīng)度和緯度數(shù)據(jù)限制。挑了幾個常用的地圖控件來試試,示例代碼如下:
library(leaflet) #設(shè)定中心坐標(biāo)和zoom level m<- leaflet() %>%setView(lng = -71.0382679,lat = 42.3489054,zoom =18) %>%addTiles()#修改zoom為 = 3 m<- leaflet() %>%setView(lng = -71.0382679,lat = 42.3489054,zoom =3) %>%addTiles()#顯示第一個view m %>% fitBounds(-72,40,-70,43)# 設(shè)定view邊界顯示第二個view m %>% clearBounds() # 清除邊界限制, leaflet()默認為世界地圖
5. 給地圖添加圖標(biāo)(Markers)
有時候,我們的地圖上有一些重要的信息希望展示給觀看的人,那么這時候就得使用圖標(biāo)工具了,圖標(biāo)用于標(biāo)記地圖上特殊的點,點的位置依賴于經(jīng)緯度來指定。
形如:
lng跟lat參數(shù)用于指定經(jīng)緯度,用于確定點位,popup參數(shù)用于表達點的信息。如果我們的數(shù)據(jù)是一種數(shù)據(jù)框的形式,例如有兩列字段分別是經(jīng)度跟緯度,就可以用**addMarkers(“經(jīng)度”,“緯度”)**的形式指定
形如:
6.在地圖上畫點
leaflet包支持各種與空間信息有關(guān)的對象,包括帶有空間信息的數(shù)據(jù)框、二維矩陣、sf包、maps包中的各種空間圖形信息等等。這些空間對象都可以通過leaflet繪制成圖層,疊加在一起。
接下來就簡單實操一下:
7. 利用maps包提供的數(shù)據(jù)繪制地圖
library(maps) #加載maps包 mapFrance = map("france",fill = TRUE,plot = FALSE) #讀取法國的地圖 leaflet(data = mapFrance) %>%addTiles() %>%#Color為顏色設(shè)置,topo.colors是指顏色向量,alpha設(shè)置透明度addPolygons(fillColor = topo.colors(10,alpha = NULL),stroke = FALSE)8.讀取本地shapefile并進行繪制
library("rgdal") #加載rgdal包來讀取shp文件 data <- readOGR("zhongshan2.shp",stringsAsFactors = FALSE) #讀取工作空間中的要素圖層 Encoding(data@data$Name)<- "UTF-8" #由于中文容易亂碼,所以用“utf-8”對中文字段進行編碼#自定義配色方案對地圖進行可視化 Npal <- colorNumeric(palette = "YlGnBu",domain = data$F2) #YIGnBu是 RColorBrewer包中萬千配色之一,詳細看后面的小科普;domain是用于配色的字段,理解成arcgis中根據(jù)圖層的某個字段進行配色leaflet(data)%>%addTiles() %>%addPolygons(stroke = TRUE,smoothFactor = 0.3,fillOpacity = 0.8, #填充透明度color = ~Npal(data$F2)) #另一種配色 leaflet(data)%>%addTiles()%>%addPolygons(popup=~ID,fillColor = topo.colors(10),stroke = FALSE)RColorBrewer
RColorBrewer包是R語言中的一款配色包,其包含了許多高大上的配色方案,我們上面使用的YIFnBu正是其中的一種,如下:
更多想了解的可以參考以下鏈接:
https://www.jianshu.com/p/a8856757a0d2
結(jié)語
關(guān)于leaflet包的介紹先到這里了~
下一節(jié)將更加講解leaflet包中關(guān)于顏色、圖例的設(shè)置所有的源碼都已經(jīng)打包,有需要自取
鏈接:
https://pan.baidu.com/s/14Av84k5dTy_XyeCRnSYrNA?pwd=h21o
提取碼:h21o
總結(jié)
以上是生活随笔為你收集整理的Leaflet包:从入门到跑路(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网上购车平台蛋蛋订车上私户兴起,与汽车之
- 下一篇: 机器视觉工程师前景如何,计算机视觉工程师