#1 Wed 13 September 2017 10:33
- bruhnild
- Participant actif
- Lieu: Lyon
- Date d'inscription: 7 Jun 2014
- Messages: 130
Passer d'une multistring à une linestring[postgis]
Bonjour,
J'ai une table cable avec une entité en multistring. J'aimerais obtenir une seule ligne en linestring.
J'ai tenté une requête trouvée sur internet mais celle ci me renvoi seulement un bout de tronçon.
Code:
ALTER TABLE cable ALTER COLUMN geom TYPE geometry(linestring,2154) USING ST_GeometryN(geom, 1);
Auriez vous une idée de la manière dont procéder?
Je travaille avec Qgis et postgis.
Merci d'avance!
Hors ligne
#2 Wed 13 September 2017 11:46
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: Passer d'une multistring à une linestring[postgis]
Bonjour,
st_dump() est plus efficace. Vous allez obtenir l'ensemble des linestring qui compose la collection puis il va falloir les transformer avec st_makeline().
Attention à ordonner les lignes ...
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#3 Wed 13 September 2017 13:02
- bruhnild
- Participant actif
- Lieu: Lyon
- Date d'inscription: 7 Jun 2014
- Messages: 130
Re: Passer d'une multistring à une linestring[postgis]
Merci Christophe pour la réponse.
J'ai effectué un st_dump et je me retrouve avec 64 lignes en linestring (résultat en pj).
Pour la suite je ne vois pas comment ordonner mes lignes..
Code:
SELECT st_makeline (geom) FROM (select geom, id from cable_linestring order by id) bp group by id
Hors ligne
#4 Wed 13 September 2017 14:46
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: Passer d'une multistring à une linestring[postgis]
Bonjour
http://www.postgis.net/docs/ST_MakeLine.html
http://www.bostongis.com/postgis_makeline.snippet
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#5 Wed 13 September 2017 15:46
- bruhnild
- Participant actif
- Lieu: Lyon
- Date d'inscription: 7 Jun 2014
- Messages: 130
Re: Passer d'une multistring à une linestring[postgis]
Le résultat de ma requete est plutot décevant....
Code:
SELECT St_MakeLine(geom) as geom, cab_id FROM (SELECT geom,cab_id FROM tr21_out.cab_test ORDER BY cab_id) a GROUP BY a.cab_id;
J'ai l'impression que toutes mes lignes se sont accrochées les unes aux autres.
Dernière modification par bruhnild (Wed 13 September 2017 15:46)
Hors ligne
#6 Wed 13 September 2017 16:18
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: Passer d'une multistring à une linestring[postgis]
Bonjour,
Logique ! Si vous lisez les liens précédents vous verrez qu'il faut ordonner non pas par id (sauf construction spécifique) mais dans l'ordre "spatial" lignen, ligne n+1 avec fin ligne n = début ligne n+1.
exemple : les points sont des relevé GPS avec une date de prise de mesure, si je parcours mon réseau du départ à l'arrivée, je peu utiliser la date de prise de mesure pour ordonner. Avec une construction de la collection aléatoire c'est beaucoup plus compliqué.
Pour votre problème, je ferai un dump() de la collection, j'intégrerai ces lignes dans une couche topologique et je raisonnerai avec des arcs orientés et des nœuds, c'est beaucoup plus facile.
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne