NEWS.md
Revival release: the package runs again on the modern R spatial stack.
New entry point processSpace(). One call runs the whole analysis with explicit, documented arguments (replaces the fragile ... routing in allAtOnce(), which remains as a superseded wrapper). The DEM is read once and reused by every step.
Configurable stage levels. The hardcoded 1ft/2ft process-space stages are now stageLevels (any number of levels, meters or units values, default 1 m and 2 m). Polygons live in transectObject$ProcessPolygons (a list named by stage, e.g. "1m"), replacing $ProcessPolygons_1ft/_2ft; KMZ folders are named ProcessSpace_<stage>.
Bug fix: transects whose terrain never rises above a stage level now get their full width as process space; previously they collapsed to zero width (the long-flagged bug in addProcessSpace).
Dependency diet: concaveman → sf::st_concave_hull (GEOS ≥ 3.11); purrr and crayon dropped; console output now uses cli progress steps with a progress bar for the per-transect plot rendering.
Engineering-styled cross-section figures: gridded station–elevation panels, labeled stage lines, vertical-exaggeration note (the old label called it “horizontal exaggeration”), bank-orientation labels, cleaner ground line/fill.
Detrending engines with anti-banding smoothing. computeDetrendedRaster gains an engine argument. The streamLine/gradeline default is now a broad-window IDW (terra::interpIDW with minPoints = 300) that averages each cell’s reference over a long stretch of stream, eliminating the Voronoi striping of nearest-point assignment. The same idea is available for the crossSection method (engine = "idw", window sized to span 2-3 transects), removing the between-transect banding of the legacy kriging (which remains the default for continuity). gradelineDegree = "auto" (the default) picks the polynomial degree by an RMSE elbow rule and the diagnostic plot shows all candidate fits; pass a number to pin the degree.
raster → terra. All raster operations now use terra. The raster/sp/rgdal lineage is fully removed.
plotKML replaced by an internal KML writer. plotKML was archived from CRAN in October 2023, which broke installation. The KMZ export now uses a small internal writer (R/kmlWriter.R) with no archived dependencies. The output structure (folders, styles, balloons, raster overlay) matches the old KMZs; the legend referenced by the KML is now actually included in the KMZ (the old export silently omitted it). The overlay color ramp (plotKML’s SAGA_pal[[21]]) is vendored internally.
Keyless satellite basemap. ggmap (broken Stamen fallback, Google API key requirement) was replaced with maptiles Esri World Imagery + tidyterra rendering. No API key needed; runs offline with getSatImage = FALSE or when the tile download fails.
API change: transectObject$detrendedRaster is now a terra SpatRaster (layers DetrendedElevation and KrigeVar) instead of an sp SpatialPixelsDataFrame. Kriging now runs sf-native through gstat.
Longitudinal profile plots are embedded in the KMZ mainLine balloon (was in 0.1.052).
Bug fixes: error() → stop() in argument checks; the extra channels layer in mapPlotter(streamDir=) was computed but never drawn; unqualified ggsave()/theme() calls; ggplot2 ≥ 3.4 linewidth deprecations.
New: tools/parity-check.R verifies output parity against the committed 0.1.052 baseline KMZ.