我想获得最低的行政区域界线的几个国家。到目前为止,我可以在国家层面为我的国家没有问题,我的下载数据。
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)
所以我有点卡住了,我不知道如何解决这个问题。谢谢
下面是使用前一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)