Changelog#
The authoritative changelog lives at CHANGELOG.md in the repository root. The most recent entries are mirrored here for in-docs visibility; pre-1.8 history follows below for historical reference.
Unreleased#
Features
Added
geowombat.detectsubmodule for tiled, georeferenced object detection on overhead imagery, mirroring thefit / predict / fit_predictshape ofgeowombat.ml:YOLODetector(Ultralytics YOLO) supporting axis-aligned (AABB) and DOTA-v1 oriented (OBB) boxes.TorchGeoDetectorwrapping TorchVision Faster R-CNN / RetinaNet with optional TorchGeo pretrained weights (e.g.FASTERRCNN_RESNET50_FPN_XVIEW).SAMRefinerfor refining bounding-box detections into polygon masks via Meta’s Segment Anything Model.
Added geowombat-native accessors
src.gw.detect(detector, ...)(tiled inference with cross-tile NMS) andsrc.gw.to_yolo_dataset(...)(Ultralytics-layout training-dataset builder).Added module-level wrappers:
predict,fit,fit_predict,build_dataset,boxes_from_polygons(AABB ↔ OBB),detection_accuracy(per-class precision/recall/F1/AP at one or more IoU thresholds, plusiou_thresholds='coco'for mAP@[.5:.95] andclass_agnostic=True),plot_detections, andexport_for_review/recompute_from_reviewfor QGIS GeoPackage round-trip review.Sensor-aware band selection: when
gw.config.update(sensor=...)is active, detection accessors auto-resolve RGB band indices fromsrc.band.values.Added deep-learning classifiers
TabNet,L-TAE, andTorchGeo(#347).
Documentation
New Object detection walkthrough with a recommended DOTA-v1 + OBB setup callout, AABB-vs-OBB explainer, and polygon-digitization guidance.
Added a notebooks chapter rendering all 7 Jupyter notebooks inline via
nbsphinx.Updated install guide with conda extras, GDAL instructions, and the
dlextra (#349).
Bug Fixes
Improved block usage and nodata handling (#348).
Build
Added
nbsphinx,ipykernel, andmyst-parserto the[docs]extras.Added
[detect](ultralytics, torchmetrics, pycocotools, pillow, pyyaml, opencv-python) and[sam](segment-anything) extras.
Testing
Added 29 new tests for the detect module covering tile windowing, polygon → YOLO label math (AABB + OBB),
_scale_to_uint8edge cases, cross-tile NMS, IoU/COCO/class-agnostic accuracy modes, CRS reprojection in accuracy assessment, the QGIS review round-trip, smoke tests forYOLODetector/TorchGeoDetector/SAMRefiner/plot_detections, and an end-to-endfit_predictsmoke test.
v2.1.23 (2026-01-12)#
Features
Migrated to Meson build backend (#334).
Added HLS and ESA WorldCover STAC collections (#333).
Added mocked STAC tests to reduce flaky CI failures.
Bug Fixes
Fixed NaN values in mosaic overlap regions (#322).
Fixed
bounds_by='union'functionality (#328).Fixed sklearn 1.6+ clusterer detection (#331).
Fixed non-unique band names in
stack_dim='band'mode (#316).Fixed
RasterBlockErrorfor non-multiple-of-16 chunk sizes (#237).Pinned
rasterio<1.5.0andh5py<3.10.0.
Older 2.x releases — see CHANGELOG.md for the full history. Pre-1.8 release notes follow.
1.7.5 (20 May 2022)#
Enhancements#
ML - added ability to train unsupervised sklearn predictors
ML - Added ability to do Crossvalidation and hyperparameter tuning with sklearn predictors
Bug fixes#
resolved .data errors
added fix to handle missing data in ML pipeline for prediction
1.7.3 (18 August 2021)#
Enhancements#
Added check for corrupted .zip files in NASA data downloader.
1.7.2 (9 June 2021)#
Bug fixes#
Fixed time grouping in
geowombat.load().
1.7.1 (21 May 2021)#
Bug fixes#
Added a check for finite values in
geowombat.load()to safely loadnumpy.infvalues.
1.7.0 (17 May 2021)#
New#
- Created
geowombat.load()function.
- Created
1.6.7 (12 May 2021)#
Bug fixes#
Added geowombat attribute lookup in
geowombat.open()to support bounds as data slice objects.
1.6.6 (11 May 2021)#
Bug fixes#
Added geowombat attribute lookup in
geowombat.open()to support windows as data slice objects.
1.6.5 (6 May 2021)#
New#
Added
DataArray.gw.read()method.
Bug fixes#
Added check for AOT object type to generate a NumPy array when a float is given.
Fixed type conversion in
geowombat.core.vi.TasseledCapoutputs.Fixed band lookup order in Landsat angle file creation.
Improved masking in geowombat.core.vi module.
1.6.4 (16 March 2021)#
New#
Added kernel NDVI to vegetation indices.
Bug fixes#
- Fixed
has_band_dimandhas_time_dimproperty methods. Now uses
xarray.DataArray.dimsto check for existing dimensions.
- Fixed
Fixed missing return value in vegetation index clip.
Improved checks for
DataArrayband coordinate in vegetation index calculations.
Enhancements#
Added automatic band dimension squeezing in
xarray.DataArray.gw.imshow().
1.6.3 (8 March 2021)#
New#
Added
resamplingandnum_threadskeyword arguments togeowombat.radiometry.landsat_pixel_angles()andgeowombat.util.GeoDownloads().download_cube().Added
max_aotkeyword argument togeowombat.radiometry.sixs.SixS().get_optimized_aot().
1.6.2 (7 March 2021)#
New#
Added
coords_onlykeyword argument ingeowombat.transform_crs().
Enhancements#
Replaced
joblib.Parallelwithconcurrent.futures.ThreadPoolExecutoringeowombat.util.web.DownloadMixin().download_gcp().
1.6.1 (5 March 2021)#
Bug fixes#
- Fixed Landsat angle .hdr file cell size in
geowombat.radiometry.landsat_pixel_angles(). When using the Landsat angle files with subsample > 1, the generated .img.hdr files retain the native 30 m cell size.
This fix edits the .img.hdr file to update the resample cell size.
- Fixed Landsat angle .hdr file cell size in
1.6.0 (3 March 2021)#
New#
NetCDF support
NetCDF files can be opened following rasterio dataset formatting.
Band variables for multiple datasets can be opened with the netcdf_vars argument. E.g.,
with gw.open('netcdf:dataset.nc', netcdf_vars=['blue', 'green', 'red'] as src:
print(src)
Atmospheric correction
Created
geowombat.Radiometry.sixs.SixS.- Created 6S lookup tables (LUTs) for Landsat 5, 7, and 8 and Sentinel 2A and 2B.
Includes LUTs for wavelengths blue, green, red, NIR, SWIR1, and SWIR2.
Spatial-temporal fusion
Added StarFM method under
geowombat.radiometry._fusion().
Warning
This implementation of StarFM is experimental and not tested against the original method.
Added prepend_str argument to
geowomat.core.sort_images_by_date().
1.5.5 (28 Dec 2020)#
New#
Added
min_frac_areakeyword argument ingeowombat.extract().
1.5.4 (15 Dec 2020)#
Bug fixes#
Added check for
stack_dimargument ingeowombat.open().Fixed
data_are_separateanddata_are_stackedproperties.
Enhancements#
Added
persist_filenameskeyword argument ingeowombat.open().
1.5.3 (13 Dec 2020)#
Bug fixes#
Added
window_idreturn item ingeowombat.calc_area().
New#
Added
geowombat.to_netcdf()function.
1.5.2 (9 Dec 2020)#
Bug fixes#
Changed
whereclause fromselftoxarrayingeowombat.wi().
1.5.1 (3 Dec 2020)#
Bug fixes#
Added check for empty polygon list in
geowombat.array_to_polygon().
1.5.0 (1 Dec 2020)#
Enhancements#
Added optional
dask.distributedClientingeowombat.extract()geowombat.core.parallel.ParallelTask.Added ‘ray’ as an optional scheduler with
@ray.remoteuser functions.Added the option of iterating over a list of raster files.
Added option to pass
chunks=Noneingeowombat.open.
Bug fixes#
Fixed conflict with global configuration and a user-provided reference
DataArrayingeowombat.polygon_to_array().
1.4.6 (13 Nov 2020)#
Bug fixes#
Added shapely.geometry.MultiPolygon as an accepted data type in
geowombat.core.prepare_points().Added missing GeoDataFrame columns in
geowombat.core.polygons_to_points().
1.4.5 (9 Nov 2020)#
Bug fixes#
Added check for config reference resolution type in
geowombat.polygon_to_array().
1.4.4 (8 Nov 2020)#
Enhancements#
Add global configuration options for
geowombat.polygon_to_array().
1.4.3 (2 Nov 2020)#
Bug fixes#
Added batch id to the window count id in
geowombat.to_raster()andgeowombat.core.parallel.ParallelTask.
1.4.2 (25 Oct 2020)#
Bug fixes#
Fixed check for compression when using
dask.store.Updated the resampling methods to account for rasterio updates.
1.4.1 (22 Oct 2020)#
Bug fixes#
Fixed slicing error in
DataArraywindow generator with arrays of >2 dimensions.
Enhancements#
Added window id in
geowombat.core.parallel.ParallelTask.
1.4.0 (22 Oct 2020)#
Bug fixes#
Fixed error in destination bounds transformation when
ref_crswas used in a configuration context withoutref_bounds, like:
# Previously did transform correctly
with gw.config.update(ref_crs=crs, ref_bounds=bounds):
with gw.open() as src:
...
# Previously did not transform correctly
with gw.config.update(ref_crs=crs):
with gw.open() as src:
...
New#
Created
geowombat.bounds_to_coords()function.
Enhancements#
Added object types in the the data window generator. Yield type options now include
DataArrays,sliceobjects, andrasterio.windows.Windowobjects.
with gw.open() as src:
for w in src.gw.windows():
...
1.3.1 (26 Aug 2020)#
Bug fixes#
Added a block type check to avoid compressing zarr files when data are written into separate files.
1.3.0 (25 Aug 2020)#
New#
- Added machine learning module geowombat.ml with
geowombat.ml.fit()andgeowombat.ml.fit_predict()methods. Model fitting is performed with sklearn-xarray
- Requires an installation with:
pip install git+https://github.com/jgrss/geowombat.git#egg=project[ml].
- Added machine learning module geowombat.ml with
- Added tasks visualization in geowombat.tasks.
- Tasks can be setup and visualized with the
geowombat.tasks.GeoTaskclass. Visualization graph implementation borrowed from xarray-simlab
- Tasks can be setup and visualized with the
- Requires an installation with:
pip install git+https://github.com/jgrss/geowombat.git#egg=project[view].
1.2.33 (25 Aug 2020)#
Bug fixes#
Fixed coordinate length mismatch with converted polygons in
geowombat.polygon_to_array().
1.2.32 (24 Aug 2020)#
Bug fixes#
Added check/replace for Landsat 7 with thermal band for web downloads from the Google Cloud Platform.
1.2.31 (20 Aug 2020)#
Enhancements#
Added support for parallel downloads in
download_cube(), from thegeowombat.util.GeoDownloadsclass.
New#
Added Landsat and Sentinel 2 URL parsing in
geowombat.util.GeoDownloadsfor data on the Google Cloud Platform.
1.2.30 (17 Aug 2020)#
Enhancements#
Added array value to polygon GeoDataFrame output in
geowombat.array_to_polygon().
1.2.29 (15 Aug 2020)#
Enhancements#
Added col keyword argument in
geowombat.polygon_to_array().
1.2.28 (14 Aug 2020)#
Bug fixes#
Fixed error when using
geowombat.polygon_to_array()with multiple opened rasters.
1.2.27 (8 Aug 2020)#
Bug fixes#
Fixed error with Google Cloud Platform query updates in
geowombat.util.web.GeoDownloads().download_cube().
1.2.26 (7 Aug 2020)#
Bug fixes#
- Changed the default ‘no data’ value nodata=None to nodata=0 and added int and float type checks.
This fix addressed Issue #41.
1.2.25 (4 Aug 2020)#
Bug fixes#
Changed Landsat 5 metadata flag for SWIR2 from 6 to 7 in
geowombat.radiometry.sr.MetaData.Removed logger file writing, which conflicted with read-only containers.
Enhancements#
Reorganized the
geowombat.radiometry.brdf.BRDF()module.
1.2.24 (30 July 2020)#
Bug fixes#
Removed forced file writing of the log and replaced with per-module logging. 6579eb8
1.2.23 (27 July 2020)#
Bug fixes#
Fixed padded block writing with user functions in
geowombat.to_raster().Added check for existing metadata file in
geowombat.util.web.download_cube().
Enhancements#
Reorganized the ReadTheDocs pages.
1.2.22 (21 July 2020)#
Bug fixes#
Added missing ‘l5’ download flag in
geowombat.util.web.download_cube().
Enhancements#
Added ‘l5’ to
geowombat.radiometry.sr.bandpass().Modified support for writing GeoTiffs as separate files in
geowombat.to_raster().The previous version used the DataArray.transform property, which was derived from the full raster extent. The latest version of GeoWombat uses a DataArray.gw.transform, which is an updated transform property for each raster chunk.
1.2.21 (8 July 2020)#
Bug fixes#
Added check for None row/column chunks in
geowombat.core.parallel.ParallelTask.
Enhancements#
Added affine and transform properties.
1.2.20 (7 July 2020)#
Bug fixes#
Fixed conditional value replacement in
geowombat.calc_area().
Enhancements#
Added return_binary argument to
geowombat.core.geoxarray.GeoWombatAccessor.compare().
New#
Created
geowombat.core.parallel.ParallelTask.
1.2.19 (6 July 2020)#
Enhancements#
Added source attributes to return object in
geowombat.core.geoxarray.GeoWombatAccessor.compare().
New#
Created
geowombat.core.geoxarray.GeoWombatAccessor.replace()function.Created
geowombat.replace()function.Created
geowombat.core.geoxarray.GeoWombatAccessor.recode()function.Created
geowombat.recode()function.
1.2.18 (1 July 2020)#
Bug fixes#
Fixed call to
geowombat.sample()fromDataArraymethod.
New#
Added image metadata tags to
DataArrayattributes ingeowombat.open.Added support for VRT creation from multiple files.
Created
geowombat.calc_area()function.Created
geowombat.core.geoxarray.GeoWombatAccessor.compare()function.Created
geowombat.core.geoxarray.GeoWombatAccessor.match_data()function.
1.2.17 (25 June 2020)#
Bug fixes#
Added missing tag update in file compression stage.
Fixed issue with compression being triggered with
compress=Noneorcompress=False.
1.2.16 (22 June 2020)#
Bug fixes#
Fixed an issue with lingering configuration reference bounds.
New#
Added metadata tags keyword argument to
geowombat.to_raster().Added chunk_grid and footprint_grid DataArray properties.
1.2.15 (15 June 2020)#
New#
Added
set_nodata()function for DataArrays.Added
bounds_overlay()function for DataArrays.
1.2.14 (12 June 2020)#
Bug fixes#
Fixed ‘no data’ clipping error in
geowombat.util.GeoDownloads.download_cube().
New#
Added file_list to
geowombat.core.sort_images_by_date().Added nodata keyword argument to
geowombat.open.
1.2.13 (2 June 2020)#
New#
Added cloud_height option in
download_cube().Added first attempt at supporting HDF reads.
1.2.12 (3 May 2020)#
New#
Added
geowombat.radiometry.angles.estimate_cloud_shadows()to estimate cloud shadows from a cloud mask.
Bug fixes#
Fixed month range parsing in
geowombat.util.web.download_cube().
1.2.11 (1 May 2020)#
Enhancements#
Added micrometer values for Sentinel-2 2A and 2B sensors.
1.2.10 (27 April 2020)#
New#
Added support for
rasterio.windows.Window()andrasterio.coords.BoundingBox()objects in thegeowombat.config.update()manager.
1.2.9 (1 April 2020)#
Removed f-string requirement in setup.py script.
Added keyword argument in
download_cube()function.
1.2.8 (1 April 2020)#
Modified sample iteration overhead in
geowombat.moving.moving_window().
New#
Added weights option in
geowombat.moving.moving_window().
1.2.7 (31 March 2020)#
New#
Added window weights for moving mean.
Changed
geowombat.moving.moving_window()parallelism from raster rows to raster samples.
1.2.6 (15 March 2020)#
Fixed missing gw.filename attribute in
geowombat.to_vrt().
1.2.5 (4 March 2020)#
Added attribute updating for band math.
1.2.4 (26 February 2020)#
Added CRS check for pyproj CRS instances.
1.2.3 (23 February 2020)#
Added check to support new CRS object in geowombat.
Added padding to image edges when using the padding option in
geowombat.to_raster().Added checks for empty CRS objects.
Added the Advanced Vegetation Index.
Added
geowombat.core.lonlat_to_xy()andgeowombat.core.xy_to_lonlat()functions.
1.2.2 (12 February 2020)#
Added padding option to
geowombat.to_raster().Added half cell adjustment to transformed samples in
geowombat.sample().
1.2.1 (12 February 2020)#
Fixed a error in checking the spatial index.
1.2.0 (11 February 2020)#
Rearranged and renamed various functions.
geowombat.to_crs()is deprecated in favor ofgeowombat.transform_crs().geowombat.geodataframe_to_array()is deprecated in favor ofgeowombat.polygon_to_array().geowombat.to_geodataframe()is deprecated in favor ofgeowombat.array_to_polygon().
Added lazy_wombat decorator to allow the user to apply in-memory functions lazily. See User functions for examples.
1.1.6 (9 February 2020)#
Added new property geodataframe.
Fixed error with pass bounds_by argument option to
mosaic().Modified
geowombat.to_crs()to handle grid resampling.
1.1.5 (7 February 2020)#
Fixed error that caused the deletion of ref_tar when multiple raster files were opened.
1.1.4 (7 February 2020)#
Added configuration option ref_tar to target align outputs to a reference raster. Example usage looks like:
# Subset a raster but align to a target grid
with gw.config.update(ref_bounds=bounds, ref_tar='image.tif'):
with gw.open() as src:
...
1.1.3 (6 February 2020)#
Added new function
geowombat.geodataframe_to_array()to convert a geopandas.GeoDataFrame to an xarray.DataArray.
1.1.2 (5 February 2020)#
Added ‘empirical-rotation’ method to
geowombat.Topo().norm_topo()function ingeowombat.Topo
1.1.1 (28 January 2020)#
Fixed error reading by a extent bounds with dask.delayed
1.1.0 (24 January 2020)#
Added new class
geowombat.radiometry.Topofor topographic corrections.Added new xarray.DataArray geowombat accessor
to_crs()for CRS transformations.Added new function
geowombat.core.sort_images_by_date().Added geowombat.radiometry module to the documentation.
Added new xarray.DataArray geowombat property bounds_as_namedtuple.
Rearranged documentation and fixed minor docstring issues.
1.0.7 (23 January 2020)#
Added new functions
geowombat.core.indices_to_coords()andgeowombat.core.coords_to_indices()to replacegeowombat.core.ij_to_xy()andgeowombat.core.xy_to_ij().
1.0.6 (21 January 2020)#
Added missing imports for
geowombat.sample().
1.0.5 (21 January 2020)#
Changes#
Modified
geowombat.sample(). New functionality includes:Systematic sampling
Random sampling
Stratified random sampling
1.0.4 (19 January 2020)#
Changes#
Removed DataArray list option from
geowombat.coregister().
Bug fixes#
Fixed an error with global configuration settings that occurred when ref_image was used and subsequently overwritten.
Removed band_names argument from
imshow().
1.0.3 (17 January 2020)#
Bug fixes#
Added workaround example in the documentation for
geowombat.moving().
1.0.2 (16 January 2020)#
Bug fixes#
Fixed a problem with
geowombat.moving()block overlaps when requested window sizes were larger than the smallest Dask chunk size.Fixed
geowombat.moving()percentile quantile sorting of a full moving window.
1.0.1 (15 January 2020)#
New#
Added a check for even or odd window sizes with
geowombat.moving().Added an option to co-register a list of images.
Added percentiles to
geowombat.moving().
Bug fixes#
Fixed missing DataArray attributes after changing data type.
1.0.0 (13 January 2020)#
First release
1.3.7b (12 January 2020)#
New#
Added
geowombat.radiometry.pan_sharpen()function.Added properties for multi-spectral + panchromatic band stacks.
1.3.0b (9 January 2020)#
New#
Added
geowombat.to_vrt()function.
1.2.0b (29 December 2019)#
New#
Added
geowombat.to_geodataframe()function.
Bug fixes#
Fixed GeoDataFrame CRS check in
geowombat.extract()function.
1.0.7b (20 December 2019)#
New#
Added user argument dtype in
geowombat.open.
Bug fixes#
Fixed time and band stacking error.
Fixed dictionary string name error in CRF feature processing
1.0.0b (27 November 2019)#
New#
Added
geowombat.mask()function.
Bug fixes#
Fixed row/column offset error with
warp()function.
1.0.0b (10 November 2019)#
New#
Added
download_cube()function ingeowombat.util.web.GeoDownloads.
1.0.0b (1 November 2019)#
Enhancements#
Added expand_by user argument in
geowombat.clip().
1.0.0b (30 October 2019)#
New#
Added user functions as Xarray attributes. See
geowombat.apply()for an example.
1.0.0b (24 October 2019)#
Enhancements#
Implemented improvements from testing processes vs. threads for concurrent I/O in
geowombat.to_raster().
Bug fixes#
Changed BRDF normalization (
geowombat.radiometry.BRDF) from 1d to 2d in order to work with Dask arrays.
1.0.0b (23 October 2019)#
Changes#
Added fixes for surface reflectance
New#
Added support for band stacking (in addition to time stacking) in
geowombat.open. The new keyword argument is stack_dim and can be used like:
with gw.open(..., stack_dim='band') as ds:
...
1.0.0b (20 October 2019)#
Changes#
Block writing can now be done with concurrent.futures or with dask.store.
New#
Added automatic date parsing when concatenating a list of files.
Added BRDF normalization using the c-factor method.
1.0.0a#
History#
Examined concurrent writing workflows.
Setup basic geo-spatial functionality.