У меня есть 2 маленьких растра в базе данных с поддержкой postgis: матрица высот и слой потоков / прудов. Оба хранятся в виде плиток 10х10 и имеют одинаковый размер сетки и ячейки. Я хочу «сжечь» потоки / пруды в ЦМР (т.е. растровый калькулятор). Я попробовал ST_MapAlgebra, но не смог понять, как игнорировать ячейки узлов в слое stream / pond. Сейчас я пытаюсь просто обновить матрицу высот, используя ST_SetValue. Следующий код, по-видимому, обновляет только одну ячейку на плитку (см. Изображение). Если я не включаю предложение st_intersects (), оно выполняется вечно (даже если я передаю только одну точку для обновления одной ячейки). Я предполагаю, что это может сработать, если растры не будут храниться в виде тайлов, но я бы предпочел этого не делать.
update dem_clip d set rast = st_setvalue(d.rast, geom, st_value(d.rast,geom) - 1000)
from (select ((st_pixelascentroids(rast)).geom) from stream_clip) s
where st_intersects(d.rast,s.geom);
что я хочу (потоки записываются в DEM)
что я получаю