[QGIS-pt] Função automática para devolver um dado atributo com a georeferenciação

Bom dia,

Já faz algum tempo que gostaria de implementar uma função automática para devolver um dado atributo com a georeferenciação.

Ex: Tenho um projecto em qgis com dois layers. Um layer de pontos “papeleira” e um segundo layer do tipo poligonal “freguesias”.

Pretendia que ao georeferenciar uma “papeleira” a coluna ‘pap_freg’ fosse automaticamente prenchida através de uma função de intersecção com o poligono “freguesias” e com o seu atributo ‘freg_nome’ correspondente.

Aqui fica a estrutura exemplificativa das tabelas:

TABLE papeleira
(pap_cod integer NOT NULL ,
pap_freg Text,
geom geometry,)

TABLE freguesias
(freg_cod integer NOT NULL ,
freg_nome Text,
geom geometry,)

Já realizei várias tentativas de expressões e funções mas sem sucesso, ficaria muito grato pelo vosso apoio.

Cumprimentos,

Carlos Jacinto

Bom dia Carlos,

Esssa função pode ser implementada directamente no Postgis com o recurso a triggers.

Há uns tempos escrevi um post sobre como usar os triggers. Pode ser que o ajude:

http://sigsemgrilhetas.wordpress.com/2013/12/03/triggers-para-que-vos-quero/

O código do primeiro exemplo pode ser alterado de forma a fazer a intersecção entre as geometrias das tabelas que refere e obter o nome da freguesia.

Cumprimentos,

Alexandre Neto

···

2014-08-12 10:18 GMT+01:00 Carlos Jacinto <carlosjacinto@hotmail.com>:

Bom dia,

Já faz algum tempo que gostaria de implementar uma função automática para devolver um dado atributo com a georeferenciação.

Ex: Tenho um projecto em qgis com dois layers. Um layer de pontos “papeleira” e um segundo layer do tipo poligonal “freguesias”.

Pretendia que ao georeferenciar uma “papeleira” a coluna ‘pap_freg’ fosse automaticamente prenchida através de uma função de intersecção com o poligono “freguesias” e com o seu atributo ‘freg_nome’ correspondente.

Aqui fica a estrutura exemplificativa das tabelas:

TABLE papeleira
(pap_cod integer NOT NULL ,
pap_freg Text,
geom geometry,)

TABLE freguesias
(freg_cod integer NOT NULL ,
freg_nome Text,
geom geometry,)

Já realizei várias tentativas de expressões e funções mas sem sucesso, ficaria muito grato pelo vosso apoio.

Cumprimentos,

Carlos Jacinto


QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt

Olá Alexandre boa tarde,

Encontro-me familiarizado com os triggers , faço uso dos mesmos para registar utilizadores que criam ou alteram registos e respectivas datas de criação e modificação.

No entanto a partir do exemplo que me indicou não consigo perceber como poderei adaptar para obter o nome da freguesia que é atributo do poligono.

Seria possível demonstrar-me como o fazer ?
TABLE papeleira
(pap_cod integer NOT NULL ,
pap_freg Text,
geom geometry,)

TABLE freguesias
(freg_cod integer NOT NULL ,
freg_nome Text,
geom geometry,)

Grato pela sua comprensão.
____________________________________________________________ //______________________________________________

CREATE OR REPLACE FUNCTION update_geometry_fields()
<code class=``"sql keyword"``>``RETURNS``</code> <code class=``"sql keyword"``>``trigger``</code> <code class=``"sql keyword"``>``AS``</code>
$BODY$
DECLARE
lat_long TEXT;
BEGIN
-- Cálculo da área da geometria
NEW.area = st_area(NEW.geom);

-- Cálculo da latitude e longitude do centroíde da geometria em graus minutos e segundos
lat_long := ST_AsLatLonText(st_transform(st_centroid(NEW.geom), 4326));
NEW.latitude = split_part(lat_long,``' '``,1);
NEW.longitude = split_part(lat_long,``' '``,2);

RETURN NEW;
END``;
$BODY$
LANGUAGE plpgsql VOLATILE

CREATE TRIGGER update_epvu_sgev_geom_fields
BEFORE ``INSERT OR UPDATE OF geom
ON epvu.sgev
FOR EACH ROW
EXECUTE PROCEDURE update_geometry_fields();


Date: Tue, 12 Aug 2014 11:14:28 +0100
From: senhor.neto@gmail.com
To: qgis-pt@lists.osgeo.org
Subject: Re: [QGIS-pt] Função automática para devolver um dado atributo com a georeferenciação

Bom dia Carlos,

Esssa função pode ser implementada directamente no Postgis com o recurso a triggers.

Há uns tempos escrevi um post sobre como usar os triggers. Pode ser que o ajude:

http://sigsemgrilhetas.wordpress.com/2013/12/03/triggers-para-que-vos-quero/

O código do primeiro exemplo pode ser alterado de forma a fazer a intersecção entre as geometrias das tabelas que refere e obter o nome da freguesia.

Cumprimentos,

