Rgeosは、ポリゴンを交差させるときに関連する値をドロップします


11

2つのSpatialPolygonsDataFramesを交差させて、結果としてSpatialPolygonsDataFrameを取得しようとしています。残念ながら、gIntersection関数rgeos(ポリゴンを交差させるために非常に高速に動作します)を使用すると、関連するデータフレームを取得できないようです。次の例を考えてみましょう。

> fracPoly <- gIntersection( toSingle, fromSingle )
> class(toSingle)
[1] "SpatialPolygonsDataFrame"
> class(fromSingle)
[1] "SpatialPolygonsDataFrame"
> class(fracPoly)
[1] "SpatialPolygons"

の転送を処理するラッパー関数を書くことはできますが、data.framesすべてのチェックを正しく行うのはささいな痛みになります。以下のためにgIntersection)これは私が関連を保持できるようになりますdata.frames

更新

さらに考察すると、これはによる非常に意図的な動作である可能性がありますgIntersection。結局のところ、2つのSPDFのうち、誰のdata.frameを渡すのですか?そのため、2つをマージするラッパーを作成する必要があります。


1
ポルギオンの読み込み方法-readShape *またはreadOGR SPDFを読み込むために使用したライブラリによっては、gIntersectionで奇妙な動作をします。
シンバマング

@Simbamangu興味深い。私は.... readShapePolyを使用して、data.frameにマージしています
アリB.フリードマン

gIntersectionは、重複する領域のdata.framesをマージする必要があります-QGISでVector | Geoprocessing | Intersectを実行すると、出力は重複のマージされた属性のセットであり、QGISは次のような空間操作に同じGEOSライブラリを使用しませんこの?
シンバマング

それが必要な場合、私は困惑しています。私はすでにコードを書き直してdata.framesを手作業でマージし、それらを元に戻していますので、今のところこれに時間を費やすつもりはありません。ただし、シェープファイルを読み取る関数が重要であるというヒントは役立ちます。
アリB.フリードマン

1
これは明らかに答えではありませんが、コメントを残すのに十分なポイントがありません...アリ、rgeosオーバーレイ関数に従って変数を抽出するためにコードのチャンクを共有するかどうか疑問に思っていました。gUnionなどのさまざまなrgeos操作からの元のポリゴンIDを保持するための良い方法で頭を包むのに苦労しています
...-jed.a.long

回答:


2

一部のプロジェクトでは、同じニーズがありました。を維持するだけでなく、data.frame出力ジオメトリタイプを管理するためのコードを追加し、完全な交差ジオプロセスを得るために、いくつかのクリーニング(ジオメトリコレクションのクリーンなど)に進む必要がありました。Rでこのようなタスクを実行する必要がある場合は、RFigisGeoパッケージを試すことができます。

#install RFigisGeo
require(devtools) 
install_github("RFigisGeo", "openfigis")
require(RFigisGeo)

#compute intersection
result <- getIntersection(features1, features2)

あなたと@berndvの答えはどちらも私の問題を解決するように見えます。ありがとう!それが最初に来て以来、これをマークします。
アリB.フリードマン

10

gIntersectionの動作は、交差するデータを設計により渡すことではありません。

交差する空間オブジェクト間には一般的な一致がないため、属性に対する任意の操作には、未知のユーザーの意図に関する仮定が必要です。これが、データスロットを通過させない理由です...

... gIntesection()の設計は、ユーザーのみがジオメトリが変更されたエンティティの属性をどうするかを知ることができるため、意図的です。ユーザーが異なると仮定することもありますが、row.names()メカニズムで行われるように、交差するジオメトリのIDを渡す以外の一般的な解決策はありません。

驚いたことに、ラスターパッケージには交差関数があり、これも単純に交差してデータを渡します。

ラスターパッケージには、属性データも処理しようとすることでrgeosを拡張する関数がいくつかあります。この場合は、raster :: intersectおよび関数のリストを参照してください:? "raster-package"(セクションXIV)

私がこれについて得た完全な情報:http : //r-sig-geo.2731867.n2.nabble.com/Intended-usage-of-gIntersection-td7587120.html


0

上記の回答が機能しなかった(私のような)人のために、ここのリンクは、ラスターの交差でこの正確なことを実行できることを説明しています。

Rで2つのポリゴンをクリップするときにすべての属性データを保持するにはどうすればよいですか?

これを使用して、SpatialPolygonsシェープファイルでSpatialPointsDataFrameをトリミングしました。元のデータを維持しながら、SpatialPointsDataFrameのトリミング/クリップバージョンを作成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.