[FOSSGIS-Talk] Aufsummieren von Spalten im Ausdruckseditor
Andreas Neumann
a.neumann at carto.net
Mo Nov 4 13:40:16 CET 2019
Hallo Claas,
Ich glaube nicht, dass das geht mit QGIS Expressions, weil eben Window
functions fehlen.
Falls Du das wirklich brauchst in QGIS, würde ich Nyall Dawson fragen.
Er hatte damals für uns die aggregate functions und dürfte da nahe am
Thema dran sein. Aber andere könnten das sicher auch umsetzen.
Oder du schreibst selber eigene Python custom expressions.
Grüsse,
Andreas
On 2019-11-04 12:50, Claas Leiner wrote:
> Hallo Zusammenn,
>
> ich versuche gerade mit dem Ausdruckseditor das Aufsummieren
> von Spaltenwerten umzusetzen, komme aber zu keiner Lösung:
>
> Problemstellung:
>
> Es gibt eine Spalte "Id", die einfach eine Folge von Linenabschnitten beschreibt, eine Spalte "length" welche die Längen der Linienabschnitte abbildet. Außerdem gibt es die Spalte "bereich", mit der die einzelnen Bereiche benannt werden, für die die Aufsummierung umgesetzt werden soll.
>
> Jetzt soll für jeden Bereich eine Aufsummierung der Strecke ("length") je folgenden Abschnitt vorgenommen werden, so dass das Ergebnis mit der Laufsumme folgendermaßen aussieht:
>
> id length bereich laufsumme
> 1 1631.737272 4306 1631.737272
> 2 11.4693348 4306 1643.2066068
> 3 10.2346697 4306 1653.4412765
> 4 5.1664905 4306 1658.607767
> 5 5.0219197 4306 1663.6296867
> 6 10.4880995 4306 1674.1177862
> 7 57.6267049 4306 1731.7444911
> 8 220.8260778 4306 1952.5705689
> 9 310.3634339 4306 2262.9340028
> 10 121.3497062 4306 2384.283709
>
> In PostGis (leider nicht in den sqlite-versionen, die mit QGIS oder SpatiaLite ausgeliefert werden) lässt sich das mit Window-Funktionen umsetzen:
> ------
> SELECT
> id,
> "length",
> "bereich",
> SUM("length") OVER (ORDER BY id,bereich ASC) AS laufsumme
>
> FROM strassen
> ORDER BY id ASC
>
> ---------
>
> Im Ausdruckseditor bin ich mit nicht zum Ziel gekommen. Am Ende habe ich die aufzusummierenden Abschnitte in Arrays geschrieben:
>
> -------------
> array_to_string(
>
> array_slice(
> ( array_agg( "length" , group_by:= "bereich" ) ),
> (minimum( "id" ,group_by:= "bereich" )) -1 , "id" -1
>
> )
> )
> ---------------------------------------------------------
>
> In der dritten Zeilte steht dann beispielsweise:
>
> 1631.737272,11.4693348,10.2346697
>
> Aber es gibt ja keine sum() Funktion ohne Agreggierung, mit der man auf den String zugreifen kann (max und min gibt es).
>
> Hat jemand eine Idee, wie sich die Auffsummierung im Ausdruckseditor umsetzen lässt?
>
> 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
> QGIS Projekt | 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/
>
> FOSSGIS Veranstaltungen 2019
> 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://twitter.com/fossgis_eV
>
> ____________________________________________________________________
> FOSSGIS-Talk-Liste mailing list
> FOSSGIS-Talk-Liste at fossgis.de
> https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste
Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste