[pgrouting-users] PG Routing Question

Stephen Woodbridge woodbri at swoodbridge.com
Sat Sep 2 06:38:59 PDT 2017


Hi Andrew,

This is a really good question it gets asked every so often. So I will 
cc the pgRouting-users list with my response.

The routing algorithm computes the cost to get to each node following 
the road network. If the cost is time based then it takes the speed of 
the road segments into account. You can't do meaningful interpolation 
between points without taking into account the edges. Think about a path 
following the letter "S" or "C",  interpolation between the end points 
does not take into account the path of the letter or in our case the 
roads. Also if you pick two arbitrary nodes they may or may not be 
connected directly. So interpolation is not going to make sense.

One option might be to examine each edge, and get the values of the 
their respective nodes, then interpolate along the edge and add the 
interpolated points into a temporary table, then you can union the 
original points plus the interpolated points into pgr_pointsAsPolygon()

Another solution that might work for you if you need better resolution 
but this would be the same as above and require more work, would be to 
take every edge and break it into 4 equal edges and replace the original 
edge so that instead of having one edge and 2 node, you now have 4 edges 
and 5 nodes. Then you can rebuild the topology and your driving distance 
will have a high density of node.

I hope this helps,
   -Steve

On 9/1/2017 10:52 AM, Andrew Wooley wrote:
> Stephen
>
> I attended your workshop at the FOSS4G Boston conference. I really 
> enjoyed it and learned a lot. I have been working on some projects 
> using it.
>
> I came across an issue that I was hoping that you could help me. I am 
> using the following example function from Regina's workshop:
>
> SELECT
>     1 As id,
>     ST_SetSRID(
>         pgr_pointsAsPolygon(
>             $$
>                 SELECT D.seq AS id, ST_X(V.the_geom) AS x, 
> ST_Y(V.the_geom) As y
>                 FROM
>                     pgr_drivingDistance(
>                         $sql$
>                             SELECT gid As id, source, target, length_m 
> AS cost, length_m AS reverse_cost FROM osm_ways
>                         $sql$,
>                         (SELECT id FROM osm_ways_vertices_pgr N ORDER 
> BY N.the_geom <-> ST_SetSRID(ST_Point(-111.69429,40.28984),4326) LIMIT 
> 1),
>                         500,
>                         TRUE
>                     ) D INNER JOIN
>                     osm_ways_vertices_pgr V ON D.node = V.id
>             $$
>         ),
>     4326
>     ) As the_geom
> ;
>
> It is selecting the vertices in the table and the creating the 
> polygon. It works well, but I was wondering if there was a strategy 
> for interpolating points along the line to make the distance be the 
> input distance between vertices even if there isn't a vertex there in 
> the table.
>
> Thanks a lot for your help.
>
> *Andrew Wooley* | IT Director
> Mountainland Association of Governments
> 40.311,-111.682 
> <https://www.google.com/maps/place/40%C2%B018%2741.0%22N+111%C2%B040%2755.0%22W/@40.3112687,-111.68232,19z/data=%214m2%213m1%211s0x0:0x0>
> http://www.mountainland.org
> 801-229-3844




---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/pgrouting-users/attachments/20170902/4e2b103c/attachment.html>


More information about the Pgrouting-users mailing list