获得几个国家的最低行政级别

问题描述 投票:1回答:1

我想获得最低的行政区域界线的几个国家。到目前为止,我可以在国家层面为我的国家没有问题,我的下载数据。

world <- c("IOT", "BEN", "TGO")
ac <- list()
for ( i in 1:lenght(world)){
ac[[i]] <- getData("GADM", country=world[i], level=0)
}
world_boundaries <- do.call("bind",ac)

国家的问题,有没有边界的执政的同一水平,所以每次我试图改变水平,具有较低水平的时候,我得到一个错误说:无法打开URL。我在想一个创建一个循环,即想尽administritive水平,但我无法弄清楚。

ac <- list()
levl <- C("0", "1", "2", "3", "4", "5")
for ( i in 1:lenght(world)){
ac[[i]] <- getData("GADM", country=world[i], level=levl)
}
world_boundaries <- do.call("bind",ac)

所以我有点卡住了,我不知道如何解决这个问题。谢谢

r
1个回答
0
投票

下面是使用前一tryCatch建议的方式。我认为,这个解决方案可以收拾了一下,但它是一个起点。基本上,每一个国家,开始尝试下载最高管理员级别的边界。如果出现警告或错误,跳到一个新的水平。当有一个“成功”的tryCatch将仍设置为TRUE旗完成,而下一个国家将启动。

library(raster)

world <- c("ITO", "BEN", "TGO")
ac <- list()
levl <- c(0:5)

for ( i in 1:length(world)){
  j <- length(levl)
  while (j >= 0) {
  FLAG <- TRUE
  ac[[i]] <- tryCatch(getData("GADM", country=world[i], level=levl[j]), 
                      warning = function(w) {j <<- j-1
                      FLAG <<- FALSE},
                      error = function(e) {j <<- j-1
                      FLAG <<- FALSE})
  if (!FLAG) next
  if (FLAG) break
  }
}

world_boundaries <- do.call("bind",ac)
© www.soinside.com 2019 - 2024. All rights reserved.