Hello all.
I am working on what is going to be pgRouting v4.0 due at the end of 2023
Many ideas have come out from my experiments
From the internals simplifying (C/C++) code.
For usage:
pgr_TRSP
Currently it is a mess internally (C/C++) and externally.
Lets talk externally
Currently the documentation in one page has the following signatures:
pgr_trsp(sql text, source integer, target integer, directed boolean, has_rcost boolean [,restrict_sql text]);
RETURNS SETOF (seq, id1, id2, cost)
pgr_trsp(sql text, source_edge integer, source_pos float8, target_edge integer, target_pos float8,
directed boolean, has_rcost boolean [,restrict_sql text]);
RETURNS SETOF (seq, id1, id2, cost)
pgr_trspViaVertices(sql text, vids integer, directed boolean, has_rcost boolean [, turn_restrict_sql text]);
RETURNS SETOF (seq, id1, id2, id3, cost)
pgr_trspViaEdges(sql text, eids integer, pcts float8, directed boolean, has_rcost boolean [, turn_restrict_sql text]);
RETURNS SETOF (seq, id1, id2, id3, cost)
Change those signatures
FROM:
pgr_trsp(sql text, source integer, target integer, directed boolean, has_rcost boolean [,restrict_sql text]);
RETURNS SETOF (seq, id1, id2, cost)
TO
driving_side CHAR DEFAULT ‘b’, – ‘r’/‘l’/‘b’/NULL
details BOOLEAN DEFAULT false,
pgr_trsp(Edges SQL, Restrictions sql, From vid, To vid [,directed]) – one to one
pgr_trsp(Edges SQL, Restrictions sql, From vid, To vids [directed]) – one to many
pgr_trsp(Edges SQL, Restrictions sql, From vids, To vid [,directed]) – many to one
pgr_trsp(Edges SQL, Restrictions sql, From vids, To vids [,directed]) – many to many
pgr_trsp(Edges SQL, Restrictions sql, Combinations SQL [,directed]) – combinations
RETURNS SET OF (seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost)
Note that regardless of the call all columns are returned
FROM:
pgr_trsp(sql text, source_edge integer, source_pos float8, target_edge integer, target_pos float8,
directed boolean, has_rcost boolean [,restrict_sql text]);
RETURNS SETOF (seq, id1, id2, cost)
TO
pgr_trsp_withPoints(Edges SQL, Restrictions sql, Points SQL, From vid, To vid [,directed][,driving_side][,details]) – one to one
pgr_trsp_withPoints(Edges SQL, Restrictions sql, Points SQL, >From vid, To vids [,directed][,driving_side][,details]) – one to many
pgr_trsp_withPoints(Edges SQL, Restrictions sql, Points SQL, From vids, To vid [,directed][,driving_side][,details]) – many to one
pgr_trsp_withPoints(Edges SQL, Restrictions sql, Points SQL, From vids, To vids [,directed][,driving_side][,details]) – many to many
pgr_trsp_withPoints(Edges SQL, Restrictions sql, Points SQL, Combinations SQL [,directed][,driving_side][,details]) – combinations
RETURNS SET OF (seq, path_seq, start_pid, end_pid, node, edge, cost, agg_cost)
Note: that regardless of the call all columns are returned
FROM:
pgr_trspViaVertices(sql text, vids integer, directed boolean, has_rcost boolean [, turn_restrict_sql text]);
RETURNS SETOF (seq, id1, id2, id3, cost)
TO
pgr_trspVia(Edges SQL, Restrictions sql, Via Array, [,directed][,strict][,allow_u_turn])
RETURNS SET OF (seq, path_id, path_seq, start_pid, end_pid, node, edge, cost, agg_cost)
FROM:
pgr_trspViaEdges(sql text, eids integer, pcts float8, directed boolean, has_rcost boolean [, turn_restrict_sql text]);
RETURNS SETOF (seq, id1, id2, id3, cost)
TO
pgr_trsp_withPointsVia(Edges SQL, Restrictions sql, Points SQL, Via Array [,directed][,driving_side][,details][,strict][,allow_u_turn])
RETURNS SET OF (seq, path_id, path_seq, start_pid, end_pid, node, edge, cost, agg_cost)
Note that regardless of the call all columns are returned
About Via functions
pgr_dijkstraVia(Edges SQL, Via Array [,directed][,driving_side][,details][,strict][,allow_u_turn])
pgr_withPointsVia(Edges SQL, Points SQL, Via Array [,directed][,driving_side][,details][,strict][,allow_u_turn])
pgr_trsp_withPointsVia(Edges SQL, Restrictions sql, Points SQL, Via Array [,directed][,driving_side][,details][,strict][,allow_u_turn])
RETURNS SET OF (seq, path_id, path_seq, start_pid, end_pid, node, edge, cost, agg_cost)
Note: that regardless of the call the same columns are returned
Note: currently only pgr_dijkstraVia exist
About unifying return columns
For example on dijkstra
pgr_dijkstra(Edges SQL, start_vid, end_vid [, directed])
pgr_dijkstra(Edges SQL, start_vid, end_vids [, directed])
pgr_dijkstra(Edges SQL, start_vids, end_vid [, directed])
pgr_dijkstra(Edges SQL, start_vids, end_vids [, directed])
pgr_dijkstra(Edges SQL, Combinations SQL [, directed])
RETURNS SET OF (seq, path_seq [, start_vid] [, end_vid], node, edge, cost, agg_cost)
Depending on the call, are the columns returned
Change to
RETURNS SET OF (seq, path_seq , start_vid, end_vid, node, edge, cost, agg_cost)
That way regardless of the call the same columns are returned
That unification of many other official, proposed and experimental functions like pgr_astar, pgr_bdAstar etc.
Having for the same (family) calls the same returned columns, makes it easier to remember, aka less complicated API
About naming because of withPoints.
Currently there are the following proposed functions and they all work with dijkstra
- pgr_withPoints
- pgr_withPointsCost
- pgr_withPointsCostMatrix
- pgr_withPointsKSP
- pgr_withPointsDD
- pgr_withPointsVia – to be done
Thinking about trsp (for when they are developed):
- pgr_trsp_withPoints
- pgr_trsp_withPointsCost
- pgr_trsp_withPointsCostMatrix
- pgr_trsp_withPointsKSP
- pgr_trsp_withPointsDD
- pgr_trsp_withPointsVia
Thinking about aStar (for when they are developed):
- pgr_aStar_withPoints
- pgr_aStar_withPointsCost
- pgr_aStar_withPointsCostMatrix
- pgr_aStar_withPointsKSP
- pgr_aStar_withPointsDD
- pgr_aStar_withPointsVia
Having this convention when with points are involved, makes it easier to remember, aka less complicated API
I would like your thoughts
Regards
Vicky
–
Georepublic UG (haftungsbeschränkt)
Salzmannstraße 44,
81739 München, Germany
Vicky Vergara
Operations Research
eMail: vicky@[georepublic.de](http://georepublic.de)
Web: [https://georepublic.info](https://georepublic.info)
Tel: +49 (089) 4161 7698-1
Fax: +49 (089) 4161 7698-9
Commercial register: Amtsgericht München, HRB 181428
CEO: Daniel Kastl