Spatially-aware pathfinding wrappers around yog_ex algorithms.
Injects geographic heuristics and distance-based edge weight functions into the core graph pathfinders.
Summary
Functions
A* shortest path using haversine distance as the heuristic.
Functions
@spec a_star( Meridian.Graph.t(), keyword() ) :: {:ok, map()} | {:error, term()}
A* shortest path using haversine distance as the heuristic.
Options
:from— start node id (required):to— goal node id (required):weight_fn— function(graph, from, to) -> numberfor edge cost. Defaults toMeridian.CRS.distance/3if nodes have point geometries.
Examples
iex> g = Meridian.Graph.new()
iex> g = g
...> |> Meridian.Graph.add_node(:a, %{geometry: %Geo.Point{coordinates: {0.0, 0.0}}})
...> |> Meridian.Graph.add_node(:b, %{geometry: %Geo.Point{coordinates: {0.0, 1.0}}})
...> |> Meridian.Graph.add_edge_ensure(:a, :b, 100.0)
iex> {:ok, path} = Meridian.Pathfinding.a_star(g, from: :a, to: :b)
iex> path.nodes
[:a, :b]
iex> g = Meridian.Graph.new()
iex> Meridian.Pathfinding.a_star(g, from: :missing, to: :also_missing)
** (ArgumentError) start node :missing does not exist in graph