[pgrouting-users] Re: Pgrouting-users Digest, Vol 40, Issue 2

Stephen Woodbridge woodbri at swoodbridge.com
Mon Jan 9 20:55:49 EST 2012


On 1/9/2012 8:26 PM, Steve Horn wrote:
>
>      > Hello all!
>      >
>      > I am creating drive time radii (or isochrones) by allowing the
>     user to
>      > click on a map surface and entering a number of minutes.
>      >
>      > Using the driving_distance function in pgrouting I am able to get
>     very
>      > close to a good solution, but it is somewhat limited in that you can
>      > only route from node to node (vertex to vertex). In order to
>     improve the
>      > accuracy, I thought I would try to insert a new node/vertex as
>     close as
>      > possible to the coordinates that my user clicked. That way my
>     start node
>      > would always be as accurate as it can be.
>      >
>      > Has anyone done this? I'm not sure I understand the assign_vertex_id
>      > function and how the graph is constructed well enough to come up
>     with a
>      > solution myself.
>      >
>      > Any help or direction is appreciated!
>
>     What you would want to do in this case is:
>
>     1. take you position and find the nearest edge to that location (EID,
>     ESOURCE, ETARGET, ECOST, EREVERSE_COST)
>     2. compute the ratio of distance along that edge (RATIO)
>     3. then add a create a temporary node at that location (NEWNODE)

Right as Daniel noted, so the NEWNODE is just a number that would be 
MAX_NODE_ID+1 If you have the vertices_tmp then you can get this number with

select max(id)+1 as newnode from vertices_tmp;

>     4. then add edges from the temp node to each of the end points to that
>     edge, paying attention to oneway-ness of that edge and assigning costs
>     as a ratio of the original cost.
>
>     So select edges for your query might look like and you would pass
>     NEWNODE as the starting node.
>
>     select gid, source, target, cost, reverse_cost from roads where the_geom && <bbox>
>     union all
>     select maxgid+1, ESOURCE, NEWNODE, ECOST*RATIO, EREVERSE_COST*(1-RATIO)
>     union all
>     select maxgid+2, NEWNODE, ETARGET, ECOST*(1-RATIO), EREVERSE_COST*RATIO

This query is providing all the edges in the "roads" table and adding 
two additional edges for the split nearest edge with NEWNODE at you 
location.

-Steve

>     -Steve
>
>
> I get lost on your 3rd step: "Create a temporary node"
> How do you insert just a node? The "roads" table is made up of edges, so
> wouldn't I need to insert an edge?
>
>
> _______________________________________________
> 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