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