[Portugal] pgrouting (áreas de influência de escolas)

António M. Rodrigues amcrgrodrigues gmail.com
Sexta-Feira, 27 de Setembro de 2013 - 02:19:36 PDT


Bom dia,

Sei que este não é um forúm de programação, mas desconfio que haverá por
aqui malta que talvez me possa ajudar
(desconfio que a solução será simples).

Estou a usar o pgrouting para cálculo de áreas de influência de escolas,
tendo como base informação do osm. Concretamente, estou a usar a função
pgr_drivingdistance.

Estou a criar uma tabela para cada nó destino (escola) que me devovle o id
de cada nó da rede, o custo de deslocação e a geometria associada.

O código é o seguinte:

-----
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 = foo.id1);

---------------------------------

De seguida o que faço é celeccionar o custo mínimo com a função least para
ele me dar para cada nó a distância à escola mais próxima.

Bom, o problema é que tenho cerca de 100 escolas e estar a correr isto 100
vezes, alterando nomes não é propriamente um exemplo de boas práticas.

Escrevi o seguinte código que corre o código acima dentro de um loop. A
coluna numero.nn tem os ids de todos os nós que correspondem a escolas.

---------------------------------------
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;
$$;

---------------------------------------------------------------------------

Bom, o problema está nas " ' ". A seguir ao EXECUTE tenho uma string com o
query. Mas dentro dessa string uso uma função, o pgr_drivingdistance, cujo
primeiro argumento também é uma string.

Tentei resolver o problema com duplos dollar ($$), mas não resulta. Mais
concretamente, num query simples, o pgr_drivingdistance corre com os $$;
dentro do EXECUTE não.

Provavelmente para alguma malta que anda por aqui a solução será trivial.
Infelizmente para mim não.

Obrigado.
Abraço,
António
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.osgeo.org/pipermail/portugal/attachments/20130927/119299c1/attachment.html>


More information about the Portugal mailing list