Rを使用して空間ポリゴンオブジェクトをデータフレームに変換する


18

私の目標は、特定のポリゴンをマージして既存のシェープファイルを修正することです。

シェープファイルをインポートし、UnionSpatialPolygonsコマンドを使用した後、必要なポリゴンアウトラインを取得します。

ただし、これはSpatialPolygonsオブジェクトであり、SpatialPolygonsDataFrameではないため、writeOGRを使用してシェープファイルにエクスポートすることはできません。

この問題を回避するにはどうすればよいですか?


3
以下の回答が役立つ場合は、回答テキストの左側にあるチェックマークをクリックして、正しい回答として選択する必要があります。
-SlowLearner

回答:


20

名前が示すように、SpatialPolygonsDataFrameは基本的に、データ(属性テーブル)が添付された単なるSpatialPolygonsオブジェクトです。データには、少なくともフィーチャと同じ数の行が必要です

library(rgdal)
ob <- SpatialPolygons(..)# Your SpatialPolygons Object
spp <-     SpatialPolygonsDataFrame(ob,data=as.data.frame("yourData"),proj4string=CRS("+proj=    aea > +ellps=GRS80 +datum=WGS84"))
writeOGR(spp,"shapes","testShape",driver="ESRI Shapefile",)

----編集----

SpatialPolygonsDataFrame背中をSpatialPolygonsオブジェクトに変換する場合は、R内のオブジェクト構造に対処するだけです。

ob <- SpatialPolygons(spp@polygons,proj4string=spp@proj4string)

確かに、@ Curlewは正しい。IDs実行時に引数を正しく指定してくださいUnionSpatialPolygons。そうしないとdata、に戻すときに引数を指定する際に問題が発生する可能性がありますSpatialPolygonsDataFrame
fdetsch

1
確かに、非常に簡単です。私はそのためのオリジナルの答えは編集済み
カーリュー

1
シェイプファイルの使用を始めたばかりで、まだこれに慣れようとしています。のyouDataの代わりに正確なものは何data=as.data.frame("yourData")ですか?使用して内側のポリゴンを溶解させた後unionSpatialPolygons(...)、私は新しいシェープファイルとして結果を書きたい
lightonphiri

SpatialPolygonsオブジェクトにフィーチャがあるのと同じ行数のdata.frameが必要です。より良いあなたがに関する新しい質問をするunion...発行
カーリュー

1
@Curlewありがとう、新しい質問をここに投稿しましたgis.stackexchange.com/q/121405/40108
lightonphiri

9

問題点:

1:UnionSpatialPolygonsの結果は空間ポリゴンです

2:結果を空間ポリゴンデータフレームに変換することは非常に苦痛です

-a。空間ポリゴンにアタッチするには、非常に正確なデータフレームが必要です

-b。UnionSpatialPolygonsに使用したデータには、出力よりも多くの行があり、必要な形式にフォーマットされていません。

私の(ugい)解決策:

### Coerce into spatial polygon data frame with id and row name of spatial polygon

# Make a data frame that meets the requirements above:

df<- data.frame(id = getSpPPolygonsIDSlots(your.spatialpolygon))
row.names(df) <- getSpPPolygonsIDSlots(your.spatialpolygon)

# Make spatial polygon data frame
spdf <- SpatialPolygonsDataFrame(your.spatialpolygon, data =df)

# Then don't forget to make sure the projection is correct
# XXXX is your SRID

proj4string(spdf) <- CRS("+init=epsg:XXXX");
spdf <- spTransform(spdf , CRS("+init=epsg:XXXX"));

if(length(Sr @ polygons)!= nrow(data))stop(paste( "Object length mismatch:\ n"、:引数の長さはゼロです。さらに、警告メッセージ:1:* applyとslotを直接使用してください。
モックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.