I have a source raster data set (tif file) and a number of polygon features. For each one of those polygons I need to:
a) 'clip' the raster. b) change values of those clipped raster cells (with the average value). c) write new values back to the source raster.
I've managed to do a and b, which means I now have a numpy.ndarray variable where all cells have been populated with the average value. How can I write this back to the source raster?
I believe I'd be able to write a script which could do such a thing. I have arrays dimensions (width and height) and top left cell's position, so I guess it'd just be a matter of operating with these arrays. However, I was wondering whether there's any existing function that does that already.
import os, sys, datetime, time import geopandas as gpd import gdal import rasterio from rasterio.mask import mask from fiona.crs import from_epsg import numpy as np import pycrs alr_path = r'Z:\GRAU_Team_Admin\Alfonso Jimenez\Flood Modelling\Building Footprint\OUTPUT\NI_RIVER_ALR_1000.tif' gdb_vml_polygs = r'\\lwukwvdi11\data\Data\UK\UK_Mapping\VML\data\Europa20190403\RSA_VML_BUILDINGS_NI.gdb' fc_vml_polygs = r'VML_Buildings_NI' alr = rasterio.open(alr_path) vml_polygs = gpd.read_file(gdb_vml_polygs, driver='FileGDB', layer=fc_vml_polygs) for index, row in vml_polygs.iterrows(): #row contains the geometry window, out_transform = mask(alr, row, all_touched=True, crop=True) if np.all([window < 0]): avg = -1 else: avg = window[window != -1].mean().item() window_avg = (np.where(window!=-1, int(round(avg,0)), window))
In the script 'window_avg' is a numpy array containing the new values. How can I write these values back into the source raster?