繁体   English   中英

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

[英]Raster grid position/coordinates of pixel(s) matching a value in R

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

示例数据:

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

我不明白你为什么要强制使用矩阵? 也许我不明白您的问题,但是,如果我理解正确,您可以只查询栅格值,然后强制指向点以获取地理位置。

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
m = maxValue(r) 
rMax[rMax != m] <- 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)

有多个栅格函数可让您将自定义或基本函数传递给它们。 您可能想看一下本地运营商的 "focal" 或 "calc" 。 您可能还想通读与栅格相关的帮助。

要扩展 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM