On 5/13/2013 6:17 AM, Marco Quaggiotto wrote:
Hi everybody,
thank you very much for the work you are doing with pgrouting. I can't
wait for the upcoming 2.0.
My experience with the wrapper functions is fairly identical to Worth Lutz:
I'm also using one of the 'smart' wrapper functions that enable edge to
edge with the A* algorithm. I also chose just because the wrapper let me
choose a point and it split the nearest edge for routing. I heavily
modified the wrapper to provide all the fields I need from the edges
table, to join it with other tables, to return the edges in the correct
order and to reverse the two-way edges that were used in the opposite
direction.
I also thank you for the suggestion to look into TRSP, I've been wanting
to reevaluate the different algorithms once the GSOC get merged (if they
will), and TRSP seems like a good match, even if I don't actually use
turn restrictions. (OT: Any idea on the performance in relation to
bidirectional A* and two_q?)
This code is now available in the release branch I would be interesting to get some feedback on the relative performance of the various algorithms. I have not integrated two_q, because while it worked fine, it did not improve performance over the existing algorithms. I would be happy to have someone redo this and any other tests and report back on their findings.
When we developed trsp, I compared it to dijkstra, astar, and shooting star and for point to point routes they fell into the following performance ratings:
1. astar
2. trsp
3. dijkstra
4. shootingstar
The first three were all very close together and shootingstar was about 5x slower.
This was without using turn restrictions. But you should also know that of the cost to generate a route, over 50% of the time in most cases is related to just loading the edges and building a graph. The solving of the graph is fast in most cases.
I also learned what I know of PL/pgSQL by modifying the wrappers and I
would have had a really hard time implementing the 'edge splitting' on
my own. So I'm really grateful I found the wrappers. On the other hand
the wrapper I used wasn't even included in pgrouting, so I guess we'd be
safe to have them outside the distribution, either in the docs or as an
external download.
Daniel and I have discussed adding a contrib directory, but then we get a lot of stuff, that we don't know if it work with the current release. I think we would be more inclined to have a wiki page that links to 3rd party github projects or have a tips and tricks wiki page. The ideal situation is that we link to a page the you maintain because that de-clutters the pgrouting maintained pages and files.
On the other hand it would be great to have some solutions for the
fairly common request to have the result of the routing returned with a
'order_id' to be able to join it easily without losing order information
(see
http://lists.osgeo.org/pipermail/pgrouting-dev/2013-May/000924.html) and
to reverse the edges that have been visited in reverse (to be able to
draw them, etc.). I don't know where this fits best, if in a basic
wrapper to be customized, or in the core functions themselves.
Yeah, Daniel raised this to me also. It can be done and it is not had to do it is just a lot of work because:
1. all the C api code needs a minor change
2. all the types, and C wrappers need to be updated
3. all the docs need to be updated
4. all the test results need to be updated
So basically I have to touch 90% of the files. That said, I am still thinking about potentially doing this and abstracting our types. I turns out that we only have two major types:
seq | id1 | id2 | cost
seq | id1 | id2 | geom
This would greatly simplify things and it would be up to the algorithm to decide what is put into id1 and id2, these could be node_id or edge_id or a mix.
So I could make this change and add the seq number all at the same time. I'll see if I can work this in, but no promises.
Thank you for your feedback.
-Steve
Thanks again for you work.
Marco Quaggiotto (bikedistrict.org <http://bikedistrict.org>)
On Sun, May 12, 2013 at 3:41 PM, Stephen Woodbridge
<woodbri@swoodbridge.com <mailto:woodbri@swoodbridge.com>> wrote:
Worth,
Thanks, this is good to know and validates our thoughts on the need
for a chapter in the doc on how to write wrapper functions.
I write a lot code in plpgsql for the same reasons. It also tends to
be much faster to process stuff in the database. I write trivial
10-20 lines PHP scripts the do nothing more than:
1. take user input
2. connect to the database
3. issue a query to a stored procedure
4. format the results as XML or JSON
to then access these functions from web clients and other client
scripts and programs.
We actually will be adding some new plpgsql function as part of 2.0
for example you might find these interesting:
pgr_analyzeGraph - analyze a topology and mark dead ends
pgr_analyzeOneway - analyze a topology and look for impossible oneways
pgr_nodeNetwork - utility that will node all intersections
Those can be useful determining issues with a road network that
might cause problems when routing and nodeNetwork is a tool to
potentally solve one class of problem where the road segments are
not split at intersections.
pgr_isColumnInTable - utility to see if a column exists in a table
pgr_isColumnIndexed - utility to see if a column is indexed
And I'm sure there will be a few others as the release progresses.
Thanks,
-Steve
On 5/12/2013 7:52 AM, Worth Lutz wrote:
Steve,
Thanks for the suggestion on TSRP. I'll look at it as soon as I
finish my
current project.
I'll like to add that I learned to write PL/pgSQl from reading
the pgRouting
wrappers. I usually write in PHP but find that moving stuff to
SQL and
PL/pgSQl can simplify my application. At least once I figure out the
intricacies of the particular query.
Having the wrapper examples is helpful to someone learning. I
found that you
have to figure out how they work though because as you pointed
out there
were problems and hard-coded stuff which may cause problems. I
had a type
problem when I was figuring out my application.
Simple wrappers as examples to explain to someone how to set up
their own
wrapper are helpful.
Worth
-----Original Message-----
From: pgrouting-dev-bounces@lists.__osgeo.org
<mailto:pgrouting-dev-bounces@lists.osgeo.org>
[mailto:pgrouting-dev-bounces@__lists.osgeo.org
<mailto:pgrouting-dev-bounces@lists.osgeo.org>] On Behalf Of Stephen
Woodbridge
Sent: Saturday, May 11, 2013 10:00 PM
To: pgRouting developers mailing list
Subject: Re: [pgrouting-dev] How many people use the wrapper
functions?
Hi Worth,
Thank you for the feedback. It is really important the people
speak up
on this because our current thinking is that we will probably
take most
of the wrapper functions and dump them into a depreciated
pgrouting-legacy.sql file that will get copied to the server,
but not
installed when you CREATE EXTENSION pgrouting;
I have talked with Daniel about improving the documentation and
may be
adding a chapter that explains how to write your own wrapper
function.
Our thought is that if we had fewer functions that were better
documented that it would be easier for people to make sense of
how to
use from the beginning.
Regarding shooting star, you should just start using TRSP. In
fact it
has the ability to specify an edge and a percentage along the
edge for
the start and end locations. It also about 5 times faster than
shooting
start.
With regards to the parallel edge problem. We have this in
dijkstra and
astar and it is on my list of things to fix before the release.
I am not
sure if trsp has this or not, but if you can make a test for it
I would
be interested in the results.
Thanks,
-Steve
On 5/11/2013 7:51 PM, Worth Lutz wrote:
Hi Steve,
I used one of the wrappers, shootingstar_sp_smart I think,
but had to
modify
it due to problems. I think that it is the one which uses
shooting star
which I've since heard doesn't work.
I think that it works for us as all we are using is length
as cost to find
the length from a to b. No turn restrictions or anything.
I chose it because the wrapper let me choose a point and it
split the
nearest edge and hooked up the point to that edge at the split.
Another reason I chose it was that it worked for the
following situation:
----------\
/ \
/ \
A -----/ B
|_____________________/
Other algorithms would choose the upper edge because that is
what was
found
first as they tried to go from A to B. I was just learning
about routing
and
did not want to go figure out how to modify my network to
split the long
path where there were multiple paths between nodes.
I've been following your work lately as I will be upgrading
our situation
to
Postgres 9 and PostGIS 2 at some point. I was waiting for
you to get
things
settled out before asking which algorithm I should look at
to replace
shootingstar.
Thanks for your work on this project.
Worth Lutz
-----Original Message-----
From: pgrouting-dev-bounces@lists.__osgeo.org
<mailto:pgrouting-dev-bounces@lists.osgeo.org>
[mailto:pgrouting-dev-bounces@__lists.osgeo.org
<mailto:pgrouting-dev-bounces@lists.osgeo.org>] On Behalf Of
Stephen
Woodbridge
Sent: Saturday, May 11, 2013 4:21 PM
To: pgRouting Users List; pgRouting Dev List
Subject: [pgrouting-dev] How many people use the wrapper
functions?
Hi all,
Daniel and I have been wondering if people use the wrapper
function
versus the core functions directly? Or if you have written
your own
wrapper functions? etc.
The core functions are the low level function that directly
call the
internal library functions.
The wrapper functions are all the additional plpgsql convenience
functions that generate more complex SQL queries and then
call the core
functions.
I know that I never use the wrapper functions because I
found them to
messy and inconsistent and have hard coded values in them,
etc. So I
wrote my own high level wrapper functions that made it easy
for me to
work with the core functions.
So I thought it would be wise to ask our users what they
use? and how
they use pgRouting, so we do not may a decision like "Throw
out the
wrapper functions" without some input from the user community.
PLEASE TAKE ACTION and let us know!
Thanks,
-Steve
_________________________________________________
pgrouting-dev mailing list
pgrouting-dev@lists.osgeo.org
<mailto:pgrouting-dev@lists.osgeo.org>
http://lists.osgeo.org/__mailman/listinfo/pgrouting-dev
<http://lists.osgeo.org/mailman/listinfo/pgrouting-dev>
-----
No virus found in this message.
Checked by AVG - www.avg.com <http://www.avg.com>
Version: 2013.0.3336 / Virus Database: 3162/6317 - Release
Date: 05/11/13
_________________________________________________
pgrouting-dev mailing list
pgrouting-dev@lists.osgeo.org
<mailto:pgrouting-dev@lists.osgeo.org>
http://lists.osgeo.org/__mailman/listinfo/pgrouting-dev
<http://lists.osgeo.org/mailman/listinfo/pgrouting-dev>
_________________________________________________
pgrouting-dev mailing list
pgrouting-dev@lists.osgeo.org <mailto:pgrouting-dev@lists.osgeo.org>
http://lists.osgeo.org/__mailman/listinfo/pgrouting-dev
<http://lists.osgeo.org/mailman/listinfo/pgrouting-dev>
-----
No virus found in this message.
Checked by AVG - www.avg.com <http://www.avg.com>
Version: 2013.0.3336 / Virus Database: 3162/6317 - Release Date:
05/11/13
_________________________________________________
pgrouting-dev mailing list
pgrouting-dev@lists.osgeo.org <mailto:pgrouting-dev@lists.osgeo.org>
http://lists.osgeo.org/__mailman/listinfo/pgrouting-dev
<http://lists.osgeo.org/mailman/listinfo/pgrouting-dev>
_________________________________________________
pgrouting-dev mailing list
pgrouting-dev@lists.osgeo.org <mailto:pgrouting-dev@lists.osgeo.org>
http://lists.osgeo.org/__mailman/listinfo/pgrouting-dev
<http://lists.osgeo.org/mailman/listinfo/pgrouting-dev>
_______________________________________________
pgrouting-dev mailing list
pgrouting-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/pgrouting-dev