[pgrouting-users] Working with Driving Distance

Daniel Kastl daniel at georepublic.de
Wed Dec 22 00:17:37 EST 2010


Right.
You can probably do all in one query. Best would be to take an existing
wrapper and customize it, I think.
I would be interested to hear if you were successful or not, and if it
worked well with PostGIS concave hull function.
If so, we could add some example wrapper to the pgrouting-contrib
repository.

Daniel


2010/12/22 Roger André <randre at gmail.com>

> Ok, so I would take the vertex_id's returned from the function, retrieve
> their geometries, and then pass the list of geometries into the PostGIS
> concave hull function.
>
> Got it.
>
> Thanks.
> --
>
> On Tue, Dec 21, 2010 at 8:51 PM, Daniel Kastl <daniel at georepublic.de>wrote:
>
>> Hi Roger,
>>
>> You could also try to use PostGIS to calculate concave hull function:
>> http://postgis.org/documentation/manual-svn/ST_ConcaveHull.html
>>
>> When driving_distance function was written some time ago this function
>> wasn't written yet in PostGIS (or wasn't very fast, I don't rmember exactly
>> the reason, why CGAL was chosen). Nevertheless it would be nice to get rid
>> of CGAL dependency and use the PostGIS function instead. Just nobody has
>> done this yet ;-)
>>
>> So you could take the query as in your first email and take the geometry
>> of the list of vertices as input for the concave hull function.
>>
>> Daniel
>>
>> <http://postgis.org/documentation/manual-svn/ST_ConcaveHull.html>
>>
>> 2010/12/22 Daniel Kastl <daniel at georepublic.de>
>>
>> Hi Roger,
>>>
>>> What OS do you use?
>>> I haven't run Driving Distance function for a while and recently upgraded
>>> to a newer version of Ubuntu.
>>> In my case it says: ERROR:  function alphashape(unknown) does not exist
>>>
>>> Might be that something has changed there with the dependent library
>>> (CGAL), which is used to calculate the polygon.
>>> I can't remember there was a problem in the past.
>>>
>>> Daniel
>>>
>>>
>>>
>>> 2010/12/22 Roger André <randre at gmail.com>
>>>
>>>> Ok, so using what I think is the correct SQL syntax, I get a different
>>>> sort of error:
>>>>
>>>> eligibility=# SELECT the_geom FROM driving_distance('edges', 2512140,
>>>> 7040129, 2000, 'length', 'length', false, false);
>>>> NOTICE:  SRID: 2276
>>>> NOTICE:  Query: SELECT gid, the_geom FROM points_as_polygon('SELECT
>>>> a.vertex_id::integer AS id, b.x1::double precision AS x, b.y1::double
>>>> precision AS y FROM driving_distance(''''SELECT gid AS
>>>> id,source::integer,target::integer, length::double precision AS cost,
>>>> length::double precision as reverse_cost FROM edges WHERE
>>>> setsrid(''''''''BOX3D(2510140 7038129, 2514140 7042129)''''''''::BOX3D,
>>>> 2276) && the_geom  '''', (SELECT id FROM
>>>> find_node_by_nearest_link_within_distance(''''POINT(2512140
>>>> 7040129)'''',200,''''edges'''')),2000,true,true) a, (SELECT * FROM edges
>>>> WHERE setsrid(''''BOX3D(2510140 7038129, 2514140 7042129)''''::BOX3D,
>>>> 2276)&&the_geom) b WHERE a.vertex_id = b.source')
>>>> ERROR:  function find_node_by_nearest_link_within_distance(unknown,
>>>> integer, unknown) does not exist
>>>> LINE 1: ...)''::BOX3D, 2276) && the_geom  ', (SELECT id FROM
>>>> find_node_...
>>>>                                                              ^
>>>> HINT:  No function matches the given name and argument types. You might
>>>> need to add explicit type casts.
>>>> QUERY:  SELECT a.vertex_id::integer AS id, b.x1::double precision AS x,
>>>> b.y1::double precision AS y FROM driving_distance('SELECT gid AS
>>>> id,source::integer,target::integer, length::double precision AS cost,
>>>> length::double precision as reverse_cost FROM edges WHERE
>>>> setsrid(''BOX3D(2510140 7038129, 2514140 7042129)''::BOX3D, 2276) &&
>>>> the_geom  ', (SELECT id FROM
>>>> find_node_by_nearest_link_within_distance('POINT(2512140
>>>> 7040129)',200,'edges')),2000,true,true) a, (SELECT * FROM edges WHERE
>>>> setsrid('BOX3D(2510140 7038129, 2514140 7042129)'::BOX3D, 2276)&&the_geom) b
>>>> WHERE a.vertex_id = b.source
>>>> CONTEXT:  PL/pgSQL function "points_as_polygon" line 17 at FOR over
>>>> EXECUTE statement
>>>> PL/pgSQL function "driving_distance" line 25 at FOR over EXECUTE
>>>> statement
>>>>
>>>> Still puzzling this one out.
>>>> --
>>>>
>>>>
>>>> On Tue, Dec 21, 2010 at 7:55 PM, Roger André <randre at gmail.com> wrote:
>>>>
>>>>> Hi Daniel,
>>>>>
>>>>> Thanks for your reply.  I checked, and it appears that I have that
>>>>> wrapper function installed.  Here is what my pgrouting install dir looks
>>>>> like:
>>>>>
>>>>> $ pwd
>>>>> /usr/local/pgrouting-1.05/extra/driving_distance/sql
>>>>>
>>>>> $ ll
>>>>> total 36
>>>>> drwxr-xr-x 3 15036 users 4096 2010-12-21 15:58 ./
>>>>> drwxr-xr-x 5 15036 users 4096 2010-12-21 15:58 ../
>>>>> drwxr-xr-x 2 root  root  4096 2010-12-21 15:58 CMakeFiles/
>>>>> -rw-r--r-- 1 root  root  1811 2010-12-21 15:58 cmake_install.cmake
>>>>> -rw-r--r-- 1 15036 users  134 2010-11-16 18:42 CMakeLists.txt
>>>>> -rw-r--r-- 1 root  root  5540 2010-12-21 15:58 Makefile
>>>>> -rw-r--r-- 1 15036 users 1757 2010-11-16 18:42 routing_dd.sql
>>>>> -rw-r--r-- 1 15036 users 3790 2010-11-16 18:42 routing_dd_wrappers.sql
>>>>>
>>>>> And I did make sure to run both SQL files against the database my roads
>>>>> are stored in.
>>>>>
>>>>>   482  psql -d eligibility -f routing_dd.sql
>>>>>   483  psql -d eligibility -f routing_dd_wrappers.sql
>>>>>   490  psql -d eligibility -f routing_tsp.sql
>>>>>   491  psql -d eligibility -f routing_tsp_wrappers.sql
>>>>>
>>>>> I will review your usage instructions and see if I'm missing anything.
>>>>>
>>>>> Roger
>>>>> --
>>>>>
>>>>> On Tue, Dec 21, 2010 at 5:51 PM, Daniel Kastl <daniel at georepublic.de>wrote:
>>>>>
>>>>>> Hi Roger,
>>>>>>
>>>>>> You're using the "core" function, I think.
>>>>>> You could use the driving_distance wrapper function, which will return
>>>>>> you a polyogon.
>>>>>> For that you need to load this SQL:
>>>>>> https://github.com/pgRouting/pgrouting/blob/master/extra/driving_distance/sql/routing_dd_wrappers.sql
>>>>>> You can also find it in the directory where the other pgRouting SQL
>>>>>> files are.
>>>>>>
>>>>>> The function will take these parameters then:
>>>>>>
>>>>>> driving_distance(table_name varchar, x double precision, y double
>>>>>> precision,
>>>>>>         distance double precision, cost varchar, reverse_cost varchar,
>>>>>> directed boolean, has_reverse_cost boolean)
>>>>>>
>>>>>> X,Y are the coordinates you take as a center point.
>>>>>> You can take the returned polygon then and do other spatial queries.
>>>>>>
>>>>>> Best regards,
>>>>>> Daniel
>>>>>>
>>>>>>
>>>>>>
>>>>>> 2010/12/22 Roger André <randre at gmail.com>
>>>>>>
>>>>>>> Hi All,
>>>>>>>
>>>>>>> I need to generate some maps that show all of the road segments that
>>>>>>> are within a certain distance of specific points.  I have been able to
>>>>>>> generate some answers using the driving_distance function, but am not sure
>>>>>>> what to do with them.  Here's what I get:
>>>>>>>
>>>>>>> # SELECT * FROM driving_distance('SELECT gid AS id, source, target,
>>>>>>> length::double precision AS cost FROM edges',49,2000,false,false);
>>>>>>>  vertex_id | edge_id |       cost
>>>>>>> -----------+---------+------------------
>>>>>>>         15 |       9 | 1854.34547361565
>>>>>>>         20 |     104 | 1549.85630678904
>>>>>>>         22 |      68 | 858.367668935802
>>>>>>>         23 |     125 | 1466.02479201359
>>>>>>>         24 |      75 | 801.137871846872
>>>>>>>         25 |     125 | 1169.02817170106
>>>>>>>         26 |     106 | 1296.98197602289
>>>>>>>         48 |      71 | 902.595810873304
>>>>>>>         49 |     106 |                0
>>>>>>>         51 |      74 | 1948.07551810288
>>>>>>>         52 |      75 | 1620.93404864578
>>>>>>> (11 rows)
>>>>>>>
>>>>>>> These answers seem legit, but I'm not sure what to do with them.
>>>>>>> Ultimately, I need to show both the minimum enclosing polygon that
>>>>>>> "surrounds" all of the road segments, as well as the road segments
>>>>>>> themselves.  Can someone please give me some pointers as to what I can do to
>>>>>>> accomplish this?
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Roger
>>>>>>> --
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Pgrouting-users mailing list
>>>>>>> Pgrouting-users at lists.osgeo.org
>>>>>>> http://lists.osgeo.org/mailman/listinfo/pgrouting-users
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Georepublic UG & Georepublic Japan
>>>>>> eMail: daniel.kastl at georepublic.de
>>>>>> Web: http://georepublic.de
>>>>>>
>>>>>> _______________________________________________
>>>>>> Pgrouting-users mailing list
>>>>>> Pgrouting-users at lists.osgeo.org
>>>>>> http://lists.osgeo.org/mailman/listinfo/pgrouting-users
>>>>>>
>>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Pgrouting-users mailing list
>>>> Pgrouting-users at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/pgrouting-users
>>>>
>>>>
>>>
>>>
>>> --
>>> Georepublic UG & Georepublic Japan
>>> eMail: daniel.kastl at georepublic.de
>>> Web: http://georepublic.de
>>>
>>
>>
>>
>> --
>> Georepublic UG & Georepublic Japan
>> eMail: daniel.kastl at georepublic.de
>> Web: http://georepublic.de
>>
>> _______________________________________________
>> Pgrouting-users mailing list
>> Pgrouting-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/pgrouting-users
>>
>>
>
> _______________________________________________
> Pgrouting-users mailing list
> Pgrouting-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/pgrouting-users
>
>


-- 
Georepublic UG & Georepublic Japan
eMail: daniel.kastl at georepublic.de
Web: http://georepublic.de
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/pgrouting-users/attachments/20101222/4ce82c86/attachment-0001.html


More information about the Pgrouting-users mailing list