![](/img/trans.png)
[英]How to add multiple polygons and layers in leaflet with a for loop?
[英]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
是類型不可知的,因此點,線和/或多邊形的任何組合都可以在這里工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.