前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >空间地理数据可视化之 leaflet 包及其拓展

空间地理数据可视化之 leaflet 包及其拓展

作者头像
庄闪闪
发布2021-09-14 11:04:13
2.5K0
发布2021-09-14 11:04:13
举报

前言

这一期 R 可视化介绍的是 leaflet 包及其扩展内容,除了《Geospatial Health Data》[1]一书中介绍的关于此包的基本使用方法外,小编还在网上探索了 leaflet 包的其他内容,详细见 CSDN[2] 网站。关于 leaflet 包的更多内容,可进入leaflet官网[3]查看学习。

1.基本画图设置

Leaflet 包是制作交互式地图非常流行的开源 JavaScript 库,可以很容易地在 R 中合成和控制地图。此包是标准的 R 语言包,故可直接通过 install.packages() 翻墙安装。

我们可以调用 leaflet() 函数来创建地图,并可以使用 addTiles() (添加背景地图)、 addPolygons() (添加多边形)、 addLegend() (添加图例) 等来添加图层。

在使用 leaflet包前,要求先将地图数据转化为 EPSG4326 下的投影,使用的是 sf 包中的 st_transform() 函数。

下面给出一个用 leaflet 包创建的 1974 年北卡罗来纳州婴儿猝死数量的地图的例子。

例子

代码语言:javascript
复制
library(sf)
map <- st_read(nameshp, quiet = TRUE) ##读取数据
map <- st_as_sf(map)
st_crs(map) ## 查看map数据的投影坐标系
## Coordinate Reference System:
##   EPSG: 4267 

map <- st_transform(map, 4326) ##转化为 EPSG 4326

library(leaflet)

pal <- colorNumeric("YlOrRd", domain = map$SID74)
leaflet(map) %>%
  addTiles() %>%
  addPolygons(
    color = "black", fillColor = ~ pal(SID74), ##指定多边形边界和填充的颜色
    fillOpacity = 1 ##设置不透明度
  ) %>%
  addLegend(pal = pal, values = ~SID74, opacity = 1) ##添加图例

1974 年北卡罗来纳州婴儿猝死数量

2.内容扩展

2.1 显示多个标记点

使用 addMarkers() 函数添加标记点,其中 ~long~lat 分别代表经纬度,popuplabel 表示标记点数字显示方式为弹窗和标签。

例子

代码语言:javascript
复制
data(quakes) ## R 包自带数据

leaflet(data = quakes[1:20,]) %>% ##只标记前20个数据
  addTiles() %>% ##添加背景地图
  addMarkers(~long, ~lat, popup = ~as.character(mag), label = ~as.character(mag)) ##添加标记点

leaflet 包显示多个标记点

2.2 设置标记点形状

