#1 Fri 16 March 2012 09:49
- Gr1ng
- Participant occasionnel
- Date d'inscription: 7 Nov 2007
- Messages: 30
[PostGIS] Correction géométrique d'une ligne
Bonjour,
J'essaie de corriger des lignes de type multilinestring qui possèdent des "trous". Dans tous les cas, les segments qui doivent être créés (pour boucher les trous) relient les points les plus proches pour garder une cohérence du tracé. L'objet géométrique résultant doit être de type linestring.
-> voir le schéma en pièce jointe
Quelqu'un a-t-il déjà été amené à faire ce genre de traitement avec PostGIS ? Je ne sais pas comment m'y prendre.
En vous remerciant de votre aide.
Dernière modification par Gr1ng (Fri 16 March 2012 09:49)
Hors ligne
#2 Fri 16 March 2012 10:19
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [PostGIS] Correction géométrique d'une ligne
Bonjour,
J'essaie de corriger des lignes de type multilinestring qui possèdent des "trous". Dans tous les cas, les segments qui doivent être créés (pour boucher les trous) relient les points les plus proches pour garder une cohérence du tracé. L'objet géométrique résultant doit être de type linestring.
-> voir le schéma en pièce jointe
Quelqu'un a-t-il déjà été amené à faire ce genre de traitement avec PostGIS ? Je ne sais pas comment m'y prendre.
En vous remerciant de votre aide.
Bonjour,
Oui, ca se fait. La difficulté supplémentaire peut venir si les elements de la MultiLine ne sont pas ordonnés: il faudra alors les ordonner avant de boucher les trous.
Le principe general:
Si ordonné, trop facile : exploser la multi en ses points, puis reconstuire une ligne avec ces points: les trous sont alors bouchés.
Code:
select st_makeline( (st_dumppoints(geom)).geom from matable;
Si pas ordonné, moins facile...
Nicolas
Dernière modification par Nicolas Ribot (Fri 16 March 2012 10:23)
Hors ligne
#3 Fri 16 March 2012 10:32
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [PostGIS] Correction géométrique d'une ligne
Bonjour,
J'essaie de corriger des lignes de type multilinestring qui possèdent des "trous". Dans tous les cas, les segments qui doivent être créés (pour boucher les trous) relient les points les plus proches pour garder une cohérence du tracé. L'objet géométrique résultant doit être de type linestring.
-> voir le schéma en pièce jointe
Quelqu'un a-t-il déjà été amené à faire ce genre de traitement avec PostGIS ? Je ne sais pas comment m'y prendre.
En vous remerciant de votre aide.
En vert, la Multi, en rouge, la ligne complétée avec st_dumppoints.
Se peut-il que les morceaux des multilinestrings ne soient pas dans l'ordre dans vos données ?
Nicolas
Dernière modification par Nicolas Ribot (Fri 16 March 2012 10:33)
Hors ligne
#4 Fri 16 March 2012 11:18
- Gr1ng
- Participant occasionnel
- Date d'inscription: 7 Nov 2007
- Messages: 30
Re: [PostGIS] Correction géométrique d'une ligne
edit : merci je viens de lire vos nouveaux messages...je regarde ça..
Dernière modification par Gr1ng (Fri 16 March 2012 11:23)
Hors ligne
#5 Mon 19 March 2012 10:02
- Gr1ng
- Participant occasionnel
- Date d'inscription: 7 Nov 2007
- Messages: 30
Re: [PostGIS] Correction géométrique d'une ligne
Code:
select st_makeline( (st_dumppoints(geom)).geom) from matable;
Bonjour,
Ce code me retourne une erreur : SQL Error: ERROR: set-valued function called in context that cannot accept a set
En revanche, j'arrive bien à sortir les points des lignes..
Code:
select ((st_dumppoints(the_geom)).geom) from matable
Hors ligne
#6 Mon 19 March 2012 10:57
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [PostGIS] Correction géométrique d'une ligne
Nicolas Ribot a écrit:Code:
select st_makeline( (st_dumppoints(geom)).geom) from matable;
Bonjour,
Ce code me retourne une erreur : SQL Error: ERROR: set-valued function called in context that cannot accept a set
En revanche, j'arrive bien à sortir les points des lignes..Code:
select ((st_dumppoints(the_geom)).geom) from matable
Oui pardon:
Code:
select st_makeline( geom) from (select ((st_dumppoints(geom)).geom) as geom from matable);
il faut un sous-select pour sortir les geometries.
Nicolas
Hors ligne