Как извлечь среднее значение пикселей в растре, перекрытом пикселем из другого растра с небольшим несоответствием геолокации? - PullRequest
1 голос
/ 04 апреля 2020

У меня есть два растра (массив данных 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})

Что, если мы построим их вместе, выглядит так:

raster1 and raster2 overlaped

В качестве примера давайте сосредоточимся на пикселе A на рисунке. Он перекрывается четырьмя пикселями растра2 (три из них видимы, а один - нет). Я хочу взять средневзвешенное значение этих четырех пикселей и назначить его новому растру с координатами, аналогичными пикселю A в растре1. Весовые коэффициенты основаны на доле каждого пикселя (пиксели 1-4 в растре2), перекрытой пикселем A в растре1.

Основываясь на моем поиске, есть несколько способов сделать это:

  1. создать для l oop для каждого пикселя. Это не очень хороший способ, так как у меня миллионы пикселей.

  2. преобразовать растр1 в многоугольник сетки и выполнять зональную статистику с помощью таких пакетов, как растерио. Я не уверен, что это эффективный способ, потому что тогда мы имеем дело с миллионами полигонов.

Есть ли лучший способ сделать это? Обратите внимание, что каждый растр имеет миллионы пикселей, а размеры и размеры различны. Однако размеры пикселей (30 м) и проекционные системы схожи.

Спасибо

...