Alexandre Neto

2014-08-12 10:18 GMT+01:00 Carlos Jacinto <carlosjacinto@hotmail.com>:

Bom dia,

Já faz algum tempo que gostaria de implementar uma função automática para devolver um dado atributo com a georeferenciação.

Ex: Tenho um projecto em qgis com dois layers. Um layer de pontos “papeleira” e um segundo layer do tipo poligonal “freguesias”.

Pretendia que ao georeferenciar uma “papeleira” a coluna ‘pap_freg’ fosse automaticamente prenchida através de uma função de intersecção com o poligono “freguesias” e com o seu atributo ‘freg_nome’ correspondente.

Aqui fica a estrutura exemplificativa das tabelas:

TABLE papeleira
(pap_cod integer NOT NULL ,
pap_freg Text,
geom geometry,)

TABLE freguesias
(freg_cod integer NOT NULL ,
freg_nome Text,
geom geometry,)

Já realizei várias tentativas de expressões e funções mas sem sucesso, ficaria muito grato pelo vosso apoio.

Cumprimentos,

Carlos Jacinto


QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt

_______________________________________________ QGIS-pt mailing list QGIS-pt@lists.osgeo.org http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt

No entanto a partir do exemplo que me indicou não consigo perceber como poderei adaptar para obter o nome da freguesia que é atributo do poligono.

por exemplo assim:

UPDATE papeleira SET pap_freg = freg_nome
FROM freguesias
WHERE ST_Intersects(freguesias.geom, papeleira.geom);

--
Giovanni Manghi
Faunalia.pt
Sistemas de Informação Geográfica Open Source
Portugal

Web: http://www.faunalia.pt
Email & Jabber: giovanni.manghi@faunalia.pt
PGP Key available
Tel. + 351 96 7058216
--

Olá Giovanni,

Obrigado pelo exemplo que sugeriste foi bastante util para a concepção do trigger.

Deixo abaixo o trigger que faz o que pretendo !!!

CREATE OR REPLACE FUNCTION update_pap_freg()
RETURNS trigger AS
$BODY$
BEGIN
NEW.pap_freg = (select freg_nom from esquema.freguesias where ST_Intersects(freguesias.geom,NEW.geom));

RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION update_pap_freg()
OWNER TO postemarp;

Mais uma vez obrigado,

Cumprimentos

Date: Tue, 12 Aug 2014 17:08:44 +0100
From: giovanni.manghi@faunalia.pt
To: qgis-pt@lists.osgeo.org
Subject: Re: [QGIS-pt] Função automática para devolver um dado atributo com a georeferenciação

No entanto a partir do exemplo que me indicou não consigo perceber como poderei adaptar para obter o nome da freguesia que é atributo do poligono.

por exemplo assim:

UPDATE papeleira SET pap_freg = freg_nome
FROM freguesias
WHERE ST_Intersects(freguesias.geom, papeleira.geom);


Giovanni Manghi
Faunalia.pt
Sistemas de Informação Geográfica Open Source
Portugal

Web: http://www.faunalia.pt
Email & Jabber: giovanni.manghi@faunalia.pt
PGP Key available
Tel. + 351 96 7058216


QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt

Carlos,

Obrigado por partilhar a solução.
Para o caso (pouco provável e quase infeliz) de um ponto ficar mesmo na fronteira entre duas freguesias, eu colocaria um no final do select um LIMIT 1. Para limitar os resultados a uma linha e evitar o erro.

Cumprimentos,

Alexandre Neto

Em 13/08/2014 15:02, “Carlos Jacinto” <carlosjacinto@hotmail.com> escreveu:

Olá Giovanni,

Obrigado pelo exemplo que sugeriste foi bastante util para a concepção do trigger.

Deixo abaixo o trigger que faz o que pretendo !!!

CREATE OR REPLACE FUNCTION update_pap_freg()
RETURNS trigger AS
$BODY$
BEGIN
NEW.pap_freg = (select freg_nom from esquema.freguesias where ST_Intersects(freguesias.geom,NEW.geom));

RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION update_pap_freg()
OWNER TO postemarp;

Mais uma vez obrigado,

Cumprimentos

Date: Tue, 12 Aug 2014 17:08:44 +0100
From: giovanni.manghi@faunalia.pt
To: qgis-pt@lists.osgeo.org
Subject: Re: [QGIS-pt] Função automática para devolver um dado atributo com a georeferenciação

No entanto a partir do exemplo que me indicou não consigo perceber como poderei adaptar para obter o nome da freguesia que é atributo do poligono.

por exemplo assim:

UPDATE papeleira SET pap_freg = freg_nome
FROM freguesias
WHERE ST_Intersects(freguesias.geom, papeleira.geom);


Giovanni Manghi
Faunalia.pt
Sistemas de Informação Geográfica Open Source
Portugal

Web: http://www.faunalia.pt
Email & Jabber: giovanni.manghi@faunalia.pt
PGP Key available
Tel. + 351 96 7058216


QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt


QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt