Rを使用してポリゴンをラスターに変換する


15

R内でシェープファイルをラスターに変換しようとしています。私のアプローチは、ラスターを次のように読み込むことです。

library(rgdal) # Loads SP package by default
demo <- readOGR('F:/data/', 'shapefile') # Creates a SpatialPolygonsDataFrame class (sp)

これはうまく機能し、プロットできます。しかし、それは大きなシェープファイルであり、ラスターに変換したいです。私は次を試しました:

r <- raster(ncol=180, nrow=180)
Demo_ras = rasterize(r, demo, 'pop')  # pop is an integer here

エラーメッセージ:

Error in function (classes, fdef, mtable)  : 
  unable to find an inherited method for function "rasterize", for signature "RasterLayer", "SpatialPolygonsDataFrame"

引数の正しい順序が少し混乱しています。私もこれを試しました:

Demo_ras = rasterize(demo, r, 'pop')

次のエラーが発生します:

Error in .polygonsToRaster(x, y, ...) : 
  polygon and raster have no overlapping areas

をカバーしない領域に対してはラスタを生成できないことは理にかなっていSpatialPolygonsDataFrameますが、ラスタにSpatialPolygonsDataFrame領域を含めるためにどの情報を指定する必要があるのか​​わかりません。

回答:


23

rasterize()関数は、最初に形状(ポリゴン)を取得し、次にデフォルトでラスタを取得するため、最初のエラーが発生します。示した2番目のコマンドDemo_ras = rasterize(demo, r, 'pop')は正しい方法ですが、発見したように、一致する範囲が必要です!

ラスターの範囲を割り当てて、ポリゴンの同じ範囲をカバーできます。

extent(r) <- extent(demo)

...これは、「pop」が「demo」の変数の正しい名前である限り、指定した例で機能するはずです。以下はちょうど動作しました(R 2.14 / OSX)。ここで、AREAは、boundary.shpの実数列です。

poly <- readOGR("/workingdirectory", "boundary") # does not work  with final slash '/' 
r <- raster(ncol=180, nrow=180)
extent(r) <- extent(poly)
rp <- rasterize(poly, r, 'AREA')

編集内容を確認し、再度確認しました-OSXでは最後のスラッシュはオプションのようですが、Windowsでは使用しませんか?知る価値がある!
シンバマング

うーん、OSXとWindowsの両方でスラッシュに問題がありました。同じバージョンを使用しているかどうかはわかりません。
djq

私のOSX 10.7.2 / R 2.14; どちらの方法でも確実に動作します。何を使っていますか?
シンバマング

変換を自動化するために、次のように書きました:github.com/brry/misc/blob/master/shp2raster.R
Berry
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.