Releases: gmpassos/geo_route_finder
Releases · gmpassos/geo_route_finder
Release list
v1.0.3
- Routing:
GraphRouteFinder:- Added
profilefield to select transport mode for routing. - Updated graph loading and existence checks to use
(graphId, profile)keys.
- Added
AStarRouter,DijkstraRouter,ContractionHierarchyRouter:- Added optional
profileparameter to constructors.
- Added optional
- OSM Conversion:
OsmConverter:- Updated
convertmethod to store graphs scoped byprofile.
- Updated
- Storage:
GeoStorageinterface:- Added
profileparameter to all methods to key graphs by(id, profile).
- Added
CompiledGraphStorageinterface:- Added
profileparameter tosaveCompiledandloadCompiled.
- Added
LocalFileStorage:- Updated file naming to include
profile(e.g.<id>_<profile>.graph). - Updated all storage methods to accept and use
profile. - Added checksum verification and metadata recording per profile.
- Updated file naming to include
- Example:
geo_route_finder_example.dart:- Simplified graph id usage to exclude profile suffix.
- Updated router instantiation to pass
profileexplicitly.
- Model:
GraphMeta:- Added
profileNamefield to record transport mode.
- Added
- Tests:
serialization_test.dart:- Updated tests to verify profile-specific storage keys and independent graphs per profile.
support.dart:- Updated
MemoryStorageto key graphs by(id, profile).
- Updated
- Misc:
- Added
profileparameter propagation throughout routing and storage layers to support multiple transport modes stored under the same graph id.
- Added
v1.0.2
-
Multi-profile routing (car, motorcycle, bicycle) and toll avoidance.
-
lib/src/osm/vehicle_profile.dart(new):- Added
VehicleProfile, controlling how source tags (routable highway classes,
access, speed, one-way) are interpreted per transport mode. - Bundled
VehicleProfile.car,.motorcycle, and.bicycle. Bicycles route over
cycleways/paths, exclude motorways/trunks, ignore motor-vehicle one-way rules
(but honoroneway:bicycle), and travel at a flat, capped speed.
- Added
-
lib/src/osm/osm_converter.dart:OsmConverternow takes aprofile(defaultVehicleProfile.car); routability,
access, speed and one-way interpretation are driven by it. Build one graph per
profile and store each under a profile-scoped id.- Parses the
tolltag and flags toll segments on emitted edges.
-
lib/src/routing/route_finder.dart:- Added
avoidTollstofindRoute/findRoutes. Toll roads are heavily (but
finitely) penalized via the uniform penalty-Dijkstra, so toll-free routes are
preferred while a tolled route is still returned when unavoidable.
- Added
-
lib/src/model/geo_route.dart:GeoRoutenow reportstollCount(toll sections crossed) and ahasTolls
getter, so thefindRoutesresult can be filtered into toll-free vs tolled
routes.GeoRouteimplementsComparable: sorting a route list orders it by fewest
tolls first, then shortest distance (not-found routes sort last).
-
Model/graph/serialization:
GeoEdge.tolls(anintcount, with ahasTollgetter),RoutingGraph.adjToll
(+isToll/tollsOf), propagated throughGraphBuilderandGraphCompressor
(a merged chain sums the toll counts of its collapsed segments).- Breaking on-disk change: graph format bumped to v2 to store
adjToll; graphs
written by earlier versions must be rebuilt.
v1.0.1
-
Added
bump.shscript to rundart_bumpwith API key and arguments. -
example/geo_route_finder_example.dart:- Added comprehensive example supporting two flows:
- Synthetic 10x10 grid routing demo with Dijkstra, A*, and Contraction Hierarchies.
- Real OpenStreetMap routing demo triggered by command-line arguments.
- Added detailed printing of route distances, durations, and expanded nodes.
- Added
buildGridGraphhelper to create synthetic grid graph. - Improved example structure and output formatting.
- Added comprehensive example supporting two flows:
-
lib/src/graph/graph_builder.dart:- Rewrote
GraphBuilderto use flat primitive arrays and stable sorting for deterministic CSR graph building. - Added efficient geometry resolution and edge permutation sorting by source, target, and distance.
- Removed object allocations for edges and coordinates during build.
- Rewrote
-
lib/src/osm/osm_downloader.dart:- Added deterministic, collision-free file naming for downloaded OSM regions based on region and source id.
- Improved download caching and file naming logic.
-
lib/src/routing/astar_router.dart:- Added tracking and reporting of expanded nodes count during A* search.
-
lib/src/routing/contraction_hierarchy.dart:- Added tracking and reporting of expanded nodes count during bidirectional CH search.
-
lib/src/routing/dijkstra_router.dart:- Added tracking and reporting of expanded nodes count during Dijkstra search.
-
lib/src/routing/route_finder.dart:- Added
findRoutesmethod to compute multiple alternative routes with parameters:maxRoutes,maxExtraRatio,maxExtraMeters,maxSharing.
- Implemented iterative penalty-based alternative route search using Dijkstra on penalized edge weights.
- Added
lastExpandedNodesproperty reporting number of expanded vertices in last search. - Added internal
_penalizedSearchmethod for alternative route discovery. - Added route building from raw paths with geometry stitching.
- Added graph compression on generic load path to reduce degree-2 chains.
- Added
-
lib/src/spatial/kd_tree.dart:- Precompute projected vertex coordinates in meters for faster KD-tree build and queries.
- Use cached projected coordinates in comparisons and distance calculations.
-
test/osm_route_finder_test.dart:- Updated test step numbering to reflect added load step.
- Added output of nodes analyzed during routing.
- Improved test output formatting.
-
test/routing_test.dart:- Added comprehensive tests exercising all three router algorithms (Dijkstra, A*, CH) across generic and compiled storage backends.
- Verified identical optimal distances and durations across algorithms and backends.
- Tested route geometry continuity and correctness.
- Tested reporting of expanded nodes count.
- Added tests for alternative routes with parameters and distinctness.
- Tested unreachable targets and one-way restrictions across all algorithms.
- Verified graph compression behavior and equivalence of compressed vs uncompressed compiled graphs.
- Verified equivalence of generic and compiled load paths routing between surviving vertices.
v1.0.0
1.0.0
- Pluggable OSM download-source architecture:
- New
OsmDownloadSourceabstraction (region identifier -> downloadable URL)
with built-inGeofabrikSource,OsmFranceSource,BBBikeSourceand
PlanetSourceproviders. OsmDownloadSourceRegistryselects the best provider by priority, supports
custom registration and enable/disable, automatic fallback, and optional
mirror benchmarking (HEAD latency + throughput, cached) viaMirrorBenchmark.OsmDownloaderis now fully source-agnostic: it resolves regions through an
injectedOsmSourceResolver(defaults to a registry of all built-ins) and
falls back across candidates on failure. The Geofabrik-specificbaseUrl
constructor argument has been removed in favor of pluggable sources.
- New
0.0.1
- Initial version.