2011-03-05 10 views
6

Zmotywowany postem tutaj, Developing Geographic Thematic Maps with R, Zastanawiałem się nad skonstruowaniem mapy kartogramowej opartej na kodach pocztowych. Pobrałem pliki kształtu dla New Hampshire i Maine z http://www.census.gov/geo/www/cob/z52000.html, ale jestem zainteresowany połączeniem lub połączeniem plików .shp z tych dwóch stanów.robienie choropleth w R: scalanie shapefile kodu pocztowego z wielu stanów

Czy w pakiecie maptools znajduje się mechanizm służący do tego rodzaju scalania lub łączenia dwóch plików .shp po przeczytaniu ich przy użyciu readShapeSpatial()? Również mile widziane wejście, np. użycie pakietu RgoogleMaps byłoby łatwiejsze.

+1

Ten link (http://r-sig-geo.2731867.n2.nabble.com/suggestion-to-MERGE-or-UNION-3-shapefiles-td5914413.html#a5916751) o łączeniu. Archiwum przebojowe powinno być kopalnią złota do obsługi danych przestrzennych. –

+0

Mmm ... nie wiedziałem, że R-sig-geo dostał się na Nabble'a. Niefortunne, że nie jest zgrupowane z innymi forami R. – Sharpie

+3

Zajęło mi to prawie pięć lat GIS, ale ... to "choropleth", a nie "chloropleth" –

Odpowiedz

4

Połączyłem się z linkiem opublikowanym przez Romana Luštrika, a poniższa odpowiedź to drobna modyfikacja http://r-sig-geo.2731867.n2.nabble.com/suggestion-to-MERGE-or-UNION-3-shapefiles-td5914413.html#a5916751.

Poniższy kod umożliwia scalenie plików .shp uzyskanych z Census 2000 5-Digit ZIP Code Tabulation Areas (ZCTAs) Cartographic Boundary Files i ich naniesienie.

W tym przypadku pobrałem pliki .shp i powiązane pliki .dbf i dla Massachusetts, New Hampshire i 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 to darmowe narzędzie do scalania Shapefiles. Scala części SHP i DBF. Wydaje się działać OK, ale nie pchnąłem go za dużo.

Powiązane problemy