[pgrouting-dev] Returning the correct edge id from boost_dijkstra_* functions

Stephen Woodbridge woodbri at swoodbridge.com
Fri Jul 1 08:41:21 EDT 2011


On 7/1/2011 1:42 AM, Anton Patrushev wrote:
> Hi Steve,
>
> Looks great to me!
>
> Actually it looks like we don't need path_element.edge_id anymore or
> we can replace it with your path_element.parent_id:
>
> p = vertex(predecessors[*vi], graph);
> pe.edge_id = graph[p].id;
>
> Actually edge_id doesn't have much sense, we added it to unify outputs.

I am finding the correct edge_id to be useful even though we have a way 
to retrieve it. We can obviously look it up after the fact from the node 
ids but that can be expensive if you have a look to look up.

For example if you wanted all the out bound edges of a path from a give 
start node you can get it by collecting the edge ids for that path and 
then issuing a query like:

select the_geom from streets
  where gid in (<list of collected edge_ids>);

This is not ordered correctly and segments are not flipped for direction 
of travel, but you get the idea.

-Steve

> Great job! Thank you!
>
> Anton.
>
> On 7/1/11, Daniel Kastl<daniel at georepublic.de>  wrote:
>> Hi Steve,
>>
>> Thank you! But I also rely on Anton's skills here.
>> Not to get lost in the mailing list archive, I copied the code and links to
>> this Wiki page:
>> https://github.com/pgRouting/pgrouting/wiki/Revision-of-return-results
>>
>> It's part of the 2.0 plan. If you have more ideas or request, feel free to
>> add them there:
>> https://github.com/pgRouting/pgrouting/wiki/2.0-Development-Plan
>>
>> Daniel
>>
>>
>> 2011/7/1 Stephen Woodbridge<woodbri at swoodbridge.com>
>>
>>> Anton, Daniel,
>>>
>>> I have been fighting with the dijkstra results because we do not return
>>> things like the parent id of a path and we definitely do not return the
>>> correct edge ids.
>>>
>>> So with some help from the boost users list and banging my head against
>>> the
>>> C++ wall, being only a C programmer :), I have some code that works for
>>> me.
>>>
>>> http://pastebin.com/qa1caiXs
>>>
>>> In dijkstra.h I also have defined the following structs:
>>>
>>> typedef struct edge
>>> {
>>>     int id;
>>>     int source;
>>>     int target;
>>>     float8 cost;
>>>     float8 rcost;
>>> } edge_t;
>>>
>>> typedef struct path_element
>>> {
>>>     int vertex_id;
>>>     int parent_id;
>>>     int edge_id;
>>>     float8 cost;
>>> } path_element_t;
>>>
>>> You should be able to copy the appropriate parts of this file and update
>>> the driving distance code and the low level dijkstra code to return more
>>> correct and useful results. I'm using this code outside of the postgresql
>>> server, but it should not require any significant changes. Since I'm not
>>> developing code in the database, I will leave that as an exercise for you
>>> guys to work out and test.
>>>
>>> Thanks,
>>>   -Steve
>>> ______________________________**_________________
>>> pgrouting-dev mailing list
>>> pgrouting-dev at lists.osgeo.org
>>> http://lists.osgeo.org/**mailman/listinfo/pgrouting-dev<http://lists.osgeo.org/mailman/listinfo/pgrouting-dev>
>>>
>>
>>
>>
>> --
>> Georepublic UG&  Georepublic Japan
>> eMail: daniel.kastl at georepublic.de
>> Web: http://georepublic.de
>>
>
>



More information about the pgrouting-dev mailing list