Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


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

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 29 July 2019 13:46

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

calcul surface parcelle

Bonjour,

Je dispose d'une table "parcelle". Elle ne dispose pas d'un champ superficie. Je souhaite créer à partir de cette table une vue dans laquelle il y aurait un nouveau champ superficie avec les surfaces calculées.

Hors ligne

 

#2 Mon 29 July 2019 15:13

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: calcul surface parcelle

Bonjour,

j'imagine que vous utilisez Postgis :

Code:

CREATE VIEW ma_vue AS
SELECT 
    colonne_1,
    colonne_2,
    colonne_3,
     .
     .
     .
    colonne_n,
    the_geom,
    st_area(the_geom) AS superficie
FROM
    ma_table
;

https://postgis.net/docs/ST_Area.html

Dernière modification par tumasgiu (Mon 29 July 2019 15:14)

En ligne

 

#3 Mon 29 July 2019 15:35

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

ok merci.

Hors ligne

 

#4 Mon 29 July 2019 18:18

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

J'ai des surfaces de type "250,8456312789". Comment faire pour avoir "250,84 m2"

Hors ligne

 

#5 Tue 30 July 2019 09:18

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: calcul surface parcelle

Code:

trunc(st_area(the_geom), 2)::text || ' m²'

https://docs.postgresql.fr/10/functions-math.html

Dernière modification par tumasgiu (Tue 30 July 2019 09:30)

En ligne

 

#6 Tue 30 July 2019 09:31

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

Cela ne fonctionne pas.
Voici le message :
ERROR:  function trunc(double precision, integer) does not exist
LINE 20:     trunc (st_area(parcelle.geom), 2) AS Superficie,
             ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 520

Hors ligne

 

#7 Tue 30 July 2019 09:34

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

Le même message avec les m² concaténés :
ERROR:  function trunc(double precision, integer) does not exist
LINE 20:     trunc (st_area(parcelle.geom), 2)::text || ' m²' AS Supe...
             ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 520

Hors ligne

 

#8 Tue 30 July 2019 09:48

Pascal Boulerie
Participant assidu
Lieu: France
Date d'inscription: 12 Sep 2005
Messages: 2947
Site web

Re: calcul surface parcelle

trunc semble posséder 2 syntaxes différentes, d’après le manuel indiqué par tumasgiu .

Pour utiliser celle qui ne sait pas traiter un type de nombre « double précision », il faut convertir son type en nombre simple.

Le message d’erreur indique en effet : utiliser un « type cast ».

Dernière modification par Pascal Boulerie (Tue 30 July 2019 09:52)


« L'État est désormais quasi déliquescent. » (José Cohen-Aknine, ingénieur X-Ponts, IGPEF, dans Déliquescence et renaissance de l'État.)

Hors ligne

 

#9 Tue 30 July 2019 09:49

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

J'ai essayé avec round, même résultat :
ERROR:  function round(double precision, integer) does not exist
LINE 20:     round (st_area(parcelle.geom), 2)::text || ' m²'AS Super...
             ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 520

Hors ligne

 

#10 Tue 30 July 2019 09:54

Pascal Boulerie
Participant assidu
Lieu: France
Date d'inscription: 12 Sep 2005
Messages: 2947
Site web

Re: calcul surface parcelle

En tout cas, le message d’erreur trunc ne conseille pas d’utiliser la fonction round.


Conclusion :

Obligé de lire l’anglais tant que les messages ne sont pas localisés internationalement...

i18n


« L'État est désormais quasi déliquescent. » (José Cohen-Aknine, ingénieur X-Ponts, IGPEF, dans Déliquescence et renaissance de l'État.)

Hors ligne

 

#11 Tue 30 July 2019 09:58

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

il faut convertir son type en nombre simple.
Quelle fonction le permet?

Hors ligne

 

#12 Tue 30 July 2019 10:16

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: calcul surface parcelle

Désolé,
cette version de trunc attends un type numeric exclusivement
et st_area renvoie un double précision.
Comme l'a dit Pascal, il faut caster :

Code:

trunc(st_area(the_geom)::numeric, 2)::text || ' m²'

https://docs.postgresql.fr/10/datatype. … eric-table

En ligne

 

#13 Tue 30 July 2019 10:24

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

toujours pas...

J'ai mis ceci :  trunc(st_area(parcelle.geom)::numeric, 2)::text || ' m²' AS Superficie,

Et cela donne :

ERROR:  cannot change data type of view column "superficie" from double precision to text
SQL state: 42P16

Hors ligne

 

#14 Tue 30 July 2019 10:38

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: calcul surface parcelle

Vous avez aussi la possibilité de passer par la fonction to_char:

https://docs.postgresql.fr/10/functions-formatting.html

En ligne

 

#15 Tue 30 July 2019 10:39

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: calcul surface parcelle

toujours pas...

J'ai mis ceci :  trunc(st_area(parcelle.geom)::numeric, 2)::text || ' m²' AS Superficie,

Et cela donne :

ERROR:  cannot change data type of view column "superficie" from double precision to text
SQL state: 42P16


