Бюро переписи не предоставляет общенациональный шейп-файл областей микроданных общественного пользования (самая маленькая география, доступная в Обзоре Американского сообщества). Я попытался объединить их все с помощью нескольких разных методов, но даже тот, который де-дублирует идентификаторы, ломается, когда он попадает в Калифорнию. Я делаю что-то глупое или это требует сложного обходного пути? Вот код, который можно воспроизвести до того момента, когда все сломается.Как совместить шейп-файлы государственного уровня от бюро переписи Соединенных Штатов в общенациональной форме
library(taRifx.geo)
library(maptools)
td <- tempdir() ; tf <- tempfile()
setInternet2(TRUE)
download.file("ftp://ftp2.census.gov/geo/tiger/TIGER2014/PUMA/" , tf)
al <- readLines(tf)
tl <- al[ grep("geo/tiger/TIGER2014/PUMA/tl_2014_" , al) ]
fp <- gsub("(.*)geo/tiger/TIGER2014/PUMA/tl_2014_([0-9]*)_puma10\\.zip(.*)" , "\\2" , tl)
# get rid of alaska
fp <- fp[ fp != '02' ]
af <- paste0("ftp://ftp2.census.gov/geo/tiger/TIGER2014/PUMA/tl_2014_" , fp , "_puma10.zip")
d <- NULL
for (i in af){
try(file.remove(z) , silent = TRUE)
download.file(i , tf , mode = 'wb')
z <- unzip(tf , exdir = td)
b <- readShapePoly(z[ grep('shp$' , z) ])
if (is.null(d)) d <- b else d <- taRifx.geo:::rbind.SpatialPolygonsDataFrame(d , b , fix.duplicated.IDs = TRUE)
}
# Error in `row.names<-.data.frame`(`*tmp*`, value = c("d.0", "d.1", "d.2", :
# duplicate 'row.names' are not allowed
# In addition: Warning message:
# non-unique values when setting 'row.names': ‘d.0’, ‘d.1’, ‘d.10’, ‘d.11’, ‘d.12’, ‘d.13’, ‘d.14’, ‘d.15’, ‘d.16’, ‘d.17’, ‘d.18’, ‘d.19’, ‘d.2’, ‘d.3’, ‘d.4’, ‘d.5’, ‘d.6’, ‘d.7’, ‘d.8’, ‘d.9’