Changelog
2025.12.0 - 2025-12-16
core
commands.rm(): fix typing (#712)
path.MPath: add gdal_options (#711)
allow gdal_options to be defined in mapchete configuration similar to storage_options (#711)
packaging
limit aiobotocore to <3.0.0 (#712)
add test extra to install test dependencies (#712)
2025.11.0 - 2025-11-20
core
commands.execute():
only report Status.done if all context managers closed successfully (#709)
cancel all remaining futures in between retries (#709)
TileDirectory outputs: always create and update STACTA file as well as prototype files (required by GDAL) (#710)
bounds.Bounds: added intersection() and union() methods (#710)
zoom_levels.ZoomLevels: added union() method (#710)
io.raster.referenced_raster.ReferencedRaster.masked_array(): return internal .data if it already is a masked array instead of always recreating it (#710)
added stac.tiled_assets and stac.models submodules (#710)
2025.10.1 - 2025-10-10
core
config.parse.guess_geometry(): add raise_if_empty flag to manage behavior on empty geometries (#707)
2025.10.0 - 2025-10-03
core
path.MPath.new(): make sure bucket name is included in path string (#705)
config.parse.guess_geometry(): speed up using process bounds subset in case a vector file is being provided (#706)
io.vector.IndexedFeatures(): automatically assign enumeration value if features don’t have an ID (#706)
2025.9.2 - 2025-09-30
core
settings: parse io_settings upon loading module (#703)
io.raster.write: refactor RasterioRemoteTempFileWriter and RasterioRemoteMemoryWriter to make code less complex; add retry for upload functions (#703)
io.vector.write: refactor FionaRemoteTempFileWriter and FionaRemoteMemoryWriter to make code less complex; add retry for upload functions (#703)
path: speed up tiles_exist() check if output directory is empty (#703)
path: add MPath.write_content() (#703)
formats.default.vector_file: add VectorInput.read_generator() which behaves simlar to VectorInput.read()
io.vector.read_vector_window: use shapely.clip_by_rect to create intersection (#703)
packaging
update flask requirement from <3.0.0 to <4.0.0 (#702)
2025.9.1 - 2025-09-26
core
path.MPath: strip endpoint url, otherwise fiona would throw an error (#700)
processing.tasks: fix regressed test coverage (#701)
2025.9.0 - 2025-09-02
packaging
make pystac core dependency (#699)
2025.8.0 - 2025-08-29
core
mapchete.stac: relative paths generation for self_href on STACTA JSON (#689)
added Tile, TilePixelBuffer, OutputNodataValue, TileBuffer and OutputPath annotations to import special parameters in user process code (#687)
executor.future.MPath: add task name to __repr__ (#687)
geometry.filter.is_type: fix bug where some multipart geometries were not matched (#687)
CI
added python 3.13 to workflow matrix (#689)
2025.6.0 - 2025-06-05
core
bounds.Bounds: add Bounds.latlon() and Bounds.mercator() constructor methods (#690)
CLI
mpath sync: add –count flag to have a total number the progress bar can work with (#689)
mpath read-yaml: add subcommand (#691)
mpath read-json: enable –src-fs-opts flags (#691)
mpath read-text: enable –src-fs-opts flags (#691)
2025.5.2 - 2025-05-22
core
path.MPath.cwd(): add constructor method (#688)
path.MPath.new(): can now create MPath instances from object dictionaries from S3 endpoints (#688)
path.MPath.walk(): make sure object information is passed on when constructing MPath instances (#688)
path.MPath.exists(): add weak_check flag to avoid making HEAD requests by checking if internal _info dictionary is already set or not (#688)
path.MPath.paginate(): add method to replicate boto3 paginator. (#688)
path.MPath.cp(): remove capability to automatically create destination file path if dst_path is a directory (#688)
path.MPath: reraise specific OSError as ConnectionError raised by s3fs on some occasions to make it retryable. (#688)
CLI
mpath sync: reduce requests by passing on path information when walking through directories (#688)
2025.5.1 - 2025-05-20
core
grid.Grid.extract(): snap bounds to existing Grid (#683)
make sure tile_size is properly passed on when defined in Mapchete configuration (#685)
cli: restructure mapchete and mpath subcommands into submodules (#686)
executor.concurrent_futures.ConcurrentFuturesExecutor.as_completed(): fix bug where function prematurly exits if first items are skipped (#686)
path.MPath.open(): add retry (#686)
CLI
mpath sync: run copy command for multiple files in parallel (added –workers flag to configure) & add –verbose flag (#686)
packaging
CI
remove deprecated flag in CliRunner (#684)
2025.5.0 - 2025-05-07
core
io.raster.referenced_raster.ReferencedRaster.shape: add attribute so class aligns with GridProtocol (#677)
io.raster.referenced_raster.ReferencedRaster.masked_array(): add method to have an unambiguous way to return a masked array (#677)
config.process_func.ProcessFunc: fix FileExistsError sometimes occuring when using multiprocessing (#678)
executor: add proper typing and completely refactor as_completed() methods for all executors. (#678)
executor.concurrent_futures.ConcurrentFuturesExecutor.map(): actually implement concurrency (#678)
geometry.reproject.reproject_geometry(): add engine kwarg and implement pyproj transform (now default) alongside existing fiona which makes reprojecting much faster. Behavior can be configured using the MAPCHETE_REPROJECT_GEOMETRY_ENGINE environment variable (“pyproj” or “fiona”) (#678)
io.raster: fix typing smells in module (#678)
commands.execute.execute(): add retry_delay option (#679)
executor: fix typing smells around executor classes (#679)
tests
restructure tests for io.raster module (#677)
restructure tests for executor submodule (#678)
make all processing related tests faster by properly reusing executor fixtures and reprojection improvements (test now run in ~13 minutes instead of ~16) (#678)
2025.4.0 - 2025-04-09
CLI
mpath: add sync subcommand (#676)
mpath cp: add progress bars (#676)
core
io.copy(): remove src_fs and dst_fs kwargs (#676)
io.copy(): data is not being read fully into memory but read in chunks (#676)
path.MPath.walk(): now returns a DirectoryContent named tuple (#676)
path.MPath: add checksum() method (#676)
path.MPath: ls() and walk() methods now always return MPath instances (#676)
path.MPath: add cp() method (#676)
path.MPath.is_directory(): doesn’t raise FileNotFoundError on HTTP based file systems (#676)
2025.3.1 - 2025-03-31
core
path.MPath: rename _storage_options to storage_options public; remove fs_session; don’t create Session objects from fs` (#675)
2025.3.0 - 2025-03-26
CLI
mapchete serve: Fix Content-Type of MemoryFile tiles (#670)
mpath: enable extended fs-options & allow mpath cp to copy directories (#673)
core
io.copy: add retry; add exists_ok flag to skip copy if destination exists (#673)
2025.1.1 - 2025-01-27
core
path.MPath: properly handle region_name for S3 paths (#667)
2025.1.0 - 2025-01-14
core
io.raster.array.resample_from_array(): fix regression caused by new behavior of rasterio.warp.reproject() (#663)
packaging
limit matplotlib below version 3.10
2024.12.0 - 2024-12-03
core
io._misc.copy(): fix masking of aiohttp.ClientResponseError where some tool raises a generic Exception instead of the original aiohttp.ClientResponseError (#661)
2024.11.1 - 2024-11-25
core
settings.IORetrySettings: add aiohttp.ClientPayloadError and aiohttp.ClientResponseError to retryable exceptions (#660)
io.raster.read.read_raster_window and io.vector.read.read_vector_window: add traceback of original exception when raising MapcheteIOError (#660)
2024.11.0 - 2024-11-05
core
fix error where guess_geometry fails on multipolygons (#656)
adapt to new rasterio.crs.CRS behavior (#657)
2024.10.1 - 2024-10-29
core
add deprecation warnings for moved objects introduced in 2024.10.0 and try to keep backwards compatibility (#654)
2024.10.0 - 2024-10-28
core
move mapchete.types.Bounds to new mapchete.bounds module (#652)
move mapchete.types.ZoomLevels to new mapchete.zoom_levels module (#652)
move mapchete.io.vector.reproject_geometry to mapchete.geometry.reproject_geometry (#652)
mapchete.commands.observers.Observers: fix typing issue (#652)
mapchete.formats.default.vector_file.InputTile: implement Grid protocol (#652)
mapchete.formats.default.vector_file.InputTile.read(): add target_geometry_type argument (#652)
mapchete.formats.default.vector_file.InputTile: add read_union_geometry and read_raster_mask methods (#652)
add mapchete.geometry.clip module (#652)
add mapchete.geometry.filter module with reimplementations of is_type() and filter_by_geometry_type() functions (#652)
add read_union_geometry() and read_as_raster_mask() methods to VectorInput (#652)
add various geometry types to mapchete.types (#652)
create mapchete.grid module (#652)
added typing where possible (#652)
split up mapchete.io.vector module in submodules (#652)
mapchete.io.vector.indexed_features.IndexedFeatures.read(): add target_geometry_type argument (#652)
mapchete.io.vector.indexed_features.IndexedFeatures: add read_union_geometry and read_raster_mask methods (#652)
mapchete.tile: added typing (#652)
2024.9.0 - 2024-09-11
core
static/index.html: fixed deprecated WMTS endpoints and added recent S2Cloudless versions (#643)
mapchete.tile.snap_geometry_to_tiles(): use spatial subset when rasterizing to avoid memory errors (#644)
mapchete.io.vector.read_vector_window(): on windowed read, don’t filter out respective singlepart types if requiret geometry type is a multipart type (#645)
mapchete.io.vector.fiona_read(): adapt to Fiona changing error messages when raising FileNotFoundError (#646)
mapchete.path.MPath: add pretty_size() method (#647)
CI
use docker compose instead of deprecated docker-compose (#641)
2024.7.1 - 2024-07-25
core
use geojson-pydantic in mapchete.geometry.types
tests
fix annotation of test/test_io_raster.py::test_read_raster and split it into test/test_io_raster.py::test_read_raster and test/test_io_raster.py::test_read_remote_raster
packaging
replace pydantic-geojson with geojson-pydantic
align dependencies requirements.txt, requirements-dev.txt with pyproject.toml with hatch package
hatch dep show requirements –all
hatch dep show requirements –all >> requirements.txt
requrements-dev.txt still need to be managed manually when required
2024.7.0 - 2024-07-24
core
add mapchete.geometry module (move relevant geometry operations from io.vector to geometry module) (#630)
fixed bug where configuration was not properly passed if an element had only one subitem (#635)
fix memray deprecation (#637)
packaging
fix pystac version limit (#633)
CI
remove coveralls and use GitHub actions to report on test coverage
remove support for Python 3.8 and 3.9
add tests for Python 3.12 and ubuntu-latest
2024.6.0 - 2024-06-03
core
path: set AWS_HTTPS depending on custom endpoint_url
2024.5.2 - 2024-05-15
packaging
remove protobuf` dependency
2024.5.1 - 2024-05-15
core
remove Geobuf driver (#629)
enable typing for processes (#626)
packaging
remove geobuf and protobuf` dependency
2024.5.0 - 2024-05-02
core
also include executor_getter() call within try … except block in order to be able to retry eventual connection errors (#627)
2024.2.1 - 2024-02-20
core
add mpath CLI (#620)
io.vector.fiona_open() now properly raises a FileNotFoundError (#620)
removed deprecated log.user_process_logger() and log.driver_logger() (#620)
2024.2.0 - 2024-02-14
core
use repr(exception) when reporting Exception to observers (#617)
fix tiles exist check on output tiles smaller than process tiles #622
CI
avoid pytest 8 for now
2024.1.3 - 2024-01-15
core
commands.execute(): avoid reporting on exception twice; send notification message on details of retry attempt (#614)
settings.IORetrySettings: add ServerDisconnectedError and FSTimeoutError to retryable exceptions (#615)
executor.future.MFuture: keep CancelledError from dask instead of wrapping it within a MapcheteTaskFailed (#615)
commands.index(): add FlatGeobuf as index driver (#616)
2024.1.2 - 2024-01-11
core
determine FileNotFoundError directly in rasterio_read (#613)
add Status.pending (#613)
2024.1.1 - 2024-01-11
core
catch dask exception if task exception cannot be retreived and wrap it within MapcheteTaskFailed (#612)
2024.1.0 - 2024-01-04
core
fix “type” DeprecationWarning with old BufferedTilePyramid parameters (#611)
add MPath.read_json(), MPath.write_json(), MPath.read_yaml() and MPath.write_yaml() methods (#611)
explicitly set exception types to be retried in mapchete.settings.IORetrySettings (#611)
mapchete.commands.index: enable indexing from a TileDir input (#611)
MPapth: set rasterio environment GDAL_DISABLE_READDIR_ON_OPEN=’EMPTY_DIR’ when opening STACTA or VRT
2023.12.3 - 2023-12-15
core
introduce GridProtocol to replace tile argument in raster read functions (#610)
use Concurrency.none per default, except in CLI (#610)
2023.12.2 - 2023-12-12
core
add processing.types.LazyTaskInfo to avoid calling Future.result() unnecessarily (#608)
do not keep futures around when submitting a task graph to enable dask to release finished tasks (#608)
also apply settings.MapcheteIOSettings to path.MPath.read_text() (#609)
add optional DaskSpecs to mapchte configuration schema (#609)
2023.12.1 - 2023-12-07
packaging
fix aiobotocore versions for s3 extra
2023.12.0 - 2023-12-05
core
complete refactor of mapchete.commands (#604)
remove mapchete.Job and use observer pattern to track execution state and progress (#604)
refactor mapchete.processing (#604)
replace mapchete.processing.compute with mapchete.processing.execute (#604)
2023.11.0 - 2023-11-20
core
add task profiling capabilities (measure memory consumption, S3 requests) (#603)
split up config.py and create a better structured mapchete.config module (#603)
split up _executor.py and create a better structured mapchete.executor module (#603)
split up _core.py and create a better structured mapchete.processing module (#603)
CLI
add –profiling flag to mapchete execute (#603)
packaging
dask is now a required dependency
2023.10.0 - 2023-10-18
packaging
require flask<=3.0.0 (#600)
exclude aiobotocore 2.7.0 (#602)
allow s3fs>2023.9.0 (#594)
test
add pytest markers integration and aws_s3 (#602)
stop testing on ubuntu 20.04 (#600)
2023.9.1 - 2023-09-19
packaging
require pydantic>=2.0.0 (#591)
require pydantic_basesettings (#592)
core
add MPath.without_protocol() and MPath.with_protocol() methods (#587)
let MPath.ls() return full S3 paths (#587, fixes #583)
add mapchete.io.profiles for rasterio profiles (#588, fixes #584)
support pydantic>=2.0.0 (#591)
use pydantic_basesettings to combine environment variables with default values for mapchete.io.settings (#592)
2023.9.0 - 2023-09-05
packaging
limit dependent versions to “aiobotocore>=1.1.2,<=2.5.4” and “s3fs<2023.9.0”
core
make sure opened/written files are removed upon exception (#576)
CLI: apply tiled-assets hack also to create-item CLI (#577)
provide path schema to configure how tile paths are created (#581)
IndexedFeatures: allow reprojection of object bounds to a target CRS (#585)
2023.8.1 - 2023-08-09
packaging
require Shapely>=2.0.0 (#572)
remmove cached_property package requirement (#573)
add isort to pre-commit (#573)
core
fix ReferencedRaster.to_file() on 2D arrays (#574)
2023.8.0 - 2023-08-09
packaging
add pydantic<2.0.0 as dependency
CI
also test on Python 3.11 (#562)
core
enable adding default read parameters to TileDirectory input (#565)
configuration schema (#564)
add pydantic<2.0.0 as dependency
mapchete.config.ProcessConfig now defines the mapchete process configuration schema
process function parameters should now go into the process_parameters section of the configuration
add mapchete.config.ProcessFunc abstraction class to load and handle user process functions
CLI: fix passing on storage options; add storage options to convert command (#568)
update STACTA file schema to STAC 1.0.0 (#569)
added ReferencedRaster.to_file() (#570)
added read_raster(tile=…) kwarg to resample incoming raster (#570)
2023.7.1 - 2023-07-18
core
CLI: add promts to ease using mapchete create (#558)
clip source tile to pyramid bounds before reprojecting to avoid bumping into antimeridian error (#561)
2023.7.0 - 2023-07-04
core
better handle dask CancelledErrors (#555)
fix copy() of larger files (#552)
fix STACTA read & add tests (#551)
packaging
pin pystac version to 1.7.3 as it does not yet implement STAC version…
2023.6.5 - 2023-06-14
core
pre-calculate effective area analog to effective bounds (#550)
2023.6.4 - 2023-06-13
core
MPath: don’t store session objects; fix allowed extensions string (#549)
testing
add pickling tests (#549)
2023.6.3 - 2023-06-12
core
allow ReferencedRaster to accept arrays with more dimensions than 3 (#548)
MPath.from_inp(): allow parsing objects using __fspath__ interface (#547)
2023.6.2 - 2023-06-12
core
don’t let MPath.makedirs() decide whether to only create parent directories or not (#546)
testing
ProcessFixture now processes all preprocessing tasks using SequentialExecutor (#546)
2023.6.1 - 2023-06-06
core
only try to generate endpoint URL for rio/fio Sessions if a custom endpoint URL was provided in the first place (#541)
testing
add tests for AWS S3 raster file (#541)
better catch pytest fixture errors if docker-compose is not running or AWS credentials are not set (#541)
2023.6.0 - 2023-06-05
core
allow providing values in mapchete configuration from environmental variables (e.g. key: ${SOME_ENV_VAR}) (#511)
enable setting individual storage options for fsspec and other I/O modules (rasterio, fiona, …) for each input and output (#511)
introduce mapchete.path module including MPath class based on os.PathLike (#511)
use MPath for all internal path representations (#511)
introduce mapchete.io.settings module (#511)
allow range requests on serve (#539)
packaging
run isort on imports (#538)
testing
require and run docker-compose before tests to provide S3 and HTTP endpoints (#511)
2023.4.1 - 2023-04-20
packaging
add all s3 extra dependencies to complete
2023.4.0 - 2023-04-20
core
to_shape(): enable handling full feature dicts in __geo_interface__ (#531)
add object_geometry() method, which works like object_bounds() (#531)
add types module containing Bounds and ZoomLevel classes (#532)
remove validate_zoom()
mapchete.io._misc.get_boto3_bucket(): function is now deprecated
mapchete.io._geometry_operations.reproject_geometry: account for new fiona transform_geom behavior
replace remaining boto3 bucket calls with fsspec
mapchete.io.raster: use same logic to extract FileNotFoundError for read_raster_window and read_raster_no_crs; replace deprecated IOError with OSError
packaging
remove direct s3fs dependency but keep boto3 and aiobotocore as direct dependencies for s3 extra
testing
fix test case to reflect bug which prevents dask from updating overview tile using the task graph (#530)
2023.1.1 - 2023-01-26
core
use threaded concurrency on default when calling mapchete cp (#526)
removing check whether preprocessing task result is already set to avoid random KeyErrors (#529)
testing
add test cases for continue mode (#527)
add test to eplicitly test rasterio_write functionality (#528)
2023.1.0 - 2023-01-03
core
use new importlib.metadata interface to select entry points (#521)
add filename which caused read error to MapcheteIOError when calling read_raster_window() and read_vector_window() (#522)
2022.12.1 - 2022-12-20
core
always use dask executor if defined, even if there is only one task or worker (#517)
try to provide more useful information if dask task exception cannot be recovered (#519)
CI
schedule tests every monday and thursday (#518)
2022.12.0 - 2022-12-16
core
extend capabilities of mapchete.io.raster.ReferencedRaster (#513)
allow executing remote mapchete files (#514)
adapt to Shapely 2.0 (#515)
packaging
replace setuptools with hatch (#516)
2022.11.2 - 2022-11-30
core
use group prefix for preprocessing tasks (#512)
CLI
pass on max_workers to dask executor (#508)
2022.11.1 - 2022-11-23
core
dask chunksize and max_submitted_tasks fix (#506)
2022.11.0 - 2022-11-21
core
GTiff driver: force blocksize being int (#496)
fix TileDirectory read error from exotic CRSes (#498)
split up raster.io.RasterioRemoteWriter class to memory and tempfile subclasses (#500)
make sure dask_compute_graph and dask_chunksize are passed on (#502)
CLI
print task details also when using dask executor when –verbose flag is active (#501)
packaging
exclude vulnerable rasterio dependency (#490)
add python-dateutil to package requirements (#495)
rename master branch to main
tests
add Python 3.10 to tests
2022.9.1 - 2022-09-15
packaging
remove shapely version <1.8.1 constraint from setup.py
2022.9.1 - 2022-09-15
core
adapt tiles_count() to handle new shapely behavior; use pytest.mark.parametrize for some tests
tests
make slowest tests faster; reuse DaskExecutor() where possible
2022.9.0 - 2022-09-14
core
extend capabilities of IndexedFeatures to detect geometries
reuse FileSystem` object if provided in makedirs()`
add object_bounds() to determine object geometry bounds
adapt code to changes introduced by fiona 1.9a2
2022.7.0 - 2022-07-11
core
raster drivers read() functions now conform with the rasterio behavior in that only if a band index is given as integer, it will return a 2D array. Previously, it also returned an 2D array if a list with only one band index was given. #473
empty vector files (read by Fiona) don’t fail if the bounds cannot determined in case the file does not contain any features.
move metadata parser and driver helper functions into mapchete.formats.loaders and mapchete.formats.tools packages (#475)
2022.6.0 - 2022-06-10
core
don’t log in info when executor closes #463
provide task id in exception if task failes #464
allow overwriting certain GDAL settings which are automatically applied when reading from remote data #467
packaging/CI
add ubuntu 22.04 to test matrix #468
add project logo and repaired readthedocs build #469
2022.4.1 - 2022-04-28
core
explicitly check whether futures were cancelled
mapchete stac create-item: also expand custom zoom levels
don’t throw exception if STAC file cannot be written or updated
add mapchete stac create-protoype-files command to write STACTA prototype datasets required by GDAL
2022.4.0 - 2022-04-01
core
avoid Future.result() calls when using dask
2022.3.3 - 2022-03-30
core
commands.cp: fix overwrite mode on local filesystems
cache input vector file bounding box to improve performance on large GeoJSON files
add preliminary RPC referenced raster data support (also requires rasterio fix: https://github.com/rasterio/rasterio/pull/2419)
add dask_propagate_results flag to compute() to activate/deactivate task result propagation on dask clusters
packaging/CI
avoid using GEOS 3.10 which causes shapely bugs
2022.3.2 - 2022-03-16
core
fix zoom levels getting processed in the wrong order
fix process tiles generation which yielded a different number than estimated from tiles_count()
add fallback if rasterio.crs.CRS cannot convert CRS to SRS authority (issue in newer PROJ versions)
packaging/CI
add Python 3.9 to test matrix
2022.3.1 - 2022-03-11
core
automatically write/update STAC JSON file for TileDirectory output
2022.3.0 - 2022-03-09
core
use batches when yielding completed futures from dask
fix
KeyErrorwhen removing futures from threads executor
2022.2.2 - 2022-02-25
core
avoid infinite recursion when retrying reprojection with clipped geometry
attach missing dask client loop to distributed.as_completed call
fixed infinite future yield when using DaskExecutor.as_completed()
expose –dask-no-task-graph flag to execute and convert commands
2022.2.1 - 2022-02-23
core
implement dask task graphs when using dask as executor
enable setting executor after
Jobwas initializedfix minor bugs in
DaskExecutor.as_completed():running futures count
pass on Exception after cancel signal when client is closed while waiting for remaining futures
add caching options for vector file and raster file inputs
2022.2.0 - 2022-02-03
core
fix feature clip when reading from vector input outside of CRS bounds
separately count submitted tasks instead of relying on
distributed.as_completed().count()add GCPs referenced input raster support (#418)
2022.1.2 - 2022-01-31
core
try to make dask executor more resilient by adding timeouts (accessible via the
MP_FUTURES_TIMEOUTenvironment setting) and retries if a future call times out
2022.1.1 - 2022-01-19
core
fix
ConcurrentFuturesExecutor.as_completed()when waiting for finished futures
testing
split up
reproject_geometrytests for CRS bounds clipping
2022.1.0 - 2022-01-18
core
fix #404: log useful information on info
replace
cascacded_union()withunary_union()to handle Shapely warningfix
fsspec.lscallmake geometry clip to CRS bounds in
reproject_geometry()optionaladd thread concurrency for rows in
tiles_exist
2021.12.3 - 2021-12-16
core
fix #395: area intersects with bounds
2021.12.2 - 2021-12-14
core
let
ditributed.as_completed()gather future results
2021.12.1 - 2021-12-14
core
explicitly call
Future.release()before yielding result fromDaskExecutor
2021.12.0 - 2021-12-02
core
make sure I/O retry settings read from environment are properly casted to int/float
2021.11.3 - 2021-11-23
core
expose
chunksizeparameter of dask executor toexecuteandconvertcommands.clean up
DaskExecutor.as_completed()code & log messagesindex: usetiles_exist()row generators to speed up index creation
2021.11.2 - 2021-11-16
core
dask: submit tasks in chunks to scheduler
2021.11.1 - 2021-11-16
core
use generators to start processing as soon as possible and to reduce memory consumption when processing large areas
add
preprocessing_taskstiles_tasksattributes toJobreduce code smells
package
fix
httpextra insetup.py
2021.11.0 - 2021-11-03
CLI
convert: enable--output-pyramidto read custom grid from JSON filestac create-item: add--relative-pathsflag for asset URL
package
add
mapchete.testingincluding convenience toolsuse temporary directories for outputs where possible when testing processes
2021.10.3 - 2021-10-19
core
mapchete.Executor: fix call inDaskExecutor.as_completed()by not providing current client as loop
2021.10.2 - 2021-10-19
core
mapchete.Executor: addmax_submitted_futuresoption toDaskExecutor.as_completed()to cap the number of tasks sent to the scheduler; also immediately yield finished tasks once they are available
2021.10.1 - 2021-10-08
core
mapchete.Executor: make sure futures are removed after yield; track time spent to submit tasksmapchete.Executor: remove task submission delay introduced for debuggingmapchete.commands.convert: set process metatiling so output tiles cannot be larger than process metatilesmapchete.commmands.convert: fix overwrite flag on remote single GeoTIFFsmapchete.commands.cp: addpointandpoint-crsoptionsdon’t write all STAC information into metadata.json
don’t initialize
InputTileobjects when processing baselevel tile
2021.10.0 - 2021-10-01
packaging
change version numbering scheme to
YYYY.MM.x
core
make sure
Executor.running_futuresis cleared after eachas_completed()andcancel()callfix
fargsandfkwargsommission inExecutor.map()
testing
skip COG tests if driver is not available in GDAL
0.44 - 2021-09-30
core
add warnings when using Python<3.7 with usage of start methods other than
spawnmapchete.Executorkeep track of running and finished futures and remove finished futures to release memory (on local machine as well as on dask cluster)
CLI
add
mapchete stac create-itemcommand to create a STAC tiled-assets file
0.43 - 2021-09-17
core
mapchete.io.vector.reproject_geometry():
use pyproj to determine CRS bounds to clip geometries when reprojecting
enable geometry segmentation before geometry is clipped (segmentize_on_clip=False and segmentize_fraction=100 args)
suppress rasterio warnings when reading rasters (too many rasterio.errors.NodataShadowWarning)
packaging
add pyproj to dependencies
0.42 - 2021-08-27
core
add option for input drivers to let processing-heavy tasks be handled by
mapchete.Executorby implementingInputData.add_preprocessing_task()andInputData.get_preprocessing_task_result()methodscheck futures submitted to
mapchete.Executorfor exceptions before yieldingremove deprecated
multi(now calledworkers),distributedandmax_chunksizearguments
CLI
remove deprecated
--max-chunksizeoptionreplace “tiles” with “tasks” in progress
0.41 - 2021-08-17
core
add
mapchete.commandspackageadd
daskas optionalExecutorexpose futures in
Executorclass to facilitate job cancellationuse
spawnas default multiprocessing start method (#351)fix missing worker logs (#185)
rename
mapchete.cli.utilstomapchete.cli.optionsenable providing process code from within process config
packaging
updated API doc
CLI
CLI: change
--multioption to--workerenable optional concurrency for
mapchete cp
0.40 - 2021-06-24
core
fix overviews creation in sinlge GTiff output (#325)
packaging
drop Python 3.6 support
0.39 - 2021-06-08
core
fix warnings by removing deprecated calls (#336)
fix tiles count (#334)
default drivers
GTiff
pass on custom creation options to GTiff output driver / rasterio (#328)
change default GTiff profile (#335, #332)
compression: deflate
predictor: 2
blocksize: 512
GeoJSON
add LineString geometry type to available output schema (#338)
FlatGeobuf
add tiled FlatGeobuf output driver (#321)
CLI
cpandrmadd fsspec filesystem creation options
--src-fs-opts,--dst-fs-optsand--fs-opts(#339)
default processes
convertprint user warning if deprecated input name is used (#340)
packaging
add black & flake8 code formatting tools (#337)
0.38 - 2020-12-10
core
allow multipart geometries in GeoJSON (#300)
add
Geobufoutput format as alternative to store vector data (#302)CLI:
convertenable converting vector data (#302)
add
--output-geometry-typeoption for vector data output (#302)fix omission of
--output-metatiling(#302)
add
rmcommand (#306)
add
mapchete.formats.driver_metadata()(#302)add
mapchete.formats.data_type_from_extension()(#302)enable guessing data type (raster or vector) when reading from Tile Directories (#302)
mapchete.io.clean_geometry_type(): addraise_exceptionflag to disable raising and returning an empty geometry instead (#302)fix issue with
rasterio>1.1.4(fix tile_to_zoom_level()) (#308)
packaging
don’t parse requirements.txt in setup.py (#301)
add test requirements (#302)
0.37 - 2020-11-25
core
make retry settings configurable via environment (#296)
MAPCHETE_IO_RETRY_TRIES (default: 3)
MAPCHETE_IO_RETRY_DELAY (default: 1)
MAPCHETE_IO_RETRY_BACKOFF (default: 1)
fix non-overlapping bounds if provided as extra kwarg (#295)
don’t pass on init bounds to mapchete input (#295)
0.36 - 2020-11-24
core
create local output directory for single GTiff output files (#285)
add process area parameter (#287)
use optimized GDAL settings for baselayer creation (#291)
raise generic MapcheteIOError on read fails (#292)
CLI
add more baselayers in
serve(#278)add
cpcommand (#282)enable
serveto host multiple mapchete files (#289)enable
indexto accept tile directories (#290)expose multiprocessing start method as option in
execute(#293)
0.35 - 2020-08-04
fix index updates on remote TileDirectories (#274)
pass on chunksize to multiprocessing & use
Pool.__exit__()to close (#276)use GitHub actions instead of Travis CI
update Fiona dependency to
1.8.13.post1
0.34 - 2020-07-08
speed up extension loading by using
importlib-metadataandimportlib-resourcesinstead ofpkg_resources(#267)use
botopaging to reduce requests to S3 bucket (#268)
0.33 - 2020-03-24
use init_bounds instead of pyramid bounds on readonly mode (#257)
clean up log messages (fix #251)
0.32 - 2020-02-24
default process bounds are now bounds of the process pyramid instead of union of inputs (#242)
fix overview pixelbuffer error at Antimeridian (#241)
increased rasterio dependency to version
1.0.28add hillshade and contour extraction to registered default processes (#237)
enable
bigtiffandcogsettings for single GTiff outputs (#247)enable
--cogoption formapchete convert(#247)enable
--bidxoption (band subset) formapchete convert(#248)only initialize inputs if necessary (#242)
use
rio-cogeologic to determine whether to use a memory dataset or a temp file when writing a single GTiff (#217)
0.31 - 2019-12-03
don’t raise exception when one of the registered processes cannot be imported (#225)
don’t close pool between zoom levels (#227)
_validatemodule renamed tovalidate(#230)fix inverted hillshade & misleading tile reference (#229)
fix custom nodata values in overviews (#235)
0.30 - 2019-10-22
fixed raise of
FileNotFounderroronmapchete.io.raster.read_raster_no_crs()fixed overview
get_parent()on zoom 0 in batch processingsort processes alphabetically in
mapchete processesalways raise
FileNotFoundErrorif input file does not existwait for 1 second between retry attempts on file read error
added
--overviewsand--overviews-resampling-methodtomapchete convertfixed overview generation when output pixelbuffer was provided (#220)
remote reading fixes (#219)
add GDAL HTTP options
handle
AccessDeniedexception which could occur if after anRasterioIOErrora check is run if the file even exists
increased required minimum NumPy version to 1.16
pass on output parameters to mapchete process (#215, fixes #214)
0.29 - 2019-07-12
fixed convert on single remote files (#205)
fixed
FileNotFoundErrorondriver_from_file()(#201)fixed zoom level order when processing multiple zooms (#207)
inputs get intialized as readonly if only overviews are built (#140)
AWS secrets get obfuscated in logs (#203)
0.28 - 2019-06-18
breaking changes
output drivers must now provide
OutputDataWriterandOutputDataReaderclasses instead of a singleOutputDataclassOutputDataWriter.close()method must acceptexc_type=None, exc_value=None, exc_traceback=Nonekeywordsmapchete pyramidCLI was removed and is replaced by the more versatilemapchete convert(#157, #192)all CLI multiword options are separated by an hyphen (
-) instead of underscore (_) (#189)
overview tiles get also updated if child baselevel tile changes (#179)
on
batch_process()check which process output exists and only use parallelization for process tiles which will be processed (#179)fixed
area_at_zoom()when using input groups (#181)fixed single GeoTIFF output bounds should use process area (#182)
fixed YAML warning (#167)
inputs preserve order (#176)
enabled writing into single GeoTIFF files (#175)
enabled multiprocessing spawn method (#173)
extracted
execute()logic toTileProcessclass (#173)process workers now only receive objects and parameters they need (#173)
parsing mapchete input does not fail if zoom levels do not match
enable other projections again for GeoJSON output (closing #151)
let rasterio & fiona decide whether single file can be opened (#186)
provide option to show less content on CLI mapchete processes (#165)
automatically detect loggers from registered mapchete packages and user process files
enable drivers which do not handle pure NumPy arrays or feature lists
OutputDataclasses have newoutput_valid(),output_cleaned()andextract_subset()methodscopy=Falseflag has been added to all NumPy.astype()calls to avoid unnecessary copying of arrays in memoryextra requirements have been removed from
requirements.txtsetup.py uses now
find_packages()function to detect subpackagesminimum required NumPy version is now 1.15
0.27 - 2019-01-03
enable reading from output tile directories which have a different CRS
enable GeoPackage as single file input
fixed antimeridian shift check
added retry decorator to read functions & added
get_gdal_options()andread_raster_no_crs()functionspass on
antimeridian_cuttingfromreproject_geometry()to underlying Fiona functionfix transform shape on non-square tiles (#145)
fixed VRT NODATA property, use GDAL typenames
mapchete indexshows progress bar for all tiles instead per zoom level and takes--pointparametertile directories now requires
resamplinginopen(), not inread()added
mapchete.processes.convertuse WKT CRS when writing VRT (closing #148)
updated license year
clean_geometry_type()raisesGeometryTypeErrorif types do not match instead of returningNonedefault log level now is
logging.WARNING, notlogging.ERROR
0.26 - 2018-11-27
enable VRT creation for indexes
added
--vrtflag and--idx_out_diroption tomapchete executerenamed
--out_dirto--idx_out_dirformapchete indexBufferedTileshape (height,width) and bounds (left,bottom,rightandtop) properties now return correct valuesBufferedTile.shapenow follows the order(height, width)(update fromtilematrix 0.18)ReferencedRasternow also has aboundsproperty, take caution when unpacking results ofcreate_mosaic()!create_mosaic(): use tile columns instead of tile bounding box union to determine whether tiles are passing the Antimeridian; fixes #141
0.25 - 2018-10-29
use
concurrent.futuresinstead ofmultiprocessingmake some dependencies optional (Flask, boto3, etc.)
speed up
count_tiles()execute()function does not require explicit**kwargsanymore
0.24 - 2018-10-23
breaking changes:
all Python versions < 3.5 are not supported anymore!
default drivers now can handle S3 bucket outputs
file based output drivers write output metadata into
metadata.jsonoutput directories can be used as input for other processes if they have a
metadata.jsonif Fiona driver has ‘append’ mode enabled, index entries get appended instead of writing a whole new file
0.23 - 2018-08-21
breaking change:
for CLI utilities when providing minimum and maximum zoom, it has to have the form of
5,6instead of5 6
remove deprecated
memoryfileusage forwrite_raster_window()fix
s3path formapchete indexadd
snap_bounds,clip_boundsfunctions &effective_boundsto configmade user processes importable as modules (#115)
changed
process_fileparemeter toprocessadded
mapchete.processesentry point to allow other packages add their processesswitched from argparse to click
executeandindexcommands accept now more than one mapchete filesadded
mapchete.cli.commandsentry point to allow other packages havemapchetesubcommands
0.22 - 2018-05-31
don’t pass on
mapchete_filetoexecute()kwargsapply workaround for tqdm: https://github.com/tqdm/tqdm/issues/481
0.21 - 2018-05-30
breaking change:
old-style Process classes are not supported anymore
user process accepts kwargs from custom process parameters
process_file is imported once when initializing the process (#114)
when validating, import process_file to quickly reveal
ImporErrorfixed
execute --pointalso check for
s3URLs when adding GDAL HTTP optionsdefault
max_chunksizeto 1 (#113)
0.20 - 2018-04-07
fixed geometry reprojection for LineString and MultiLineString geometries (use buffer buffer to repair geometries does not work for these types)
added
RasterWindowMemoryFile()context manager aroundrasterio.io.MemoryFile(#105)passing on dictionary together with numpy array from user process will write the dictionary as GeoTIFF tag (#101)
added
--wkt_geometrytoexecutewhich enables providing process bounds via WKTadded
--pointtoexecutewhich enables providing a point location to be processedadded
--no_pbartoexecuteto disable progress barmapchete indexcommand now can create vector index files (GeoJSONandGeoPackage) and a text file containing output tile pathsoutput.tiles_exist()now has two keyword argumentsprocess_tileandoutput_tileto enable check for both tile typesrestructuring internal modules (core and config), no API changes
0.19 - 2018-02-16
made logging functionality now library friendly (#102)
added
mapchete.logmodule with functions simplifying logging for user processes and driver pluginsmapchete execute--logfileflag writes log files with debug level--debugdisables progress bar & prints debug log output--verboseenables printing of process tile information while showing the progress bar--max_chunksizelets user decide which maximum chunk size is used bymultiprocessing
batch processing module
mapchete._batchfunctionality absorbed into main modulewriting output is now handled by workers instead by main process
new function
Mapchete.batch_processor()is a generator which processes all of the process tiles and returns information (i.e. processing & write times)Mapchete.batch_process()consumesMapchete.batch_processor()without returning anythingquietanddebugflags are deprecated and removed
get_segmentize_value()moved frommapchete.formats.defaults.raster_filetomapchete.iouse GDAL options for remote files (closing #103) per default:
GDAL_DISABLE_READDIR_ON_OPEN=TrueGDAL_HTTP_TIMEOUT=30
introduced
mapchete.io.path_is_remote()
0.18 - 2018-02-02
verstion 0.17 was not properly deployed, therefore nev version
0.17 - 2018-02-02
write_raster_windownow returns arasterio.MemoryFile()if path is"memoryfile"refactoring of
MapcheteConfig(#99):mapchete configuration changes:
process_zoomandprocess_minzoom,process_maxzoomnow have to be set viazoom_levelsparameterprocess pyramid now has to be set via a
pyramiddictionary at root element (#78)pyramid type is now called
gridinstead oftypetile pyramids can now have custom grids (see https://github.com/ungarj/tilematrix/blob/master/doc/tilematrix.md#tilepyramid)
process_boundsare now calledbounds
API changes:
new attributes:
init_zoom_levelsis a subset ofzoom_levelsand indicates initialization zoom levels via thezoomkwarginit_boundsis a subset ofboundsand indicates initialization bounds via theboundskwarg
deprecated attributes:
crsis now found atprocess_pyramid.crsmetatilingis now found atprocess_pyramid.metatilingpixelbufferis now found atprocess_pyramid.pixelbufferinputswas renamed toinputprocess_boundswas renamed tobounds
deprecated methods:
at_zoom()now calledparams_at_zoom()process_area()now calledarea_at_zoom()process_bounds()now calledbounds_at_zoom()
0.16 - 2018-01-12
added
TileDirectoryas additional input option (#89)make all default output formats available in
serve(#63)remove Pillow from dependencies (related to #63)
0.15 - 2018-01-02
enabled optional
cleanup()function forInputDataobjects whenMapcheteis closed.
0.14 - 2018-01-02
added python 3.4, 3.5 and 3.6 support
0.13 - 2017-12-21
driver using
InputDatafunction must now accept**kwargsfixed
resamplingissue introduced with inapropriate usage ofWarpedVRTinread_raster_window()strchecks now usebasestringto also coverunicodeencodingsread_raster_window()now accepts GDAL options which get passed on torasterio.Env()all resampling methods from
rasterio.enums.Resamplingare now available (#88)
0.12 - 2017-11-23
adapt chunksize formula to limit
multiprocessingchunksize between 0 and 16; this resolves occuringMemoryError()and some performance impediments, closing #82GeoTIFF output driver: use
compress(like in rasterio) instead ofcompression& raiseDeprecationWarningwhen latter is used
0.11 - 2017-11-09
vector.reproject_geometry()throws nowshapely.errors.TopologicalErrorinstead ofRuntimeErrorif reprojected geometry is invalidvector.reproject_geometry()now usesfiona.transform.transform_geom()internallypass on delimiters (zoom levels & process bounds) to drivers
InputDataobjectwhen a tile is specified in
mapchete execute, process bounds are clipped to tile boundsbetter estimate
chunksizefor multiprocessing in tile processing & preparing inputsadd nodata argument to
read_raster_window()to fixrasterio.vrt.WarpedVRTresampling issue
0.10 - 2017-10-23
better memory handling by detatching process output data from
BufferedTileobjectsbreaking API changes:
Mapchete.execute()returns raw data instead of tile with data attributeMapchete.read()returns raw data instead of tile with data attributeMapchete.get_raw_output()returns raw data instead of tile with data attributeMapchete.write()requires process_tile and data as argumentssame valid for all other
read()andwrite()functions in drivers &MapcheteProcessobjectformats
is_empty()function makes just a basic intersection check but does not actually look into the data anymoreformats
read()functions are not generators anymore but follow the rasterio style (2D array when one band index is given, 3D arrays for multiple band indices)
new
MapcheteNodataTileexception to indicate an empty process outputraster_file & geotiff Input cache removed
get_segmentize_value()function is now publicuse
rasterio.vrt.WarpedVRTclass to read raster windowssource rasters without nodata value or mask are now handled properly (previously a default nodata value of 0 was assumed)
0.9 - 2017-10-04
removed GDAL from dependencies by reimplementing ogr
segmentize()using shapelyuse
cascaded_union()instead ofMultiPolygonto determine process area
0.8 - 2017-09-22
process file now will accept a simple
execute(mp)functioncurrent version number is now accessable at
mapchete.__version(#77)added
--versionflag to command line tools
0.7 - 2017-09-20
fixed PNG alpha band handling
added generic
MapcheteEmptyInputTileexceptioninternal: available pyramid types are now loaded dynamically from
tilematrixclosed #25: use HTTP errors instead of generating pink tiles in
mapchete serve
0.6 - 2017-09-08
input_filesconfig option now raises a deprecation warning and will be replaced withinputabstract
inputtypes are now available which is necessary for additional non-file based input drivers such as DB connectionsimproved antimeridian handling in
create_mosaic()(#69)improved baselevel generation performance (#74)
0.5 - 2017-05-07
introduced iterable input data groups
introduced pytest & test coverage of 92%
adding Travis CI and coveralls integrations
automated pypi deploy
introduced
mapchete.open()andbatch_process()progress bar on batch process
proper logging & custom exceptions
documentation on readthedocs.io
0.4 - 2017-03-02
introduced pluggable format drivers (#47)
mapchete formatssubcommand added; lists available input & output formatscompletely refactored internal module structure
removed
self.write()function; process outputs now have to be passed on viareturn(#27)baseleveloption now works for both upper and lower zoom levelsadded compression options for GTiff output
make documentation and docstrings compatible for readthedocs.org
0.3 - 2016-09-20
added new overall
mapchetecommand line tool, which will replacemapchete_execute,mapchete_serveandraster2pyramidadded
mapchete createsubcommand, which creates a dummy process (.mapchete & .py files)if using an input file from command line, the configuration input_file parameter must now be set to ‘from_command_line’ instead of ‘cli’
input files can now be opened directly using their identifier instead of self.params[“input_files”][“identifier”]
0.2 - 2016-09-07
fixed installation bug (io_utils module could not be found)
rasterio’s CRS() class now handles CRSes
fixed tile –> metatile calculations
fixed vector file read over antimeridian
rewrote reproject_geometry() function
0.1 - 2016-08-23
added vector data read
added vector output (PostGIS & GeoJSON)
added NumPy tile output
added spherical mercator support
tile with buffers next to antimeridian get full data
combined output_ … parameters to output object in mapchete config files
0.0.2
renamed
mapchete_execute.pycommand tomapchete_executerenamed
mapchete_serve.pycommand tomapchete_serveadded
raster2pyramidcommandadded
--tileflag inmapchete_executefor single tile processingadded
--portflag inmapchete_serveto customize portadded
clip_array_with_vectorfunction for user-defined processes
0.0.1
basic functionality of mapchete_execute
parallel processing
parsing of .mapchete files
reading and writing of raster data