Oui c'est normal, vous changez le type de la colonne superficie
de votre vue, ce qui n'est pas autorisé dans un REPLACE.

Droppez votre vue avec la commande

Code:

DROP VIEW ma_vue
;

Puis recreez la.

Dernière modification par tumasgiu (Tue 30 July 2019 10:41)

En ligne

 

#16 Tue 30 July 2019 10:51

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

Nouveau message d'erreur :

ERROR:  syntax error at or near "AS"
LINE 5: DROP VIEW s_majic.v_vmap_parcelle_proprietaire AS
                                                       ^
SQL state: 42601
Character: 147

Hors ligne

 

#17 Tue 30 July 2019 11:21

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

Voici l'ensemble de la commande :

-- View: s_majic.v_vmap_parcelle_proprietaire

-- DROP VIEW s_majic.v_vmap_parcelle_proprietaire;

DROP VIEW s_majic.v_vmap_parcelle_proprietaire AS
SELECT nb_10_parcelle.id_par,
    proprietaire.dnupro,
    proprietaire.dnuper,
    proprietaire.ddenom,
    proprietaire.dqualp,
    proprietaire.dnomlp,
    proprietaire.dprnlp,
    proprietaire.dlign3,
    proprietaire.dlign4,
    proprietaire.dlign5,
    proprietaire.dlign6,
    parcelle.geom,
    proprietaire.id_dnupro,
    proprietaire.gdesip,
   trunc(st_area(parcelle.geom):: numeric, 2)::text || ' m²' AS Superficie,
    nb_10_parcelle.id_com
   FROM s_majic.nb_10_parcelle,
    s_majic.proprietaire,
    s_cadastre.parcelle
  WHERE nb_10_parcelle.id_dnupro = proprietaire.id_dnupro AND proprietaire.gdesip = '1'::bpchar AND nb_10_parcelle.id_par = parcelle.id_par AND nb_10_parcelle.id_com ~ similar_escape(( SELECT "user".restriction
           FROM s_vitis."user"
          WHERE "user".login::name = "current_user"()), NULL::text);

ALTER TABLE s_majic.v_vmap_parcelle_proprietaire
    OWNER TO u_vitis;
COMMENT ON VIEW s_majic.v_vmap_parcelle_proprietaire
    IS 'Nom, prénom et adresse du propriétaire de chaque parcelle. La géométrie est associée à chaque parcelle se qui permet d''en faire une vue.';

GRANT ALL ON TABLE s_majic.v_vmap_parcelle_proprietaire TO u_vitis;
GRANT SELECT ON TABLE s_majic.v_vmap_parcelle_proprietaire TO vmap_cadastre_user;

Hors ligne

 

#18 Tue 30 July 2019 11:32

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: calcul surface parcelle

La commande est

Code:

DROP VIEW s_majic.v_vmap_parcelle_proprietaire
;

ensuite :

Code:

CREATE VIEW s_majic.v_vmap_parcelle_proprietaire AS
SELECT nb_10_parcelle.id_par,
    proprietaire.dnupro,
    proprietaire.dnuper,
    proprietaire.ddenom,
    proprietaire.dqualp,
    proprietaire.dnomlp,
    proprietaire.dprnlp,
    proprietaire.dlign3,
    proprietaire.dlign4,
    proprietaire.dlign5,
    proprietaire.dlign6,
    parcelle.geom,
    proprietaire.id_dnupro,
    proprietaire.gdesip,
   trunc(st_area(parcelle.geom):: numeric, 2)::text || ' m²' AS Superficie,
    nb_10_parcelle.id_com
   FROM s_majic.nb_10_parcelle,
    s_majic.proprietaire,
    s_cadastre.parcelle
  WHERE nb_10_parcelle.id_dnupro = proprietaire.id_dnupro AND proprietaire.gdesip = '1'::bpchar AND nb_10_parcelle.id_par = parcelle.id_par AND nb_10_parcelle.id_com ~ similar_escape(( SELECT "user".restriction
           FROM s_vitis."user"
          WHERE "user".login::name = "current_user"()), NULL::text);

ALTER TABLE s_majic.v_vmap_parcelle_proprietaire
    OWNER TO u_vitis;
COMMENT ON VIEW s_majic.v_vmap_parcelle_proprietaire
    IS 'Nom, prénom et adresse du propriétaire de chaque parcelle. La géométrie est associée à chaque parcelle se qui permet d''en faire une vue.';

GRANT ALL ON TABLE s_majic.v_vmap_parcelle_proprietaire TO u_vitis;
GRANT SELECT ON TABLE s_majic.v_vmap_parcelle_proprietaire TO vmap_cadastre_user;

Dernière modification par tumasgiu (Tue 30 July 2019 11:32)

En ligne

 

#19 Tue 30 July 2019 11:45

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

J'ai fait ceci :

DROP VIEW s_majic.v_vmap_parcelle_proprietaire;

CREATE VIEW s_majic.v_vmap_parcelle_proprietaire AS
SELECT nb_10_parcelle.id_par,
    proprietaire.dnupro,
    proprietaire.dnuper,
    proprietaire.ddenom,
    proprietaire.dqualp,
    proprietaire.dnomlp,
    proprietaire.dprnlp,
    proprietaire.dlign3,
    proprietaire.dlign4,
    proprietaire.dlign5,
    proprietaire.dlign6,
    parcelle.geom,
    proprietaire.id_dnupro,
    proprietaire.gdesip,
   trunc(st_area(parcelle.geom):: numeric, 2)::text || ' m²' AS Superficie,
    nb_10_parcelle.id_com
   FROM s_majic.nb_10_parcelle,
    s_majic.proprietaire,
    s_cadastre.parcelle
  WHERE nb_10_parcelle.id_dnupro = proprietaire.id_dnupro AND proprietaire.gdesip = '1'::bpchar AND nb_10_parcelle.id_par = parcelle.id_par AND nb_10_parcelle.id_com ~ similar_escape(( SELECT "user".restriction
           FROM s_vitis."user"
          WHERE "user".login::name = "current_user"()), NULL::text);

ALTER TABLE s_majic.v_vmap_parcelle_proprietaire
    OWNER TO u_vitis;
COMMENT ON VIEW s_majic.v_vmap_parcelle_proprietaire
    IS 'Nom, prénom et adresse du propriétaire de chaque parcelle. La géométrie est associée à chaque parcelle se qui permet d''en faire une vue.';

GRANT ALL ON TABLE s_majic.v_vmap_parcelle_proprietaire TO u_vitis;
GRANT SELECT ON TABLE s_majic.v_vmap_parcelle_proprietaire TO vmap_cadastre_user;

La requête a fonctionné mais je n'ai pas accès à la vue : "Could not find the view on the server".

Hors ligne

 

#20 Tue 30 July 2019 11:55

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: calcul surface parcelle

Problème de droits d'acces visiblement.
Vous êtes connecté avec le super utilisateur ?

En ligne

 

#21 Tue 30 July 2019 12:02

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

Voici mon profil sur pgadmin :

CREATE USER jcascales WITH
  LOGIN
  NOSUPERUSER
  INHERIT
  CREATEDB
  CREATEROLE
  NOREPLICATION
  VALID UNTIL 'infinity'

Hors ligne

 

#22 Tue 30 July 2019 12:07

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: calcul surface parcelle

Si vous n'avez pas les rôles vmap_cadastre_user ou u_vitis,
vous ne pourrez pas consulter la vue.

Dernière modification par tumasgiu (Tue 30 July 2019 12:14)

En ligne

 

#23 Tue 30 July 2019 12:09

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

Je n'ai pas tout copié :

-- User: jcascales
-- DROP USER jcascales;

CREATE USER jcascales WITH
  LOGIN
  NOSUPERUSER
  INHERIT
  CREATEDB
  CREATEROLE
  NOREPLICATION
  VALID UNTIL 'infinity'

GRANT admin_aws, erp_formation_jean_saisie, lunel_admin, pav_saisie, u_vitis, vitis_admin, vitis_user, vm4ms_admin, vmap_admin, vmap_cadastre_user, vmap_public_data_reader, vmap_user TO jcascales;

Hors ligne

 

#24 Tue 30 July 2019 12:18

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: calcul surface parcelle

Possible que pgAdmin se soit mélangé les pinceaux.
Si vous utilisez pgAdmin 4, arrêtez le serveur pgAdmin
et relancez le (si vous êtes sous Windows, il faut cliquer droit
sur l’icône dans la barre des tâches à droite et choisir arrêter).

Dernière modification par tumasgiu (Tue 30 July 2019 12:19)

En ligne

 

#25 Tue 30 July 2019 12:37

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

J'ai arrêté pagadmin 4 (fermé firefox) et cela ne fonctionne toujours pas.

Hors ligne

 

#26 Tue 30 July 2019 12:37

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

J'ai arrêté pagadmin 4 (fermé firefox) et cela ne fonctionne toujours pas.

Hors ligne

 

#27 Tue 30 July 2019 12:53

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: calcul surface parcelle

Relancer le serveur pgAdmin si possible
(méthode indiquée dans le message précédent
ou ouvrir gestionnaire de tâche et arrêter le processus pgAdmin4.exe)

Dernière modification par tumasgiu (Tue 30 July 2019 12:53)

En ligne

 

#28 Tue 30 July 2019 14:05

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

J'ai deux possibilités :
- soit par pgadmin et clic droit sur mon serveur --> disconnect server
- soit par gestionnaire des tâches mais pgadmin s'ouvre avec firefox

Laquelle préférer?

Hors ligne

 

#29 Tue 30 July 2019 14:09

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: calcul surface parcelle

Première à préférer, c'est moins brutal,
vous demandez gentiment au serveur de s’éteindre.

En ligne

 

#30 Tue 30 July 2019 14:13

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: calcul surface parcelle

de toute façon la 2ème n'est pas possible, car pour fermer pgadmin, je dois fermer firefox. Ce qui ne permet pas de fermer l'application pgadmin.

Hors ligne

 

Pied de page des forums

Powered by FluxBB