2011-03-05 10 views
6

Bu yazı, Developing Geographic Thematic Maps with R tarafından motive edildi, posta kodları dayalı bir Choropleth haritası oluşturmayı düşünüyorum. New Hampshire ve Maine için şekil dosyalarını http://www.census.gov/geo/www/cob/z52000.html'dan indirdim, ancak .shp dosyalarını bu iki durumdan birleştirmek veya birleştirmekle ilgileniyorum.R bir choropleth yapma: birden fazla eyaletten posta kodu şekil dosyalarını birleştirmek

maptools paketinde, readShapeSpatial()'u kullanarak okuduktan sonra iki tür .shp dosyasının birleştirilmesi veya birleştirilmesi için bir mekanizma var mı? Ayrıca, örn. RgoogleMaps paketini kullanmak daha kolay olurdu.

+1

Bu bağlantı (http://r-sig-geo.2731867.n2.nabble.com/suggestion-to-MERGE-or-UNION-3-shapefiles-td5914413.html#a5916751) birleştirme hakkında. Dudak arşivi, mekansal verileri ele almak için bir altın madeni olmalıdır. –

+0

Mmm ... R-sig-geo'un Nabble'a yapmış olduğunu bilmiyordu. Diğer R forumları ile gruplandırılmamış Talihsiz. – Sharpie

+3

Bunu gerçekleştirmek için neredeyse beş yıl süren CBS'm vardı ama ... "kloroplet" değil "chloropleth" –

cevap

4

Roman Luštrik tarafından gönderilen bağlantıyı takip ettim ve aşağıdaki cevap http://r-sig-geo.2731867.n2.nabble.com/suggestion-to-MERGE-or-UNION-3-shapefiles-td5914413.html#a5916751'un hafif bir değişikliğidir.

Aşağıdaki kod, Census 2000 5-Digit ZIP Code Tabulation Areas (ZCTAs) Cartographic Boundary Files'dan edinilen .shp dosyalarını birleştirmenize ve bunları çizmenize izin verecektir.

Bu durumda, Massachusetts, New Hampshire ve Maine için .shp dosyalarını ve ilişkili .dbf ve .shx dosyalarını karşıdan yükledim.

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, Shapefiles'ı birleştirmek için ücretsiz bir araçtır. SHP ve DBF parçalarını birleştirir. Tamam çalışıyor gibi görünüyor, ama çok fazla itmedim.

İlgili konular