簡體   English   中英

如何使用r循環在leaflet map中添加多個多邊形?

[英]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')

這是使用包sfmapview的解決方案。 請注意,目前只能使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM