Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Les Rencontres de SIG La Lettre, c'est terminé ! Les bénévoles de GeoRezo remercient chaleureusement tous ceux qui ont pû partager quelques intants avec eux sur le stand ou dans les allées !


A tous les visiteurs, lecteurs et utilisateurs du Portail GeoRezo, votre soutien nous est indispensable pour vous garantir des services et des espaces d'échanges de qualité !

 

Soutenez GeoRezo !

dons_v4_orange_tsp

#1 mar. 20 mars 2012 17:40

ramon
Membre
Lieu: Angouleme
Date d'inscription: 29 janv. 2008
Messages: 10

[POSTGIS] Remplissage de Champ X et Y par fonction et/ou trigger

Bonjour,

J'utilise QGIS pour remplir une table de ponctuel, et compléter les champs de ces ponctuels.
Ma table est sous Postgres/Postgis pas de soucis tout fonctionne correctement.

Mon problème survient dans le cadre de l'affichage des coordonnées de ce point dans l'affichage des champs.
Actuellement la géométrie de ce point est stockée dans un champ "the_geom" non visible lors de l'édition des données.
A la main avec PgAdmin, pas de soucis, je retrouve mes coordonnées "POINT ( X Y)".

Mon idée est de créer 2 champs : coord_x et coord_y se remplissant tout seul.

En effectuant un "SELECT ST_x(the_geom), ST_y(the_geom) from ma_table" dans PgAdmin, j'obtiens bien mes valeurs X et Y séparément.

Mon problème est que je ne sais pas comment faire une insertion automatique de ces 2 champs ?

Merci d'avance

Hors ligne

 

#2 mar. 20 mars 2012 18:10

Nicolas Ribot
Moderateur
Lieu: Toulouse
Date d'inscription: 9 sept. 2005
Messages: 550

Re: [POSTGIS] Remplissage de Champ X et Y par fonction et/ou trigger

ramon a écrit:

Bonjour,

J'utilise QGIS pour remplir une table de ponctuel, et compléter les champs de ces ponctuels.
Ma table est sous Postgres/Postgis pas de soucis tout fonctionne correctement.

Mon problème survient dans le cadre de l'affichage des coordonnées de ce point dans l'affichage des champs.
Actuellement la géométrie de ce point est stockée dans un champ "the_geom" non visible lors de l'édition des données.
A la main avec PgAdmin, pas de soucis, je retrouve mes coordonnées "POINT ( X Y)".

Mon idée est de créer 2 champs : coord_x et coord_y se remplissant tout seul.

En effectuant un "SELECT ST_x(the_geom), ST_y(the_geom) from ma_table" dans PgAdmin, j'obtiens bien mes valeurs X et Y séparément.

Mon problème est que je ne sais pas comment faire une insertion automatique de ces 2 champs ?

Merci d'avance

Un trigger permettrait de faire ca.
je ne comprends pas tres bien pourquoi vous voulez avec les champs X et Y en plus du point. Vous en avez vraiment besoin ?

Nicolas

Hors ligne

 

#3 mer. 21 mars 2012 08:49

ramon
Membre
Lieu: Angouleme
Date d'inscription: 29 janv. 2008
Messages: 10

Re: [POSTGIS] Remplissage de Champ X et Y par fonction et/ou trigger

Merci de l’intérêt que vous portez à ma question.

J'ai vu sur le forum d'autres de vos réponses concernant un sujet similaire, remplissage d'un champ via une fonction mis en place par un trigger. Mais je n'ai pas réussi à le mettre en place.

Effectivement, j'ai besoin d'avoir les coordonnées visibles. Pour mettre la donnée dans son contexte. Il s'agit d'une cartographie des nids de frelons asiatiques.
Il me semble intéressant de faire apparaitre dans la fiche d'information du ponctuel, les coordonnées X et Y du nid, ce qui permet à l'utilisateur (non-géomaticien) de communiquer la position plus précisément aux personnes devant intervenir.

Hors ligne

 

#4 dim. 25 mars 2012 10:44

MathieuB
Moderateur
Lieu: Montpellier
Date d'inscription: 18 janv. 2006
Messages: 236
Site web

Re: [POSTGIS] Remplissage de Champ X et Y par fonction et/ou trigger

Bonjour Ramon,

Si je comprend bien votre question, vous voulez lors de la création d'un point dans QGis que les coordonnées x et y du point s'affiche dans le formulaire de renseignement de l'objet. C'est ça ?

