[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