如何在 R 中获取光栅图像中心像素的 lat/long?

How to get lat/long of the center pixel in a raster image in R?

我想提取光栅图像中心像素的纬度和经度信息。如果光栅图像不是正方形(例如它不是 50x50),我想获得大约中心像素的 lat/long。这是一些可重现的数据:

library(raster)
r = raster(ncol=25, nrow=25, xmn=-1000, xmx=1000, ymn=-100, ymx=900, vals = 1:(25*25))
crs(r) = crs(raster())

根据你的代码和我上面的评论,这里有一个例子。显然,对于不规则形状的光栅,这对您的情况没有帮助。

library(raster)
library(sf)
r = raster(ncol=25, nrow=25, xmn=-1000, xmx=1000, ymn=-100, ymx=900, vals = 1:(25*25))
crs(r) = crs(raster())

#convert extent of raster to poly
poly<-st_as_sfc(st_bbox(raster(r))) 
class(poly)
plot(r)
plot(st_geometry(poly), border="red", add=TRUE)

#get centroid
cent<-st_centroid(poly)
plot(st_geometry(cent), add=TRUE)

这是获取中央网格单元中心的方法

library(raster)
r <- raster(ncol=25, nrow=25, xmn=-1000, xmx=1000, ymn=-100, ymx=900)

row <- trunc(nrow(r)/2)
col <- trunc(ncol(r)/2)
c(row, col)
#[1] 12 12
cell <- cellFromRowCol(r, row, col)
cell
#[1] 287
xyFromCell(r, cell)
#       x   y
#[1,] -80 440

另一种方法是获取栅格的中心及其所在的网格单元

x <- xmin(r) + (xmax(r) - xmin(r))/2
y <- ymin(r) + (ymax(r) - ymin(r))/2
cell <- cellFromXY(r, cbind(x,y))
cell
#313
rowColFromCell(r, cell)
#     row col
#[1,]  13  13
xyFromCell(r, cell)
#     x   y
#[1,] 0 400

这里的区别是因为数字或行和列是偶数,所以你可以取 c(12, 12)c(13, 13) 或 12 和 13 的其他一些变体。