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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 14 January 2010 15:52

NyPon
Participant actif
Date d'inscription: 3 Nov 2008
Messages: 111

Creation Ligne A Partir De Points

Bonjour au forum et bonne année 2010.

Je suis en train d'essayer de créer des lignes à partir de points gps.
Les points gps récoltés font partie d'une ligne.

donc j'ai une table POINTS avec une colonne id_ligne pour savoir à quelle ligne appartient le point.

J'arrive à sélectionner les points dont l'identifiant est connu pour construire ma ligne mais je suis obligé de le faire un par un avec le code suivant.

Code:

SELECT st_makeline(the_geom) as ligne, t.id_ligne
FROM (SELECT the_geom, id_ligne
        FROM points 
        where id_ligne = 'L12') l
        group by t.id_ligne;

ainsi j'ai créé la ligne 12.

cependant, j'ai des dizaines et des dizaines de lignes et je voudrais que postGIS me crée toutes les lignes si l'identifiant est identique.

J'ai essayé quelque chose comme ça, mais ça ne va pas :

Code:

SELECT st_makeline(the_geom) as ligne, t.id_ligne
FROM (SELECT the_geom, id_ligne
        FROM points 
        where id_ligne = id_ligne) l
        group by t.id_ligne;

il me met l'erreur suivante : ERREUR:  geometry requires more points

Je me dis qu'en faisant une union ça pourrait fonctionner mais pour l'instant, je n'y arrive pas.
est-ce que vous auriez une idée pour réaliser cette requête ?

je vous remercie d'avance,

à bientôt,

cordialement,

Hors ligne

 

#2 Thu 14 January 2010 17:46

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

Re: Creation Ligne A Partir De Points

NyPon a écrit:

Bonjour au forum et bonne année 2010.

Je suis en train d'essayer de créer des lignes à partir de points gps.
Les points gps récoltés font partie d'une ligne.

donc j'ai une table POINTS avec une colonne id_ligne pour savoir à quelle ligne appartient le point.

J'arrive à sélectionner les points dont l'identifiant est connu pour construire ma ligne mais je suis obligé de le faire un par un avec le code suivant.

Code:

SELECT st_makeline(the_geom) as ligne, t.id_ligne
FROM (SELECT the_geom, id_ligne
        FROM points 
        where id_ligne = 'L12') l
        group by t.id_ligne;

ainsi j'ai créé la ligne 12.

cependant, j'ai des dizaines et des dizaines de lignes et je voudrais que postGIS me crée toutes les lignes si l'identifiant est identique.

J'ai essayé quelque chose comme ça, mais ça ne va pas :

Code:

SELECT st_makeline(the_geom) as ligne, t.id_ligne
FROM (SELECT the_geom, id_ligne
        FROM points 
        where id_ligne = id_ligne) l
        group by t.id_ligne;

il me met l'erreur suivante : ERREUR:  geometry requires more points

Je me dis qu'en faisant une union ça pourrait fonctionner mais pour l'instant, je n'y arrive pas.
est-ce que vous auriez une idée pour réaliser cette requête ?

je vous remercie d'avance,

à bientôt,

cordialement,


Bonjour,

Et sans preciser l'identifiant des lignes ?
Il va creer toutes les lignes pour chaque identifiant de ligne, avec la clause group by, non ?

Nicolas

Hors ligne

 

#3 Fri 15 January 2010 11:14

NyPon
Participant actif
Date d'inscription: 3 Nov 2008
Messages: 111

Re: Creation Ligne A Partir De Points

Bonjour Monsieur Ribot,

Merci de votre réponse.

j'ai essayé ceci :

Code:

SELECT st_makeline(the_geom) as ligne
FROM (SELECT the_geom, id_ligne
        FROM point)t
        group by t.id_id_ligne;

et il me met la même erreur : ERREUR:  geometry requires more points

j'ai essayer de faire geomunion mais je me rends compte que la fonciton geomunion (geometry) n'existe plus !

Hors ligne

 

#4 Fri 15 January 2010 11:53

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

Re: Creation Ligne A Partir De Points

nponzo a écrit:

Bonjour Monsieur Ribot,

Merci de votre réponse.

j'ai essayé ceci :

Code:

SELECT st_makeline(the_geom) as ligne
FROM (SELECT the_geom, id_ligne
        FROM point)t
        group by t.id_id_ligne;

et il me met la même erreur : ERREUR:  geometry requires more points

j'ai essayer de faire geomunion mais je me rends compte que la fonciton geomunion (geometry) n'existe plus !


Sur quelle version de postgis/pg travaillez-vous ?
Sur la 1.4, st_union(geometry) est definie.

Sinon, pour le message d'erreur, ce peut-il que certains identifiants de lignes fassent reference a seulement un seul point ? auquel cas makeline renvoie cette erreur.
Si c'est le cas, il faut rajouter une clause where pour filtrer les id_id_ligne qui referencent plus d'un point.

Nico

Hors ligne

 

#5 Fri 15 January 2010 12:23

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

Re: Creation Ligne A Partir De Points

nponzo a écrit:

Bonjour Monsieur Ribot,

Merci de votre réponse.

j'ai essayé ceci :

Code:

SELECT st_makeline(the_geom) as ligne
FROM (SELECT the_geom, id_ligne
        FROM point)t
        group by t.id_id_ligne;