Un trigger renseignera ces valeurs, mais apprès que la donnée ait été créée. Les case seront remplies quand vous afficherez les attributs du point "la fois suivante".

Je ne sais pas comment si QGis vous permettra de faire cela (pré-remplir tes attributs de coordonnées avant validation du formulaire).

Dernière modification par Mathieu BOSSAERT (dim. 25 mars 2012 10:45)


Mathieu BOSSAERT
Montpellier

Hors ligne

 

#5 lun. 26 mars 2012 18:16

ramon
Membre
Lieu: Angouleme
Date d'inscription: 29 janv. 2008
Messages: 10

Re: [POSTGIS] Remplissage de Champ X et Y par fonction et/ou trigger

Bonjour Mathieu,

Vous avez bien compris ce que je souhaite faire, que l'affichage de la coordonnées X et Y ne s'affiche qu'apres validation ne me dérange pas. Au contraire. La finalité serait de pouvoir enregistrer/exporter par la suite le contenu de la table sur "Excel" pour donner la liste aux personnes devant intervenir sur ces points avec l'emplacement en coordonnées X Y.

Mon problème est la mise en place de ce trigger en utilisant le champ "the_geom". J'avais effectuer un test entre midi et deux heure, mais je n'ai pas garder le script de mon trigger, celui-ci ne fonctionnait pas. Dès que je 5 minutes je me repenche sur mon problème afin de vous définir plus précisément où ça cloche...

Merci

Hors ligne

 

#6 lun. 26 mars 2012 19:07

Nicolas Ribot
Moderateur
Lieu: Toulouse
Date d'inscription: 9 sept. 2005
Messages: 550

Re: [POSTGIS] Remplissage de Champ X et Y par fonction et/ou trigger

Bonjour,

Si ces informations ne sont utiles qu'à l'export, vous pourrez créer ces colonnes a ce moment-là.
En prenant l'exemple d'un export avec la commande Postgresql COPY:

Code:

COPY (select st_X(the_geom), set_Y(the_geom) from matble)
to '/tmp/ma_table.csv'
WITH (FORMAT CSV);

Sinon, le trigger pourrait etre:

Code:

-------- La fonction du trigger

create or replace function setXY() returns trigger as $$
    DECLARE
    
    BEGIN
        NEW.x_coord := st_X(NEW.the_geom);
        NEW.y_coord := st_Y(NEW.the_geom);
        RETURN NEW;
    END;
$$ LANGUAGE PLPGSQL;


--------- puis la creation du trigger
drop trigger if exists setXY_trigger on matable;

create trigger setXY_trigger 
    BEFORE UPDATE OR INSERT
    ON matable 
    FOR EACH ROW
    EXECUTE PROCEDURE setXY();

(en considerant que la table cible s'appelle "matable", et les colonnes stockant les X-Y "x_coord", "y_coord")

Nico

Dernière modification par Nicolas Ribot (lun. 26 mars 2012 19:08)

Hors ligne

 

#7 lun. 26 mars 2012 19:42

vincentp
Membre
Lieu: Paris
Date d'inscription: 18 juil. 2006
Messages: 102

Re: [POSTGIS] Remplissage de Champ X et Y par fonction et/ou trigger

Nicolas Ribot a écrit:

Bonjour,

Si ces informations ne sont utiles qu'à l'export, vous pourrez créer ces colonnes a ce moment-là.
Nico

Ou bien simplement utiliser une vue :

Code:

CREATE OR REPLACE VIEW matablexy AS SELECT *, st_x(the_geom) as x, st_y(the_geom) as y FROM matable;

Vous pouvez alors être en mode d'écriture sur la table d'origine et de lecture sur la vue, y compris pour l'export.

Il y a aussi la possibilité de rendre cette vue éditable avec des «rules» afin de ne travailler que sur celle ci en lecture/écriture.

Hors ligne

 

#8 ven. 15 juin 2012 14:18

ramon
Membre
Lieu: Angouleme
Date d'inscription: 29 janv. 2008
Messages: 10

Re: [POSTGIS] Remplissage de Champ X et Y par fonction et/ou trigger

Bonjour,

Je reviens sur ce post avec beaucoup de retard.J'ai pris le temps de faire ce que vous m'avez indiqué.

Le résultat produit et tout à fait ce que je cherchais à faire.

Merci pour ces scripts qui ont bien éclairci mes connaissances sur la mise en place de fonctions et de triggers.

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |