如何提取与另一个地理位置稍有不匹配的光栅中的像素重叠的光栅中像素的平均值?

2024-06-11 18:12:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个光栅(xarray dataarray),地理位置稍有不匹配,raster1的像素与raster2的多个像素重叠。我试图对raster2中的重叠像素进行一些计算。下面的代码生成一个示例:

import xarray as xr

LC_val = [[4, 4, 3, 4],
   [3, 3, 3, 6],
   [3, 3, 3, 9]]

VI_val = [[  10,    20,  30,  40],
   [  50,    60,  70,  80],
   [ 90,    100,  110, 120]]

   x_lc = [-1974345., -1974315., -1974285., -1974255.]
   y_lc = [3754475., 3754445., 3754415.]

   x_vi = [-1974371.7598, -1974341.7598, -1974311.7598, -1974281.7598]
   y_vi = [3754465.3842, 3754435.3842, 3754405.3842]

   raster1 = xr.DataArray(LC_val,dims=('y','x'),coords={'x': x_lc,'y': y_lc})
   raster2 = xr.DataArray(VI_val,dims=('y','x'),coords={'x': x_vi,'y': y_vi})

如果我们把它们画在一起,看起来像:

raster1 and raster2 overlaped

例如,让我们聚焦图中的像素A。它与光栅2的四个像素重叠(其中三个可见,一个不可见)。我想取这四个像素的加权平均值,并将其分配给具有类似于raster1中像素A的坐标的新光栅。权重基于每个像素(光栅2中的像素1-4)与光栅1中的像素A重叠的分数

根据我目前的搜索,有几种方法可以做到这一点:

  1. 在每个像素上创建一个for循环。这不是一个好方法,因为我有数百万像素

  2. 将raster1转换为meshgrid多边形,并使用rasterio等包执行分区统计。我不确定这是否是一种有效的方法,因为我们正在处理数百万个多边形

有更好的方法吗?请注意,每个光栅有数百万像素,范围和尺寸不同。然而,像素大小(30米)和投影系统是相似的

谢谢


Tags: 方法光栅val像素coordslcxarrayvi