Pages: 1
- Sujet précédent - [PostGis] géométrie non valide avec la fonction ST_MakePOINT - Sujet suivant
#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
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.
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
Pages: 1
- Sujet précédent - [PostGis] géométrie non valide avec la fonction ST_MakePOINT - Sujet suivant