R_leaflet包_最易上手地图教程(一)(上)

本文是关于R语言中leaflet包的使用教程,详细介绍了如何利用leaflet包快速绘制地图,包括设置地图参数、添加图层、自定义图标、信息提示框等内容。教程展示了leaflet包的易用性和丰富的功能,如支持多种底图、图标类型和交互式特性,并提供了丰富的示例代码。
摘要由CSDN通过智能技术生成
3901436-3e74a25b1b3da6cc

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

作者:李誉辉

四川大学在读研究生

最近一直在寻找方便上手的地图包,实验了google地图包,百度地图包,发现还是有很多限制。

百度地图包搭配的REmap总是崩溃,

google地图包ggmap现在需要国际信用卡注册,总之,都不甚满意。

虽然ggplot2地图功能非常丰富,但是还是不够简单快捷。

尤其是当我们仅仅需要绘制一些简单的地图时。

经过圈子大佬的推荐,开始尝试leaflet包,确实给我很多惊喜。

leaflet包相对其它地图包,有很多优点和缺点,

首先,绘制地图简单快捷,因为都是基于供应商的tiles,一行代码就可以render出基本widget地图。

支持管道传参,一个图层一个图层进行添加,代码结构更加清晰。

其次,有很多tiles供应商可以选择,包括高德、google、Stamen, Esri, OpenWeatherMap,NASA,

等好几十个tiles供应商。当然其中一些需要注册。其中的google可以绕过注册,已经很难得了。

对于在地图上添加markers图标,shapes形状,线条等,异常方便快捷,这在ggplot2中很难做到的。

支持栅格数据,rasters栅格数据是基于像素点的地图。可以看出,leaflet具有很强的包容性。

支持多种投影坐标系,甚至可以自定义坐标系,这在某些特殊场景非常重要。

当然还有更重要的是,其具有一定交互能力,可以缩放拖拽,

简单的图层切换也不需要使用Shiny。使得更容易上手。

其它特点,首先tiles是基于供应商的,必须联网,

其次对颜色支持不一样,只支持HEX颜色空间和colors()中的颜色名称。 当然内置的几个palette函数,非常特别。

总之,笔者认为leaflet包与ggplot2包的互补性非常好,刚好弥补了ggplot2中画地图的不足。

对于大量数据需要呈现在地图上的场景,还是`ggplot2, leaflet中插入其它plots不便也没有必要。

下面是笔者总结的中文教程,使得新人能更快上手。

说明:以下图片皆为截图,限于技术问题,不能完全展现它的交互式功能。

1.Widget设置

Widget地图框的设置,就是确定Widget的基本参数,

包括CRS坐标系,widget的中心坐标,zoom level(缩放)的范围, widget边界坐标,data数据等。

1.1

leafletOptions()

leaflet()中有个options参数,用leafletOptions()函数来指定,可以控制widget缩放范围。

语法:

1leafletOptions(minZoom = NULL, maxZoom = NULL, crs = leafletCRS(),2 worldCopyJump = NULL, preferCanvas = NULL, ...)

关键参数:

minZoom,表示最低缩小倍数,作用于所有地图层。

maxZoom,表示最高放大倍数,作用于所有地图层。

crs, 表示指定坐标系统,

preferCanvas, 表示是否将leaflet.js路径呈现在地图上。

1library(leaflet)23leaflet(options= leafletOptions(minZoom=0, maxZoom =18))

1.2

中心、缩放、边界

关键函数:

setView() ,设定地图的view(包括center位置和zoom level)

flyTo() ,切换到一个指定的location或zoom-level,使用光滑的pan-zoom

fitBounds() ,设定地图矩形区域边界。view将限制在[lng1, lat1] - [lng2, lat2]

flyToBounds() ,切换到一个指定的地图矩形区域边界,使用光滑的pan/zoom

setMaxBounds() ,限定地图矩形区域最大边界

clearBounds() ,清除地图矩形区域边界, 然后view将只会受地图层的经度和纬度数据限制。

语法:

setView(map, lng, lat, zoom, options = list())

flyTo(map, lng, lat, zoom, options = list())

fitBounds(map, lng1, lat1, lng2, lat2, options = list())

flyToBounds(map, lng1, lat1, lng2, lat2, options = list())

setMaxBounds(map, lng1, lat1, lng2, lat2)

clearBounds(map)

参数解释:

map,表示leaflet()创建的map widget

lng, 表示map center的经度,东经为正

lat, 表示map center的纬度,北纬为正

zoom, 表示zoom level

options, 列表传参,传递zoom或pan参数。

lngl, latl, lng2, lat2, 表示widget边界的坐标。

1library(leaflet)23# 设定中心坐标和zoom level4m <- leaflet() %>% addTiles() %>% setView(-71.0382679,42.3489054, zoom =18)56# 显示第一个view7m %>% fitBounds(-72,40,-70,43) # 设定view边界89# 显示第二个view10m %>% clearBounds() # 清除边界限制, leaflet()默认为世界地图

3901436-6001c1191d0c400d
3901436-56ae38b3c21dbf2e

1.3

Data数据

这里的Data不仅仅是画地图上行政区域的数据,而且包括要在地图上呈现的数据。

大多数图层添加函数都有data参数,通常使用%>%管道符逐渐传递data参数。

leaflet()通常支持下列几种形式的数据。

矩阵数据(由经度和纬度构成)。

数据框(由经度和纬度构成)。

从sp包传递的数据,包括:

SpatialPoints(数据框类型)

Line()/Lines()

SpatialLines()(数据框类型)

Polygon()/Polygons()

SpatialPolygons()(数据框类型)

从maps包传递的数据,主要是map()函数传递的数据框。

对于经度和纬度组成矩阵或数据框类型数据,在调动data添加图层时,会根据变量名进行猜测匹配:

若变量名称为lat,或latitude等,则猜测为纬度,猜测时,不区分大小写

若变量名称为lng, long或 longitude等,则猜测为经度,猜测时,不区分大小写。

也可以手动指定经度和纬度变量,使用~语法。

在参数传递过程中,默认后面的data参数覆盖前面data参数。

1.3.1 data中经纬度的指定/猜测/覆盖

1library(leaflet)23# 自动猜测匹配

4set.seed(123)5df <- data.frame(Lat = 1:10, Long = rnorm(10))6leaflet(df)%>%addCircles()78# 手动指定经度和纬度变量,结果一样 leaflet(df) %>% addCircles(lng = ~Long,

9# lat = ~Lat)

1011# 在add_xxx()函数中重新指定参数进行覆盖,结果一样 leaflet() %>%

12# addCircles(data = df) leaflet() %>% addCircles(data = df, lat = ~Lat, lng

13# = ~Long)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值