Like a wombat, GeoWombat has a simple interface (for raster I/O) with a strong backend (for data processing at scale).
>>> import geowombat as gw
Use a context manager and Xarray plotting to analyze processing chains
>>> # Define geographic bounds to warp images to
>>> with gw.config.update(ref_bounds=bounds):
>>>
>>> # Open images as Xarray DataArrays
>>> with gw.open('image_a.tif') as srca, \
>>> gw.open('image_b.tif') as srcb:
>>>
>>> # Apply calculations using Xarray and Dask
>>> results = srca.sel(band=1) * srcb.sel(band=[1, 2, 3]).mean(dim='band')
>>>
>>> # Check results by computing the task and plotting
>>> results.gw.imshow()
Computation scales easily over large datasets with minimal changes to the code.
>>> # Set a reference image to align to
>>> with gw.config.update(ref_image='image_a.tif'):
>>>
>>> # Open images as Xarray DataArrays
>>> with gw.open('image_a.tif') as srca, \
>>> gw.open('image_b.tif') as srcb:
>>>
>>> # The size of srca, srcb, and results are determined by the configuration context
>>> results = srca.sel(band=1) * srcb.sel(band=[1, 2, 3]).mean(dim='band')
>>>
>>> # Initiate computation by writing the results to file.
>>> # Mix process and thread workers to execute the task in parallel.
>>> results.gw.to_raster('output.tif',
>>> n_workers=4,
>>> n_threads=4,
>>> compress='lzw')
For more details, see https://geowombat.readthedocs.io.