日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leaflet包:从入门到跑路(一)

發(fā)布時間:2023/12/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leaflet包:从入门到跑路(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 前言
    • 基本用法
    • 實現(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包的基本用法:

  • 加載leaflet包;
  • 通過leaflet包創(chuàng)建各種地圖控件(熟悉Arcgis的同學(xué)知道,地圖控件類似于arcgis中放大縮小、識別、全局、加載數(shù)據(jù)等按鈕);
  • 通過類似于ggplot2包中的圖層疊加來完成地圖控件的加載,并修改地圖控的參數(shù)
  • 將各種地圖圖層疊加在主地圖上,完成各種地圖要素的顯示。
  • 實現(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ù)即可,格式具體如下:

    #esri提供的四幅底圖 m1 <- leaflet() %>%addTiles() %>%addProviderTiles("Esri.WorldTerrain") m2 <- leaflet()%>%addTiles()%>%addProviderTiles("Esri.WorldImagery") m3 <- leaflet()%>%addTiles()%>%addProviderTiles("Esri.WorldStreetMap") m4 <- leaflet()%>%addTiles()%>%addProviderTiles("Esri.NatGeoWorldMap") #還有NASA的夜光遙感數(shù)據(jù) leaflet()%>%addTiles()%>%addProviderTiles("NASAGIBS.ViirsEarthAtNight2012")




    如果要使用第三方的底圖的話,只要在參數(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)緯度來指定。
    形如:

    addMarkers(lng = 113.544840,lat=22.216005,popup="紀(jì)念孫中山市政公園")


    lng跟lat參數(shù)用于指定經(jīng)緯度,用于確定點位,popup參數(shù)用于表達點的信息。如果我們的數(shù)據(jù)是一種數(shù)據(jù)框的形式,例如有兩列字段分別是經(jīng)度跟緯度,就可以用**addMarkers(“經(jīng)度”,“緯度”)**的形式指定
    形如:

    addMarkers(lng = ~Longitudelat = ~Latitude,popup = ~message)

    6.在地圖上畫點

    leaflet包支持各種與空間信息有關(guān)的對象,包括帶有空間信息的數(shù)據(jù)框、二維矩陣、sf包、maps包中的各種空間圖形信息等等。這些空間對象都可以通過leaflet繪制成圖層,疊加在一起。
    接下來就簡單實操一下:

    #生成100個點,數(shù)值范圍在0~80之間,地球赤道到北極的緯度在0~90°之間,所以生成的范圍應(yīng)該在0-90之間 df <- data.frame(lat = runif(100,min=0,max=80),#同理如上,經(jīng)度的范圍....應(yīng)該不用講了lng = runif(100,min=0,max=360,#設(shè)置生成點的大小size = runif(100, 5, 10),#rainbow是彩虹的意思,也就是彩虹配色的字段colour = substr(rainbow(100),1,7)) df %>%leaflet() %>%addCircles() %>%addCircleMarkers(lng=~lng,lat=~lat,radius = ~size,color = ~colour,fill = TRUE)%>%addTiles()

    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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。