[pgrouting-users] pgr_drivingdistance (loop)

Carla Rebelo crrebelo at gmail.com
Fri Sep 27 08:08:01 PDT 2013


Hi Stephen,

Thanks for your reply.

Sorry for the incomplete information...

Running que code:

-----------------------------------------------------------------
DO $$
DECLARE
    i integer;
BEGIN
FOR i IN (select nn from numero)
LOOP
EXECUTE
'create table contagio' || i || ' as
SELECT id1 as no, cost as cost' || i ||
' FROM pgr_drivingdistance('
      SELECT gid AS id,
          source,
          target,
          tempo::float8 AS cost
      FROM lisboa',
      18 ,
      30,
      false,
      false)'
;
return the error:

-----------------------------------------
ERROR:  syntax error at or near "SELECT"
LINE 11:       SELECT gid AS id,
-----------------------------------------

I think I understand what's wrong. I have a query string inside a query
string.

I tried to solve this using $$, but it doesn't work.

If I run:

-----
SELECT *
 FROM pgr_drivingdistance($$
      SELECT gid AS id,
          source,
          target,
          tempo::float8 AS cost
      FROM lisboa$$,
      18 ,
      30,
      false,
      false);
-----

It works fine. But if this code comes after EXECUTE as a query string, it
doesn't work (a query string inside a query string)...

Thanks fro any help,
Carla

ubuntu 12.04
postgis version:
"2.0 USE_GEOS=1 USE_PROJ=1 USE_STATS=1"
pgrouting version:
"(2.0.0-rc1,v2.0.0-beta,50,6a63bc1,develop,1.46.1)"




END LOOP;
END;
$$;
-------------------------------------------------------------------

return the error:

-----------------------------------------
ERROR:  syntax error at or near "SELECT"
LINE 11:       SELECT gid AS id,
-----------------------------------------

I think I understand what's wrong. I have a query string inside a query
string.

I tried to solve this using $$, but it doesn't work.

If I run:

-----
SELECT *
 FROM pgr_drivingdistance($$
      SELECT gid AS id,
          source,
          target,
          tempo::float8 AS cost
      FROM lisboa$$,
      18 ,
      30,
      false,
      false);
-----

It works fine. But if this code comes after EXECUTE as a query string, it
doesn't work (a query string inside a query string)...

Thanks fro any help,
Carla

ubuntu 12.04
postgis version:
"2.0 USE_GEOS=1 USE_PROJ=1 USE_STATS=1"
pgrouting version:
"(2.0.0-rc1,v2.0.0-beta,50,6a63bc1,develop,1.46.1)"





2013/9/27 Stephen Woodbridge <woodbri at swoodbridge.com>

> Hi Carla,
>
> It would be useful if you posted what your error message is.
>
> I suspect the the following lines:
>
>
> > SELECT id1 as no, cost as cost' || i ||
> > ' FROM pgr_drivingdistance('
>
> needs to get changed to:
>
> > SELECT id1 as no, cost as cost,' || i || '::integer
> >  FROM pgr_drivingdistance('
>
> -Steve W
>
>
>
> On 9/27/2013 5:59 AM, Carla Rebelo wrote:
>
>> Dear all,
>>
>> I need to calculate the catchment area for a number of nodes (schools).
>>
>> I'm using pgr_driving distance and adding geometry from the nodes table.
>>
>> -----
>> My code creates a table for each destination. Example (for node 71197):
>>
>> drop table if exists contagio71197;
>> create table contagio71197 as
>> SELECT foo.id1 as no, foo.cost as cost71197, vertices_tmp.the_geom
>>   FROM vertices_tmp inner join pgr_drivingdistance('
>>        SELECT gid AS id,
>>            source,
>>            target,
>>            tempo::float8 AS cost
>>        FROM lisboa',
>>        71197,
>>        20,
>>        false,
>>        false) as foo
>> on (vertices_tmp.id <http://vertices_tmp.id> = foo.id1);
>>
>>
>> ------------------------------**---
>> Now, since I have around 100 destinations, I tried to loop through the
>> list of nodes.
>>
>> I wrote the following code (column numero.nn contains the list of nodes
>> which constitute the destinations:
>>
>> '
>>
>> DO $$
>> DECLARE
>>      i integer;
>> BEGIN
>> FOR i IN (select nn from numero)
>> LOOP
>> EXECUTE
>> 'create table contagio' || i || ' as
>> SELECT id1 as no, cost as cost' || i ||
>> ' FROM pgr_drivingdistance('
>>        SELECT gid AS id,
>>            source,
>>            target,
>>            tempo::float8 AS cost
>>        FROM lisboa', '
>>        || i || ' ,
>>        30,
>>        false,
>>        false)'
>> ;
>> END LOOP;
>> END;
>> $$;
>>
>> ------------------------------**------------------------------**
>> ---------------
>>
>> Now, I know where the problem is: the query string after EXECUTE has a
>> function that uses another query string as an input
>> (pgr_drivingDistance(text sql, ......)
>>
>> Probably there's a simple solution, but I can't get it.
>>
>> Any help.
>> Thank you very much.
>>
>> Carla
>>
>>
>>
>>
>> ______________________________**_________________
>> Pgrouting-users mailing list
>> Pgrouting-users at lists.osgeo.**org <Pgrouting-users at lists.osgeo.org>
>> http://lists.osgeo.org/**mailman/listinfo/pgrouting-**users<http://lists.osgeo.org/mailman/listinfo/pgrouting-users>
>>
>>
> ______________________________**_________________
> Pgrouting-users mailing list
> Pgrouting-users at lists.osgeo.**org <Pgrouting-users at lists.osgeo.org>
> http://lists.osgeo.org/**mailman/listinfo/pgrouting-**users<http://lists.osgeo.org/mailman/listinfo/pgrouting-users>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/pgrouting-users/attachments/20130927/9a699bd0/attachment.html>


More information about the Pgrouting-users mailing list