crop(ds: str | tuple |, shapes: ~geopandas.geodataframe.GeoDataFrame | ~shapely.geometry.polygon.Polygon | list, nodata: int | None = None, **kwargs) -> (<class ''>, <class 'dict'>)[source]#

Cropping a dataset: setting nodata outside of the given shapes AND cropping the raster to the shapes extent.


Overload of rasterio mask function in order to create a masked_array.

The mask function docs can be seen here. It basically masks a raster with a vector mask, with the possibility to crop the raster to the vector’s extent.

  • ds (PATH_ARR_DS) – Path to the raster, its dataset, its xarray or a tuple containing its array and metadata

  • shapes (Union[gpd.GeoDataFrame, Polygon, list]) – Shapes with the same CRS as the dataset (except if a GeoDataFrame is passed, in which case it will automatically be converted.

  • nodata (int) – Nodata value. If not set, uses the ds.nodata. If doesnt exist, set to 0.

  • **kwargs – Other rasterio.mask options


Cropped array as a masked array and its metadata

Return type:

(, dict)


>>> raster_path = "path/to/raster.tif"
>>> shape_path = "path/to/shapes.geojson"  # Any vector that geopandas can read
>>> shapes = gpd.read_file(shape_path)
>>> cropped_raster1, meta1 = crop(raster_path, shapes)
>>> # or
>>> with as ds:
>>>     cropped_raster2, meta2 = crop(ds, shapes)
>>> # Assert those two approaches give the same result
>>> cropped_raster1 == cropped_raster2
>>> meta1 == meta2