                 Changes in version 0.5.0 (2026-09-03)                  

Major changes

  - New function dodgr_flows_optalloc(), to allocate flows from source
    points to capacity-limited target points via an optimal
    transportation algorithm (either entropic-regularized Sinkhorn
    scaling, or an exact transportation linear program via the newly
    Suggested lpSolve package), and aggregate the result on to the
    network. From #349; thanks to @adivea for the idea.
  - New function, dodgr_paths_expand() to expand contracted back to full
    paths (#334; thanks to @RegularnaMatrica)
  - Replace digest dependency with secretbase for all internal graph
    hashing/caching

Minor changes

  - Graph hashes used for caching now also incorporate d, d_weighted,
    time, and time_weighted columns
  - Fix a few minor bugs with compound junction construction (#305,
    #316)
  - Add pairwise parameter to dodgr_times(); thanks to @leoniedu (#314)
  - Fix bug with categorical distances that neglected edges through
    compound junctions (#305)
  - Fix bug in duplicating bi-directional edges in weighted sc-class
    graphs
  - Finally add 'quietly = TRUE' to all requireNamespace calls.
  - Bundled GPL-3 license text in inst/, as required by
    bestpractices.dev
  - Fix bug in dodgr_times() with custom routing profiles (#354; thanks
    to @Mencken1991)
  - Fix CRAN error with comparison on Rcpp::CharacterVector objects
    (#357)
  - Add type_col parameter to weight_streetnet.sc method (#341; thanks
    to @RegularnaMatrica)
  - Automatically use bidirectional A* search for pairwise dodgr_dists()
    and dodgr_paths() queries on large, uncontracted graphs, roughly
    halving the search space explored per query

                      Changes in version 0.5.0.00                       

Minor changes

  - Fix igraph_to_dodgr identification of dist col (#332; thanks to
    @MarkPaulin)

                 Changes in version 0.4.3 (2025-09-01)                  

Major changes

  - All graphs are now constructed with distances calculated using the
    "cheap" measure of geodist::geodist() is maximal graph distances are
    < 100km, otherwise with "haversine". Distances (and therefore times)
    in graphs may differ from values calculated with previous versions.
    See #284; thanks to @leoniedu
  - New function added, dodgr_streetnet_geodesic(), to force edge
    distances in weight_streetnet() to use geodesic distances (more
    accurate, but slower calculations). See #284; thanks to @leoniedu
  - Documentation for all main distance, time, flows, and iso functions
    updated and extended to much better explain what functions actually
    do.

Minor changes

  - Fix bug in add_nodes_to_graph() to properly match all remaining
    graph columns; #293 thanks to @leoniedu
  - "geodist" package is now a hard dependency ("Imports" not
    "Suggests").
  - Add @leoniedu as package contributor (#282).
  - Fix updating of edge times in insert_one_edge; #278 thanks to
    @leoniedu
  - Fix add_nodes_to_graph() when graph has duplicated edges; #285
    thanks to @leoniedu
  - dodgr_to_igraph() now retains "highway" column if present; #300
    thanks to @RegularnaMatrica
  - Improve interpreting 'oneway' flags from #299
  - Fix bug in interpreting OSM turn restrictions (#365)

                 Changes in version 0.4.2 (2025-03-06)                  

Minor changes

  - Added Andrea Gilardi (@agila5) as contributor
  - weight_streetnet now raises a warning (instead of an error) in case
    the input sf object has mixed geometry types instead of only
    LINESTRING. The function filters only the geometries having
    LINESTRING type (#246, thanks to @agila5).
  - Pre-pend class structure of dodgr_streetnet objects to data.frame,
    rather than append; thanks to @agila5 (#244).
  - Fix bug in graph contraction that left duplicated edges (#236,
    thanks to @Robinlovelace).
  - Fix minor bug in de-duplication discovered via #236.
  - Update documentation for weight_streetnet; #245 thanks to @agila5
  - Update documentation for "from" and "to" parameters of dists and
    other fns; #254 thanks to @luukvdmeer
  - Fix bug in 'change_col_names'; #262 thanks to @leoniedu
  - Fix bug in 'match_pts_to_graph'; #266 thanks to @leoniedu

                 Changes in version 0.4.1 (2024-07-07)                  

Minor changes

  - dodgr_flows_aggregate() now has a pairwise parameter, to enable
    flows to be aggregated only along paths connecting each pair of from
    and to points. Thanks to @chinhqho via #229
  - Update igraph::get.edgelist -> as_edgelist (#229) to suppress
    warnings from igraph conversion functions.
  - Minor tweak to bundled src/concaveman to remove CRAN warning from
    new gcc 14.x (#235)

                 Changes in version 0.4.0 (2024-05-25)                  

Major changes:

  - Transfer repository from 'atfutures/dodgr' -> 'urbananalyst/dodgr'
  - Added new vignette on isodists and isochrone functions (#255)
  - Implemented new 'concavity' parameter for isodistance, isochrone fns
    (#223, thanks to @pasipasi123).

Minor changes:

  - Fix bug in add_nodes_to_graph with "sc" networks (#217, thanks to
    @diegoteca)
  - Fix bug in Tobler cost function for effect of slopes on walking
    times (#219, thanks to @xtimbeau).

                 Changes in version 0.2.21 (2023-06-02)                 

Major changes:

  - New pairwise parameter added to dodgr_dists_categorical (#201)
  - New function: dodgr_dists_nearest() (#203)
  - Updated weight_streetnet() function for wt_profile="bicycle" to
    return many more bicycle-relevant columns (#207).
  - Fix major bug in categorical dists routines that gave wrong values
    (#201; thanks to @xiaofanliang)
  - Fix bug in add_nodes_to_graph, #103
  - Add 2 new parameters to add_nodes_to_graph, "dist_tol" and
    "intersections_only" (#103)

Minor changes:

  - Fix bugs that issued warnings in weight_streetnet.sc if no "lanes"
    or "junction" columns present.

                       Changes in version 0.2.20                        

Major changes:

  - Fixed GitHub updates of package website (does not affect CRAN
    release).

Minor changes:

  - General documentation updates.
  - Minor change to weight_streetnet.sc to suppress dplyr left_join
    warnings
  - Minor fixes to tests.
  - Update citation file to match new CRAN requirements (#204).

                 Changes in version 0.2.19 (2023-01-13)                 

Minor changes:

  - Changes to align with new dplyr version (#198; thanks to
    @DavisVaughan)
  - Update broken URL in times vignette.

                 Changes in version 0.2.18 (2022-12-07)                 

Minor changes:

  - Minor bug fix in matching to/from points for routing.
  - Minor bug fix with caching contracted graphs
  - Minor bug fix matching OSM max speed values for motorcar routing.
  - Minor bug fix implements additional check in dodgr_vertices to
    re-calculate if cached vertices don't match current graph.
  - Allow contra-flow when weighting bicycle networks; otherwise
    networks can end up unroutable.
  - Bug fix in remove_duplicated_edges() for SC-class networks.

                 Changes in version 0.2.17 (2022-11-04)                 

Minor changes:

  - Added nocache parameter to dodgr_contract_graph, to enable forced
    re-calculation of contracted graphs (#194)
  - Fix bug in graph contraction which prevented in picking up
    additional data columns (#194; thanks to @sriramab)
  - Fix bug in caching mechanism which stopped graph conversion routines
    (like dodgr_to_sf) from carrying across extra columns (#194; thanks
    to @sriramab)
  - Fix bug in distances when from or to default to all vertices
  - Fix weighting networks for motorcars to adhere to OSM "maxspeed"
    values where those are given, rather than profile values (#193)

                 Changes in version 0.2.16 (2022-09-19)                 

Major changes:

  - Additional "distances" parameter added to match_pts_to_graph() to
    return geodesic distance to point of edge intersection.
  - Fixed major bug in centrality calculations on graphs with duplicated
    edges (#186).
  - Added new vignette with instructions on parallel thread control
  - New function, dodgr_deduplicate_graph() to reduce duplicated edges
    and insert minimal distances/times (#187)
  - weight_streetnet function now returns standard graphs even when
    turn_penalty = TRUE; compound junctions are calculated within each
    function (#190).

Minor changes:

  - Walking cost function in networks with elevation improved (#124)
  - Fixed weight_streetnet.sc to respect "bicycle" and "foot" tags for
    those weighting profiles (#189)

                 Changes in version 0.2.15 (2022-08-18)                 

Breaking changes:

  - match_pts_to_graph() renamed to match_pts_to_verts()
  - New match_pts_to_graph() function matches to graph edges, using
    nearest perpendicular intersection (issue #103)

Major changes:

  - dodgr_paths pairwise calculation shifted to C++, thanks to @dcooley

Minor changes:

  - Fix dodgr_flowmap to work on both sf and sc streetnets.
  - Reformat code using
    https://github.com/ropensci-review-tools/spaceout
  - Minor bug fix matching from/to args of dodgr_flows_aggregate()
  - Bug fix when submitting contracted graphs to flow fns
  - Change default value in all dodgr_flows_ functions from contract =
    FALSE to contract = TRUE

                 Changes in version 0.2.14 (2022-06-08)                 

Minor changes:

  - Main parameter of weight_railway function renamed sf_lines -> x (for
    consistency with all other weight_ functions).
  - Default distances for all functions changed to geodesic distances
    calculated via geodist.

                 Changes in version 0.2.13 (2022-04-01)                 

Major changes:

  - New save_dodgr_streetnet and load_dodgr_streetnet functions; thanks
    to idea from @FlxPo
  - Edge maps used to uncontract graphs now store edges in original
    order, enabling complex edge sequences such as polygons to be
    reconstructed (#173).
  - Add "Imports: fs" to ensure cache paths work on all (ie windows)
    machines (#163)
  - Implement directional travel in roundabouts on weight_streetnet.sc,
    thanks to @deanmarchiori (#175).

Minor changes:

  - Add example code for dodgr_dists_categorical
  - Slightly extend categorical routing vignette
  - fix caching bug in dodgr_centrality (#138), thanks to @mem48
  - Fix bug with bbox in dodgr_streetnet, thanks to @LeshunXu (#174)
  - Fix bug in src/graph-contract.cpp that led to CRAN warning (| -> ||)

                 Changes in version 0.2.12 (2021-10-18)                 

Minor changes:

  - Bug fix for dists_categorical(proportions_only = TRUE) to ensure all
    edge types are aggregated (final type was previously not
    aggregated).

                 Changes in version 0.2.11 (2021-10-07)                 

Major changes:

  - New dodgr_dists_categorical function + accompanying vignette

                 Changes in version 0.2.9 (2021-08-07)                  

Major changes:

  - weight_streetnet now includes turn restrictions when input data are
    extracted with dodgr_streetnet_sc (#136 thanks to @edzer)
  - Turn restrictions also added as additional column of
    weighting_profiles$penalties
  - dodgr_streetnet_sc() now extracts many additional features useful
    for controlling access restrictions (see #159)
  - dodgr_centrality has new vert_wts parameter to weight centrality by
    user-specified weights (#162)

Minor changes:

  - Bug fix when submitting contracted graphs to dodgr_to_sf (#155
    thanks to @agila5)
  - Fix (internal) process_bbox function for vector inputs (#156 thanks
    to @agila5@)

                 Changes in version 0.2.8 (2021-01-30)                  

Minor changes:

  - Bug fix (#142) in dodgr_flows_disperse() thanks for @romainFr
  - Fix keep_cols param in weight_streetnet(); #140 thanks to @agila5
  - Return component vector as integer not numeric

                 Changes in version 0.2.7 (2020-05-05)                  

Minor changes:

  - UBSAN Bug fix

                 Changes in version 0.2.6 (2020-04-17)                  

Major changes:

  - Added new dodgr_centrality function, and associated helper
    functions.
  - Added new dodgr_flows_si function
  - Added new parameter norm_sums to dodgr_flows_aggregate
  - merge_directed_flows renamed to merge_directed_graph, with added
    option of specifying columns to merge.
  - Added new pairwise parameter to dodgr_distances; see issue #127
  - Added new function dodgr_insert_vertex to add new vertices to graph;
    see #40
  - Removed "radix" heap option

Minor changes:

  - switch off examples that caused previous CRAN failures
  - fix bug in dodgr_dists when number of from points >> number of to
    points
  - fix bug in weight_streetnet.sc that prevented keep_cols from working

                 Changes in version 0.2.5 (2019-10-10)                  

  - bug fixes from previous versions

                 Changes in version 0.2.4 (2019-10-02)                  

Major changes:

  - Remove benchmark vignette

Minor changes:

  - bug fixes in dodgr_paths, thanks to @agila5

                 Changes in version 0.2.1 (2019-09-16)                  

Major changes:

  - Add dodgr_isochrones, dodgr_isodistances, and dodgr_isoverts
    functions
  - Considerable speed-ups for dodgr_flows_aggregate and
    dodgr_flows_disperse

Minor changes:

  - dodgr_flows_disperse allows k to be a vector, with different
    coefficients for each from point.
  - Add "highway:pedestrian" to weighting profiles
  - weight_streetnet for sc objects automatically adds component column
  - bug fix in weight_streetnet.sc(..., wt_profile = 1)
  - bug fix in dodgr_full_cycles for SC class objects

                 Changes in version 0.2.0 (2019-06-05)                  

Major changes:

  - Lots of intermediate processes now executed and cached as background
    processes (via callr package).
  - new dodgr_cache_off function added to suppress primary caching, for
    cases where immediate usage is critical.
  - dodgr_contract_graph returns the contracted graph only, instead of
    former version which return list of graph and edge_map (the edge_map
    is cached and re-loaded when needed for graph uncontraction).

Minor changes:

  - 'turn_angle' parameter of weight_streetnet renamed to turn_penalty
  - Test coverage now complete (100%)

  - Update internal hampi data to remove factor columns

  - Fix some bugs in max speed calculations for weight_streetnet

  - Fix bug with polygonal bbox in dodgr_streetnet()

                 Changes in version 0.1.4 (2019-05-11)                  

Major changes:

  - New vignette on street networks and time-based routing

  - weight_streetnet function now returns edge times for all Open Street
    Map networks extracted with the osmdata package.
  - weight_streetnet now accepts SC format data from
    osmdata::osmdata_sc()
  - New dodgr_times function to calculate journey times, including
    differential speeds and penalties for intersections and traffic
    lights.
  - dodgr::weighting_profiles data changed from single data.frame to
    list with additional parameters determining speeds and time
    penalties for dodgr_times function; former data.frame is now
    dodgr::weighting_profiles$weighting_profiles.
  - New function write_dodgr_wt_profile writes full profile to local
    .json file for editing and subsequent use via
    weight_streetnet(wt_profile_file=<local_file_name.json>).
  - dodgr_dists(), dodgr_paths(), and dodgr_flows() can no longer be
    used to automatically download street networks, thus former
    parameters wt_profile and expand have been removed; networks must be
    explicitly downloaded with dodgr_streetnet().

Minor changes:

  - Bug fix with dodgr_to_igraph to create proper weighted igraph
  - Add "footway" to weighting_profiles

                 Changes in version 0.1.3 (2019-03-20)                  

Major changes:

  - New functions dodgr_fundamental_cycles and dodgr_full_cycles
  - New function dodgr_sflines_to_poly to convert sf collections of
    LINESTRING object into corresponding enclosed POLYGON objects.
  - New function dodgr_to_sf creates full sf objects, extending
    dodgr_to_sfc
  - New function igraph_to_dodgr converts igraph objects into dodgr
    format
  - New function dodgr_uncontract_graph to convert from contracted back
    into original, uncontracted from, including any additional data
    appended on to contracted graph.

Minor changes:

  - Bug fix with vignette caused by updates to tinytex rendering of svg
  - Bug fix for dodgr_dists (heap = "set") with integer distances

                 Changes in version 0.1.2 (2019-01-09)                  

Major changes:

  - New function dodgr_to_igraph
  - weight_streetnet is now a method, with implementations for objects
    of classes .sf and .sc.
  - New function weight_railway to weight a network for railway routing.
  - dodgr_dists implements Dijkstra paths with std::set sorting through
    new option dodgr_dists(..., heap = "set") (It's slower than others,
    but good for sake of completeness).

Minor changes:

  - Various modifications that should result in notable speed gains
  - dodgr_streetnet now accepts polygonal bbox argument, and uses
    osmdata::trim_osmdata to trim resultant network to within that
    polygon (issue #50).
  - Extended examples for weight_streetnet and dodgr_flows_aggregateto
    include a non-OSM example fromstplanr::routes_fast` (issue #45).

                 Changes in version 0.1.1 (2018-10-24)                  

Major changes:

  - Crucial fix of previous typo that made all dodgr_dist calculations
    wrong (Earth's radius is 6371, not 3671!) - thanks to @chrijo
  - weight_streetnet function now accepts data.frame objects defining
    wt_profile, enabling modification and direct re-submission of
    dodgr::weighting_profiles
  - weighting_profiles$value modified to 0-1 scores rather than previous
    percentage values.
  - weight_streetnet flags any highway types not present in nominated or
    submitted weighting profile.
  - dodgr_paths now has additional pairwise parameter to enable paths
    only between matched pairs of from and to points (so returning n
    paths rather than n^2), thanks to @mem48.
  - dodgr_to_sf deprecated to dodgr_to_sfc (#43)

Minor changes:

  - Added Malcolm Morgan (@mem48; bug-finder extraordinare) as
    contributor
  - Bug fix with dodgr_paths and simple data.frames, thanks to James
    Smith.
  - Bug fix of former improper handling of one-way edges, thanks to
    @chrijo.
  - match_pts_to_graph has additional connected parameter to allow
    points to be matched only to largest connected component.

                        Changes in version 0.1.0                        

Major changes:

  - New function dodgr_flowmap plots maps of flows. Currently only
    writes .png files, because large networks can not be effectively
    plotted on graphic devices.
  - dodgr_flows has option to routes flows from a set of source origins
    to all points in a network, attenuated by distance from those
    origins.
  - dodgr_to_sf converts a spatially-explicit dodgr graph into Simple
    Features (sf) format.

Minor changes:

  - match_pts_to_graph now accepts Simple Features (sf) collections of
    sfc_POINT objects to be matched.

                 Changes in version 0.0.3 (2017-10-30)                  

Tidy C++ code that flagged errors on CRAN solaris machine. Nothing else.

                 Changes in version 0.0.2 (2017-10-27)                  

Major changes:

  - New function, dodgr_paths, for returning explicit shortest path
    routes.
  - New function, dodgr_flows, for aggregting flows across a network
    from multiple origin and destination points.
  - New function, merge_directed_flows, to reduce aggregated directional
    flows to non-directional equivalent values useful for visualisation.

Minor changes:

  - weight_streetnet now accepts arbitrary sf-formatted networks via
    specification of custom weighting profiles, along with highway type
    and ID columns in data.frame.
  - Distance matrices from dodgr_dists inherit the names of routing
    points (from and to parameters).

                 Changes in version 0.0.1 (2017-09-28)                  

Initial CRAN release.
