[pgrouting-users] TRSP: rule vs via_path and other documentation
Max Weninger
max.weninger at gmail.com
Sat May 26 14:02:16 PDT 2012
Hi
Today I tried the first time to add turn restrictions
which contain of more then one edge in via_path
I already tried both "orders" but still the turn restriction is
not correctly evaluated from trsp. So it routes over such
a restrictions.
> target_id: 1, via_path: 5,4,3,2
So just that I understand it correctly :)
The correct order is for the following simple example
target_id=1
from_id=3
via_id=2
via_path must be
2,3
correct?
Thanks
max
On Thu, 08 Mar 2012 09:55:55 -0500
Stephen Woodbridge <woodbri at swoodbridge.com> wrote:
> Hi all,
>
> For those people that are using or trying to use the new trsp
> function, I want to highlight the difference between rule and
> via_path.
>
> I unfortunately implemented via_path to be a list of edges in the
> reverse order of rule.
>
> IF for RULE:
> target_id: 1, rule: 2,3,4,5
>
> THEN for via_path
> target_id: 1, via_path: 5,4,3,2
>
> What I do in my turn restriction tables is to have both columns and
> if you already have a rule column here is some SQL to create a
> via_path column:
>
> -- add a new column via_path
> alter table my_turns add column via_path text;
>
> -- need a helper function for the update
> CREATE OR REPLACE FUNCTION array_reverse(anyarray)
> RETURNS anyarray AS
> $BODY$
> SELECT ARRAY(
> SELECT $1[i]
> FROM generate_series(
> array_lower($1,1),
> array_upper($1,1)
> ) AS s(i)
> ORDER BY i DESC
> );
> $BODY$
> LANGUAGE sql IMMUTABLE STRICT
> COST 100;
>
> -- populate the via_path column
> update my_turns set
> via_path=array_to_string(array_reverse(string_to_array(rule,',')),',');
>
> One more common issue that is easy to get caught up in, is
> consistency of edge ids. When data is imported via shapefiles, you
> get a handy "gid" as the primary key and a lot of people use this to
> reference records. If you also load a restriction table or assemble
> it from your vendors data edges will typically be referred to be some
> edge_id that is NOT the "gid" the the shapefile loader dynamically
> adds when the data is loaded.
>
> So if you vendor data uses a column "object_id" as the edge
> identifier, then it is likely that your restriction data will be
> defined in terms of "object_id" also. Therefore when you construct
> your query it needs to be something like:
>
> select * from turn_restrict_shortest_path(
> 'select object_id as id, source, target, ...',
> 1234, -- start NODE_ID
> 5678, -- end NODE_ID
> true,
> true,
> 'select to_cost, object_id as target_id, via_path from my_turns');
>
> I would also recommend the people use the following version of trsp
> because it can handle oneway conditions and restrictions at the start
> and end of the route that can not be detected using the above.
>
> select * from turn_restrict_shortest_path(
> 'select object_id as id, source, target, ...',
> 1234, -- start EDGE_ID
> 0.5, -- position along edge
> 5678, -- end EDGE_ID
> 0.5, -- position along edge
> true,
> true,
> 'select to_cost, object_id as target_id, via_path from my_turns');
>
> Notice that this uses EDGE_IDs and not NODE_IDs as the first does.
> Also position along the edge is a float from 0.0 to 1.0 where 0.0 is
> the start of the edge and 1.0 is the end of the edge. The postGIS
> linear referencing functions will return a value suitable for this by
> dropping a point on and edge and returning the percentage along that
> edge.
>
> I hope this helps people use this new function.
>
> Thanks,
> -Steve
> _______________________________________________
> Pgrouting-users mailing list
> Pgrouting-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/pgrouting-users
More information about the Pgrouting-users
mailing list