Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Printemps des cartes 2024

#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: 1536

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

 

Pied de page des forums

Powered by FluxBB