[pgrouting-users] Why does shooting star return the last
segment twice?
Anton Patrushev
anton at orkney.co.jp
Sun May 10 20:16:32 EDT 2009
Hi Steve,
No, it doesn't - the starting edge should always be returned. At least once :)
Are you using the latest version?
Anton.
On Sat, May 9, 2009 at 3:40 AM, Stephen Woodbridge
<woodbri at swoodbridge.com> wrote:
> Anton,
>
> Does this also explain why the starting segment is NOT returned?
> Notice below that the route request is from 11213 to 11218 and 11213 is
> missing from the results and 11218 is duplicated. Does this indicate some
> weird off by one issue?
>
> It would be nice this this were fixed in the underlying code as it is hard
> to detect and repair after the route is complete.
>
> Thanks,
> -Steve
>
>
> Anton Patrushev wrote:
>>
>> Hi Steve,
>>
>> This is known issue and it also might also happen with first edge.
>> It happens because we have two edges for both way streets. For
>> example, we start (or end) with the edge which is both way streets.
>> For Shooting* I need to create two edges for both directions with
>> unique ids (original id for one direction and original id + max id for
>> reverse direction).
>>
>> id
>> -------------------->
>> <-------------------
>> id+max_id
>>
>> So, from the function interface we always get original id for both
>> start and end. And it might happen that the particular id for one or
>> both of them is an id for the reverse direction, so it passes the edge
>> twice - forth and back.
>>
>> When result is returned, function reduces all ids higher than max_id
>> to give you original ids. Thus instead of sequence, for example, id ->
>> id+max_id you have id -> id.
>>
>> Probably it is worth to add a check to the core Shooting* function
>> which forms an output sequence (and I actually thought I did it
>> already). I need to check the source code.
>>
>> Anton.
>>
>>
>> On Fri, May 8, 2009 at 12:07 AM, Stephen Woodbridge
>> <woodbri at swoodbridge.com> wrote:
>>>
>>> Any idea why shooting_star would return the last segment twice???
>>>
>>> -Steve
>>>
>>>
>>> routing=# SELECT gid, the_geom
>>> routing-# FROM shooting_star_sp_cd(
>>> routing(# 'st',
>>> routing(# 11213,
>>> routing(# 11218,
>>> routing(# 0.0724637681159,
>>> routing(# 'cost_time',
>>> routing(# 'rcost_time',
>>> routing(# false);
>>> gid |
>>> the_geom
>>>
>>> -------+----------------------------------------------------------------------------------------------------------------------------------------------
>>> 11212 |
>>>
>>> 0105000020E610000001000000010200000003000000A83BA88CC54B5140782922711A44414058048149C74B51403832B9011F444140B8ECA0B9CF4B5140D84BD5C734444140
>>> 33942 |
>>>
>>> 0105000020E610000001000000010200000002000000F82D2A95B54B514008144FD950444140B8ECA0B9CF4B5140D84BD5C734444140
>>> 11217 |
>>>
>>> 0105000020E610000001000000010200000002000000E06B2FD39E4B514090B0354869444140F82D2A95B54B514008144FD950444140
>>> 11218 |
>>>
>>> 0105000020E610000001000000010200000002000000E8004137864B514068B4ABB383444140E06B2FD39E4B514090B0354869444140
>>> 11218 |
>>>
>>> 0105000020E610000001000000010200000002000000E8004137864B514068B4ABB383444140E06B2FD39E4B514090B0354869444140
>>> (5 rows)
>>>
>>>
>>> shooting_star_sp_cd() function is just a straight wrapper around your
>>> standard function.
>>>
>>>
>>> CREATE OR REPLACE FUNCTION shooting_star_sp_cd(
>>> geom_table varchar, sourceid int4, targetid int4, delta float8,
>>> cost_column varchar, rcost_column varchar, dir boolean)
>>> RETURNS SETOF GEOMS AS
>>> $$
>>> DECLARE
>>> path_result record;
>>> geom geoms;
>>> query text;
>>> id integer;
>>>
>>> BEGIN
>>> query := generic_sp_query('shortest_path_shooting_star', geom_table,
>>> sourceid, targetid, delta, cost_column, rcost_column, dir);
>>>
>>> id :=0;
>>> FOR path_result IN EXECUTE query
>>> LOOP
>>>
>>> geom.gid := path_result.gid;
>>> geom.the_geom := path_result.the_geom;
>>> id := id+1;
>>> geom.id := id;
>>>
>>> RETURN NEXT geom;
>>>
>>> END LOOP;
>>> RETURN;
>>> END;
>>> $$
>>> LANGUAGE 'plpgsql' VOLATILE STRICT;
>>> _______________________________________________
>>> Pgrouting-users mailing list
>>> Pgrouting-users at lists.postlbs.org
>>> http://lists.postlbs.org/mailman/listinfo/pgrouting-users
>>>
>>
>> _______________________________________________
>> Pgrouting-users mailing list
>> Pgrouting-users at lists.postlbs.org
>> http://lists.postlbs.org/mailman/listinfo/pgrouting-users
>
>
More information about the Pgrouting-users
mailing list