先设置图标后生成地图,其中叶子图像来自官网可直接在代码中引用(http://leafletjs.com/examples/custom-icons/leaf-green.png等)。下面代码使用icons()设置标记点形状并记为 leafIcons, 之后在绘制地图中的addMarkers()中加入icon = leafIcons

例子

代码语言:javascript
复制
#设置图标
leafIcons <- icons(
  iconUrl = ifelse(quakes$mag < 4.2,
                   "http://leafletjs.com/examples/custom-icons/leaf-green.png",
                   ifelse(quakes$mag < 5.2,"http://leafletjs.com/examples/custom-icons/leaf-red.png",
                          "http://leafletjs.com/examples/custom-icons/leaf-orange.png")
  ),
  iconWidth = 38, iconHeight = 88, ##设置大小
  iconAnchorX = 20, iconAnchorY = 88,
  shadowUrl = "http://leafletjs.com/examples/custom-icons/leaf-shadow.png",
  shadowWidth = 50, shadowHeight = 64,
  shadowAnchorX = 4, shadowAnchorY = 60
)

#生成地图
leaflet(data = quakes[1:20,]) %>% 
  addTiles() %>% ##添加背景地图
  addMarkers(~long, ~lat, icon = leafIcons)

设置图标后

2.3 设置 NASA 星空图

在生成地图的时候,可以添加多个地图底图,下面代码我们加入了三种地图以及圈点和轮廓的效果。得到的图形在右上角会出现一个选框,你可以根据自己的个人需求选择不同的展示结果。

代码语言:javascript
复制
library(leafletCN) ##leafletCN是一个基于leaflet的中国扩展包, 里面保存了一些适用于中国的区域划分数据以及一些有帮助的函数,例如高德地图
#数据生成
geo = data.frame(long = rep(121.44, 1000),
                 lat = rep(31.22, 1000),
                 mag=rep(5,1000)) #mag函数是用来衡量后面点集范围大小

geo$long = geo$long+rnorm(1000,0,1)
geo$lat = geo$lat+rnorm(1000,0,1)
geo$mag = geo$mag+rnorm(1000,0,1)
outline <- geo[chull(geo$long, geo$lat),]


map <- leaflet(geo) %>%
  
  # 底层阶段
  amap(group = "高德") %>%  # 第一层底图,高德地图                   
  addProviderTiles(providers$NASAGIBS.ViirsEarthAtNight2012, group = "黑底") %>%    # 第二层底图,黑底图NASA
  addProviderTiles(providers$Stamen.TonerLite, group = "白底") %>%     # 第三层底图,白底图
  
  # 点集+区域轮廓阶段
  addCircles(~long, ~lat, ~7^mag/50, stroke = F, group = "圈点",color="#FFD700") %>%     # 描点画圈
  
  # 绘制轮廓,利用前面的凸集点
  addPolygons(data = outline, lng = ~long, lat = ~lat,
              fill = F, weight = 2, color = "#B22222", group = "轮廓") %>% 
  
  # 复选框       
  addLayersControl( 
    baseGroups = c("高德", "黑底", "白底"),                     
    #显示层
    overlayGroups = c("圈点", "轮廓"),
    options = layersControlOptions(collapsed = FALSE)
  )
map

下面分给出底图为高德地图和黑底图的可视化结果:

显示底图为高德地图

显示底图为黑底图

3.保存图像

对于 leaflet 包生成的图像,如果要保存为 html 文件,可使用 htmlwidgets[4] 包中的 saveWidget() 函数;若要获取静态图像,要先将其保存为 html 文件,再使用 webshot[5] 包中的 webshot() 函数捕获静态图像。

小编有话说

  • 本篇主要介绍 《Geospatial Health Data》 一书中 leaflet 包和函数的基本使用方法并对其中的内容进行了扩展,此包可生成的地图非常丰富,更多内容可详见官网。
  • 本篇是空间地理数据可视化系列的第四期,主要由 林华师 制作。本系列的宗旨是带你系统学习如何使用 R 对空间地理数据进行可视化。下一期将会继续介绍 mapview 包的使用,敬请期待。

参考资料

[1]

《Geospatial Health Data》: https://www.paulamoraga.com/book-geospatial/sec-spatialdataandCRS.html

[2]

CSDN: https://blog.csdn.net/sinat_26917383/article/details/57083985?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162980815516780274121061%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162980815516780274121061&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-5-57083985.first_rank_v2_pc_rank_v29&utm_term=leaflet&spm=1018.2226.3001.4187

[3]

leaflet官网: https://leafletjs.com

[4]

htmlwidgets: https://github.com/ramnathv/htmlwidgets

[5]

webshot: https://github.com/wch/webshot

推荐: 可以保存以下照片,在 b 站扫该二维码,或者 b 站搜索【庄闪闪】观看 Rmarkdown 系列的视频教程。Rmarkdown 视频新增两节视频(写轮眼幻灯片制作)需要视频内的文档,可在公众号回复【rmarkdown

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 庄闪闪的R语言手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.基本画图设置
  • 2.内容扩展
    • 2.1 显示多个标记点
      • 2.2 设置标记点形状
        • 2.3 设置 NASA 星空图
        • 3.保存图像
        • 小编有话说
          • 参考资料
          相关产品与服务
          图数据库 KonisGraph
          图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档