14

R でいくつかのジオプロセシング タスクを実行しています。環境情報のラスターをクリッピングするためのポリゴンを作成しようとしています。やや複雑なポリゴンをバッファリングしていますが、これにより、削除したい小さなサブジオメトリが残ります。ArcGISでは、これにはポリゴンをマルチパートからシングルパート(またはそれらの線に沿ったもの)に変換してから溶解する必要があると思いますが、Rでこれを行う方法がわかりません.

問題を示す例を次に示します。

require(maptools)
require(rgeos)

data(wrld_simpl)
wrld_simpl[which(wrld_simpl@data$NAME=='Greece'),]->greece
proj4string(greece)<-CRS('+proj=lonlat +datum=WGS84')
gBuffer(greece,width=0.5)->buf
plot(buf)

私が本当に欲しいのは、ポリゴンの外側の境界で、内側には他に何もありません。何か案は?

4

2 に答える 2

13

バッファの境界を形成する 1 つのリングだけを取得する場合は、次のようにします。

plot(SpatialPolygons(list(Polygons(list(buf@polygons[[1]]@Polygons[[1]]),ID=1))),lwd=2)

あなたのケースでそれを行う(そしてそれをプロットする)非常にアドホックな方法です。

本当に欲しいのは、すべてのリングを で取得するringDir=1ことです。残りは穴になるからです。バッファーはまだ 2 つの切断された島である可能性があるため、すべてのリングが必要です。

outerRings = Filter(function(f){f@ringDir==1},buf@polygons[[1]]@Polygons)
outerBounds = SpatialPolygons(list(Polygons(outerRings,ID=1)))
plot(outerBounds)

トリックを行う可能性があります... で試してみるとwidth=0.1、複数の島で機能することがわかりますが、それでも穴が削除されます。

于 2012-09-30T22:46:08.123 に答える
3

ギリシャに適合する凸包が必要な場合は、パッケージgConvexHull内の関数を使用できます。rgeos質問のタイトルから考えたように、穴のあるポリゴンを扱っている場合、これは必ずしも取るべきアプローチではないことに注意してください。ただし、あなたの例から、以下のアプローチで目的の場所に到達できるように見えます。

myCH <- gConvexHull(greece)

plot(myCH)

次のようなものを生成します

ここに画像の説明を入力

そして、すべてが適合することを確認するために、

plot(myCH)
plot(greece,add=TRUE)

ここに画像の説明を入力

于 2012-09-30T19:46:52.787 に答える