如何获得R中光栅图像中心像素的纬度/经度?

问题描述

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

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,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 的其他一些变体。