如何使用r循环在leaflet map中添加多个多边形?

时间:2017-06-06 17:57:01

标签: r maps leaflet r-leaflet

根据许多国家/地区代码列表,我正在尝试将多个多边形添加到传单世界地图中。我试图使用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()%&gt;%”?

*请注意: 如果尝试在addPolygons()中添加多个数据,它将只绘制数据中的第一个元素,在下面的情况下,只绘制国家'PAK':

addPolygons(data=c('PAK','TUR'), weight = 3, fillColor = 'purple', color = 'purple')

1 个答案:

答案 0 :(得分:3)

这是使用软件包 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是类型不可知的,因此点,线和/或多边形的任何组合都可以在此处使用。