#61 Mon 05 August 2019 15:53
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: calcul surface parcelle
Pour répondre à la deuxième question elle reste en texte car vous l'explicitez vous-même dans trunc(st_area(parcelle.geom)::numeric, 2)::text c'est le ::text qui type la colonne
--> Donc si je suis ton raisonnement, je mets ::numeric à la place de ::text?
Hors ligne
#62 Mon 05 August 2019 16:00
- francis_31
- Participant actif
- Date d'inscription: 24 Nov 2010
- Messages: 88
Re: calcul surface parcelle
oui ça devrait être bon.
je dirais même avec trunc(st_area(parcelle.geom)::numeric, 2). En fait, sans rien cela devrait donner du numeric. Voir http://www.postgresqltutorial.com/postgresql-trunc/
Hors ligne
#63 Mon 05 August 2019 16:07
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: calcul surface parcelle
Juste une chose là-dessus que je ne suis pas absolument sur : j'aurais utilisé round pour qu'il arrondisse la dernière décimale car je ne sais pas si fonctio trunc le fait (après peu d'importance à mon avis car vous ne devez pas être à 1 cm carré près).
Trunc n'arrondit pas en effet, il tronque après n décimales.
Si on désire arrondir, on peut utiliser comme vous l'indiquez
la fonction round.
Pour ce qui est du formatage :
J'ai testé sous excel (2007), le fait d'encadrer
la valeur par des double quotes (") n'affecte pas
le formatage des chiffres à virgule,
excel les formate bien en valeurs numériques.
Est ce que le séparateur de décimal dans excel
est bien , ?
Il faut regarder dans Options>Options avancées
Sur le fait qu'Excel évalue tout de même la somme
de valeurs "textes", ben, c'est une fonctionnalité
je pense, Excel tente de convertir le texte en numérique
de manière cachée.
Ca permet à Excel d'être souple, et de
pas forcer l'utilisateur à spécifier le bon format de données
pour avoir un résultat rapide, comme une somme.
Ca permet de pas être hyper rigoureux.
Par contre, y'a pas grande utilité à caster un flottant/numeric
en text, remplacer le séparateur de décimale par ",",
pour ensuite le re caster en numeric, à part si on a des
actions chez Intel et qu'on veut user le processeur
de la machine plus rapidement.
[Edit]
j'avais pas lu les messages précédents
Dernière modification par tumasgiu (Mon 05 August 2019 16:22)
En ligne
#64 Mon 05 August 2019 16:45
- francis_31
- Participant actif
- Date d'inscription: 24 Nov 2010
- Messages: 88
Re: calcul surface parcelle
La méthode indiquée dans Options - Options avancées du logiciel excel est intéressante et doit résoudre le problème, à voir sur combien de poste il va falloir qu'il aille réaliser le changement et si ça va poser problème chez les utilisateurs après car ils ont éventuellement des fichiers avec le séparateur "." provenant d'autres sources .
A ma connaissance on peut le faire aussi en réglage Windows mais là attention car ça peut poser des problèmes sur d'autres logiciels, de ce fait j'y toucherais pas si j'avais ce type de problème.
Je suis tout à fait d'accord sur l'optimisation de la requête sql.
Disons que ça fait un bon exercice pour comprendre le fonctionnement des requêtes avec l'utilisation des fonctions et typages :-)
Courage. La solution à l'air proche !
Hors ligne
#65 Mon 05 August 2019 16:48
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: calcul surface parcelle
Si je mets :: numeric à la place de :: text, cela ne fonctionne pas.
Hors ligne
#66 Mon 05 August 2019 17:09
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: calcul surface parcelle
Si je mets :: numeric à la place de :: text, cela ne fonctionne pas.
Oui c'est logique, vu que votre serveur Postgres utilise "." comme
séparateur décimal, il refusera de transformer un texte du type 'X,Y'
en numérique.
D'autant plus que l'on y concatene le texte " m²" !
En ligne
#67 Mon 05 August 2019 17:15
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: calcul surface parcelle
Ce que vous devriez faire c'est :
1. Regarder quel est le sep. décimal utilisé par excel.
2. Utiliser le même symbole dans votre vue.
Comme l'a dit francis, il faut que tout vous utilisateurs
partagent le même symbole de sep. decimal.
Le meilleur selon moi, si c'est possible,
serait de laisser le type de la colonne
de votre vue en numeric, et pouvoir spécifier
dans votre export le symbole a utiliser.
En ligne
#68 Mon 05 August 2019 17:17
- francis_31
- Participant actif
- Date d'inscription: 24 Nov 2010
- Messages: 88
Re: calcul surface parcelle
à mon avis :
si vous avez mis : trunc(st_area(parcelle.geom)::numeric, 2) sans le replace avant ça doit donner du numeric à la fin
si vous avez mis: trunc(st_area(parcelle.geom)::numeric, 2)::numeric sans le replace ça sert pas vous aurez aussi du numeric
si vous avez mis: replace(trunc(st_area(parcelle.geom)::numeric, 2)::text,'.', ',') AS superficie ça donne du texte
si vous avez mis: replace(trunc(st_area(parcelle.geom)::numeric, 2)::text,'.', ',')::numeric AS superficie soit ça fonctionne et ça donne du numeric et ça répond à votre question (mais à mon sens ça risque de pas passer car postgresql ne voudra pas typer une colonne en nombre si pour lui une virgule n'est pas un séparateur de décimale, ça reste à tester on ne sait jamais).
si vous avez mis: replace(trunc(st_area(parcelle.geom)::numeric, 2),'.', ',')::numeric AS superficie ça risque de pas fonctionner parceque la fonction replace attend à mon avis une chaine de caractère en premier paramètre et non pas un numeric ce qui est le cas ici.
Ainsi, et au vu des différents messages ce serait moi je ferai :
round(st_area(parcelle.geom)::numeric, 2) ce qui donnera une valeur qui est un nombre et pas un texte, qui sera arrondi à la dernière décimale mais qui conservera le point comme séparateur de décimale.
Ensuite, je testerai l'option indiquée par tumasgiu dans excel et les options avancées.
C'est ce qui me semble dans votre cas le plus adapté à défaut d'une solution idéale.
Après il faudrait passer probablement par un développement spécifique VMap qui vous permettrait via un fichier xsl fop d'avoir une colonne typée avec le séparateur que vous souhaitez mais là on entre dans du plus compliqué car il faudrait à priori du code php associé à un fichier xsl.
C'est pour cela que je vous suggérai de voir si un export VMap associé au module cadastre déjà mis à disposition ne pourrait pas convenir car le travail est peut-être fait.
En espérant que ces éléments pourront vous aider.
Hors ligne
#69 Mon 05 August 2019 17:20
- francis_31
- Participant actif
- Date d'inscription: 24 Nov 2010
- Messages: 88
Re: calcul surface parcelle
dsl j'étais entrain décrire, je n'ai pas vu la réponse de 17h15 (tumasgiu) mais ça semble être à peu près la même solution.
bonne fin d'apm !
Hors ligne
#70 Mon 05 August 2019 17:33
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: calcul surface parcelle
Voici les tests :
trunc(st_area(parcelle.geom)::numeric, 2) : ERROR: cannot change data type of view column "superficie" from text to numeric
trunc(st_area(parcelle.geom)::numeric, 2)::numeric : ERROR: cannot change data type of view column "superficie" from text to numeric
replace(trunc(st_area(parcelle.geom)::numeric, 2)::text,'.', ',') : Fonctionne mais donne du texte sous excel
replace(trunc(st_area(parcelle.geom)::numeric, 2)::text,'.', ',')::numeric : ERROR: cannot change data type of view column "superficie" from text to numeric
round(st_area(parcelle.geom)::numeric, 2) : ERROR: cannot change data type of view column "superficie" from text to numeric
Sinon, dans excel, sélection de la colonne >>- Données>>- Convertir en mode standard.
Hors ligne
#71 Mon 05 August 2019 18:42
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: calcul surface parcelle
Vous avez le même problème qu'au départ.
REPLACE ne fonctionne pas si le type d'une des colonnes de votre vue
change (ici en l'occurence text->numeric).
Il faut dropper la vue et la recréer.
En ligne
#72 Tue 06 August 2019 08:56
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: calcul surface parcelle
Voici la requete DROP puis CREATE :
-- View: cadastre.v_vmap_parcelle_proprietaire
DROP VIEW cadastre.v_vmap_parcelle_proprietaire;
CREATE VIEW cadastre.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,
replace(trunc(st_area(parcelle.geom)::numeric, 2)::numeric, '.'::text, ','::text) 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 cadastre.v_vmap_parcelle_proprietaire
OWNER TO u_vitis;
COMMENT ON VIEW cadastre.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 cadastre.v_vmap_parcelle_proprietaire TO u_vitis;
GRANT SELECT ON TABLE cadastre.v_vmap_parcelle_proprietaire TO vmap_cadastre_user;
Ne fonctionne pas : ERROR: function replace(numeric, text, text) does not exist
Hors ligne
#73 Tue 06 August 2019 10:10
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: calcul surface parcelle
si vous voulez conservez superficie en numeric :
trunc(st_area(parcelle.geom)::numeric, 2)::numeric
En ligne
#74 Tue 06 August 2019 10:22
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: calcul surface parcelle
si vous voulez conservez superficie en numeric :
trunc(st_area(parcelle.geom)::numeric, 2)::numeric
>>-C'est toujours considéré comme du texte
De toute façon, je veux toujours remplacer le point par une virgule.
Hors ligne
#75 Tue 06 August 2019 10:39
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: calcul surface parcelle
alors
Code:
trunc(st_area(parcelle.geom)::numeric, 2)::text
En ligne
#76 Tue 06 August 2019 10:43
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: calcul surface parcelle
Non, même résultat.
Hors ligne
#77 Wed 07 August 2019 08:22
- francis_31
- Participant actif
- Date d'inscription: 24 Nov 2010
- Messages: 88
Re: calcul surface parcelle
Bonjour,
je ne pense pas que ce soit possible de faire en sorte que postgresql interprète les données en format type numérique avec un séparateur ",".
Le séparateur décimal en tant que nombre restera un "." quoiqu'il en soit à mon sens.
Le seul moyen, et vous l'avez déjà réalisé, est de convertir en texte mais ce n'est pas ce que vous souhaitez.
Après cela devient un développement logiciel qui réalise la conversion et affiche une colonne en forçant le type décimal dans un fichier de sortie excel mais ce n'est plus le même sujet car cela devient du développement applicatif spécifique propre à chaque logiciel, peut-être voir avec l'éditeur du logiciel si il y a une solution simple pour faire cela.
Si je me trompe et que quelqu'un trouve la solution je serai également intéressé de la connaitre.
Bonne journée.
Hors ligne
#78 Wed 07 August 2019 10:40
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: calcul surface parcelle
Bon, je pense que je vais en rester sur la modif sur excel (données, convertir la colonne...).
Merci.
Hors ligne