NEWS.md
Added optional event_links to write_terrain_manifest() (intake schema 2): explicit file/event associations, evidence, attribution and report-DEM choice. Reports resolve these links and reopen selected unblocked event grids; missing context/files remain findings and conflicting DEM choices fail. Schema-1 calls remain compatible. This is not FGDB identity reconciliation or acceptance.
Polished the scope and next-action presentation with labelled facts, paragraph separation and an explicit review-order explanation instead of a “Group” column. Geographic hierarchy and network Configuration/Observation records now have separate diagrams. Supporting-record inventories are unchanged; no new UI framework, dependency or summary contract is introduced.
Added a grouped review overview and expandable supporting record, keeping maps and study structure visible without showing every technical table by default. Summary schema 2 gains review_actions and review_action_members; original findings and decisions are preserved. Blocking checks stay visible even when no human-input flag is set. This is presentation triage, not a readiness verdict.
Added write_terrain_manifest() and inspect_terrain_folder() for a portable selected-file intake inventory, plus optional folder_manifest reporting. Checks cover missing/changed files, relative-path safety, raster metadata, known companions and vertical-reference gaps/conflicts. This is not a complete event manifest, archive converter or FGDB acceptance. The Cole Creek demo now supports --folder for verified GeoTIFF copies and an intake-aware report.
Extended the report with a Study Area hierarchy/network relationship diagram, per-event evidence matrix and terrain extents, plus a forensic archive interpretation ledger. Named Study Areas can be described before an AOI is supplied. New optional survey_dems and reconstruction inputs preserve explicit associations and decisions without creating hierarchy or acceptance. Summary schema 2 adds reusable visual data and limited stage-specific prompts; the renderer still accepts schema-1 summaries. Added a bounded Cole Creek GeoPackage conversion probe; this is not a general archive migration adapter.
Added read-only terrain_development_summary() and offline HTML terrain_development_report() for pre-Level-1 scope, terrain extent, selected Streams/Reaches, Survey Event inventory and network findings. Missing context stays explicit; no dates, AOIs, acceptance or Level 1 readiness are inferred. Added a Cole Creek R1 demonstration using the retained 2006/2010/2016 data and the new GeoPackage path, without ArcPy or source-data modification.
Added accept_stream_network() for explicit, validated local acceptance, with reviewer provenance and appended validation history. It never supplies missing inspection decisions. Added new-file GeoPackage write/read with staged exact value/geometry round-trip checks, UTC timestamps, and retained lineage/reviews. Drafts can be saved unresolved; accepted state is revalidated. File-geodatabase binding, UPDATE/overwrite, reopening, and enterprise loading remain deferred.
Added explicit classify_stream_network_segments() decisions with structured role values and ordered operation provenance, without approving inspections. Added read-only validate_stream_network() for WORKING/ACCEPTANCE checks on retained networks: recomputed geometry/connectivity, memberships, node and connection consistency, source/operation references, and current review decisions. PASS is not observation acceptance. Stale approvals and unqualified partial legacy observations remain blocking. Geometry assessment is shared with preparation instead of implementing a second set of spatial checks.
Added connect_stream_network() and optional preparation connect = TRUE. Exact endpoints receive reusable candidate node UUIDs; hydroloom derives and orders all downstream relationships, including diversions. Storage geometry and source lineage are preserved. Unresolved direction, ambiguous geometry, or directed cycles defer assignment. Role/acceptance review remains explicit. The default seven-table return remains unchanged; opting in adds node and connection tables and records ordered node-assignment operations.
Added build_logical_stream_links() using sfnetworks to join degree-two continuations without a length cutoff. It preserves source membership, declared boundaries, junctions, and questionable geometry. Preparation opts in with consolidate = TRUE, before DEM orientation, with many-source lineage and ordered consolidation/direction operations. Raw endpoint coverage still gates automatic processing. No snapping, node assignment, or acceptance.
Added reusable orient_lines_from_dem() and an optional dem argument to Stream Network preparation. Supported endpoint comparisons now resolve direction automatically, with reversals, evidence, and operation history. flowline() uses the same method and warns when direction is unresolved. Endpoint evidence distinguishes outside-extent from in-extent NoData values. Automatic network preparation rejects incomplete DEM coverage; VALIDATE_ONLY exposes coverage diagnostics without applying corrections.
Added prepare_stream_network_from_features() for retained-source topology checks and linked pending spatial inspection features. It flags unresolved direction, duplicate/closed/self-intersecting lines, interior intersections, and endpoint near misses without applying repairs or accepting candidates.
Fixed normalization of mappings whose optional reach_id column is entirely NA.
Added normalize_retained_stream_network() to create candidate governed segments, source lineage, and working validation results from retained legacy Stream Network features using an explicit per-feature identity mapping.
nhdplusTools dependency with its supported successor, hydrogeofetch. The existing watershed lookup continues to use get_raindrop_trace() and get_split_catchment() with their preserved APIs.cross_section(). Clients that do not require drainage area can now continue cross-section processing when the remote watershed service is unavailable. check_cross_section() now applies the same validation policy, and geometry-focused tests no longer depend on live watershed lookup.nhdplusTools r package to gain access to USGS Network Linked Data Index (NLDI) services.pt_watershed_area function to retrieve delineated watersheds from NHDPlus via the NLDI.pt_watershed_area function into the processing steps for cross sections to identify NHD reaches (reachcode, comid) and calculate upstream drainage basin areas.Added several functions to support use in Shiny web apps:
dem2rem function to detrend to support the return of both an rem and trend surface. Trend surfaces can be used to model water surfaces.water_surface_area - Derive a polygon representing the water surface area at a specified rem elevation. Eliminates disconnected off-channel areas and simplifies the geometry. Used to create channel_poly and floodplain_poly sf objects.xs_pts_classify - Classifies cross_section_points as falling in the channel and floodplain.hydroflatten_dem - Uses a trend surface to add a water surface to a dem.floodplain_volume - Calculates the volume between two surfaces, such as a DEM and water surface.Updated the detrend function to not extend the interpolated trend surface beyond the extent of the input flowline_points. This was required to prevent extrapolation of the surface at each end of the reach beyond the available input data. In many cases, this extrapolation was distorting the trend surface at each end of the reach.
** Minor changes * Updated get_dem to enable multiple threads for download.
terra::SpatRaster object corruption. Was getting error: “expansion is not yet allowed” when nothing seemed to be wrong with the extent, crs, or resolution of the object.Start using the new data package FluvialGeomorph/fluvgeodata for testing newly added functions.
Added new functions to support fluvgeo use in shiny apps:
flowline - Create a valid flowline object from raw linework.flowline_points - Create a valid flowline_points object from a flowline object.cross_section - Create a valid cross_section object from raw linework.cross_section_points - Create a valid cross_section_points object from a cross_section object.dem2rem - Convert a DEM to an REM.get_dem - Get a DEM from the latest ESRI terrain image server.get_leaflet - Get a basic leaflet object.get_results_leaflet - Get a leaflet objet with fluvgeo objects.get_terrain_leaflet - Get a leaflet object with a DEM.arcgis_auth - Authorize to an AGOL service.check_crs_3857 - Check if sf or terra objects are CRS 3857.sf_fix_crs - Fix sf objects that might have mis-specified CRS’s 3857 and 4326.sf_get_z - Get z value from an elevation model for an sf object.Updated reports to use a series of new functions to improve data quality and labeling.
Added a series of functions to streamline the editing and drawing of cross sections in the sf format.
start_left - Determines if a cross section starts to the left of the flowline.sf_line_end_point - Returns the x,y corrdinates of the start or end of a line.sf_point_attributes - Write the x and y coordinate values into columns.xs_upstream - Determine the upstream cross section and write its vlues into new columns. * xs_bearing - Calculate the bearing of a cross section.Converted all functions to tmap version 4 (well, v3.99).
Discovered that the arcgisbinding::arc.open function now no longer works reliably (see issue #91).
Removed all remaining dependencies on the ESRI arcgisbinding R package as many of its primary IO functions are no longer reliably working. Removed remaining functions that relied on arc.open or arc.write:
arc_raster2SpatRaster replaced by gdb_raster2SpatRast
arc2sf replaced by fc2fs
get_arc_wktsf2arc_tablesf2arcDiscovered that the GDAL v3.7+ OpenFileGDB driver can now read rasters.
The terra package for rasters is currently bundled with > GDAL 3.7
> terra::gdal()
[1] "3.9.3"
>terra::gdal(drivers = TRUE) |> filter(name == 'OpenFileGDB')
name raster vector can vsi long.name
1 OpenFileGDB TRUE TRUE read/write TRUE ESRI FileGDB
arcgisbindings.fig_xs_profiles function into two functions, each specialized for either L1 or L2 reports. These figures were made more compact to ensure they fit on a single page.xs_compare_plot_L1 and xs_compare_plot_L2 functions to be more compact.table_xs_dimensions that returns a gtable object of hydraulic dimensions for a cross section.level_1_report_b to enable a modification of the level 1 workflow and improve cross section figures.fig_xs_profiles figure to more compactly represent individual cross section maps and their plots.map_xs function to map the channel and floodplain polygons instead of the banklines line feature class.xs_compare_plot_L1 function to support filtering of cross section station locations to either all, floodplain, or channel.xs_geometry previously calculated the maximum cross section depth and was changed to calculate the mean depth of each cross section. This change was made to better align with the hydraulic geometry literature.slope_sinuosity function to optionally smooth the flowline_points z-elevations. As the quality of LiDAR data collection continually increases, there is less need to smooth longitudinal profile z-elevations.sp package ahead of its decommissioning in favor of the R package sf. This included converting all package data, tests, checks, and documentation.rgdal to address issues with the Level 1 Reports failing. See Issue 26
terrainr get_tiles function to address ceramic display issues for background elevation imagery in reports. See Issue 20
maptiles get_tiles function to address ceramic display issues for aerial imagery in reports. See Issue 20
sx2arc_table function to write sf and sp objects to a file geodatabase table.Discovered that arcgisbinding::arc.write frequently fails writing feature classes to a geodatabase. “Wild caught” file geodatabase feature classes produced by the FluvialGeomorph-toolbox when converted to sp or sf inside fluvgeo frequently fail to create a valid feature class (i.e., missing geometry, no coordinate system) when saved to a file geodatabase using arc.write.
This behavior is described in the arcgisbinding issues listed below. These outstanding issues identify and generally discuss the problems, but provide no fix or clear workaround guidance.
The workarounds identified in these issues were implemented in the sp2arc and sf2arc functions. No combination of these suggestions were able to produce a reliable workaround.
Since no comprehensive solution is currently being provided for these issues in arc.write, we have chosen to minimize our exposure. We have decided to only write table data back to the file geodatabase.
If the arcgisbinging team addresses these issues, we may choose to go back to trusting the writing of file geodatabase feature classes using arc.write.
arcgisbinding failure to comprehensively handle coordinate reference system conversions between ESRI-GDAL-ESRI. The workaround is to require the user to read and write geodatabase (GDB) feature classes into a feature dataset. The feature dataset then enforces the coordinate reference system.arcgisbinding recommendation to handle coordinate reference system conversions between ESRI-GDAL/PROJ6-ESRI using the arc.write() shape_info method does not work, Issue 38.arcgisbinding issue 26 & 38) (https://github.com/R-ArcGIS/r-bridge/issues/38)[https://github.com/R-ArcGIS/r-bridge/issues/38].xs_metrics_report).map_xs to the Level 1 and Estimate Bankfull reports.map_xs optional to support its use in the Level 1 report and the Estimate Bankfull report before banklines are created.esri_raster2RasterLayer function to standardize raster retrieval.xs_compare_plot_L1 into the plot area to be consistent with the level 2 plots.xs_compare_plot_* to more clearly communicate the orientation of the cross section.map_xs function to accept a raster::RasterLayer so that the site DEM is only loaded once rather than being loaded each time the map_xs function is called.xs_metrics_plot_L1, xs_metrics_plot_L2, compare_xs_long_profile, xs_long_profile, xs_profile_plot, map_reach_metric, xs_metric_plot.map_reach_overview function to use aerial photos and coarse-scale elevation from Mapbox. This functionality is provided by the ceramic R package. Use of Mapbox requires an API key to access a relatively generous free tier of mapping services.map_reach_overview to use the ceramic R package to retrieve Mapbox aerial photos and coarse-scale elevation in place of the broken tmaptools::read_osm.map_xs function now handles inputs in different coordinate systems. It does this by reprojecting all inputs to match the dem.flowline_metrics function that plots Level 1 metrics.map_xs function is called in a report.xs_metrics_report.Level 2 Report.xs_metrics_plot_2 for the Level 2 Report that only displays xs metrics complete at Level 2.sf objects in addition to sp objects. sf` R package for spatial data.