et il me met la même erreur : ERREUR:  geometry requires more points

j'ai essayer de faire geomunion mais je me rends compte que la fonciton geomunion (geometry) n'existe plus !


Sur une pgis 1.4, j'ai testé une table contenant :

idligne; geom

1;"POINT(0 0)"
1;"POINT(1 1)"
2;"POINT(2 2)"
2;"POINT(2 3)"
3;"POINT(5 3)"

et la requete suivante:

SELECT st_astext(st_makeline(the_geom)) as ligne
FROM (SELECT geom AS THE_GEOM, idligne
FROM test) t
group by t.idligne;

qui me renvoie:
"LINESTRING(2 2,2 3)"
"LINESTRING(5 3)"
"LINESTRING(0 0,1 1)"


j'ai aussi essayé avec un identifiant ne concernant aucun point, et une ligne vide est créée par la requete.

Nicolas

Hors ligne

 

#6 Fri 15 January 2010 14:55

NyPon
Participant actif
Date d'inscription: 3 Nov 2008
Messages: 111

Re: Creation Ligne A Partir De Points

re bonjour,

J'ai une version pgis 1.4 avec un postgres 8.4.2

La requête précédente ne fonctionne pas (toujours la même erreur) mais j'ai finalement, réussit avec st_union.

voici mon code :

Code:

 SELECT points.id_ligne, st_union(points.the_geom) AS the_geom
   FROM points
  WHERE isvalid(points.the_geom)
  GROUP BY points.id_ligne
  ORDER BY points.id_ligne;

cependant, je ne peux pas prendre les colonnes que je veux car il y a le group by qui m'oblige à écrire le nom de chaque colonne sélectionnée dans la clause GROUP BY sinon je me retrouve avec plus d'enregistrement que prévus.

Je créé donc ma vue avec seulement deux colonne et toutes les infos intéressantes derrières n'apparaissent pas.

Cependant, je pense que si je fait une copie de ces données dans une nouvelle table "ligne" je n'aurais pas de problème.

en tout cas, merci beaucoup pour votre aide, je n'arrivais pas a trouver l'équivalent de geomunion(geometry), et dans ma version il y a geomunion(geometry, geometry) mais ça ne fonctionnait pas. je ne savais pas qu'ils l'avaient remplacé par st_union.

merci encore et à bientôt,

cordialement,

Hors ligne

 

#7 Fri 15 January 2010 15:42

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: Creation Ligne A Partir De Points

Bonjour,

Cela me parait logique. Si tu regroupes deux lignes dont les valeurs des attributs sont différents, comment veux tu que le serveur regroupe ces valeurs si vous ne le lui dite pas ? wink

Admettons que tu as deux lignes avec un champ attributaire qui donne une durée moyenne en s (par exemple 500 et 1000). Dans ton SELECT tu rajoutes average(duree) et tu obtiendras "750" dans le champ duree de ta ligne fusionnée.

Si tu as des champs attributaires texte identique, tu fais un length() ou max() ou autre fonction qui gère le bon type de champ, si les deux valeurs sont les mêmes il retournera toujours la même

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#8 Fri 15 January 2010 15:59

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

Re: Creation Ligne A Partir De Points

nponzo a écrit:

re bonjour,

J'ai une version pgis 1.4 avec un postgres 8.4.2

La requête précédente ne fonctionne pas (toujours la même erreur) mais j'ai finalement, réussit avec st_union.

voici mon code :

Code:

 SELECT points.id_ligne, st_union(points.the_geom) AS the_geom
   FROM points
  WHERE isvalid(points.the_geom)
  GROUP BY points.id_ligne
  ORDER BY points.id_ligne;

cependant, je ne peux pas prendre les colonnes que je veux car il y a le group by qui m'oblige à écrire le nom de chaque colonne sélectionnée dans la clause GROUP BY sinon je me retrouve avec plus d'enregistrement que prévus.

Je créé donc ma vue avec seulement deux colonne et toutes les infos intéressantes derrières n'apparaissent pas.

Cependant, je pense que si je fait une copie de ces données dans une nouvelle table "ligne" je n'aurais pas de problème.

en tout cas, merci beaucoup pour votre aide, je n'arrivais pas a trouver l'équivalent de geomunion(geometry), et dans ma version il y a geomunion(geometry, geometry) mais ça ne fonctionnait pas. je ne savais pas qu'ils l'avaient remplacé par st_union.

merci encore et à bientôt,

cordialement,


La version 8.4 permet desormais de faire des windows queries (http://www.postgresql.org/docs/8.4/stat … indow.html).

C'est tres puissant et permet typiquement de raffiner un peu ses requetes contenant des clauses group by, en pouvant desormais grouper des lignes autour du curseur courant (si j'ai bien tout compris smile )

A tester en tout cas.

Nicolas

Hors ligne

 

#9 Fri 15 January 2010 16:04

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: Creation Ligne A Partir De Points

Et en version française :
http://docs.postgresql.fr/8.4/tutorial-window.html

Cela me semble convenir parfaitement. Si on reprend l'exemple de la doc, le nomdep est id_ligne, le salary est le champ the_geom enfin la fonction d'aggrégation est l'union.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

Pied de page des forums

Powered by FluxBB