如何在 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 的其他一些变体。
我想提取光栅图像中心像素的纬度和经度信息。如果光栅图像不是正方形(例如它不是 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 的其他一些变体。