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 Fri 02 February 2018 18:38

image95
Participant assidu
Date d'inscription: 6 Sep 2014
Messages: 257

Postgis : message d'erreur st_makepoint

Bonjour,

J'ai bien créé une colonne geom sur ma table :

Code:

ALTER TABLE public.entrants ADD COLUMN geom geometry(POINT,2154);

Je veux maintenant remplir le champ geom à partir des champs X et Y :

Code:

UPDATE public.entrants SET geom = ST_SetSRID(st_makepoint(entrants."x_resi",entrants."y_resi"),2154);

Mais j'ai ce message d'erreur :

Code:

ERROR:  ERREUR:  la fonction st_makepoint(character varying, character varying) n'existe pas
LINE 2: UPDATE public.entrants SET geom = ST_SetSRID(st_makepoint(en...
                                                     ^
HINT:  Aucune fonction ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.


SQL state: 42883
Character: 114

Pouvez vous m'aider? Merci

Hors ligne

 

#2 Fri 02 February 2018 20:22

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

Re: Postgis : message d'erreur st_makepoint

Bonjour,

Le message d'erreur vous indique la solution :
les arguments donnés à la fonction sont de type character varying (du texte),
hors ce que celle-ci attends ce sont des nombres réels à virgule flottantes
(double precision).

Vous pouvez convertir du texte en nombre réel grâce à l'opérateur de transtypage,
ou cast : ::

Code:

st_makepoint(x_resi::double precision, y_resi::double precision)

Hors ligne

 

#3 Sat 03 February 2018 09:30

image95
Participant assidu
Date d'inscription: 6 Sep 2014
Messages: 257

Re: Postgis : message d'erreur st_makepoint

Merci,

J'ai donc testé

Code:

st_makepoint(x_resi::double precision, y_resi::double precision)

mais j'avais un message d'erreur.

J'ai testé celà :

Code:

ALTER TABLE entrants
ALTER COLUMN x_resi
TYPE double precision
USING x_resi::double precision

celà fonctionne. Je me suis assuré que le cast avait été pris en compte avec :

Code:

[SELECT pg_typeof(x_resi),pg_typeof(y_resi)
from entrants limit 1;

C'est ok.Par contre, lorsque je retente de generer les points dans ma colonne geom depuis les champs X et Y, j'ai toujours un message d'erreur :

Code:

UPDATE public.entrants SET geom = (st_makepoint(x_resi,y_resi),2154);
ERROR:  ERREUR:  la colonne « geom » est de type geometry mais l'expression est de type record
LINE 1: UPDATE public.entrants SET geom = (st_makepoint(x_resi,y_res...                                     ^
HINT:  Vous devez réécrire l'expression ou lui appliquer une transformation de type.]
SQL state: 42804
Character: 35

Que dois je faire? Pour info, mes champs X et Y stockent des coordonnées en lambert93, il s'agit donc de nombres entiers sans virgules. Si la fonction attend des champs en double precision, doit je donc faire une conversion des mes champs vers des degres longitude latitude (4326)?

Si vous pensez pouvoir m'aider? Je suis en pleine galère.

Dernière modification par image95 (Sat 03 February 2018 09:32)

Hors ligne

 

#4 Sat 03 February 2018 10:13

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

Re: Postgis : message d'erreur st_makepoint

Encore une fois le message d'erreur vous donne une indication.

Vous avez oublier d’écrire st_setstrid avant votre première parenthèse ouvrante,
et PostgreSQL l’interpréte comme si vous vouliez créer un type record avec une
définition (geometry, integer).

Hors ligne

 

#5 Sat 03 February 2018 12:13

image95
Participant assidu
Date d'inscription: 6 Sep 2014
Messages: 257

Re: Postgis : message d'erreur st_makepoint

Merci à vous...pour le coup, c'était une etourderie de ma part. Celà a fonctionné. Avant d'executer, j'avais fait un cast depuis le type double precision vers bigint car mes champs x et y stockent des entiers (lambert93) et non des réels.
N'est ce pas etonnant que la fonction ait donc fonctionné bien que la doc semble stipuler qu'il faille en entrée des datatype double precision?

Hors ligne

 

#6 Sat 03 February 2018 13:23

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

Re: Postgis : message d'erreur st_makepoint

La fonction fonctionne car PostgreSQL a effectué ce qu'on appelle un transtypage implicite.
En effet, on ne prend aucun risque à transformer un entier vers un réel, car à chaque entier
correspond exactement un réel, la fonction de transtypage d'entier vers réel est dite injective.

La fonction inverse quant à elle ne l'est pas, donc transtyper un réel vers un entier implique un choix
(arrondir a l'entier supérieur ou inférieur), et il est préférable d'obliger l'utilisateur à expliciter ce choix,
afin d'éviter des mauvaises surprises en laissant la décision à la machine

Dernière modification par tumasgiu (Sat 03 February 2018 13:56)

Hors ligne

 

Pied de page des forums

Powered by FluxBB