如何在循环中更改SpatialPolygons的名称

时间:2017-05-15 06:07:34

标签: r gis spatial r-raster

我希望按地区创建shapefile分组国家/地区。国家多边形来自getData函数。我创建了一个数据框,将每个国家/地区与一个地区相关联以下是西班牙(欧洲EUR),法国(欧洲EUR)和巴西(拉丁美洲LAM)的简单示例。

我希望的最后两个空间多边形是:

EUR:  enter image description here LAM:enter image description here

我编写了以下循环,但不知道如何为每个区域创建不同的多边形。

library(raster)
regions <- data.frame(REGION= c('EUR', 'EUR',  'LAM'), ISO= c('ESP', 'FRA', 'BRA'))

for (i in c('EUR', 'LAM')){ 
    for (j in c('ESP', 'FRA', 'BRA')) { 
    ISO_code <- regions[regions$REGION==i & regions$ISO==j,]$ISO
    if (length(ISO_code)==0) next #as FRA will never be in LAM for example
    else {
      temp <- getData('GADM', country=as.character(ISO_code), level=0)
      if(j==1) regionpoly <- temp
      else regionpoly <- gUnion(regionpoly, temp)
    }
    }
}

此循环的当前输出是: enter image description here

非常感谢你的帮助

1 个答案:

答案 0 :(得分:1)

我会将您的regions数据框与国家/地区级别SpatialPolygonsDataFrame的数据广告位合并。然后,您可以根据您定义的区域将空间对象拆分为列表。

library(raster)
library(rgeos)

regions <- data.frame(REGION = c("EUR", "EUR",  "LAM"), 
                      ISO = c("ESP", "FRA", "BRA"),
                      stringsAsFactors = FALSE)

# Load data into a list
states <- lapply(regions$ISO, function(x) getData("GADM", country = x, level = 0))

# Combine into a single SpatialPolygonsDataFrame object
states2 <- do.call(bind, states)

# Merge with regions data frame
states2@data <- merge(states2@data, regions, by = "ISO", sort = FALSE)

# Split into list by region
states_split <- split(states2, states2$REGION)