R中的传单包
传单是用于移动友好型交互式地图的最流行的开源 JavaScript 库之一。它被世界上许多顶级组织广泛使用。为了在 R 语言中使用相同的功能,我们有传单包库。 Leaflet R 包是一个易于使用的库,其设计具有简单性、性能和可用性。
特征:
- 支持提供平移和缩放等功能的交互式地图。
- 支持用于组成地图的各种元素,例如地图图块、标记、多边形、线条、弹出窗口和 GeoJSON。
- 支持从 R 控制台本身创建完整的动态地图。
- 易于在各种降价文件中嵌入地图对象。
- 还可以在非球形墨卡托投影中显示地图
- 使用从传单插件库中选择的插件来增强地图功能
安装:
我们可以使用 R 语言安装传单库:
# installs the leaflet package
install.packages("leaflet")
在 R 控制台中运行上述命令并选择所需的 cran 镜像来安装 Leaflet R 包。
使用传单包创建交互式地图
要使用 R 语言中的传单包创建地图小部件,我们使用传单()函数。 Leaflet()函数返回一个地图对象,该对象可以单独查看,也可以通过添加更多图层进行修改。基本的传单小部件显示一个没有瓷砖或标记的空地图小部件。
Syntax: map <- leaflet()
示例:使用 Leaflet()函数制作的基本地图对象。
R
# load leaflet library
library(leaflet)
# create map widget
map <- leaflet()
# print map widget
map
R
# load leaflet library
library(leaflet)
# create map widget with OpenStreetMap tile
map <- leaflet() %>%
addTiles()
# print map widget
map
R
# load leaflet library
library(leaflet)
# create map widget with OpenStreetMap tile
# added marker at Delhi India
map <- leaflet() %>%
addTiles() %>%
addMarkers(lng=77.1025, lat=28.7041,
popup="Delhi, India")
# print map widget
map
R
# load library leaflet
library(leaflet)
# draw map
leaflet() % >%
# add first tile
addTiles(group="One") % >%
# add second tile
addProviderTiles(providers$Esri.WorldImagery,
group="Two") % >%
# add first marker
addMarkers(lng=25.505206, lat=65.9767231,
group="mark1") % >%
# add second marker
addMarkers(lng=-45.445206, lat=45.5327231,
group="mark2") % >%
# add Layer controls
addLayersControl(baseGroups=c("One", "two"),
overlayGroups=c("mark1", "mark2"),
options=layersControlOptions(collapsed=FALSE))
R
# load library
library(sf)
library(leaflet)
# read dataset
dataset <- st_read("wqp_sites.shp")
# draw plot with markers at dataset point
leaflet() %>%
addTiles() %>%
addMarkers(data = dataset)
输出:
向地图添加图块
由于上面的代码创建了一个空的地图小部件。要向其中添加切片以创建所需的地图,我们使用传单包的 addTiles()函数。默认情况下,如果没有传递参数,它会在地图小部件的顶部创建一个 OpenStreetMap 地图图块。对于自定义地图图块,我们将该地图作为参数传递给 addTiles()函数。
Syntax: map <- leaflet() %>%addTiles()
示例:带有 OpenStreetMap 瓦片的基本地图。
R
# load leaflet library
library(leaflet)
# create map widget with OpenStreetMap tile
map <- leaflet() %>%
addTiles()
# print map widget
map
输出:
在地图上添加标记
现在,由于我们已经创建了一个基本地图,它本身并没有那么有用。我们现在可以使用传单包的 addMarkers()函数在地图上添加标记。只需添加新图层,我们就可以根据需要添加任意数量的标记。
Syntax: map <- leaflet() %>%addTiles() %>% addMarkers( lng, lat, popup)
Parameters:
- lng: determines the longitude of the marker position
- lat: determines the latitude of the maeker position
- popup: determines the text that would be shown on marker popup
示例:印度德里带有标记的交互式地图。
R
# load leaflet library
library(leaflet)
# create map widget with OpenStreetMap tile
# added marker at Delhi India
map <- leaflet() %>%
addTiles() %>%
addMarkers(lng=77.1025, lat=28.7041,
popup="Delhi, India")
# print map widget
map
输出:
图层控制
我们可以使用 addTiles() 或 addMarker()函数向传单地图添加多个图层。现在,如果我们想让用户选择他/她想要查看的层,我们可以使用层控制来做到这一点。层可以分配给命名组。要在传单中命名一个组,我们将 group 参数添加到该层。现在,用户可以打开和关闭这些组。构成地图基础的基本组(例如图块)是使用单选按钮选择的,这样您一次只能选择一个,而可以同时激活多个图层的叠加组会获得复选框。
要实现图层控制,请使用 group = 参数将组名称添加到各个图层,并使用 addLayersControl() 添加图层控制图层。
Syntax: leaflet() %> addTiles(group = “One”) %>% addProviderTiles(providers$Esri.WorldImagery, group = “Two”) %>% addLayersControl(baseGroups = c(“One”, “Two”) options = layersControlOptions(collapsed = FALSE))
示例:基本的传单地图,带有两个瓷砖选项和两个带有复选框的标记。
R
# load library leaflet
library(leaflet)
# draw map
leaflet() % >%
# add first tile
addTiles(group="One") % >%
# add second tile
addProviderTiles(providers$Esri.WorldImagery,
group="Two") % >%
# add first marker
addMarkers(lng=25.505206, lat=65.9767231,
group="mark1") % >%
# add second marker
addMarkers(lng=-45.445206, lat=45.5327231,
group="mark2") % >%
# add Layer controls
addLayersControl(baseGroups=c("One", "two"),
overlayGroups=c("mark1", "mark2"),
options=layersControlOptions(collapsed=FALSE))
输出:
在地图顶部绘制数据
R 环境中的空间对象也可以添加为地图图层,前提是它们具有使用基准定义的 CRS。根据数据集的类型,我们可以使用 addMarkers() 或 addPloygons()函数在传单地图顶部使用这些数据点。如果数据集是单维的,我们使用标记,而对于多维数据,我们使用多边形。
示例:将数据变量绘制为传单地图顶部的标记。示例中使用的数据集可以在这里下载。
R
# load library
library(sf)
library(leaflet)
# read dataset
dataset <- st_read("wqp_sites.shp")
# draw plot with markers at dataset point
leaflet() %>%
addTiles() %>%
addMarkers(data = dataset)
输出: