[FOSSGIS-Talk] Segmente eines Linienlayer in natürlicher Reihenfolge sortieren

Felix Kunde felix-kunde at gmx.de
Di Nov 19 09:11:13 CET 2019


Mit SQL müsste es wohl so aussehen:

WITH RECURSIVE lines (id, geom) AS (
  VALUES (1, 'LINESTRING(0 1,1 1,1 2)'::geometry), (2, 'LINESTRING(2 3,3 3,3 4)'::geometry), (3, 'LINESTRING(1 2,2 2,2 3)'::geometry)
), line_order (line_id, lead_id, follower_id) AS (
  SELECT l.id, leaders.id, followers.id
    FROM lines l
    LEFT JOIN lines leaders ON ST_Intersects(ST_StartPoint(l.geom),ST_EndPoint(leaders.geom))
    LEFT JOIN lines followers ON ST_Intersects(ST_StartPoint(followers.geom),ST_EndPoint(l.geom))
), line_sorter (line_id, follower_id, level) AS (
  SELECT line_id, follower_id, 1 AS level
    FROM line_order
   WHERE lead_id IS NULL
   UNION ALL
         SELECT lo.line_id, lo.follower_id, ls.level + 1
           FROM line_order lo, line_sorter ls
          WHERE lo.line_id = ls.follower_id
)
SELECT line_id, level
  FROM line_sorter
 ORDER BY level;
 
 

Gesendet: Montag, 18. November 2019 um 22:19 Uhr
Von: "Claas Leiner" <claas.leiner at gkg-kassel.de>
An: Fossgis-talk-liste <Fossgis-talk-liste at fossgis.de>
Betreff: [FOSSGIS-Talk] Segmente eines Linienlayer in natürlicher Reihenfolge sortieren
Hallo Zusammen,

ich möchte Elemente eines Linienlayer neu sortieren, so dass die
physische angrenzenden Objekte in natürlicher Reihenfolge in der
Datenbank stehen.

Praktisch handelt es sich um Wanderwege, dennen auf Grundlage eines DGMs
Höhenprofile zugeordnet werden sollen. Leider entspricht die innere
Reihenfolgeder der Objekte in der Datenbank nicht der natürlichen
Abfolge der Segmente vom Anfang bis zum Ende der Route, so dass für das
Höhenprofil z.B. nach den ersten 2km der Bereich um km 10 folgt und dann
vielleicht km 5. Es kommt somit kein sinnvolles Höhenprofil heraus.

Beispielhafter IstZustand:

KM: 4 7 10 15 20
Weg:-------|-----|-----|-------|-----|
Zeile DB: 1 5 3 2 4


Beispielhafter ZielZustand:

KM: 4 7 10 15 20
Weg:-------|-----|-----|-------|-----|
Zeile DB: 1 2 3 4 5


Hat jemand eine Idee, wie sich solch ein Umsortieren über QGIS oder SQL
in PostGis bzw. SpatiaLite umsetzen lässt? Ich habe bisher keine
sinnvolle Lösung gefunden.

Mit so einfachen Vorgehensweisen wie Dissolve und explodeLines kommt man
nicht zum Ziel.

Viele Grüße,

Claas



--
-----------------------------------------
GKG-Kassel - Dr.-Ing. Claas Leiner
QGIS-Support und mehr

Geodatenservice, Kartenwerkstatt &
GIS-Schule Kassel

Wilhelmshöher Allee 304 E
34131 Kassel
Tel. 0561/56013445
claas.leiner at gkg-kassel.de
----------------------------------------
http://www.gkg-kassel.de
----------------------------------------
Unterstützen Sie QGIS
QGIS-DE e.V. | http://qgis.de[http://qgis.de]
QGIS Projekt | http://qgis.org/de/site/[http://qgis.org/de/site/]
--
....................................................................
FOSSGIS 2020, die Konferenz für Open Source GIS mit OpenData und
OpenStreetMap in Freiburg im Breisgau!
11.-14. März 2020 an der Universität Freiburg
https://fossgis-konferenz.de/2020/[https://fossgis-konferenz.de/2020/]

FOSSGIS Veranstaltungen 2019
https://www.fossgis.de/node/322[https://www.fossgis.de/node/322]

FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
GIS-Bereich und Freier Geodaten!
https://www.fossgis.de/[https://www.fossgis.de/] https://twitter.com/fossgis_eV

____________________________________________________________________
FOSSGIS-Talk-Liste mailing list
FOSSGIS-Talk-Liste at fossgis.de
https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste[https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste]


Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste