#1 Fri 10 March 2017 14:17
- jeanvie
- Juste Inscrit !
- Lieu: Freiburg, Allemagne
- Date d'inscription: 10 Mar 2017
- Messages: 2
[PostGIS] ST_MakeLine
Bonjour a tous,
je travaille sur une base Postgresql avec l'extension PostGIS.
Je cherche a construire des lignes en fonction de points et je bute sur ma requete SQL.
voici en gros la table "MaTablePoints" :
id;geom;codeline;type
Code:
1;xxxxx;1;A 2;xxxxx;2;A 3;xxxxx;2;A 4;xxxxx;1;B 5;xxxxx;2;B 6;xxxxx;3;B 7;xxxxx;3;A 8;xxxxx;0;A 9;xxxxx;1;A 10;xxxxx;2;A 11;xxxxx;3;A
Une ligne se defini come suit : 1-2-2-2-...-3
Le code "0" doit etre ignoré. C'est un point n'appartenant a aucune ligne.
Ma requete devra donc me retourner 3 lignes(geometrique) : 2xA et 1xB
Voici maintenant ma requete :
Code:
INSERT INTO public."MaTableLigne" SELECT ST_MakeLine(geom ORDER BY id ASC) AS geom, type FROM public."MaTablePoints" GROUP BY type
Celle-ci me créer une ligne pour chaque type. Donc : 2 Lignes
Postgresql fait sont boulot tout a fait correctement puisque je n'utilise pas la colonne "codeline"...
C'est juste moi qui suis une quiche car je n'arrive pas a trouver la requette correcte pour combiner codeline et type...
une idée ?
Merci par avance a ceux qui me liront ...
Hors ligne
#2 Fri 10 March 2017 16:55
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [PostGIS] ST_MakeLine
Bonjour,
Pas sur de comprendre ce qui définit une ligne dans votre exemple:
De quels points sont composées les deux linestrings 'A' ?
Les points d'id 2 et 3 doivent etre dans deux linestrings différentes ?
Nicolas
Hors ligne
#3 Fri 10 March 2017 17:09
- jeanvie
- Juste Inscrit !
- Lieu: Freiburg, Allemagne
- Date d'inscription: 10 Mar 2017
- Messages: 2
Re: [PostGIS] ST_MakeLine
Merci beaucoup de vous pencher sur mon cas.
Je dois avouer que j'ai poster la meme question sur developpez.net et le modo m'a reglé ca d'un coup de baguette magique.
Le codeline est la troisième colonne de la table.
Une ligne commence par le code 1, les points intermédiaires sont en code 2 et la ligne se termine par le code 3.
C'est une méthode classique de relevé de géomètre (que je suis ...)
Je poste ici le lien de la discussion:
https://www.developpez.net/forums/d1660 … ost9077354
Et ici le résultat pour ceux que ca interresserais:
Code:
WITH CTE AS ( SELECT id, geom, codeline, type, SUM(CASE WHEN codeline = 1 THEN 1 ELSE 0 END) OVER(partition by type order by id) as ligne from public."MaTablePoints" ) INSERT INTO public."MaTableLigne" SELECT ST_MakeLine(geom ORDER BY id ASC) AS geom, type FROM CTE where codeline <> 0 GROUP BY type , ligne
Cela fonctionne a merveille ! Je suis comblé !
En tous cas, merci a vous et très bon Week-End !
par contre je ne sais pas comment mettre le sujet en "résolu"...
Hors ligne