Aktualisierung der Stationierung mittels PostgreSQL und PostGIS.
Die Stationierung bzw. Kilometrierung markiert eine Position entlang eines Gewässers. Wenn der ländliche Raum keine markanten Bezugspunkte bietet und keine GPS-gestützten Vermessungspunkte vorliegen helfen die metrischen Angaben bei der eindeutigen Verortung. Dies gilt v. a. dann, wenn in Berichten oder Tabellen auf Abschnitte des Fließgewässers verwiesen wird. Die Stationierung dient zur Orientierung bei Planungen, baulichen Maßnahmen, der Gewässerunterhaltung oder bei Stellungnahmen. Gerade beim Austausch mit externen Beteiligten ist die Angabe der Stationierung sinnvoll.
In Mitteleuropa beginnt die Stationierung in aller Regel an der Mündung, während die Kilometrierung in Fließrichtung angegeben wird. Je nach Größe des Gewässers reichen die Stationierungs-Intervalle von 10 m an Bächen bis 1000 m entlang von bedeutenden Wasserstraßen. Besitzt ein Fließgewässer an der Mündung Nullpunkt der Stationierung, erkennt man daran das Nebengewässer mit niedrigerer Ordnung. Folgende Notation beschreibt beispielsweise einen Standort der sich 1,5 km von der Mündung des Fließgewässers entfernt befindet:
1+ 500 m
Wenn sich der Gewässerverlauf in Folge einer Revitalisierungsmaßnahme ändert, wird auch die digitale Repräsentation des Gewässers im GIS aktualisiert. Auch die Stationierung müsste dann an den aktuellen Verlauf angepasst werden, da sich gewässerrelevante Objekte, Bauwerke, etc. sonst nicht mehr eindeutig verorten lassen (siehe Abbildung). Die manuelle Anpassung der Stationierung wird allerdings oft als zu aufwändig empfunden. Das verleitet dazu, entweder auf das Nachführen kleinerer Gewässeränderungen im GIS zu verzichten oder aber die Änderung der Stationierung ausser Acht zu lassen – bis man dann einige Wochen später mit Diskrepanzen im digitalen Gewässernetz konfrontiert wird.
Durch das Ausschöpfen der Funktionalität einer Datenbank kann die Nachführung der Stationierung an den Gewässerverlauf gekoppelt werden. Praktisch wird innerhalb des Datenbanksystems ein Trigger aktiviert, sobald ein Gewässer im GIS geändert wurde. Der Trigger ruft eine entsprechende Funktion auf und sorgt dafür, dass die Stationierung bei jeder Gewässeranpassung neu berechnet wird.

Die Umsetzung von Trigger und Funktion für die Neuberechnung der Stationierung könnte in PostgreSQL/PostGIS folgendermaßen (Stationierungsintervall 10 m) aussehen:
CREATE FUNCTION stationing ()
RETURNS trigger
AS $$
BEGIN
DROP TABLE IF EXISTS streamdiss;
CREATE TABLE streamdiss AS
SELECT stream_id, ST_LineMerge(ST_Union(g.geom)) AS dissolvegeom
FROM stream_network g
GROUP BY stream_id;
DROP TABLE IF EXISTS stationing;
CREATE TABLE stationing AS
SELECT stream_id, unnest((gdump).path)*10 AS station, (gdump).geom AS exploded_geom
FROM (SELECT stream_id, ST_Dump(ST_LineInterpolatePoints(d.dissolvegeom, 10/ST_LENGTH(d.dissolvegeom))) AS gdump
FROM streamdiss d) AS s;
ALTER TABLE stationing ADD COLUMN pk BIGSERIAL PRIMARY KEY;
DROP TABLE IF EXISTS streamdiss;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER update_stationing
AFTER UPDATE OR INSERT OR DELETE ON stream_network
FOR EACH ROW
EXECUTE PROCEDURE stationing();