Flur-Übersichtslayer ohne eigene Geometrie -- UPDATES auch bei Views: Unterschied zwischen den Versionen

Aus kvwmap
Wechseln zu: Navigation, Suche
 
Zeile 4: Zeile 4:
  
 
Damit der generische Layereditor richtig funktioniert, war es nötig, den Zugriff des Layers nicht auf die Tabelle, sondern auf einen entsprechenden View zu definieren. Damit über den generischen Layereditor auch Eingaben bzw. Änderungen vorgenommen werden können, musste schließlich zum View eine sogenannte Regel (rule) definiert werden.
 
Damit der generische Layereditor richtig funktioniert, war es nötig, den Zugriff des Layers nicht auf die Tabelle, sondern auf einen entsprechenden View zu definieren. Damit über den generischen Layereditor auch Eingaben bzw. Änderungen vorgenommen werden können, musste schließlich zum View eine sogenannte Regel (rule) definiert werden.
 +
 +
Voraussetzung für das Gelingen in der Version 1.6.6 ist die Behebung eines Fehlers in zwei SQL-Abfragen, der in der [[Bug_kvwmap#-_OID_in_Hochkomma|Bug-Liste]] beschrieben wird.
  
 
Hier die Definition der Tabelle:
 
Hier die Definition der Tabelle:

Version vom 3. Dezember 2007, 12:35 Uhr

--Markus Hentschel 11:24, 3. Dez 2007 (CET)

Ich habe für Übersichtszwecke Layer geschaffen, die flurweise den Bearbeitungsstand in der sogenannten "Vormigration", den Stand der Erfassung der Gebäude in Folie 084 und den Stand der digitalen Nachweisdokumenterfassung anzeigen sollen. Diese Daten stehen alle in einer Postgis-Tabelle, wobei die Besonderheit ist, dass die Tabelle selbst keine eigene Geometrie besitzt, sondern the_geom aus den ALK-Tabellen des edbs2wkt-Konverters holt.

Damit der generische Layereditor richtig funktioniert, war es nötig, den Zugriff des Layers nicht auf die Tabelle, sondern auf einen entsprechenden View zu definieren. Damit über den generischen Layereditor auch Eingaben bzw. Änderungen vorgenommen werden können, musste schließlich zum View eine sogenannte Regel (rule) definiert werden.

Voraussetzung für das Gelingen in der Version 1.6.6 ist die Behebung eines Fehlers in zwei SQL-Abfragen, der in der Bug-Liste beschrieben wird.

Hier die Definition der Tabelle:

CREATE TABLE gd_flur_uebersichten
(
 flurnummer int4 NOT NULL,
 abgleich_laeuft varchar(30),
 abgleich_fertig varchar(30),
 vormigration varchar(30),
 folie084 varchar(30),
 anz_geb_084 varchar(30),
 risse_erfasst varchar(30)
) 
WITH OIDS;

Die aktuellen Flurnummern erhält man aus der Tabelle alknflur, z.B. über

select gemkgschl||flur as flurnummer from alknflur where flur != '000'

Die Definition des Views lautet dann:

CREATE OR REPLACE VIEW flur_uebersichten AS 
 SELECT o.objnr AS oid, o.objnr AS id, u.flurnummer, u.abgleich_laeuft, u.abgleich_fertig, u.vormigration, u.folie084, u.anz_geb_084, u.risse_erfasst, o.the_geom
 FROM gd_flur_uebersichten u, alknflur af, alkobj_e_fla o
 WHERE "substring"(u.flurnummer::text, 1, 6) = af.gemkgschl::text AND "substring"(u.flurnummer::text, 7, 3) = af.flur::text AND af.objnr::text = o.objnr::text;

Die Regel zu diesem View wird wie folgt erzeugt:

CREATE OR REPLACE RULE update_flur_uebersichten AS
 ON UPDATE TO flur_uebersichten
 DO INSTEAD  UPDATE gd_flur_uebersichten SET flurnummer = new.flurnummer, abgleich_laeuft = new.abgleich_laeuft, abgleich_fertig = new.abgleich_fertig, vormigration = new.vormigration, folie084 = new.folie084, anz_geb_084 = new.anz_geb_084, risse_erfasst = new.risse_erfasst
 WHERE gd_flur_uebersichten.flurnummer = old.flurnummer;

Damit hat man datenbankseitig alles zusammen. Jetzt kann man Layer definieren, hier mal als Beispiel der Layer "Vormigration":

PFAD:
SELECT oid, flurnummer, abgleich_laeuft, abgleich_fertig, vormigration, the_geom
FROM flur_uebersichten
WHERE 1=1

DATA:
the_geom from flur_uebersichten as foo using unique oid using srid=2398

Die Classes für diesen Layer sehen so aus:

 INSERT INTO `classes` (`Class_ID`, `Name`, `Layer_ID`, `Expression`, `drawingorder`, `text`)
 VALUES
 (20404, 'keine Bearbeitung', 7012, '(''[abgleich_laeuft]'' eq '''' and ''[abgleich_fertig]'' eq '''' and ''[vormigration]'' eq '''') ', 10, NULL),
 (20269, 'Abgleich läuft', 7012, '(''[abgleich_laeuft]'' ne '''' and ''[abgleich_fertig]'' eq '''' and ''[vormigration]'' eq '''') ', 20, NULL),
 (20271, 'Abgleich fertig', 7012, '(''[abgleich_fertig]'' ne '''' and ''[vormigration]'' eq '''') ', 30, NULL),
 (20272, 'Vormigration', 7012, '(''[vormigration]'' ne '''') ', 40, NULL);

Damit das Ganze richtig läuft, müssen neben dem Alias im Attributeditor âuch die Einstellungen in der Layerattribut-Rechteverwaltung richtig gesetzt werden. Insbesondere muss - wenn der Layer bearbeitbar sein soll - das globale Recht auf "lesen und bearbeiten" gestellt sein - nicht auf "neue Datensätze erzeugen" oder gar "Datensätze erzeugen und löschen"! Dann sollten die jeweiligen Attribute, die bearbeitbar sein sollen, auf "editieren" eingestellt werden und the_geom auf "lesen".

Im Ergebnis kann man nach den Einträgen suchen, man kann auf die entsprechende Flur zoomen und man kann die Einträge ändern.