2

シェープファイルをラスター形式に変換する必要があります。

Rパッケージ「raster」の「rasterize」機能を使ったのですが、うまくいきません。

tst <- rasterize(shpfile, r, fun="count")  
Found 5 region(s) and 5 polygon(s)

オカレンスレコードを持つグリッドはありません:

range(tst[],na.rm=TRUE)
[1]  Inf -Inf
Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf

sum(tst[],na.rm=TRUE)
[1] 0

私が書いたRスクリプト:

# download the GIS shape file
download.file("http://esp.cr.usgs.gov/data/little/abiebrac.zip",
              destfile = "abiebrac.zip")

# unzip
unzip("abiebrac.zip")

# Read shapefile into R
library(maptools)

shpfile <- readShapePoly("abiebrac")
extent(shpfile)

# mapping
plot(shpfile)

library(maps)
map("world",xlim=c(-180,-50),ylim=c(7,83),add=FALSE)
plot(shpfile,add=TRUE,lwd=10)


# rasterize
library(raster)

GridSize <- 0.5 # degree
r <- raster(ncol= round(abs(-180-(-50))/GridSize), 
            nrow=round(abs(83-7)/GridSize))
extent(r) <- extent(c(-180, -50, 7, 83))
tst <- rasterize(shpfile, r, fun="count")

# summary
sum(tst[],na.rm=TRUE)
range(tst[],na.rm=TRUE)

# mapping
plot(tst,col="red",main="abiebrac")  
map("world",xlim=c(-180,-50),ylim=c(7,83),add=TRUE)
4

1 に答える 1

6

fun 引数で「count」を使用している理由はわかりませんが、この場合、重複がないため、NA の結果が生成されます。また、spatialPolygonDataFrame オブジェクトで属性フィールドを定義して、ラスターに値を割り当てる必要があります。sp オブジェクトからエクステントを直接プルすることもできます。

このコードは、あなたが望むものをもたらすようです。

require(raster)
require(rgdal)
require(sp)

setwd("D:/TMP")
shpfile <- readOGR(getwd(), "abiebrac")
r <- raster(extent(shpfile))
  res(r)=0.05
    r <- rasterize(shpfile, field="ABIEBRAC_", r)

plot(r)
  plot(shpfile,lwd=10,add=TRUE)
于 2013-02-21T19:49:44.773 に答える