文章目录

  • 前言
  • 基本用法
  • 实现过程
    • 1. 初始化底图控件
    • 2. 添加底图
    • 2.1 底图透明度的修改
    • 3. 关于管道操作符“%>%”
    • 4. 添加地图控件
    • 5. 给地图添加图标(Markers)
    • 6.在地图上画点
    • 7. 利用maps包提供的数据绘制地图
    • 8.读取本地shapefile并进行绘制
  • 结语

前言

作为一位不太地道且热爱可视化的Giser,在学习R语言的过程中,总会思考如何将R语言运用到地图上来,毕竟地图才是我们的王道,离开了地图,以后还怎么吃饭嘛。

那说到可视化,除了我们熟知的Kepler.gl,可以进行地图的交互式可视化操作,在R语言里,也有几个优秀的交互式地图可视化的包,其中Leaflet包,也就是今天的主角,是目前最受欢迎的交互式地图可视化的开源JavaScript库之一

leaflet包来自于htmlwidgets包(某个专为R语言量身定制的可视化JS库),优点在于简单易上手,可以使用LeafletJS库,实现地图的交互式平移、缩放,也可以实现任意地图的组合显示。

基本用法

leaflet包的基本用法:

  1. 加载leaflet包;
  2. 通过leaflet包创建各种地图控件(熟悉Arcgis的同学知道,地图控件类似于arcgis中放大缩小、识别、全局、加载数据等按钮);
  3. 通过类似于ggplot2包中的图层叠加来完成地图控件的加载,并修改地图控的参数
  4. 将各种地图图层叠加在主地图上,完成各种地图要素的显示。

实现过程

1. 初始化底图控件

首先我们需要用leaflet函数对地图控件进行初始化,它会生成一个地图容器,我们之后所以的地图控件都会在这个容器里面进行操作,可以理解成Arcgis里面的空白文档。

m <- leaflet()

2. 添加底图

接下来我们需要添加底图,需要使用addTiles函数,这里默认采用的底图是OSM的底图,即街区Tiles

library(leaflet)
x <- leaflet() %>%addTiles()


当然除了OSM底图,leaflet包还提供了许多其他底图,如果想要添加的话,只需要再调用addProviderTiles函数即可,格式具体如下:

#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的夜光遥感数据
leaflet()%>%addTiles()%>%addProviderTiles("NASAGIBS.ViirsEarthAtNight2012")




如果要使用第三方的底图的话,只要在参数providers$后面加tiles供应商的名字就行了,如下:

# 使用Stamen.Toner的tiles
m6 <- leaflet() %>%addProviderTiles(providers$Stamen.Toner)

2.1 底图透明度的修改

那么多丰富的底图,作为小孩子才会挑,那大人都是都想叠加上面,那么这时候就不得不考虑底图透明度的问题了,因为只有半透明的时候才能看得到叠加在下面的其他底图嘛,这时候leaflet包提供了一个对底图进行修改的参数:option,也就是你可以输入一些自定义的内容给option,然后它会帮你修改叠加的底图。
那问题来了,怎么输入想要的内容给option呢?

这里官方爸爸说我给它专门准备了一个函数:providerTileOptions(),有什么无理的需求都可以通过这个函数告诉options,拿透明度来举例,providerTileOptions()里面有个opacity参数,这个参数是设置透明度的,opacity从0(完全透明)到1(完全不透明)。具体实现看下面:

