After import a raster file and add buffer of 20 meters I want to write a new raster with this dimensions, but getting error:
*`import rasterio
.
from rasterio import features
from rasterio import transform
from shapely.geometry import shape, Point, Polygon
import numpy as np
import zipfile,contextlib
from io import BytesIO
from contextlib import ExitStack
#read cloud raster from zip
with zipfile.ZipFile('...img/S2B_MSIL2A_20230926T132239_N0509_R038_T22KHC_20230926T171115.SAFE.zip',"r") as zf_:
zfiledata=BytesIO(zf_.read('S2B_MSIL2A_20230926T132239_N0509_R038_T22KHC_20230926T171115.SAFE/GRANULE/L2A_T22KHC_A034241_20230926T132553/IMG_DATA/R20m/T22KHC_20230926T132239_SCL_20m.jp2')) with contextlib.ExitStack() as stack:
uzFile=stack.enter_context(zf.open('S2B_MSIL2A_20230926T132239_N0509_R038_T22KHC_20230926T171115.SAFE/GRANULE/L2A_T22KHC_A034241_20230926T132553/IMG_DATA/R20m/T22KHC_20230926T132239_SCL_20m.jp2'))
_uzFileBytes=stack.enter_context(BytesIO(_uzFile.read()))
with rasterio.open(_uzFileBytes) as src_raster:
raster_pixels=src_raster.read(1)
raster_transform=src_raster.transform
raster_meta=src_raster.meta scl_pixels=raster_pixels.copy()
#detect pixels with cloud and shadow
index_pixels=np.where(np.isin(scl_pixels.astype('float32'),[3,8,9,10]),scl_pixels.astype('float32'),None)
cldsdw_rows,cldsdw_cols=np.where(np.array(index_pixels,dtype=np.float32)>0)
cldsdw_coords = raster_transform(cldsdw_rows,cldsdw_cols)
cldsdw_points = [Point(x, y) for x, y in zip(cldsdw_coords[0], cldsdw_coords[1])]
cldsdw_polygon = Polygon(cldsdw_points)
cldsdw_bufygon = cldsdw_polygon.buffer(20)
##add buffer 20m
cldsdw_features = [{'geometry': shape(geom)} for geom in cldsdw_bufygon.geoms]
with rasterio.open('...img/r20moutput.tif', 'w', raster_meta) as dst:
rasterio.features.rasterize(cldsdw_features, dst.write, transform=raster_transform)`
but on write, its getting errors:
... /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((799973.998 7735779.078, 800020 7735793.552, 800020 7735840, 80002...>} at index 0 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((870280.908 7799934.063, 870280.861 7799934.194, 870280.384 779993...>} at index 1 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((870329.993 7799782.7, 870328.655 7799783.529, 870327.117 7799784....>} at index 2 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((870470.013 7799982.7, 870469.057 7799983.259, 870467.453 7799984....>} at index 3 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((871560 7758302.129, 871602.469 7758315.491, 871600 7752439.992, 8...>} at index 4 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((874818.993 7799059.131, 874780.026 7799818.976, 874780 7799820, 8...>} at index 5 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((875072.266 7799664.207, 875070.737 7799663.127, 875069.05 7799662...>} at index 6 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((875580 7800015.404, 875580 7800040, 875580.247 7800040, 875600 78...>} at index 7 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((879300 7760737.359, 879351.351 7760753.516, 879340 7711819.995, 8...>} at index 8 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((886740 7763078.201, 886790.736 7763094.164, 886780 7720279.995, 8...>} at index 9 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((887160 7763210.345, 887211.078 7763226.416, 887200 7717519.995, 8...>} at index 10 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((901103.816 7767597.478, 901200 7767627.74, 901200 7790360, 901200...>} at index 11 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((901299.948 7790439.169, 901282.326 7790580.148, 901282.042 779058...>} at index 12 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((901320 7790380.018, 901320 7790480, 901320.247 7790480, 901340 77...>} at index 13 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((901700.483 7789500.028, 901699.744 7789500.002, 901697.801 778950...>} at index 14 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((901845.698 7789420.85, 901840.003 7789779.683, 901840.249 7789779...>} at index 15 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((901890.001 7788502.704, 901888.889 7788503.371, 901887.312 778850...>} at index 16 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((901959.08 7789720.045, 901958.04 7789720.096, 901956.098 7789720....>} at index 17 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((902082.445 7775980.168, 902081.96 7775980.096, 902080 7775980, 90...>} at index 18 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((902259.289 7788783.873, 902224.383 7788827.506, 902223.253 778882...>} at index 19 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((902477.653 7791640.143, 902477.556 7791640.15, 902475.654 7791640...>} at index 20 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((902849.006 7768146.566, 903497.172 7768350.498, 903239.994 775753...>} at index 21 will not be rasterized. warnings.warn( /opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py:336: ShapeSkipWarning: Invalid or empty shape {'geometry': <POLYGON ((903779.055 7780200.043, 903777.76 7780200.126, 903775.841 7780200...>} at index 22 will not be rasterized. warnings.warn( Traceback (most recent call last): File "", line 2, in File "/opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/env.py", line 410, in wrapper return f(*args, **kwds) ^^^^^^^^^^^^^^^^ File "/opt/.virtualenv/visaopq/lib/python3.12/site-packages/rasterio/features.py", line 378, in rasterize if len(out_shape) != 2: ^^^^^^^^^^^^^^ TypeError: object of type 'method' has no len()