PostGIS Trigger zur Übernahme eines Flächenattributs an Punkt, wenn Punkt in Fläche ist?

Antwort

Um einen Trigger in PostGIS zu erstellen, der ein Flächenattribut auf einen Punkt überträgt, wenn der Punkt innerhalb der Fläche liegt, kannst du die folgenden Schritte befolgen: 1. **Erstelle die Funktion**: Diese Funktion überprüft, ob der Punkt innerhalb der Fläche liegt und überträgt das Attribut. 2. **Erstelle den Trigger**: Der Trigger wird so konfiguriert, dass er die Funktion bei jeder Einfügung oder Aktualisierung eines Punktes aufruft. Hier ist ein Beispiel, wie du das umsetzen kannst: ### Schritt 1: Funktion erstellen ```sql CREATE OR REPLACE FUNCTION update_point_attribute() RETURNS TRIGGER AS $$ BEGIN -- Überprüfen, ob der Punkt innerhalb einer Fläche liegt IF EXISTS ( SELECT 1 FROM flaechen WHERE ST_Contains(geom, NEW.geom) ) THEN -- Attribut von der Fläche übernehmen NEW.attribut = (SELECT attribut FROM flaechen WHERE ST_Contains(geom, NEW.geom) LIMIT 1); END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; ``` ### Schritt 2: Trigger erstellen ```sql CREATE TRIGGER set_attribute_on_insert BEFORE INSERT OR UPDATE ON punkte FOR EACH ROW EXECUTE FUNCTION update_point_attribute(); ``` ### Erklärung: - **Funktion `update_point_attribute`**: Diese Funktion prüft, ob der Punkt (`NEW.geom`) innerhalb einer Fläche (`flaechen.geom`) liegt. Wenn ja, wird das Attribut des Punktes (`NEW.attribut`) auf das Attribut der Fläche gesetzt. - **Trigger `set_attribute_on_insert`**: Dieser Trigger wird vor dem Einfügen oder Aktualisieren eines Punktes aufgerufen und führt die Funktion aus. Stelle sicher, dass die Tabellen `punkte` und `flaechen` sowie die entsprechenden Geometriefelder (`geom` und `attribut`) existieren und korrekt definiert sind.

Frage stellen und sofort Antwort erhalten