2012-03-22 7 views
6

シェイプファイル(.shpとそれに関連するファイルはhereです)を、ロング[80,90]とラット[20,30]の間の座標セットで区切られた別のものにサブセット化して、これを書きたいとします別のシェイプファイルとして。私はmaptoolsパッケージを使用する場合:R/GIS:シェープファイルを緯線のバウンディングボックスでサブセット化する方法は?

df = readShapeLines("/path/asia_rivers.shp")

をし、その後as.data.frame(df)とファイルの構造を見て、私は座標によってサブセットの任意の明白な方法を見つけることができません。

df = importShapefile("/path/asia_rivers.shp") 
df_sub = subset(df, X>=80 & X<=90 & Y >=20 & Y <=30) 

をその後私はmaptoolswriteSpatialShape()経由でエクスポートすることができデータフレームにこれを強制することができるように見えることはできません:私はサブセット化PBSmappingパッケージを使用することができます。私はこのエラーが発生し続ける:Error in PolySet2SpatialLines(df_sub) : unknown coordinate reference system。確かに私は何か非常に基本的なものを見逃していますし、地理座標によって地理データをサブセット化する簡単な方法があるはずですか?

答えて

6

次の操作を試みることができる:

library(rgeos) 
rivers <- readWKT("MULTILINESTRING((15 5, 1 20, 200 25), (-5 -8,-10 -8,-15 -4), (0 10,100 5,20 230))") 
bbx <- readWKT("POLYGON((0 40, 20 40, 20 0, 0 0, 0 40))") 

rivers.cut <- gIntersection(rivers, bbx) 

plot(rivers, col="grey") 
plot(bbx, add=T, lty=2) 
plot(rivers.cut, add=T, col="blue") 
+0

問題はプロットではなく、サブセットにシェープファイルとしてエクスポートできる形式ではありません。 – user702432

+0

シェイプファイルを読み込み、gIntersectionを使用して適切なバウンディングボックスと交差させてから、エクスポートしてみましたか? maptools :: writeShapeLinesでどうですか?私は、あなたが提供した形状ファイルが有効でないので、線がダミーデータでトリミングされていることを示すためにプロットしただけです(シェイプファイルは単なる* .shpファイル以外で構成されています; http://en.wikipedia.org/ wiki /シェイプファイル)。 – johannes

+0

こんにちはjmsigner ...申し訳ありませんが、私の悪い。元の.dbf、.lyr、.prj、.sbn、.sbx、.shp、および.shxファイルを含むzipフォルダへのリンクを変更しました。ありがとう。 – user702432

2

私はこれが回答されているけど、私はあなたがPBSmappingを使用したい正確に何ができると思います。 PBSmappingは(ポリゴンやラインデータのための)ポリセットをクリップする機能を有しているので、あなたが試すことができます:

df <- importShapefile("/path/asia_rivers.shp") 
df_sub <- clipLines(df, xlim = c(80 , 90) , ylim = c(20 , 30), keepExtra = TRUE) 
dfSL <- PolySet2SpatialLines(df_sub) 

キープの余分はあなたが(私は属性データのために仮定)クリッピングを行うときに、非標準の列を維持することができます。

1

別の方法:

library(raster) 

s <- shapefile("/path/asia_rivers.shp") 

sub <- crop(s, extent(80, 90, 20, 30)) 

shapefile(sub, 'cropped_rivers.shp') 
関連する問題