leaflet (1)在R语言中导入高德地图

17 篇文章 0 订阅

本号计划出几篇推文介绍leaflet这个工具包,它的功能是创建交互式网络地图(Create Interactive Web Maps),并添加各类要素。参考资料见网址:https://rstudio.github.io/leaflet/。

1.1 leaflet()addTiles()函数

这两个函数是该包最基础的函数。leaflet()函数用于创建画布,也就是一个地图对象,绘图时必须以该函数开头,类似于ggplot()函数;addTiles()函数用于在前者的基础上添加瓦片地图,即各种在线地图,默认状态下为OpenStreetMap。

单独使用leaflet()函数:

library(leaflet)
leaflet()

e85db5e7f8d70602d18ee4142245f9a7.png

addTiles()函数的第一个参数为地图对象map,因此在函数连用时可以使用管道操作符%>%,且无需额外加载tidyverse系列工具包。

添加瓦片地图:

leaflet()?%>%
??addTiles()

fc9b9818ad6ddbb4a865a15b78345457.png

1.2 setView()函数

从上图可以看出,默认状态下加载的地图为2.5个世界全图。若想加载局部地图,需要使用setView()函数设置观察视角。语法结构如下:

setView(map,?lng,?lat,
????????zoom,?options?=?list())
  • map:地图对象;

  • lng、lat:视角中心的经度和纬度;

  • zoom:放大倍数;功能类似于比例尺,数值越大,视角范围越具体。

leaflet()?%>%
??addTiles()?%>%
??setView(lng?=?-75,?lat?=?39.9,?zoom?=?5)

7dd183ff4105561c353ce46f94f6ba44.png

leaflet()?%>%
??addTiles()?%>%
??setView(lng?=?-75,?lat?=?39.9,?zoom?=?10)

除了setView()函数外,还有以下函数可以设置观察范围:

  • fitBounds(map, lng1, lat1, lng2, lat2, options = list()):通过固定经纬度范围来确定观察视角,经度在lng1lng2之间,纬度在lat1lat2之间。

    leaflet()?%>%
    ??addTiles()?%>%
    ??fitBounds(-74,39,-75,40)

37911fe5989ce60e19339c3059a0f0f9.png

  • flyTo(map, lng, lat, zoom, options = list()):视角范围与setView()函数一致,但在呈现时有一个动画效果。

    leaflet()?%>%
    ??addTiles()?%>%
    ??flyTo(lng?=?-75,?lat?=?39.9,?zoom?=?10)

afb5fad1d44950646928fb4b117045d9.gif

  • flyToBounds(map, lng1, lat1, lng2, lat2, options = list()):视角范围与fitBounds()函数一致,但在呈现时有一个动画效果。

1.3 addProviderTiles()函数

除了默认的OpenStreetMap地图外,还可以使用addProviderTiles()函数调用其他在线地图,这些地图名称可以通过输入语句names(providers)进行查看。以下仅展示其中一部分:

names(providers)[50:55]
##?[1]?"TomTom.Basic"????????"TomTom.Hybrid"???????"TomTom.Labels"??????
##?[4]?"Esri"????????????????"Esri.WorldStreetMap"?"Esri.DeLorme"

例如,调用名称为"Esri"的在线地图:

leaflet()?%>%
??setView(lng?=?-75,?lat?=?39.9,?zoom?=?10)?%>%
??addProviderTiles(providers$Esri)

f0495bcc7f18935785b442592ea56c2d.png

这些地图平台可以在网址http://leaflet-extras.github.io/leaflet-providers/preview/index.html上进行预览。

3651fa547b11daf54373a2e569dbf526.gif

addTiles()函数的语法结构如下:

addTiles(
??map,
??urlTemplate?=?"//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
??attribution?=?NULL,
??layerId?=?NULL,
??group?=?NULL,
??options?=?tileOptions(),
??data?=?getMapData(map)
)

其中,参数urlTemplate为在线地图的地址模板,默认状态下为OpenStreetMap,通过修改该参数也可以改变瓦片地图的类型。比如,从上述网址中获取OpenTopoMap的地址模板,再赋值给urlTemplate参数。

00df8f125cdb772ff57cca9de0cf1139.gif

leaflet()?%>%
??setView(lng?=?-75,?lat?=?39.9,?zoom?=?10)?%>%
??addTiles(urlTemplate?=?"https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png")

4f66e46fd649549baadc87fa12c7b289.png

如果要叠加多个地图平台的图层,可通过opacity参数设置透明度来实现:

leaflet()?%>%
??setView(lng?=?-75,?lat?=?39.9,?zoom?=?10)?%>%
??addTiles(options?=?tileOptions(opacity?=?0.5))?%>%
??addProviderTiles(providers$Esri,
???????????????????options?=?providerTileOptions(opacity?=?0.35))

445ed472459b9cd3b36188e2214ab632.png

1.4 加载高德地图

国外地图平台对国界线的划分与我国存在很多不一致的地方,尤其在涉及我国范围时不能使用这些地图平台。如果要加载高德地图,可以使用leafletCN工具包中的amap()函数。

library(leafletCN)
leaflet()?%>%
??setView(lng?=?116.5,?lat?=?39.9,?zoom?=?10)?%>%
??amap()

c29a9cb46f6644c44767d265322f2c6e.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值