#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²'
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