3

実行したい非常に単純な操作があります: 2 つの形状ファイルを結合します。具体的には、米国の各州の国勢調査区シェイプ ファイルを 1 つのシェイプ ファイルに結合したいと考えています。最終的には、結合されたシェープ ファイルを取得し、一連の緯度と経度の座標にオーバーレイを実行して、座標がどの国勢調査区に該当するかを判断したいと考えています。

私はこれについて多くの議論を見てきました(R で境界形状ファイルを結合する)。ただし、すべての議論は時代遅れであり、その間にパッケージが改善されることを願っています.

私が使用しているファイルは次の場所にあります: ftp://ftp2.census.gov/geo/tiger/TIGER2010/TRACT/2010/

以下のコードを使用して、作業中のファイルを再作成できます。合計で約 11 メガバイトの 2 つのファイルをダウンロードする必要があります。実行時間はわずか 1 分です。

どんな助けでも大歓迎です。これは実行するのが簡単な操作のように思えます。おそらく、地理空間マッピングの経験があれば、利用可能なドキュメントをより有効に活用できるでしょう。

ここに私が試したいくつかのことがあります:

### Insert your file path here
FPATH <- './data'

### Set up library
require(rgeos)
require(maptools)
require(RCurl)
require(parallel)
cl <- makeCluster(detectCores())

### Download files... (~11,000 KB total for this example)
ftp <- 'ftp://ftp2.census.gov/geo/tiger/TIGER2010/TRACT/2010/'
files <- getURLContent(ftp, dirlistonly = T)
files <- unlist(strsplit(files, split = '\r\n', fixed = T))
files <- grep('2010_[[:digit:]]{2}_', files, value = T)[1:2]  # Only grab two files for this example
clusterMap(cl, download.file, url = paste0(ftp, files), destfile = paste0(FPATH, files))

### Unzip shape files
files <- list.files(FPATH, full.names = T)
clusterMap(cl, unzip, zipfile = files, exdir = FPATH)

### Read in shape files
files <- list.files(FPATH, pattern = "shp$", full.names = T)
a <- readShapePoly(fn = files[1])
b <- readShapePoly(fn = files[2])

### Attempt to join two shape files
spRbind(a, b)  # Error in spRbind(as(obj, "SpatialPolygons"), as(x, "SpatialPolygons")) : non-unique polygon IDs
gUnion(a, b)   # Error in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, "rgeos_union")   : geos_geospolygon2SpatialPolygons: ng > length(IDs)

お時間をいただきありがとうございます。

4

1 に答える 1