如何使用 r 循环在传单地图中添加多个多边形?
How to add multiple polygons in leaflet map using r loop?
我正在尝试根据多个国家/地区代码列表向传单世界地图添加多个多边形。我试图使用 R 循环来添加多边形。这是我从列表 1 中手动添加多边形的代码:
library(sp)
library(raster)
library(leaflet)
library(maps)
library(tidyverse)
countries_1 <- c('PAK','TUR','BGR')
adm1 <- getData('GADM', country='PAK', level=0)
adm2 <- getData('GADM', country= 'TUR', level=0)
adm3 <- getData('GADM', country= 'BGR', level=0)
leaflet() %>%
addTiles() %>%
addPolygons(data=adm1, weight = 3, fillColor = 'purple', color = 'purple') %>%
addPolygons(data=adm2, weight = 3, fillColor = 'purple', color = 'purple') %>%
addPolygons(data=adm3, weight = 3, fillColor = 'purple', color = 'purple')
我正在考虑使用循环添加多个多边形图层,以便 list_n:
countries_n <- ('ctry1','ctry2','ctry3',...'ctryn')
for (i in country_n) {
countries <- basemap %>% addPolygons(data=getData('GADM',country = i, level = 0),
weight = 3, fillColor = 'purple', color = 'purple')
}
问题是如何将循环嵌入到 "leflet() %>%"?
*这里注意:
如果尝试在 addPolygons() 中添加多个数据,它只会绘制数据中的第一个元素,在下面的情况下,只会绘制国家 'PAK':
addPolygons(data=c('PAK','TUR'), weight = 3, fillColor = 'purple', color = 'purple')
这是一个使用软件包 sf 和 mapview 的解决方案。请注意,这目前只能使用 mapview 的开发版本(请参阅已注释掉的 devtools::install_github()
# devtools::install_github("r-spatial/mapview@develop")
library(sf)
library(mapview)
library(raster)
countries_1 <- c('PAK','TUR','BGR')
dat_list = lapply(countries_1, function(i) {
st_as_sf(getData("GADM", country = i, level = 0))
})
m = leaflet() %>% addTiles()
for (i in dat_list) {
m = mapview::addFeatures(map = m,
data = i,
weight = 3,
fillColor = 'purple',
color = 'purple')
}
m
请注意 addFeatures
与类型无关,因此点、线 and/or 多边形的任意组合都适用于此。
我正在尝试根据多个国家/地区代码列表向传单世界地图添加多个多边形。我试图使用 R 循环来添加多边形。这是我从列表 1 中手动添加多边形的代码:
library(sp)
library(raster)
library(leaflet)
library(maps)
library(tidyverse)
countries_1 <- c('PAK','TUR','BGR')
adm1 <- getData('GADM', country='PAK', level=0)
adm2 <- getData('GADM', country= 'TUR', level=0)
adm3 <- getData('GADM', country= 'BGR', level=0)
leaflet() %>%
addTiles() %>%
addPolygons(data=adm1, weight = 3, fillColor = 'purple', color = 'purple') %>%
addPolygons(data=adm2, weight = 3, fillColor = 'purple', color = 'purple') %>%
addPolygons(data=adm3, weight = 3, fillColor = 'purple', color = 'purple')
我正在考虑使用循环添加多个多边形图层,以便 list_n:
countries_n <- ('ctry1','ctry2','ctry3',...'ctryn')
for (i in country_n) {
countries <- basemap %>% addPolygons(data=getData('GADM',country = i, level = 0),
weight = 3, fillColor = 'purple', color = 'purple')
}
问题是如何将循环嵌入到 "leflet() %>%"?
*这里注意: 如果尝试在 addPolygons() 中添加多个数据,它只会绘制数据中的第一个元素,在下面的情况下,只会绘制国家 'PAK':
addPolygons(data=c('PAK','TUR'), weight = 3, fillColor = 'purple', color = 'purple')
这是一个使用软件包 sf 和 mapview 的解决方案。请注意,这目前只能使用 mapview 的开发版本(请参阅已注释掉的 devtools::install_github()
# devtools::install_github("r-spatial/mapview@develop")
library(sf)
library(mapview)
library(raster)
countries_1 <- c('PAK','TUR','BGR')
dat_list = lapply(countries_1, function(i) {
st_as_sf(getData("GADM", country = i, level = 0))
})
m = leaflet() %>% addTiles()
for (i in dat_list) {
m = mapview::addFeatures(map = m,
data = i,
weight = 3,
fillColor = 'purple',
color = 'purple')
}
m
请注意 addFeatures
与类型无关,因此点、线 and/or 多边形的任意组合都适用于此。