- scenes.DLTile.assign(pad=...) method added to ease creation of a tile in all ways indentical except for the padding.
- The parameter nbits has been deprecated for catalog bands.
Workflows (channel v0-6) - Added
- New interactive map, with GUI controls for multiple layers, scaling, and colormaps.
- Colormaps for single-band images.
- Map interface displays errors that occur while the backend is rendering images.
- ImageCollection compositing no longer changes band names (red does not become red_mean, for example).
- .clip() and .scale() methods for Image/ImageCollection.
- Support specifying raster resampler method.
- Support specifying raster processing level: toa (top-of-atmosphere) or surface [surface reflectance).
- No more tiles 400s for missing data; missing/masked pixels can optionally be filled with a checkerboard pattern.
Workflows - Changed
- Workflows Image.concat renamed Image.concat_bands.
- Data are left in data_range values if physical_range is not set, instead of scaling to the range 0..1.
- Selecting the same band name twice (img.pick_bands("vv vv")) properly raises an error.
- Reduced DeprecationWarnings in Python 3.7.
- Alpha Workflows API client has been added. Access to the Workflows backend is restricted; contact [support](https://descarteslabs.atlassian.net/servicedesk/customer/portals) for more information.
- Workflows support for Python 3 added in channel v0-5.
- Scenes API now supports band scaling and output type specification for rastering methods.
- Methods in the Metadata, Raster, and Vector service clients that accepted GeoJSON geometries
now also accept Shapely geometries.
- Add support for user cython modules in tasks.
- Tasks webhook methods no longer require a group_id if a webhook id is provided.
- catalog_id property on images is no longer supported by the API
- Fix scenes.display handling of single band masked arrays with scalar masks
- Fix problems with incomplete UploadTask instances returned by vectors.FeatureCollection.list_uploads
- Metadata, Catalog, and Scenes now support a new `storage_state` property for managing image metadata and filtering search results. `storage_state="available"` is the default for new images and indicates that the raster data for that scene is available on the Descartes Labs platform. `storage_state="remote"` indicates that the raster data has not yet been processed and made available to client users.
- The following additional colormaps are now supported for bands – 'cool', 'coolwarm', 'hot', 'bwr', 'gist_earth', 'terrain'. Find more details about the colormaps [here](https://matplotlib.org/gallery/color/colormap_reference.html).
- `Scene.ndarray`, `SceneCollection.stack`, and `SceneCollection.mosaic` now support passing a string as the `mask_alpha` argument to allow users to specify an alternate band name to use for masking.
- Scenes now supports a new `save_image` function that allows a user to save a visualization given a filename and extension.
- Tasks now allows you to unambiguously get a function by group id using `get_function_by_id`.
- All Client APIs now accept a `retries` argument to override the default retry configuration. The default remains
the same as the prior behavior, which is to attempt 3 retries on errors which can be retried.
- Bands of different but compatible types can now be rastered together in `Scene.ndarray()` and `Scene.download()` as well as across multiple scenes in `SceneCollection.mosaic()`, `SceneCollection.stack()` and `SceneCollection.download()`. The result will have the most general data type.
- Vector client functions that accept a `geometry` argument now support passing Shapely shapes in addition to GeoJSON.
- Removed deprecated method `Metadata.sources()`
- `FeatureCollection.filter(geometry)` will now raise an `InvalidQueryException` if you
try to overwrite an existing geometry in the filter chain. You can only set the
- Many old and obsolete examples were removed from the package.
- Scene.ndarray, SceneCollection.stack, and SceneCollection.mosaic now will automatically mask alpha if the alpha band is available in the relevant scene(s), and will set mask_alpha to False if the alpha band does not exist.
- FeatureCollection.add, FeatureCollection.upload, Vector.create_feature, Vector.create_features, and Vector.upload_features all accept a fix_geometry string argument that determines how to handle certain problem geometries including those which do not follow counter-clockwise winding order (which is required by the GeoJSON spec but not many popular tools). Allowed values are reject (reject invalid geometries with an error), fix (correct invalid geometries if possible and use this corrected value when creating the feature), and accept (the default) which will correct the geometry for internal use but retain the original geometry in the results.
Vector.get_upload_results and Vector.get_upload_result now accept a pending parameter to include pending uploads in the results. Such pending results will have status: PENDING and, in lieu of a task id, the id attribute will contain the upload id as returned by Vector.upload_features
- UploadTask.status no longer blocks until the upload task is completed, but rather returns the current status of the upload job, which may be PENDING, RUNNING, SUCCESS, or FAILURE.
- The FutureTask.ready and UploadTask.ready property has been added to test whether the task has completed. A return value of True means that if get_result(wait=True) were to be called, it would return without blocking.
- You can now export features to a storage data blob. To export from the vector client, use Vector.export_product_from_query() with a storage key and an optional query. This returns the task id of the export task. You can ask for status using Vector.get_export_results() for all export tasks or Vector.get_export_result() for a specific task by task id.
- FeatureCollection has been extended with this functionality with a FeatureCollection.export() method that takes a storage key. This operates on the filter chain that FeatureCollection represents, or the full product if there is no filter chain. It returns an ExportTask which behaves similar to the FutureTask.
- Catalog.upload_image() and Catalog.upload_ndarray() now will return an upload_id that can be used to query the status of that upload using Catalog.upload_result(). Note that the upload id is the image id and if you use identical image ids Catalog.upload_result() will only show the result of the most recent upload.
- Fixed issues with `Catalog.upload_ndarray()` under Windows
- Added header to client requests to better debug retries
- Tasks methods `create_function`, `create_or_get_function`, and `new_group` now have image as a required parameter
- The `name` parameter is renamed to `product_id` in `Vector.create_product`, and `FeatureCollection.create` and `FeatureCollection.copy`. The 'name' parameter is renamed to `new_product_id` in `Vector.create_product_from_query`. Using `name` will continue to work, but will be removed completely in future versions.
- The `name` parameter is no longer required, and is ignored for `Vector.replace_product`, `Vector.update_product`, `FeatureCollection.update` and `FeatureCollection.replace`. This parameter will be removed completely in future versions.
- `Metadata.paged_search` has been added and essentially supports the original behavior of `Metadata.search` prior to release 0.16.0.
This method should generally be avoided in favor of `Metadata.features` (or `Metadata.search`).
- Fixed typo in UploadTask.status which caused exception when handling certain failure conditions
- FeatureCollection.upload parameter max_errors was not being passed to Vector client.
- Ensure cloudpickle==0.4.0 is version used when creating Tasks.
- Eliminate redundant queries from FeatureCollection.list.
- `FeatureCollection.upload` and `Vector.upload_features` now accept an optional `max_errors` parameter to control how many errors are acceptable before declaring an upload a failure.
- `UploadTask` (as returned by `FeatureCollection.upload` and `Vector.list_uploads`) now has added attributes to better identify what was processed and what errors occurred.
- `Storage` now has added methods `set_file` and `get_file` to allow for better uploading and downloading, respectively, of large files.
- `Storage` class now has an `exists()` method that checks whether an object exists in storage at the location of a given `key` and returns a boolean.
- `Scenes.search` allows `limit=None`
- `FeatureCollection.delete_features` added to support deleting `Feature`s that match a `filter`
- `FeatureCollection.delete_features` and `FeatureCollection.wait_for_copy` now use `AsyncJob` to poll for asynchronous job completion.
- `Vector.delete_features_from_query` and `Vector.get_delete_features_status` added to support new `FeatureCollection` and `AsyncJob` methods.
- Fixed tasks bugs when including modules with relative paths in `sys.path`
- Tasks now support passing modules, data and requirements along with the function code, allowing for a more complex and customized execution environment.
- Vector search query results now report their total number of results by means of the standard `len()` function.
- `Metadata.search` no longer has a 10,000-item limit, and the number of items returned will be closer to `limit`.
- Raster client can now handle arbitrarily large numbers of tiles generated from a shape using the new iter_dltiles_from_shape() method which allows you to iterate over large numbers of tiles in a time- and memory-efficient manner. Similarly the existing dltiles_from_shape() method can now handle arbitrarily large numbers of tiles although it can be very slow.
- Vector client upload_features() can now upload contents of a stream (e.g. io.IOBase derivative such as io.StringIO) as well as the contents of a named file.
- Vector FeatureCollection add() method can now handle an arbitrary number of Features. Use of the upload_features() method is still encouraged for large collections.
- Vector client now supports creating a new product from the results of a query against an existing product with the create_product_from_query() method. This support is also accessible via the new FeatureCollection.copy() method.
- XYZTile GeoContext class, helpful for rendering to web maps that use XYZ-style tiles in a spherical Mercator CRS.
- Tasks client FutureTask now instantiates a client if none provided (the default).
- Catalog client methods now properly handle add_namespace parameter.
- Vector Feature now includes valid geojson type 'Feature'.
- Tasks client now raises new GroupTerminalException if a task group stops accepting tasks.
- General documentation fixes.
- Scenes and raster clients have a `processing_level` parameter that can be used to turn on surface reflectance processing for products that support it
- `scenes.GeoContext`: better defaults and `bounds_crs` parameter
- `bounds` are no longer limited to WGS84, but can be expressed in any `bounds_crs`
- New `Scene.default_ctx` uses a Scene's `geotrans` to more accurately determine a `GeoContext` that will result in no warping of the original data, better handling sinusoidal and other non-rectilinear coordinate reference systems.
- **Important:** the default GeoContexts will now return differently-sized rasters than before!
They will now be more accurate to the original, unwarped data, but if you were relying on the old defaults, you should now explicitly set the `bounds` to `geometry.bounds`,
`bounds_crs` to `"EPSG:4326"`, and `align_pixels` to True.
- `Scene.coverage` and `SceneCollection.filter_coverage` accept any geometry-like object, not just a `GeoContext`.
- `FutureTask` inheritance changed from `dict` to `object`.
- Can now specify a GPU parameter for tasks.
- `Vectors.upload` allows you to upload a JSON newline delimited file.
- `Vectors.list_uploads` allows you to list all uploads for a vector product.
- `UploadTask` contains the information about an upload and is returned by both methods.
Fixes incompatibility of upload features response.
- Shapely is now a full requirement of this package. Note: Windows users should visit https://docs.descarteslabs.com/installation.htmlwindows-users for installation guidance.
- Reduced the number of retries for some failure types.
- Resolved intermittent `SceneCollection.stack` bug that manifested as `AttributeError: 'NoneType' object has no attribute 'coords'` due to Shapely thread-unsafety.
- Tracking system environment to improve installation and support of different systems.
- The vector service is now part of the public package. See `descarteslabs.vectors` and `descarteslabs.client.services.vector`.
- **`Scene.download`, `SceneCollection.download`, and `SceneCollection.download_mosaic` methods**
- **Colormaps supported in `descarteslabs.scenes.display`**
- Task namespaces are automatically created with the first task group
- **Clients can safely be used in subprocesses without causing obscure SSL errors**
- `descarteslabs.scenes.search` will take a Python datetime object in addition to a string
- **Scenes will now allow Features and FeatureCollections in addition to GeoJSON geometry types**
- Fixed Scenes issue preventing access to products with multi-byte data but single-byte alpha bands
- Scenes now exposes more parameters from raster and metadata
- Removed extra keyword arguments from places client
- Added deprecation warnings for parameters that have been renamed in the Metadata client
- Moved metadata property filtering to common
- Deprecated `create_or_get_function` in tasks
- Renamed some examples
- Scenes filtering by coverage
- Namespaced auth environment variables: DESCARTESLABS_CLIENT_SECRET and DESCARTESLABS_CLIENT_ID. CLIENT_SECRET and CLIENT_ID will continue to work.
- Tasks runtime check for Python version.
- Documentation updates
- Example updates
- Scenes package
- More examples
- Deprecated `add_namespace` argument in catalog client (defaults to `False`
now, formerly `True`)
- Added org to token scope
- Removed deprecated key usage
Documentation is now at https://docs.descarteslabs.com
- Removed deprecated searching by `const_id`
- Removed deprecated raster band methods
- Deprecated `sat_id` parameter for metadata searches
- Changed documentation from readthedocs to https://docs.descarteslabs.com
- Dot notation access to dictionaries returned by services
Reorganization into a client submodule