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 Tue 12 March 2013 10:45

JP LLORENS
Participant assidu
Date d'inscription: 12 Nov 2008
Messages: 231

[PostGis] géométrie non valide avec la fonction ST_MakePOINT

Bonjour.
Sous Postgres, je vais chercher via un dblink et une vue des données dans une base liée à l'instruction des documents d'urbanismes.
Je récupère entre autre des champs de coordonnées x et y (toujours renseignés) et un champs de géométrie "the_geom" (qui n'est pas toujours complété).
Les données x, y semblent être cohérentes avec mon système de projection (CC44).
Pour compléter les géométries absentes, j'utilise dans ma vue la fonction ST_MakePoint en allant chercher les coordonnées x et y :

CASE
    WHEN foo.the_geom IS NULL THEN st_makepoint(foo.x, foo.y)
    ELSE foo.the_geom
END AS the_geom,
st_isvalidreason(the_geom)


Malheureusement les géométries générées par la fonction st_makepoint ne sont pas valides.
En forçant le srid avec un SetSRID, ça ne change rien.
Quelqu'un aurait-il une idée ?
Merci par avance
JPL

Hors ligne

 

#2 Tue 12 March 2013 11:06

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: [PostGis] géométrie non valide avec la fonction ST_MakePOINT

Bonjour,

Quel est message indiquant l'invalidité ?

je pensais qu'un point avec deux coordonnées etait tjs valide.

Nicolas

Hors ligne

 

#3 Tue 12 March 2013 11:13

JP LLORENS
Participant assidu
Date d'inscription: 12 Nov 2008
Messages: 231

Re: [PostGis] géométrie non valide avec la fonction ST_MakePOINT

Bonjour
Il n'y a pas de message associé aux géométries non valides dans ma vue suite à la fonction st_ isvalidresaon
exemple (date,année, x,y,the_geom, validité):
"2011-02-17";2011;1508254.65399016;3245327.51428257;"0101000020680F00002DE66BA79E033741E202D4C187C24841";"Valid Geometry"
"2012-11-19";2012;1502948.90338525;3246667.63303447;"0101000000784144E7E4EE3641054607D125C54841";""

La géométrie de la 2ème ligne est générée avec ST_MakePPOINt et je n'ai pas de retour sur la validité de cette dernière, contrairement à la 1ère ligne ou la géométrie est récupérée dans la table source
JPL

Hors ligne

 

#4 Tue 12 March 2013 11:44

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1233
Site web

Re: [PostGis] géométrie non valide avec la fonction ST_MakePOINT

Bonjour,

il faut faire le tes de validité sur le CASE (dans votre second cas, the_geom est null) :

Code:

CASE
    WHEN foo.the_geom IS NULL THEN st_makepoint(foo.x, foo.y)
    ELSE foo.the_geom
END AS the_geom,
st_isvalidreason(CASE
    WHEN foo.the_geom IS NULL THEN st_makepoint(foo.x, foo.y)
    ELSE foo.the_geom
END AS the_geom)

Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#5 Tue 12 March 2013 12:15

JP LLORENS
Participant assidu
Date d'inscription: 12 Nov 2008
Messages: 231

Re: [PostGis] géométrie non valide avec la fonction ST_MakePOINT

En effet, en avec le st_isvalidreason après le case j'obtiens bien .... que la géométrie est valide pour tous mes points. Sauf que lorsque je charge ma vue dans QGIS, je ne visualise rien.
J'ai donc à nouveau ajouté la fonction setsrid dans mon case et là, miracle, ça marche. J'ai du faire une fausse manip hier lors de mes tests.
Merci de vos retours.
JPL

Hors ligne

 

#6 Tue 12 March 2013 22:34

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

Re: [PostGis] géométrie non valide avec la fonction ST_MakePOINT

Salut,
j'aimerai rajouter (sur la forme) que la fonction COALESCE permet d'obtenir le même résultat que l'expression conditionnelle CASE dans ce cas de figure, tout en étant plus lisible. smile
http://www.postgresql.org/docs/9.2/stat … NVL-IFNULL

Dernière modification par tumasgiu (Tue 12 March 2013 22:53)

Hors ligne

 

#7 Wed 13 March 2013 10:13

JP LLORENS
Participant assidu
Date d'inscription: 12 Nov 2008
Messages: 231

Re: [PostGis] géométrie non valide avec la fonction ST_MakePOINT

Bonjour.
Merci pour l'info. La doc n'est pas très limpide mais en effet en remplaçant  mon CASE par :
COALESCE (foo.the_geom, setsrid(st_makepoint(foo.x, foo.y), 3944))
je récupère la même chose.
Cordialement
JPL

Hors ligne

 

Pied de page des forums

Powered by FluxBB