PostGIS-Tipp: View für Liniensegmente

Du hast Linien und willst diese in gleichen Abständen teilen? Also nutzt Du die PostGIS-Datenbank-Funktionen und legst eine zweites Thema an, z. B. so:

Beispiel 1:
select (dp).geom::geometry(point,2398) into Test_Linie_Segmentation_1 from (select st_dumppoints(st_segmentize(geom,50)) as dp from “Test_Linie_1”) as foo;

Soll nun aber der Datenbestand klein bleiben und Du willst nur ein Datenbankthema halten und pflegen und nicht bei jeder Änderung das Abstandsthema neu generieren,  baust Du das zweite Thema über ein View, z. B. so:

Beispiel 2:
create or replace view myView_line_segmentation_1 as select (dp).geom::geometry(point,2398) as geom, id from (select id, st_dumppoints(st_segmentize(geom,200)) as dp from “Test_Linie_1”) as foo;

PostGIS_View_LineSegments_1.png
Screenshot: Das View “myView_line_segmentation_1” im QGIS-Einsatz

Update 17.06.2019:
Leider lässt QGIS das Fangen auf die Elemente des Views (Beispiel 2) nicht zu. Wenn die Fang-Funktion gebraucht wird, sollte man auf die echte Tabelle, siehe Beispiel 1, zurück greifen.

Update 28.06.2019:
QGIS verhält sich mitunter unterschiedlich je nach Versionen. Auf Win, QGIS2.14, PostgresSQL 9.4 geht das Fangen auch ohne ID, auf Mac, QGIS 3.6, PostGreSQL 11, geht das Fangen des View-Themas nur mit expliziter ID. Ich habe deswegen um ID erweitert:

create or replace view v1 as select row_number() OVER () as id, (dp).geom::geometry(point,2398) as geom from (select st_dumppoints(st_segmentize(geom,200)) as dp from “Test_Linie_1”) as foo;

3 Gedanken zu „PostGIS-Tipp: View für Liniensegmente

    • That’s right and I know it. In the concrete case, however, catching on objects is needed, therefore without geometry generator, but with real geodata (table “Test_Linie_Segmentation_1”). Unfortunately, the View does not support capturing 🙁

      • QGIS may behave differently depending on the version. On Win, QGIS2.14, PostgresSQL 9.4 you can catch without ID, on Mac, QGIS 3.6, PostGreSQL 11 you can only catch the view theme with explicit ID. That’s why I added ID:

        create or replace view v1 as select row_number() OVER () as id, (dp).geom::geometry(point,2398) as geom from (select st_dumppoints(st_segmentize(geom,200)) as dp from “Test_Linie_1”) as foo;

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert