RでSpatialPolygonをラスタライズする方法は?


10

{sp}パッケージの 'rasterize'関数を使用して、世界の水深ラスターレイヤーから関心領域の水深値を抽出しようとしています。

*編集:私が探しているもののように見える「抽出」機能を見つけました。

これは私がこれまでに行ったことです:

> class(subarea0) #This is my area of interest (Eastern Canadian Arctic Sea)
[1] "SpatialPolygons"
attr(,"package")
[1] "sp"

> extent(subarea0)
class       : Extent 
xmin        : -82.21997 
xmax        : -57.21667 
ymin        : 60.2 
ymax        : 78.16666

library(marelac)
data("Bathymetry")#World bathymetric data in library (marelac)
names(Bathymetry);class(Bathymetry);str(Bathymetry)
[1] "x" "y" "z"
[1] "list"
List of 3
 $ x: num [1:359] -180 -179 -178 -177 -176 ...
 $ y: num [1:180] -89.5 -88.5 -87.5 -86.5 -85.5 ...
 $ z: num [1:359, 1:180] 2853 2873 2873 2873 2873 ...

  raster_bath<-raster(Bathymetry)#Transformed into a raster layer
    extent(raster_bath) <- extent(subarea0)#Transform the extend of my raster to the extend of my SpatialPolygons

>ras_sub0<-rasterize(subarea0,raster_bath)#rasterize my SpatialPolygons (*Edits: not the function that I need here, but I am still interested to learn what results mean)
Found 2 region(s) and 10 polygon(s)
> plot(ras_sub0)
> plot(subarea0, add=TRUE)

ここに画像の説明を入力してください

> ras_sub0
class       : RasterLayer 
dimensions  : 180, 359, 64620  (nrow, ncol, ncell)
resolution  : 0.06964709, 0.0998148  (x, y)
extent      : -82.21997, -57.21667, 60.2, 78.16666  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=WGS84 
values      : in memory
min value   : 1 
max value   : 2 
layer name  : layer 

結果がわかりません。ポリゴンごとに2色が表示されるのはなぜですか?彼らはどういう意味ですか?

最終的にどのようにして水深測定の輪郭を取得できますか?これは私の解像度や寸法の変更と関係がありますか?

*編集:わかりました。次の操作を行いました:

v <- extract(raster_bath, subarea0)#Extract data from my Raster Layer for the locations of my SpatialPolygons

vはリストであり、どのように/どのフォームの下でこの情報を空間ポリゴンに再バインドするかわからない...

ありがとうございました!


「水深の深さの輪郭を取得」と言うとき、輪郭も生成することを意味しますか?
シンバマング

回答:


6

あなたのラインras_sub0<-rasterize(subarea0,raster_bath)は単にポリゴンのインデックス番号を取り、それをラスターの値に割り当てています。

ポリゴンとラスターの交点のみが必要な場合:

subarea0_bathy <- intersect(raster_bath, subarea0)

更新:@GodinAが注記しているように、intersect()がポリゴンの完全な範囲を持つラスターを返さない場合があります!これを回避するには、元のラスタより少し大きいラスタと交差させます。

r2 <- raster() # create a generic raster
extent(r2) <- extent(subarea0) + 1 # add 1 degree of extent (0.5 each side)
r3 <- intersect(raster_bath, r2) 

@Simbamanguに感謝し、 "intersect"コマンドを試してみましたが、subarea0_bathyと自分の空間ポリゴン(subarea0)をプロットすると、完全に重なりません。なぜですか?あなたの前の質問に答えるために、はい、私も最終的に私の水深測定の輪郭を持ちたいと思います。助言がありますか?
GodinA 2012年

はい、水深データとタンザニアポリゴンの出力を確認すると、同じ効果が見られます。上記の私の更新を参照してください。輪郭のために、それは簡単なようだcont <- contour(r3)そしてlines(cont)偉大Rませんか?
シンバマング

はい、Rは素晴らしいです。@Simbamanguに感謝します、これはうまくいきます!ただし、空間ポリゴンを深度コンターでプロットするだけです。多分SpatialPolygonsDataframeを作成しますか?交差を使用して、空間ポリゴンを囲む正方形全体の情報を取得します。空間ポリゴンと深度コンターを何らかの方法で組み合わせる必要がありますが、その方法がわかりません。これが、関数 'extract'が適切な出発点であると思った理由ですが、spatialPolygonとどのように再バインドできるかわからない深さのリストができてしまいます...何かアイデアはありますか?再度、感謝します!
GodinA

最終的に何をしたいですか?subarea0と重複する輪郭(SpatialLines)?これは元の質問を超えているため、新しい質問を開始することをお勧めします。
シンバマング

はい、私は、このエリアを定義するための唯一の等深線と私のsubarea0を取得したいと思います:gis.stackexchange.com/questions/25112/...
GodinA

1

これは、の基本的なサブセット関数を使用した別のソリューションrasterです。

# create a raster with the dimensions that you are interested in.
r <- raster(extent(subarea0)+1) # +1 to increase the area
res(r) <- 0.1 # you can change the resolution here. 0.1 can be about 10x10 km if you are close to the equator.
crs(r) <- projection(subarea0) # transfer the coordinate system to the raster

# Now you can add data to the cells in your raster to mark the ones that fall within your polygon.
r[subarea0,] <- 1 # this an easy way to subset a raster using a SpatialPolygons object

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