![](/img/trans.png)
[英]How to find the coordinates of a pixel with a specific value in a raster data in 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.