Skip to content

v0.10.7

Choose a tag to compare

@brendancol brendancol released this 14 Jun 04:51
9c1a81a

Version 0.10.7 - 2026-06-13

New features

  • to_geotiff: add pack=True, the inverse of mask_and_scale (#3064) (#3065)
  • open_geotiff: add coregister=True (mask_and_scale + reproject + match grid) (#3069) (#3070) (#3072)
  • open_geotiff: pick reproject resampling by raster type under auto_reproject=True (#3067) (#3068)
  • open_geotiff: rename mask_and_scale to unpack and add GPU / dask+GPU support (#3075)

Bug fixes and improvements

  • polygonize: reject invalid return_type before running the computation (#3312)
  • polygonize: document that column_name is also used for geojson output (#3309)
  • kriging: keep template backend and variance name in the singular-matrix fallback (#3294)
  • rasterize: drop non-finite-coordinate geometries and clamp row casts (#3310)
  • merge: add GPU tests for mixed-type first/last ordering (#3296) (#3302)
  • interpolate: add edge-case and parameter test coverage (#3300)
  • polygonize: honor _xrspatial_no_georef in CRS detection (#3293) (#3308)
  • polygonize: jit the float-chunk region ranges scan (#3303) (#3314)
  • rasterize: burn each geometry once per pixel under merge='sum'/'count' (#3313)
  • interpolate: cut redundant work in the backends (#3311)
  • rasterize: widen the dtype annotation to the accepted forms (#3291) (#3297)
  • kriging: name the singular-fallback variance '{name}_variance' (#3289)
  • polygonize: cover the dask mask-rechunk path (#3299) (#3305)
  • polygonize: raise on uint32 region overflow in the cupy integer backend (#3292) (#3301)
  • interpolate: drop unused math import and fix isort drift (#3286) (#3287)
  • docs: add a why-xarray-spatial page, retire raster_huh (#3249) (#3284)
  • geotiff: fill pack=True nodata holes at the integer dtype's native width (#3277)
  • ci: add a docs-build job (#3252)
  • projection: read ITRF Helmert scale as ppm to match PROJ's data files (#3283)
  • projection: reject non-WGS84 ellipsoids in the fast-path dispatch (#3282)
  • projection: fix LAEA inverse rq normalization and authalic inverse series (#3280)
  • reproject: upload shared coordinate arrays once per chunk in multi-band cupy (#3279)
  • reproject: promote to the dask path when the output is large (#3278)
  • geotiff: export VRTUnsupportedError, CloudSizeLimitError, PixelSafetyLimitError publicly (#3265) (#3273)
  • geotiff: refuse pack=True values the packed integer dtype cannot hold (#3272)
  • merge: keep the shared integer input dtype instead of promoting to float64 (#3271)
  • geotiff: add gpu and dask+gpu legs to the pack=True feature tests (#3270)
  • geotiff: correct the unpack docstring (masking still runs without scale/offset) (#3263) (#3269)
  • geotiff: rewrap _attrs import in _writers/gpu.py to isort line_length=100 (#3259) (#3261)
  • docs: replace the usage page with a runnable quickstart (#3249) (#3258)
  • docs: rewrite the installation page (environments, extras, GPU and cloud notes) (#3257)
  • dask: name compute tasks xrspatial. for readable task graphs (#3255)
  • docs: fix stale Datashader claim and hardcoded links in getting-started (#3249) (#3251)
  • geotiff: coregister=True reads COG overviews and fails fast on bad templates (#3254)
  • geotiff: document coregister=True and register it as an experimental feature (#3248)
  • geotiff: warn when coregister=True covers only a small fraction of the caller grid (#3247)
  • proximity: replace the numpy line-sweep with an exact cKDTree query (#3245)
  • projection: add dask end-to-end warning test, lock note on _crs_to_dict (#3242) (#3244)
  • projection: silence the pyproj lossy-PROJ-string warning in param extractors (#3242) (#3243)
  • geotiff: stream dask input through the GPU writer one tile-row band at a time (#3241)
  • geotiff: fix to_geotiff(pack=True) crash on cupy and dask+cupy input (#3240)
  • geotiff: keep float32 sources float32 through to_geotiff(pack=True) (#3080) (#3239)
  • hotspots: raise instead of returning all zeros when the raster contains Inf (#3238)
  • geotiff: defer the pack=True NaN guard into the dask graph so chunks compute once (#3237)
  • geotiff: forward caller chunking to the coregister/auto_reproject output (#3236)
  • visibility: add cupy backend, NaN, and Fresnel-blocked coverage (#3202)
  • visibility: fix the cupy backend crash in cumulative_viewshed/visibility_frequency (#3205)
  • zonal: add GPU backend coverage for regions and crosstab (#3203)
  • focal: make the kernel memory guard dtype-aware (#3223) (#3232)
  • focal: resolve apply() default func per backend (#3215) (#3224)
  • focal: add edge-case and parameter tests from the test-coverage sweep (#3230)
  • hotspots: fix the docstring backend list and kernel weight semantics (#3216) (#3227)
  • clip_polygon: align dask+cupy mask chunks before map_blocks (#3186) (#3204)
  • focal: make output dtype consistent across backends (#3226)
  • clip_polygon: use the largest chunk for the rasterize mask on dask (#3191) (#3201)
  • visibility: compute the dask source once in cumulative_viewshed (#3185) (#3199)
  • polygon_clip: remove unused imports and fix import order (#3198)
  • visibility: align output name and frequency_mhz hint with viewshed (#3183) (#3195)
  • geotiff: fix to_geotiff dask+cupy crash in the CPU streaming writer (gpu=False) (#3171)
  • clip_polygon: make nodata dtype consistent across backends (#3208)
  • mcda: fix the owa() dask path and batch wpm() validation into one scheduler pass (#3158)
  • hypsometric_integral: validate raster inputs (#3211)
  • regions: vectorize the relabel loop (#3207) (#3212)
  • mcda: fix cupy and dask backend failures in owa, standardize, and sensitivity (#3146) (#3157)
  • mcda: fix API consistency (owa weights param, boolean_overlay Dataset input, ahp_weights docs, ConsistencyResult export) (#3148) (#3155)
  • mcda: add cupy, dask, metadata, and edge-case test coverage (#3149) (#3156)
  • mcda: guard monte_carlo dask materialization against OOM (#3145) (#3153)
  • proximity: add coverage tests (int rasters, bounded GPU metrics, empty input) (#3139) (#3140)
  • geotiff: add reader.unpack / writer.pack to SUPPORTED_FEATURES at experimental tier (#3172)
  • focal: preserve input float dtype in mean() across all backends (#3214) (#3221)
  • proximity: fix stale proximity/allocation/direction docstrings (#3091) (#3138)
  • visibility: fix isort import-ordering (#3182) (#3189)
  • geotiff: thread the nodata kwarg into _pack's NaN fill so pack=True holes match GDAL_NODATA (#3168) (#3174)
  • mcda: remove unused warnings import, fix isort drift (#3143) (#3144)
  • geotiff: rewrite stale per-band SCALE/OFFSET in to_geotiff(pack=True) after band-subset reads (#3175)
  • geotiff: validate compression_level before GPU dispatch and pass it to fallback codecs (#3167) (#3176)
  • vrt: place non-georeferenced tiles by explicit pixel offsets (#3116) (#3135)
  • projection: document actual return types of vertical datum functions (#3097) (#3134)
  • mcda: keep standardize piecewise/categorical on the device for cupy inputs (#3159)
  • geotiff: fix the compression corpus fixture path so oracle tests actually run (#3164) (#3169)
  • geotiff: warn when the GPU writer materializes dask input; scope streaming docs to the CPU path (#3173)
  • focal: hoist the input cast out of the cupy focal_stats loop (#3231) (#3233)
  • focal: make the memory guard backend-aware for dask input (#3218) (#3228)
  • clip_polygon: add backend/edge-case/metadata test coverage (#3197) (#3206)
  • docs: fix the README to_geotiff example that used the gated JPEG codec (#3162) (#3170)
  • zonal: tighten crosstab zone_ids/cat_ids type hints and fix stale nodata docstring (#3196)
  • mcda: preserve input attrs in constrain() (#3147) (#3154)
  • reproject: keep integer dtype for empty chunks (#3096) (#3133)
  • mcda: make monte_carlo sensitivity chunk-bounded on dask and drop constrain() deep copy (#3160)
  • rasterize: drop two avoidable full-raster allocations in the backends (#3107) (#3131)
  • proximity: fix bounded dask GREAT_CIRCLE missing antimeridian targets (#3108) (#3130)
  • geotiff: mask 64-bit integer sentinels at native width in eager reads (#3098) (#3128)
  • reproject: accept cupy and dask+cupy inputs in merge() (#3095) (#3125)
  • geotiff: add xfail'd GPU and dask+GPU pack=True round-trip tests (#3114) (#3127)
  • proximity: sort dask KDTree targets row-major so the tie-break matches numpy (#3090) (#3124)
  • proximity: hoist the line-sweep kernel to module level to stop per-call recompiles (#3103) (#3126)
  • rasterize: add all_touched-line and non-iterable-input coverage tests (#3120)
  • rasterize: rename use_cuda to gpu with a deprecation shim (#3089) (#3122)
  • geotiff: reject zero and non-finite SCALE/OFFSET under unpack=True; guard pack=True against divide-by-zero (#3104) (#3129)
  • reproject: gate the CUDA fast path on WGS84-compatible datums (#3094) (#3119)
  • geotiff: group streaming-write rows into bands so source chunks compute once (#3117) (#3136)
  • reproject: skip the duplicate try_numba_transform probe in the numpy chunk worker (#3123)
  • reproject: remove the obsolete strict xfail on the streaming 3-D test (#3100) (#3181)
  • reproject: add tests for the streaming fallback path (#3101) (#3118)
  • reproject: match streaming output dtype to the other backends (#3093) (#3111)
  • geotiff: name unpack instead of the deprecated mask_and_scale alias in docs and errors (#3115)
  • geotiff: keep regression tests and sweep state after #3109 landed the guard (#3088) (#3110)
  • proximity: build dask coordinate grids with chunk-aligned broadcast (#3132) (#3137)
  • rasterize: propagate GeoDataFrame CRS to output when like has none (#3087) (#3113)
  • rasterize: reject non-finite burn values against integer and bool output dtypes (#3085) (#3109)
  • reproject: remove unused import and dead local, fix import order in init.py (#3083) (#3092)
  • geotiff: fix isort import-ordering drift (#3082) (#3084)
  • merge: make the output-size guard backend-aware (#3048) (#3081)
  • geotiff: restore the nodata sentinel for float rasters in to_geotiff(pack=True) (#3078) (#3079)
  • projection: silence the pyproj PROJ-string warning in _get_datum_params (#3076) (#3077)
  • resample: add dask+numpy nodata-masking value-parity tests (#3073) (#3074)
  • rasterize: treat a LinearRing as a line; warn on dropped geometries (#3055) (#3063)
  • rasterize: guard against geometry/like CRS mismatch (#3058) (#3062)
  • rasterize: reject large integer burn values that float64 cannot hold exactly (#3056) (#3060)
  • geotiff: warn on non-atomic custom GPU merge over overlap (#3061)
  • rasterize: reject fills the output dtype cannot represent exactly (#3059)

Contributors

  • Thanks to @brendancol for contributions to this release.