gpt4 book ai didi

R:计算两个栅格层像素之间的欧氏距离

转载 作者:行者123 更新时间:2023-12-01 22:51:26 25 4
gpt4 key购买 nike

同一区域我有两个栅格层。我需要找到粗分辨率栅格像元和精分割辨率栅格像元之间的欧几里得距离,这些像元落在我的粗分辨率栅格中像素的每个像元内。例如:

example

红色方 block 是粗分辨率光栅的像素,蓝色方 block 是精分割辨率光栅的像素。黑点为粗分辨率栅格质心,蓝点为精分割辨率栅格质心。

发布了类似的问题,但与我的问题不同的是我不想计算栅格单元之间的最近距离。

我的粗分辨率栅格的像素大小为 460m,精分割辨率栅格的像素大小为 100m。到目前为止,我所做的是从两个栅格的栅格像元的质心创建点符号。如何计算每个粗像素与其对应的精细像素之间的欧氏距离?

library(terra)

fr = rast("path/fine_image.tif") # fine resolution raster
cr = rast("path/coarse_image.tif") # coarse resolution raster

fr_p = as.points(fr,
values = T,
na.rm = T,
na.all = F) # fine resolution points

cr_p = as.points(cr,
values = T,
na.rm = T,
na.all = F) # coarse resolution points

我不确定如何从这里开始。有什么建议吗?

这是我的栅格:

fr = rast(ncols=108, nrows=203, nlyrs=1, xmin=583400, xmax=594200, ymin=1005700, ymax=1026000, names=c('B10_median'), crs='EPSG:7767')

cr = rast(ncols=23, nrows=43, nlyrs=1, xmin=583280, xmax=593860, ymin=1006020, ymax=1025800, names=c('coarse_image'), crs='EPSG:7767')

解决方案 来自@michael 的回答,输出栅格(在使用多边形 shp 进行裁剪和 mask 之后)如下所示:

output

黄色方 block 是粗栅格中的像元,下方的栅格是答案部分代码的输出。

最佳答案

这有点 hacky,但我认为它可能会做你想做的......

# Raster at fine resolution where values are cell indices
fr_cells <- fr
values(fr_cells) <- 1:ncell(fr)

# Second raster at fine resolution where values are indices of
# the surrounding coarse res cell (if there is one)
fr_cr <- fr
fr_xy <- xyFromCell(fr, 1:ncell(fr))
values(fr_cr) <- extract(cr, fr_xy, cells = TRUE)[, "cell"]

# Function to calculate distance given a pair of cell indices
fn <- function(x) {
fr_xy <- xyFromCell(fr, x[1])
cr_xy <- xyFromCell(cr, x[2])

sqrt( sum( (fr_xy - cr_xy)^2 ) )
}

fr_dist <- app(c(fr_cells, fr_cr), fun = fn)

关于R:计算两个栅格层像素之间的欧氏距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74282152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com