光栅网格位置/与R中的值匹配的像素的坐标

时间:2014-02-11 13:51:39

标签: r raster

有没有办法提取网格位置或(最好是具有明确范围的栅格)匹配特定值的像素的点/质心坐标?我几乎有一个非常低效的工作流程转换为矩阵并使用which(mtrx == max(mtrx), arr.ind = TRUE)来获取矩阵位置,但这(a)丢失了地理空间信息,(b)导致数据在矩阵转换过程中旋转90度,两者都需要额外的代码才能使其工作并显着减慢计算速度。是否有人知道的等效栅格工作流程?

3 个答案:

答案 0 :(得分:3)

示例数据:

library(raster)
set.seed(0)
r <- raster(ncols=10, nrows=10)
r[] <- sample(50, 100, replace=T)

现在做:

p <- rasterToPoints(r, function(x) x == 11)

获得

       x   y layer
[1,]   18  81    11
[2,] -126  63    11
[3,]  -90  45    11
[4,]   54 -63    11

如果您希望单元格具有最大值

vmax = maxValue(r)
p <- rasterToPoints(r, function(x) all.equal(x, vmax)

使用@data@max

答案 1 :(得分:2)

我不明白为什么你会强迫一个矩阵?也许我不明白你的问题,但是,如果我找到你的正确,你可以只查询栅格值,然后强制指向点以获得地理位置。

require(raster)
r <- raster(ncols=100, nrows=100)
  r[] <- runif(ncell(r), 0,1)

# Coerce < max to NA and coerce result to points 
rMax <- r
rMax[rMax != rMax@data@max] <- NA 
( r.pts <- rasterToPoints (rMax) )  

# You could also use the raster specific Which or which.max functions. 
i <- which.max(r)
  xy.max <- xyFromCell(r, i)
    plot(r)
      points(xy.max, pch=19, col="black")

# Or for a more general application of Which
i <- Which(r >= 0.85, cells=TRUE)
  xy.max <- xyFromCell(r, i)
    plot(r)
      points(xy.max, pch=19, col="black")

# If you prefer a raster object set cells=FALSE
i <- Which(r >= 0.85, cells=FALSE)
  plot(i)

有多个光栅功能可以让您将自定义或基本功能传递给它们。您可能需要查看“焦点”,它是本地运算符或“计算”。您可能还想阅读与栅格相关的帮助。

答案 2 :(得分:0)

要扩展Jeffrey的答案,您可以使用以下选项选择最低栅格值的最后一个实例:

r <- raster(ncols=12, nrows=12)
set.seed(0)
r[] <- round(runif(ncell(r))*0.7 )
rc <- clump(r)
rc[12,8]<-1
plot(rc)

xy.min<-data.frame(xyFromCell(rc,max(which.min(rc))))
xy.min$dat<-1
coordinates(xy.min)<-~x+y
points(xy.min,lwd=2)
相关问题