[162] | 1 | |
---|
| 2 | -- ALKIS PostNAS 0.7 |
---|
| 3 | |
---|
| 4 | -- ====================================================== |
---|
| 5 | -- Zusammenfassung der Tabellen der tatsÀchlichen Nutzung |
---|
| 6 | -- ====================================================== |
---|
| 7 | |
---|
| 8 | -- Um bei einer Feature.Info (Welche Nutzung an dieser Stelle?) |
---|
| 9 | -- oder einer Verschneidung (Welche Nutzungen auf dem FlurstÃŒck?) |
---|
| 10 | -- nicht 26 verschiedene Tabellen abfragen zu mÃŒssen, werden die wichtigsten |
---|
| 11 | -- Felder dieser Tabellen zusammen gefasst. |
---|
| 12 | |
---|
| 13 | -- Teil 1: Anlegen der Tabellen |
---|
| 14 | |
---|
| 15 | -- Stand |
---|
| 16 | |
---|
| 17 | -- 2012-02-10 PostNAS 07, Umbenennung |
---|
| 18 | |
---|
| 19 | SET client_encoding = 'UTF-8'; |
---|
| 20 | |
---|
| 21 | -- Alles auf Anfang! |
---|
| 22 | |
---|
| 23 | -- DROP TABLE nutzung; |
---|
| 24 | -- DROP TABLE nutzung_class; |
---|
| 25 | -- DROP TABLE nutzung_meta; |
---|
| 26 | |
---|
| 27 | |
---|
| 28 | -- Meta-Informationen ueber die Zusammenfassung und Gruppierung |
---|
| 29 | -- ------------------------------------------------------------ |
---|
| 30 | |
---|
| 31 | CREATE TABLE nutzung_meta ( |
---|
| 32 | nutz_id integer NOT NULL, |
---|
| 33 | gruppe character varying(30), |
---|
| 34 | source_table character varying(50), |
---|
| 35 | title character varying(50), |
---|
| 36 | fldclass character varying(30), |
---|
| 37 | fldinfo character varying(30), |
---|
| 38 | CONSTRAINT nutzung_meta_pk PRIMARY KEY (nutz_id) |
---|
| 39 | ); |
---|
| 40 | |
---|
| 41 | COMMENT ON TABLE nutzung_meta IS 'Gruppierung und Indizierung der zusammen gefassten Nutzungsarten in der Tabelle "nutzung".'; |
---|
| 42 | COMMENT ON COLUMN nutzung_meta.nutz_id IS 'Index fuer die Quell-Tabelle bei der Zusammenfassung in der Tabelle "nutzung".'; |
---|
| 43 | COMMENT ON COLUMN nutzung_meta.source_table IS 'Name der importierten Tabelle aus PostNAS.'; |
---|
| 44 | COMMENT ON COLUMN nutzung_meta.gruppe IS 'Objektartengruppe, Gruppierung der Nutzungsart.'; |
---|
| 45 | COMMENT ON COLUMN nutzung_meta.title IS 'Vorzeigbare Bezeichnung der Nutzungsartentabelle.'; |
---|
| 46 | COMMENT ON COLUMN nutzung_meta.fldclass IS 'Name des Feldes aus "source_table", das in Feld "nutzung.class" kopiert wird.'; |
---|
| 47 | COMMENT ON COLUMN nutzung_meta.fldinfo IS 'Name des Feldes aus "source_table", das in Feld "nutzung.info" kopiert wird.'; |
---|
| 48 | |
---|
| 49 | |
---|
| 50 | -- Alle Abschnitte der "tatsÀchlichen Nutzung" vereinigt in einer Tabelle |
---|
| 51 | -- Sie sind dann mit einem gemeinsamen Geometrie-Index mit einer SQL-Abfrage auffindbar. |
---|
| 52 | -- Dies ist die Voraussetzung fÃŒr eine performante Auskunft. |
---|
| 53 | |
---|
[178] | 54 | --DROP TABLE nutzung; |
---|
[162] | 55 | CREATE TABLE nutzung ( |
---|
| 56 | gml_id character(16), |
---|
[178] | 57 | beginnt character(20), -- mehrfache gml_id eindeutig machen, Datenfehler? |
---|
[162] | 58 | nutz_id integer, |
---|
| 59 | class integer, |
---|
| 60 | info integer, |
---|
| 61 | zustand integer, |
---|
[178] | 62 | "name" varchar, |
---|
| 63 | bezeichnung varchar, |
---|
| 64 | -- CONSTRAINT nutzung_pk PRIMARY KEY (gml_id), -- sollte so sein |
---|
| 65 | CONSTRAINT nutzung_pk PRIMARY KEY (gml_id, beginnt), -- wÃŒrg arround (gml_id mehrfach!) |
---|
[162] | 66 | CONSTRAINT nutzung_meta_id FOREIGN KEY (nutz_id) |
---|
| 67 | REFERENCES nutzung_meta (nutz_id) MATCH SIMPLE |
---|
| 68 | ON UPDATE NO ACTION ON DELETE CASCADE |
---|
| 69 | ) |
---|
| 70 | WITH (OIDS=FALSE); |
---|
| 71 | |
---|
[178] | 72 | -- ALTER TABLE nutzung ADD COLUMN beginnt character(20); |
---|
| 73 | -- ALTER TABLE nutzung DROP CONSTRAINT nutzung_pk; |
---|
| 74 | -- ALTER TABLE nutzung ADD CONSTRAINT nutzung_pk PRIMARY KEY(gml_id, beginnt); |
---|
| 75 | |
---|
| 76 | |
---|
[162] | 77 | SELECT AddGeometryColumn('nutzung','wkb_geometry','25832','POLYGON',2); |
---|
[178] | 78 | -- Vereinzelt vorkommende MULTIPOLYGON, zulÀssig? |
---|
[162] | 79 | |
---|
| 80 | -- 'class' ist nur innerhalb einer Gruppe ein sinvoller Index |
---|
| 81 | CREATE INDEX idx_nutz_cls ON nutzung USING btree (nutz_id, class); |
---|
| 82 | |
---|
| 83 | -- Geometrischer Index fÌr die rÀumliche Suche |
---|
| 84 | CREATE INDEX nutzung_geom_idx ON nutzung USING gist (wkb_geometry); |
---|
| 85 | |
---|
| 86 | -- Kommentare |
---|
[178] | 87 | COMMENT ON TABLE nutzung IS 'Zusammenfassung von 26 Tabellen des Objektbereiches "TatsÀchliche Nutzung".'; |
---|
[162] | 88 | COMMENT ON COLUMN nutzung.gml_id IS 'Identifikator, global eindeutig'; |
---|
| 89 | COMMENT ON COLUMN nutzung.nutz_id IS 'Index fuer die Quell-Tabelle bei der Zusammenfassung in der Tabelle "nutzung".'; |
---|
| 90 | COMMENT ON COLUMN nutzung.class IS 'Klassifizierung innerhalb der Nutzung. Aus verschiedenen Feldern importiert. Siehe "nutzung_meta.fldclass".'; |
---|
| 91 | COMMENT ON COLUMN nutzung.info IS 'Weitere verschlÃŒsselte Information zur Nutzung. Aus verschiedenen Feldern importiert. Siehe "nutzung_meta.fldinfo".'; |
---|
| 92 | COMMENT ON COLUMN nutzung.name IS 'NAM Eigenname'; |
---|
| 93 | COMMENT ON COLUMN nutzung.bezeichnung IS 'weitere unverschlÃŒsselte Information wie Zweitname, Bezeichnung, fachliche Nummerierung usw.'; |
---|
| 94 | COMMENT ON COLUMN nutzung.zustand IS 'ZUS "Zustand" beschreibt, ob der Abschnitt ungenutzt ist.'; |
---|
| 95 | |
---|
| 96 | |
---|
| 97 | -- Schluesseltabelle: classes innerhalb einer Nutzungsart. |
---|
| 98 | -- Wird nicht aus NAS geladen sondern durch das manuell zu pflegende Script. |
---|
| 99 | -- "alkis_nutzungsart_metadaten.sql" |
---|
| 100 | |
---|
| 101 | CREATE TABLE nutzung_class ( |
---|
| 102 | nutz_id integer NOT NULL, |
---|
| 103 | class integer NOT NULL, |
---|
| 104 | label character varying(100), |
---|
| 105 | blabla character varying(1000), |
---|
| 106 | CONSTRAINT nutzung_class_pk PRIMARY KEY (nutz_id, class), |
---|
| 107 | CONSTRAINT nutzung_class_id FOREIGN KEY (nutz_id) |
---|
| 108 | REFERENCES nutzung_meta (nutz_id) MATCH SIMPLE |
---|
| 109 | ON UPDATE NO ACTION ON DELETE CASCADE |
---|
| 110 | ); |
---|
| 111 | |
---|
| 112 | COMMENT ON TABLE nutzung_class IS 'SchlÃŒsseltabelle. Feinere Klassifizierung der zusammen gefassten Nutzungsarten.'; |
---|
| 113 | COMMENT ON COLUMN nutzung_class.nutz_id IS 'Index fuer die Quell-Tabelle bei der Zusammenfassung in der Tabelle nutzung.'; |
---|
| 114 | COMMENT ON COLUMN nutzung_class.class IS 'Key, SchlÃŒsselwert.'; |
---|
| 115 | COMMENT ON COLUMN nutzung_class.label IS 'EntschlÃŒsselung. Art der Nutzung, Dies Feld soll in der Auskunft angezeigt werden.'; |
---|
| 116 | COMMENT ON COLUMN nutzung_class.blabla IS 'Weitere ErlÀuterungen und Definitionen dazu.'; |
---|
| 117 | |
---|
[178] | 118 | |
---|
| 119 | -- Fehlersuche nach GDAL Patch #5444: |
---|
| 120 | -- Da nun gml_id nicht mehr PRIMARY KEY der Ausgangstabellen ist , kommt es auch zu Doppelbelegungen der Zusammenfassung. |
---|
| 121 | -- Diese FÀlle suchen. |
---|
| 122 | |
---|
| 123 | -- SELECT a.gml_id, a.artderbebauung, a.ogc_fid, a.beginnt, b.ogc_fid , b.beginnt |
---|
| 124 | -- FROM ax_wohnbauflaeche a JOIN ax_wohnbauflaeche b ON a.gml_id = b.gml_id |
---|
| 125 | -- WHERE a.ogc_fid < b.ogc_fid LIMIT 100; |
---|
| 126 | |
---|
| 127 | CREATE OR REPLACE VIEW nutzung_mehrfache_gml AS |
---|
| 128 | SELECT a.gml_id, |
---|
| 129 | a.nutz_id, |
---|
| 130 | a.beginnt as beginnt1, |
---|
| 131 | b.beginnt as beginnt2 |
---|
| 132 | FROM nutzung a |
---|
| 133 | JOIN nutzung b |
---|
| 134 | ON a.gml_id = b.gml_id |
---|
| 135 | WHERE a.beginnt < b.beginnt |
---|
| 136 | --LIMIT 100 |
---|
| 137 | ; |
---|
| 138 | |
---|
| 139 | -- Vorkommende Geometry-Typen |
---|
| 140 | |
---|
| 141 | -- SELECT a.gml_id, st_geometrytype(a.wkb_geometry) as geomtype ,a.artderbebauung, a.zustand, a.name, a.beginnt |
---|
| 142 | -- FROM ax_wohnbauflaeche a WHERE geometrytype(wkb_geometry) <> 'POLYGON'; |
---|
| 143 | |
---|
| 144 | -- SELECT a.gml_id, st_geometrytype(a.wkb_geometry) as geomtype ,a.artderbebauung, a.zustand, a.name, a.beginnt |
---|
| 145 | -- FROM ax_wohnbauflaeche a WHERE geometrytype(wkb_geometry) <> 'POLYGON'; |
---|
| 146 | |
---|
| 147 | -- Ergebnis: Ein MULTIPOLYGON |
---|
| 148 | -- Konsequenz: nur Polygone kopieren. |
---|
| 149 | |
---|
[162] | 150 | -- END -- |
---|