[Portugal] Intersectar tabelas Postgis

Rui Pedro Henriques henriques.rui at gmail.com
Thu Jul 14 11:04:50 EDT 2011


Olá Pedro,

Em relação à query podes fazer:

UPDATE plantas_emitidas
SET (dicofre_plantas, freguesia) =
(SELECT dicofre, freguesia
             FROM caop_2010
             WHERE ST_CONTAINS(caop.2010.the_geom, 
plantas_emitidas.the_geom));

Em relação ao trigger, aparentemente escreveste mal: 2011 em vez de 2010...


Abraço,
Rui Pedro Henriques



On 07/14/2011 03:53 PM, Pedro Venâncio wrote:
> Olá boa tarde,
>
> Muito obrigado pelas dicas! Consegui avançar, mas há qualquer coisa que ainda falta.
>
>
> Com esta função consigo chegar ao objectivo
>
> UPDATE plantas_emitidas
> SET dicofre_plantas = (SELECT dicofre
> FROM caop_2010
> WHERE st_contains(caop_2010.the_geom, plantas_emitidas.the_geom));
>
> Aqui fiquei com uma dúvida, se for para actualizar duas colunas de uma tabela, com duas da outra (em vez de uma), como ficaria? Fiz várias tentativas, mas todas elas deram erro...
>
>
>
> Depois criei a função trigger
>
> CREATE OR REPLACE FUNCTION preenche_dicofre_plantas()
> RETURNS TRIGGER AS
> $BODY$
> BEGIN     
> SELECT dicofre INTO NEW.dicofre_plantas
> FROM caop_2011
> WHERE st_contains(caop_2010.the_geom, plantas_emitidas.the_geom);
> RETURN NEW;
> END;
> $BODY$
> LANGUAGE plpgsql VOLATILE
>
>
> E defini a trigger na tabela plantas_emitidas, com o pgAdmin.
>
> No QGIS acrescento novos pontos, mas quando vou guardar aparece-me este erro
>
> ERROR:  relation "caop_2011" does not exist
> LINE 1: SELECT dicofre FROM caop_2011 WHERE st_contains(caop_2010.th...
>                              ^
> QUERY:  SELECT dicofre FROM caop_2011 WHERE st_contains(caop_2010.the_geom, plantas_emitidas.the_geom)
> CONTEXT:  PL/pgSQL function "preenche_dicofre_plantas" line 2 at SQL statement
>
>
> Que relação é necessário estabelecer?
>
> Obrigado pelo apoio!
>
> Pedro
>
>
>
>
>
>
> ----- Original Message -----
> From: Jorge Gustavo Rocha
>
> Olá,
>
> Se tens uma tabela caop e uma tabela de pontos, para preencheres o
> concelho e freguesia, ou preencheres o DICOFRE, basta algo do género:
>
> update pontos
> set dcf = (select dicofre
>      from caop
>      where st_contains(wkb_geometry, pontos.wkb_geometry));
>
> Para não teres que fazer isso sempre que alteras a tabela pontos, cria
> um trigger que faça essa actualização automaticamente. Primeiro crias a
> "função de trigger" e depois associas essa função aos eventos insert e
> update. Vê se te safas com a explicação em
> http://geobox.geospot.pt/pt/index.php/Cria%C3%A7%C3%A3o_de_triggers
>
> Bom trabalho,
>
> Jorge
>
> Qui, 2011-07-14 às 04:53 -0700, Pedro Venâncio escreveu:
>> Olá boa tarde,
>>
>> Tenho 2 layers Postgis, uma de pontos e outra de polígonos (CAOP2010). O que eu gostava de fazer era "preencher" automaticamente 2 campos (concelho e freguesia) na tabela de pontos, sempre que crio um novo ponto, com base na intersecção com a CAOP.
>>
>>
>> Não sei se este procedimento é muito complexo ou não, se alguém me conseguir dar umas dicas, agradeço!
>>
>> Cumprimentos,
>> Pedro Venâncio
>>
>> _______________________________________________
>> Portugal mailing list
>> Portugal  lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/portugal


More information about the Portugal mailing list