Função automática para devolver um dado atributo com a georeferenciação

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Função automática para devolver um dado atributo com a georeferenciação

carlos_jacinto
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
[hidden email]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt
Reply | Threaded
Open this post in threaded view
|

Re: Função automática para devolver um dado atributo com a georeferenciação

Alexandre Neto
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:


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 <[hidden email]>:
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
[hidden email]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt



_______________________________________________
QGIS-pt mailing list
[hidden email]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt
Reply | Threaded
Open this post in threaded view
|

Re: Função automática para devolver um dado atributo com a georeferenciação

carlos_jacinto
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: [hidden email]
To: [hidden email]
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:


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 <[hidden email]>:
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
[hidden email]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt



_______________________________________________ QGIS-pt mailing list [hidden email] http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt

_______________________________________________
QGIS-pt mailing list
[hidden email]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt
Reply | Threaded
Open this post in threaded view
|

Re: Função automática para devolver um dado atributo com a georeferenciação

Giovanni Manghi-2
> 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: [hidden email]
PGP Key available
Tel. + 351 96 7058216
--
_______________________________________________
QGIS-pt mailing list
[hidden email]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt
Reply | Threaded
Open this post in threaded view
|

Re: Função automática para devolver um dado atributo com a georeferenciação

carlos_jacinto
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: [hidden email]
> To: [hidden email]
> 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: [hidden email]
> PGP Key available
> Tel. + 351 96 7058216
> --
> _______________________________________________
> QGIS-pt mailing list
> [hidden email]
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt

_______________________________________________
QGIS-pt mailing list
[hidden email]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt
Reply | Threaded
Open this post in threaded view
|

Re: Função automática para devolver um dado atributo com a georeferenciação

Alexandre Neto

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" <[hidden email]> 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: [hidden email]
> To: [hidden email]
> 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: [hidden email]
> PGP Key available
> Tel. <a href="tel:%2B%20351%2096%207058216" value="+351967058216" target="_blank">+ 351 96 7058216
> --
> _______________________________________________
> QGIS-pt mailing list
> [hidden email]
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt

_______________________________________________
QGIS-pt mailing list
[hidden email]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt


_______________________________________________
QGIS-pt mailing list
[hidden email]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/qgis-pt