leaflet() %>%addTiles()%>%addProviderTiles("NASAGIBS.ViirsEarthAtNight2012",#使用夜光遥感影像,并设置透明度为0.6options = providerTileOptions(opacity=0.6)) %>%addProviderTiles(providers$Stamen.TonerLines,#叠加一层tiles,显示公路和街道,并设置透明度为0.35options = providerTileOptions(opacity=0.35))

3. 关于管道操作符“%>%”

还有许多的底图也可以通过上述的方法进行添加,这里就不一一赘述了。

在上面的代码里面,我们可以发现一种奇怪的符号:“%>%”,那这是什么符号呢?

依据官方的说法,这种符号叫“管道操作符”,它的作用就是将前一条语句作为一个变量,传递给下一条语句,并且作为第一个参数使用,这样就免去重复嵌套的麻烦,举个栗子:

第一种写法:

m <- leaflet()
a <- addTiles(m)
addMarkers(a,lng=113.544840,lat=22.216005,popup="纪念孙中山市政公园")

第二种写法:

m <-leaflet() %>%addTiles()%>%addMarkers(lng = 113.544840,lat=22.216005,popup="纪念孙中山市政公园")

上述两种写法的结果是一样的,leaflet() %>% addTiles() 相当于 addTiles(leaflet())

4. 添加地图控件

一般而言,地图控件包括以下:

(1)setView() ,设定地图的view(包括center位置和zoom level);(2)flyTo(),切换到一个指定的location或zoom-level,使用光滑的pan-zoom;(3)fitBounds() ,设定地图矩形区域边界。view将限制在[lng1, lat1] - [lng2, lat2];(4)flyToBounds() ,切换到一个指定的地图矩形区域边界,使用光滑的pan/zoom;(5)setMaxBounds() ,限定地图矩形区域最大边界; (6)clearBounds() ,清除地图矩形区域边界,然后view将只会受地图层的经度和纬度数据限制。

挑了几个常用的地图控件来试试,示例代码如下:

library(leaflet) #设定中心坐标和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)# 设定view边界显示第二个view
m %>% clearBounds() # 清除边界限制, leaflet()默认为世界地图




5. 给地图添加图标(Markers)

有时候,我们的地图上有一些重要的信息希望展示给观看的人,那么这时候就得使用图标工具了,图标用于标记地图上特殊的点,点的位置依赖于经纬度来指定。
形如:

addMarkers(lng = 113.544840,lat=22.216005,popup="纪念孙中山市政公园")


lng跟lat参数用于指定经纬度,用于确定点位,popup参数用于表达点的信息。如果我们的数据是一种数据框的形式,例如有两列字段分别是经度跟纬度,就可以用**addMarkers(“经度”,“纬度”)**的形式指定
形如:

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

6.在地图上画点

leaflet包支持各种与空间信息有关的对象,包括带有空间信息的数据框、二维矩阵、sf包、maps包中的各种空间图形信息等等。这些空间对象都可以通过leaflet绘制成图层,叠加在一起。
接下来就简单实操一下:

 #生成100个点,数值范围在0~80之间,地球赤道到北极的纬度在0~90°之间,所以生成的范围应该在0-90之间
df <- data.frame(lat = runif(100,min=0,max=80),#同理如上,经度的范围....应该不用讲了lng = runif(100,min=0,max=360),#设置生成点的大小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包提供的数据绘制地图

library(maps) #加载maps包
mapFrance = map("france",fill = TRUE,plot = FALSE) #读取法国的地图
leaflet(data = mapFrance) %>%addTiles() %>%#Color为颜色设置,topo.colors是指颜色向量,alpha设置透明度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中根据图层的某个字段进行配色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

结语

关于leaflet包的介绍先到这里了~
下一节将更加讲解leaflet包中关于颜色、图例的设置所有的源码都已经打包,有需要自取

链接:
https://pan.baidu.com/s/14Av84k5dTy_XyeCRnSYrNA?pwd=h21o
提取码:h21o

Leaflet包:从入门到跑路(一)相关推荐

  1. Spring全家桶系列–[SpringBoot入门到跑路]

    //本文作者:cuifuan Spring全家桶----[SpringBoot入门到跑路] 对于之前的Spring框架的使用,各种配置文件XML.properties一旦出错之后错误难寻,这也是为什么 ...

  2. 【Java进阶营】Spring全家桶系列–[SpringBoot入门到跑路]

    Spring全家桶----[SpringBoot入门到跑路] 对于之前的Spring框架的使用,各种配置文件XML.properties一旦出错之后错误难寻,这也是为什么SpringBoot被推上主流 ...

  3. javascript从入门到跑路-----小文的js学习笔记(25)------运动框架----匀速运动、缓冲运动、多物体运动、链式运动

    ** javascript从入门到跑路-----小文的js学习笔记(1)---------script.alert.document.write() 和 console.log 标签 javascri ...

  4. unity 2020 怎么写shader使其接受光照?_Shader从入门到跑路:阶段性自我小测2(屏幕后处理、替换渲染、双Pass渲染)...

    以下是一些可供读者自我检测的问题,同上次一样,笔者不会提供答案,但如果实在想不明白依然可以私信笔者问思路.经某些读者建议,每题加上了分数,供各位自检. 练习1:使用第5章讲到的屏幕后处理效果,对屏幕颜 ...

  5. javascript从入门到跑路-----小文的js学习笔记目录

    ** javascript从入门到跑路-----小文的js学习笔记(1)---------script.alert.document.write() 和 console.log 标签 javascri ...

  6. 反手来个K8S入门到跑路

    layout: post title: 反手来个K8S入门到跑路 category: linux date: 2019-06-09 tags: linux k8s 反手来个K8S入门到跑路 前言 放假 ...

  7. mysql入门到跑路_MySQL 24小时入门笔记(3),插入和删除,删库到跑路

    MySQL 24小时入门笔记 插入 INSERT INSERT用法非常简单.现在我们有表students如下. 列名 类型 约束 id int primary key name char(16) NO ...

  8. Web 3D 从入门到跑路

    大厂技术  坚持周更  精选好文 前情概要 作为在该领域小白的我,在准备该主题分享之前,我信心满满的去知乎查了下,如何学习 WebGL? 如何入手webGl以及three.js呢? - 知乎[1] 前 ...

  9. Linux 运维入门到跑路书单推荐

    一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统. https://b ...

最新文章

  1. 基于XMPP的IOS聊天客户端程序(XMPP服务器架构)
  2. 【CyberSecurityLearning 58】PHP代码注入
  3. Java 生态碎片化 和 .NET生态的一致性
  4. excel求回归直线方程的公式_求回归直线方程的三种方法
  5. 【Mybatis】动态SQL之choose标签
  6. canoe模拟发有checksum报文_CANoe 入门 Step by step系列(三)简单例子的剖析
  7. 5个超棒的自我提升App
  8. 二进制部署高可用k8s集群
  9. Portillo’s上市首日涨幅45.5%,资本爱上吃“热狗”?
  10. 從turtle海龜動畫 學習 Python - 高中彈性課程系列 3 烏龜繪圖 所需之Python基礎
  11. 净水行业首家,安吉尔新水效国标检测能力获CNAS认可
  12. java代码json_JSON 解析(java代码)
  13. 电子元器件分销业ERP系统供应链解决方案
  14. OPPOa5m手机Android,OPPO A5怎么样?OPPO A5手机体验评测
  15. word表格和后面的文字间距太小
  16. 火狐安全软件Huohong
  17. 牛逼的人都是相似的,而苦逼的人则各有各的苦逼
  18. 前端---------了解前端
  19. 世界第一!泰山JDK8完美支持TTC字体文件的效果图
  20. 关于jbd2的小延伸及-文件系统

热门文章

  1. Jquery Md5加密解密
  2. 上海居住证办理(闵行)
  3. 华为云ARM64服务器试用
  4. 如何将图片压缩到指定大小?压缩图片大小的方法
  5. 负重前行的婚纱线上路 - i天下网商-最具深度的电商知识媒体
  6. 手动清除灰鸽子***
  7. linux系统安装hba驱动,Linux系统上iSCSI HBA的安装和配置
  8. 做一个优秀的时间管理者
  9. 让树莓派开机发送自己的ip到邮箱
  10. 【PMP】学习笔记 第6章 时间管理