2011-03-05 10 views
6

Motivato dal post qui, Developing Geographic Thematic Maps with R, stavo pensando di costruire una mappa coropenica basata su codici postali. Ho scaricato i file di forma per New Hampshire e Maine da http://www.census.gov/geo/www/cob/z52000.html, ma sono interessato a combinare o unire i file .shp da questi due stati.creazione di un coropleto in R: unione di shapefile di codice postale da più stati

Esiste un meccanismo nel pacchetto maptools per fare questo tipo di unione o concatenazione di due file .shp dopo la lettura nell'utilizzo readShapeSpatial()? Benvenuto anche se, ad es. utilizzando il pacchetto RgoogleMaps sarebbe più facile.

+1

Questo collegamento (http://r-sig-geo.2731867.n2.nabble.com/suggestion-to-MERGE-or-UNION-3-shapefiles-td5914413.html#a5916751) alla fusione. L'archivio nabble dovrebbe essere una miniera d'oro per la gestione dei dati spaziali. –

+0

Mmm ... non sapeva che R-sig-geo era arrivato su Nabble. Sfortunato che non sia raggruppato con gli altri forum di R. – Sharpie

+3

Mi ci sono voluti quasi cinque anni di GIS per realizzare questo, ma ... è "choropleth" non "chloropleth" –

risposta

4

Ho seguito il collegamento pubblicato da Roman Luštrik e la risposta seguente è una leggera modifica di http://r-sig-geo.2731867.n2.nabble.com/suggestion-to-MERGE-or-UNION-3-shapefiles-td5914413.html#a5916751.

Il seguente codice consente di unire i file .shp ottenuti da Census 2000 5-Digit ZIP Code Tabulation Areas (ZCTAs) Cartographic Boundary Files e di tracciarli.

In questo caso, ho scaricato i file .shp e file associati .dbf e .shx per Massachusetts, New Hampshire e 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') 
0

GeoMerge è uno strumento gratuito per la fusione Shapefiles. Unisce parti SHP e DBF. Sembra funzionare bene, ma non l'ho spinto troppo.

Problemi correlati