У меня есть два растра (массив данных xarray) с небольшим несоответствием геолокации таким образом, что пиксели растра1 перекрываются с несколькими пикселями растра2. Я пытаюсь сделать некоторые расчеты на перекрывающихся пикселей в растре2. В приведенном ниже коде приведен пример:
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})
Что, если мы построим их вместе, выглядит так:
В качестве примера давайте сосредоточимся на пикселе A на рисунке. Он перекрывается четырьмя пикселями растра2 (три из них видимы, а один - нет). Я хочу взять средневзвешенное значение этих четырех пикселей и назначить его новому растру с координатами, аналогичными пикселю A в растре1. Весовые коэффициенты основаны на доле каждого пикселя (пиксели 1-4 в растре2), перекрытой пикселем A в растре1.
Основываясь на моем поиске, есть несколько способов сделать это:
создать для l oop для каждого пикселя. Это не очень хороший способ, так как у меня миллионы пикселей.
преобразовать растр1 в многоугольник сетки и выполнять зональную статистику с помощью таких пакетов, как растерио. Я не уверен, что это эффективный способ, потому что тогда мы имеем дело с миллионами полигонов.
Есть ли лучший способ сделать это? Обратите внимание, что каждый растр имеет миллионы пикселей, а размеры и размеры различны. Однако размеры пикселей (30 м) и проекционные системы схожи.
Спасибо