[pgrouting-users] Working with Driving Distance
Daniel Kastl
daniel at georepublic.de
Tue Dec 21 23:51:23 EST 2010
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/pgrouting-users/attachments/20101222/e9ad8799/attachment-0001.html
More information about the Pgrouting-users
mailing list