Tôi theo dõi liên kết được đăng bởi Roman Luštrik và câu trả lời sau đây là một sửa đổi nhỏ của http://r-sig-geo.2731867.n2.nabble.com/suggestion-to-MERGE-or-UNION-3-shapefiles-td5914413.html#a5916751.
Mã sau đây sẽ cho phép bạn hợp nhất các tệp .shp
thu được từ Census 2000 5-Digit ZIP Code Tabulation Areas (ZCTAs) Cartographic Boundary Files và vẽ chúng.
Trong trường hợp này, tôi đã tải xuống các tệp .shp
và liên kết .dbf
và .shx
tệp cho Massachusetts, New Hampshire và Maine.
library('maptools')
library('rgdal')
setwd('c:/location.of.shp.files')
# this location has the shapefiles for zt23_d00 (Maine), zt25_d00 (Mass.), and zt33_d00 (New Hampshire).
# columns.to.keep
# allows the subsequent spRbind to work properly
columns.to.keep <- c('AREA', 'PERIMETER', 'ZCTA', 'NAME', 'LSAD', 'LSAD_TRANS')
files <- list.files(pattern="*.shp$", recursive=TRUE, full.names=TRUE)
uid <-1
# get polygons from first file
poly.data<- readOGR(files[1], gsub("^.*/(.*).shp$", "\\1", files[1]))
n <- length(slot(poly.data, "polygons"))
poly.data <- spChFIDs(poly.data, as.character(uid:(uid+n-1)))
uid <- uid + n
poly.data <- poly.data[columns.to.keep]
# combine remaining polygons with first polygon
for (i in 2:length(files)) {
temp.data <- readOGR(files[i], gsub("^.*/(.*).shp$", "\\1",files[i]))
n <- length(slot(temp.data, "polygons"))
temp.data <- spChFIDs(temp.data, as.character(uid:(uid+n-1)))
temp.data <- temp.data[columns.to.keep]
uid <- uid + n
poly.data <- spRbind(poly.data,temp.data)
}
plot(poly.data)
# save new shapefile
combined.shp <- 'combined.shp'
writeOGR(poly.data, dsn=combined.shp, layer='combined1', driver='ESRI Shapefile')
Liên kết này (http://r-sig-geo.2731867.n2.nabble.com/suggestion-to-MERGE-or-UNION-3-shapefiles-td5914413.html#a5916751) khi hợp nhất. Các kho lưu trữ nabble nên là một mỏ vàng để xử lý dữ liệu không gian. –
Mmm ... không biết R-sig-geo đã biến nó thành Nabble. Thật không may là nó không được nhóm lại với các diễn đàn R khác. – Sharpie
Tôi mất gần năm năm GIS để nhận ra điều này nhưng ... đó là "choropleth" không phải "chloropleth" –