|
2 | 2 | ----------- |
3 | 3 |
|
4 | 4 |
|
| 5 | +### Version 0.10.7 - 2026-06-13 |
| 6 | + |
| 7 | +#### New features |
| 8 | +- to_geotiff: add pack=True, the inverse of mask_and_scale (#3064) (#3065) |
| 9 | +- open_geotiff: add coregister=True (mask_and_scale + reproject + match grid) (#3069) (#3070) (#3072) |
| 10 | +- open_geotiff: pick reproject resampling by raster type under auto_reproject=True (#3067) (#3068) |
| 11 | +- open_geotiff: rename mask_and_scale to unpack and add GPU / dask+GPU support (#3075) |
| 12 | + |
| 13 | +#### Bug fixes and improvements |
| 14 | +- polygonize: reject invalid return_type before running the computation (#3312) |
| 15 | +- polygonize: document that column_name is also used for geojson output (#3309) |
| 16 | +- kriging: keep template backend and variance name in the singular-matrix fallback (#3294) |
| 17 | +- rasterize: drop non-finite-coordinate geometries and clamp row casts (#3310) |
| 18 | +- merge: add GPU tests for mixed-type first/last ordering (#3296) (#3302) |
| 19 | +- interpolate: add edge-case and parameter test coverage (#3300) |
| 20 | +- polygonize: honor _xrspatial_no_georef in CRS detection (#3293) (#3308) |
| 21 | +- polygonize: jit the float-chunk region ranges scan (#3303) (#3314) |
| 22 | +- rasterize: burn each geometry once per pixel under merge='sum'/'count' (#3313) |
| 23 | +- interpolate: cut redundant work in the backends (#3311) |
| 24 | +- rasterize: widen the dtype annotation to the accepted forms (#3291) (#3297) |
| 25 | +- kriging: name the singular-fallback variance '{name}_variance' (#3289) |
| 26 | +- polygonize: cover the dask mask-rechunk path (#3299) (#3305) |
| 27 | +- polygonize: raise on uint32 region overflow in the cupy integer backend (#3292) (#3301) |
| 28 | +- interpolate: drop unused math import and fix isort drift (#3286) (#3287) |
| 29 | +- docs: add a why-xarray-spatial page, retire raster_huh (#3249) (#3284) |
| 30 | +- geotiff: fill pack=True nodata holes at the integer dtype's native width (#3277) |
| 31 | +- ci: add a docs-build job (#3252) |
| 32 | +- projection: read ITRF Helmert scale as ppm to match PROJ's data files (#3283) |
| 33 | +- projection: reject non-WGS84 ellipsoids in the fast-path dispatch (#3282) |
| 34 | +- projection: fix LAEA inverse rq normalization and authalic inverse series (#3280) |
| 35 | +- reproject: upload shared coordinate arrays once per chunk in multi-band cupy (#3279) |
| 36 | +- reproject: promote to the dask path when the output is large (#3278) |
| 37 | +- geotiff: export VRTUnsupportedError, CloudSizeLimitError, PixelSafetyLimitError publicly (#3265) (#3273) |
| 38 | +- geotiff: refuse pack=True values the packed integer dtype cannot hold (#3272) |
| 39 | +- merge: keep the shared integer input dtype instead of promoting to float64 (#3271) |
| 40 | +- geotiff: add gpu and dask+gpu legs to the pack=True feature tests (#3270) |
| 41 | +- geotiff: correct the unpack docstring (masking still runs without scale/offset) (#3263) (#3269) |
| 42 | +- geotiff: rewrap _attrs import in _writers/gpu.py to isort line_length=100 (#3259) (#3261) |
| 43 | +- docs: replace the usage page with a runnable quickstart (#3249) (#3258) |
| 44 | +- docs: rewrite the installation page (environments, extras, GPU and cloud notes) (#3257) |
| 45 | +- dask: name compute tasks xrspatial.<tool> for readable task graphs (#3255) |
| 46 | +- docs: fix stale Datashader claim and hardcoded links in getting-started (#3249) (#3251) |
| 47 | +- geotiff: coregister=True reads COG overviews and fails fast on bad templates (#3254) |
| 48 | +- geotiff: document coregister=True and register it as an experimental feature (#3248) |
| 49 | +- geotiff: warn when coregister=True covers only a small fraction of the caller grid (#3247) |
| 50 | +- proximity: replace the numpy line-sweep with an exact cKDTree query (#3245) |
| 51 | +- projection: add dask end-to-end warning test, lock note on _crs_to_dict (#3242) (#3244) |
| 52 | +- projection: silence the pyproj lossy-PROJ-string warning in param extractors (#3242) (#3243) |
| 53 | +- geotiff: stream dask input through the GPU writer one tile-row band at a time (#3241) |
| 54 | +- geotiff: fix to_geotiff(pack=True) crash on cupy and dask+cupy input (#3240) |
| 55 | +- geotiff: keep float32 sources float32 through to_geotiff(pack=True) (#3080) (#3239) |
| 56 | +- hotspots: raise instead of returning all zeros when the raster contains Inf (#3238) |
| 57 | +- geotiff: defer the pack=True NaN guard into the dask graph so chunks compute once (#3237) |
| 58 | +- geotiff: forward caller chunking to the coregister/auto_reproject output (#3236) |
| 59 | +- visibility: add cupy backend, NaN, and Fresnel-blocked coverage (#3202) |
| 60 | +- visibility: fix the cupy backend crash in cumulative_viewshed/visibility_frequency (#3205) |
| 61 | +- zonal: add GPU backend coverage for regions and crosstab (#3203) |
| 62 | +- focal: make the kernel memory guard dtype-aware (#3223) (#3232) |
| 63 | +- focal: resolve apply() default func per backend (#3215) (#3224) |
| 64 | +- focal: add edge-case and parameter tests from the test-coverage sweep (#3230) |
| 65 | +- hotspots: fix the docstring backend list and kernel weight semantics (#3216) (#3227) |
| 66 | +- clip_polygon: align dask+cupy mask chunks before map_blocks (#3186) (#3204) |
| 67 | +- focal: make output dtype consistent across backends (#3226) |
| 68 | +- clip_polygon: use the largest chunk for the rasterize mask on dask (#3191) (#3201) |
| 69 | +- visibility: compute the dask source once in cumulative_viewshed (#3185) (#3199) |
| 70 | +- polygon_clip: remove unused imports and fix import order (#3198) |
| 71 | +- visibility: align output name and frequency_mhz hint with viewshed (#3183) (#3195) |
| 72 | +- geotiff: fix to_geotiff dask+cupy crash in the CPU streaming writer (gpu=False) (#3171) |
| 73 | +- clip_polygon: make nodata dtype consistent across backends (#3208) |
| 74 | +- mcda: fix the owa() dask path and batch wpm() validation into one scheduler pass (#3158) |
| 75 | +- hypsometric_integral: validate raster inputs (#3211) |
| 76 | +- regions: vectorize the relabel loop (#3207) (#3212) |
| 77 | +- mcda: fix cupy and dask backend failures in owa, standardize, and sensitivity (#3146) (#3157) |
| 78 | +- mcda: fix API consistency (owa weights param, boolean_overlay Dataset input, ahp_weights docs, ConsistencyResult export) (#3148) (#3155) |
| 79 | +- mcda: add cupy, dask, metadata, and edge-case test coverage (#3149) (#3156) |
| 80 | +- mcda: guard monte_carlo dask materialization against OOM (#3145) (#3153) |
| 81 | +- proximity: add coverage tests (int rasters, bounded GPU metrics, empty input) (#3139) (#3140) |
| 82 | +- geotiff: add reader.unpack / writer.pack to SUPPORTED_FEATURES at experimental tier (#3172) |
| 83 | +- focal: preserve input float dtype in mean() across all backends (#3214) (#3221) |
| 84 | +- proximity: fix stale proximity/allocation/direction docstrings (#3091) (#3138) |
| 85 | +- visibility: fix isort import-ordering (#3182) (#3189) |
| 86 | +- geotiff: thread the nodata kwarg into _pack's NaN fill so pack=True holes match GDAL_NODATA (#3168) (#3174) |
| 87 | +- mcda: remove unused warnings import, fix isort drift (#3143) (#3144) |
| 88 | +- geotiff: rewrite stale per-band SCALE/OFFSET in to_geotiff(pack=True) after band-subset reads (#3175) |
| 89 | +- geotiff: validate compression_level before GPU dispatch and pass it to fallback codecs (#3167) (#3176) |
| 90 | +- vrt: place non-georeferenced tiles by explicit pixel offsets (#3116) (#3135) |
| 91 | +- projection: document actual return types of vertical datum functions (#3097) (#3134) |
| 92 | +- mcda: keep standardize piecewise/categorical on the device for cupy inputs (#3159) |
| 93 | +- geotiff: fix the compression corpus fixture path so oracle tests actually run (#3164) (#3169) |
| 94 | +- geotiff: warn when the GPU writer materializes dask input; scope streaming docs to the CPU path (#3173) |
| 95 | +- focal: hoist the input cast out of the cupy focal_stats loop (#3231) (#3233) |
| 96 | +- focal: make the memory guard backend-aware for dask input (#3218) (#3228) |
| 97 | +- clip_polygon: add backend/edge-case/metadata test coverage (#3197) (#3206) |
| 98 | +- docs: fix the README to_geotiff example that used the gated JPEG codec (#3162) (#3170) |
| 99 | +- zonal: tighten crosstab zone_ids/cat_ids type hints and fix stale nodata docstring (#3196) |
| 100 | +- mcda: preserve input attrs in constrain() (#3147) (#3154) |
| 101 | +- reproject: keep integer dtype for empty chunks (#3096) (#3133) |
| 102 | +- mcda: make monte_carlo sensitivity chunk-bounded on dask and drop constrain() deep copy (#3160) |
| 103 | +- rasterize: drop two avoidable full-raster allocations in the backends (#3107) (#3131) |
| 104 | +- proximity: fix bounded dask GREAT_CIRCLE missing antimeridian targets (#3108) (#3130) |
| 105 | +- geotiff: mask 64-bit integer sentinels at native width in eager reads (#3098) (#3128) |
| 106 | +- reproject: accept cupy and dask+cupy inputs in merge() (#3095) (#3125) |
| 107 | +- geotiff: add xfail'd GPU and dask+GPU pack=True round-trip tests (#3114) (#3127) |
| 108 | +- proximity: sort dask KDTree targets row-major so the tie-break matches numpy (#3090) (#3124) |
| 109 | +- proximity: hoist the line-sweep kernel to module level to stop per-call recompiles (#3103) (#3126) |
| 110 | +- rasterize: add all_touched-line and non-iterable-input coverage tests (#3120) |
| 111 | +- rasterize: rename use_cuda to gpu with a deprecation shim (#3089) (#3122) |
| 112 | +- geotiff: reject zero and non-finite SCALE/OFFSET under unpack=True; guard pack=True against divide-by-zero (#3104) (#3129) |
| 113 | +- reproject: gate the CUDA fast path on WGS84-compatible datums (#3094) (#3119) |
| 114 | +- geotiff: group streaming-write rows into bands so source chunks compute once (#3117) (#3136) |
| 115 | +- reproject: skip the duplicate try_numba_transform probe in the numpy chunk worker (#3123) |
| 116 | +- reproject: remove the obsolete strict xfail on the streaming 3-D test (#3100) (#3181) |
| 117 | +- reproject: add tests for the streaming fallback path (#3101) (#3118) |
| 118 | +- reproject: match streaming output dtype to the other backends (#3093) (#3111) |
| 119 | +- geotiff: name unpack instead of the deprecated mask_and_scale alias in docs and errors (#3115) |
| 120 | +- geotiff: keep regression tests and sweep state after #3109 landed the guard (#3088) (#3110) |
| 121 | +- proximity: build dask coordinate grids with chunk-aligned broadcast (#3132) (#3137) |
| 122 | +- rasterize: propagate GeoDataFrame CRS to output when like has none (#3087) (#3113) |
| 123 | +- rasterize: reject non-finite burn values against integer and bool output dtypes (#3085) (#3109) |
| 124 | +- reproject: remove unused import and dead local, fix import order in __init__.py (#3083) (#3092) |
| 125 | +- geotiff: fix isort import-ordering drift (#3082) (#3084) |
| 126 | +- merge: make the output-size guard backend-aware (#3048) (#3081) |
| 127 | +- geotiff: restore the nodata sentinel for float rasters in to_geotiff(pack=True) (#3078) (#3079) |
| 128 | +- projection: silence the pyproj PROJ-string warning in _get_datum_params (#3076) (#3077) |
| 129 | +- resample: add dask+numpy nodata-masking value-parity tests (#3073) (#3074) |
| 130 | +- rasterize: treat a LinearRing as a line; warn on dropped geometries (#3055) (#3063) |
| 131 | +- rasterize: guard against geometry/like CRS mismatch (#3058) (#3062) |
| 132 | +- rasterize: reject large integer burn values that float64 cannot hold exactly (#3056) (#3060) |
| 133 | +- geotiff: warn on non-atomic custom GPU merge over overlap (#3061) |
| 134 | +- rasterize: reject fills the output dtype cannot represent exactly (#3059) |
| 135 | + |
| 136 | +#### Contributors |
| 137 | +- Thanks to @brendancol for contributions to this release. |
| 138 | + |
| 139 | + |
5 | 140 | ### Version 0.10.6 - 2026-06-08 |
6 | 141 |
|
7 | 142 | #### New features |
|
0 commit comments