2017-06-06 61 views
1

我試圖根據許多國家代碼列表將多個多邊形添加到傳單世界地圖。我試圖使用R循環來添加多邊形。下面是我手動從列表1中添加多邊形代碼:如何使用r循環在小冊子地圖中添加多個多邊形?

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」將ploted:

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

難道你只是將數據和地圖國家合併到一個變量嗎? –

+1

@RomanLuštrik請閱讀註釋如果你將它們合併成一個變量,它只會列出列表中的第一個元素 – Daisywang

+1

看起來像你每次你通過循環時都添加一個底圖,你可以在一個循環中粘貼字符串來創建'countries'多邊形然後將其傳遞到「傳單%>%addTiles%>%'的末尾。你可以在每次迭代結束時使用管道命令粘貼到循環中...... – sconfluentus

回答

2

下面是使用包sfmapview的解決方案。請注意,這是目前唯一可能使用開發MapView的的版本(參見注釋devtools::install_github()

# devtools::install_github("r-spatial/[email protected]") 
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是類型不可知的,所以點,線的任意組合和/或多邊形將在這裏工作。

+1

非常有幫助,謝謝!雖然我設法應用我的循環使用舊的方法.. – Daisywang

相關問題