Ignore:
Timestamp:
08/28/14 11:29:21 (10 years ago)
Author:
frank.jaeger
Message:

Beginn der Umstellung von Datenbank-Schema und Views.
Noch nicht ausgetestet.
Programme noch nicht umgestellt.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Version-0.8/import/pp_laden.sql

    r319 r324  
    11 
    2 -- ALKIS PostNAS 0.7 
     2-- ALKIS PostNAS 
    33 
    44-- Post Processing (pp_) Teil 2: Laden der Tabellen 
     
    1010--  2012-04-17 Flurstuecksnummern auf Standardposition 
    1111--  2012-04-24 Generell Filter 'endet IS NULL' um historische Objekte auszublenden 
    12 --  2012-04-25 Abstürze und Fehler (durch kaputte Geometrie?) beim Zusammenfassen der Flächen 
     12--  2012-04-25 AbstÃŒrze und Fehler (durch kaputte Geometrie?) beim Zusammenfassen der FlÀchen 
    1313--  2012-10-29 F.J. Redundanzen aus alkis_beziehungen beseitigen, die nach NAS replace auftreten 
    1414--  2013-02-06 A.E. Function-Name an PostGIS 2 angepasst: multi() -> st_multi(), simplify() -> st_simplify() 
    15 --  2013-02-21 F.J. doppelte Buchungen zum Flurstück aus alkis_beziehungen beseitigen, die nach NAS replace auftreten 
    16 --  2013-07-10 F.J. Bereinigen der alkis_beziehungen auskommentiert, wird jetzt im Trigger gelöst. 
    17 --  2012-10-24 Neue Tabelle für die Präsentation von Straßennamen und -Klassifikationen 
    18 --  2014-02-05 Bereits auskommentierte Aktionen gelöscht für die Beseitigung von Rdundanzen aus fehlerhaften Triggern 
    19 --  2014-02-12 Zusammen fassen Flur->Gemarkung->Gemeinde nicht aus simple_geom weil dadurch Löscher entstehen können. 
     15--  2013-02-21 F.J. doppelte Buchungen zum FlurstÃŒck aus alkis_beziehungen beseitigen, die nach NAS replace auftreten 
     16--  2013-07-10 F.J. Bereinigen der alkis_beziehungen auskommentiert, wird jetzt im Trigger gelöst. 
     17--  2012-10-24 Neue Tabelle fÃŒr die PrÀsentation von Straßennamen und -Klassifikationen 
     18--  2014-02-05 Bereits auskommentierte Aktionen gelöscht fÃŒr die Beseitigung von Rdundanzen aus fehlerhaften Triggern 
     19--  2014-02-12 Zusammen fassen Flur->Gemarkung->Gemeinde nicht aus simple_geom weil dadurch Löscher entstehen können. 
     20--  2014-08-26 Beseitigung eines Fehlers beim Laden der Straßennamen-Label. 
     21--             Dabei Trennung in pp_strassenname_p und -_l (Punkt- und Liniengeometrie). 
    2022 
    2123-- ============================ 
     
    2426 
    2527-- Einige Informationen liegen nach der NAS-Konvertierung in der Datenbank "verstreut" vor. 
    26 -- Die dynamische Aufbereitung über Views und Functions würde zu lange dauern und somit lange  
     28-- Die dynamische Aufbereitung ÃŒber Views und Functions wÃŒrde zu lange dauern und somit lange  
    2729-- Antwortzeiten in WMS, WFS, Buchauskunft oder Navigation (Suche) verursachen. 
    2830 
    2931-- Im Rahmen eines "Post-Processing" werden diese Daten nach jeder Konvertierung (NBA-Aktualisierung)  
    30 -- einmal komplett aufbereitet. Die benötigten Informationen stehen somit den Anwendungen mundgerecht zur Verfügung. 
    31  
    32 -- Die per PostProcessing gefüllten Tabellen bekommen den Profix "pp_".  
    33  
    34 -- Die Ausführung dieses Scriptes auf einer Datenbank für eine 80T-Einwohner-Stadt dauert ca.: 500 Sek. ! 
     32-- einmal komplett aufbereitet. Die benötigten Informationen stehen somit den Anwendungen mundgerecht zur VerfÃŒgung. 
     33 
     34-- Die per PostProcessing gefÃŒllten Tabellen bekommen den Profix "pp_".  
     35 
     36-- Die AusfÃŒhrung dieses Scriptes auf einer Datenbank fÃŒr eine 80T-Einwohner-Stadt dauert ca.: 500 Sek. ! 
    3537 
    3638SET client_encoding = 'UTF-8'; 
     
    4143-- ============================================================================ 
    4244-- Workaround: alle Redundazen nach einem Lauf entfernen. 
    43 -- Besser wäre: sofort im Trigger bei replace entfernen. 
     45-- Besser wÀre: sofort im Trigger bei replace entfernen. 
    4446-- Siehe Schema in FUNCTION delete_feature_kill 
    4547 
     
    4951-- ================================= 
    5052 
    51 -- ersetzt den View "s_flurstueck_nr" für WMS-Layer "ag_t_flurstueck" 
     53-- ersetzt den View "s_flurstueck_nr" fÃŒr WMS-Layer "ag_t_flurstueck" 
    5254 
    5355--DELETE FROM pp_flurstueck_nr; 
     
    7577       AND f.endet IS NULL  
    7678  ; 
    77 -- Ausführung: mittlere Stadt: ca. 4 - 18 Sec. 
    78  
    79  
    80 -- Straßen - N a m e n  und  - K l a s s i f i k a t i o n 
    81 -- Tabellen für die Präsentation von Straßen-Namen und -Klassifikationen 
     79-- AusfÃŒhrung: mittlere Stadt: ca. 4 - 18 Sec. 
     80 
     81 
     82-- Straßen - N a m e n  und  - K l a s s i f i k a t i o n 
     83-- Tabellen fÃŒr die PrÀsentation von Straßen-Namen und -Klassifikationen 
    8284-- Daten aus dem View "ap_pto_stra" werden im PostProcessing gespeichert in der Tabelle "pp_strassenname". 
    83 -- Der View übernimmt die Auswahl des passenden "advstandardmodell" und rechnet den Winkel passend um. 
    84 -- In der Tabelle werden dann die leer gebliebenen Label aus dem Katalog noch ergänzt.  
    85  
    86 -- Tabelle aus View befüllen 
    87 TRUNCATE pp_strassenname; 
    88 INSERT INTO pp_strassenname (schriftinhalt, hor, ver, art, winkel, the_geom) 
    89        SELECT schriftinhalt, hor, ver, art, winkel, wkb_geometry 
    90        FROM ap_pto_stra; -- View sucht das passende advstandardmodell 
    91  
    92 -- Schriftinhalt ergänzen 
    93 --DATE ap_pto           p  -- Präsentationsobjekte Punktförmig 
    94 UPDATE pp_strassenname  p 
    95    SET schriftinhalt =     -- Hier fehlt der Label 
    96    -- Subquery "Gib mir den Straßennamen": 
    97    ( SELECT k.bezeichnung                       -- Straßenname .. 
    98        FROM ax_lagebezeichnungkatalogeintrag k  --  .. aus Katalog 
    99        JOIN ax_lagebezeichnungohnehausnummer l  -- verwendet als Lage o.H. 
    100          ON (k.land=l.land AND k.regierungsbezirk=l.regierungsbezirk  
    101              AND k.kreis=l.kreis AND k.gemeinde=l.gemeinde AND k.lage=l.lage ) 
    102        JOIN alkis_beziehungen x ON l.gml_id = x.beziehung_zu  -- Relation zum Präsentationsobjekt 
    103       WHERE p.gml_id = x.beziehung_von 
    104         AND x.beziehungsart = 'dientZurDarstellungVon' 
    105       -- LIMIT 1 -- war in einem Fall notwendig, wo 2mal der gleiche Text zugeordnet war, Ursache? 
    106    ) 
     85-- Der View ÃŒbernimmt die Auswahl des passenden "advstandardmodell" und rechnet den Winkel passend um. 
     86-- In der Tabelle werden dann die leer gebliebenen Label aus dem Katalog noch ergÀnzt.  
     87 
     88-- Tabelle aus View befÃŒllen 
     89-- 2014-08-22  
     90--  Variante "_p" = Punktgeometrie, Spalte gml_id ergÀnzt. 
     91--  Es werden nun auch SÀtze mit leerem "schriftinhalt" angelegt. Das wird dann nachtrÀglich gefÃŒllt. 
     92 
     93-- Alles auf Anfang 
     94TRUNCATE pp_strassenname_p; 
     95 
     96-- ZunÀchst die Sonderschreibweisen (AbkÃŒrzungen) und die Standardschreibweisen,  
     97-- die von der Migration redundant abgelegt wurden. 
     98INSERT INTO pp_strassenname_p (gml_id, schriftinhalt, hor, ver, art, winkel, the_geom) 
     99       SELECT gml_id, schriftinhalt, hor, ver, art, winkel, wkb_geometry 
     100       FROM ap_pto_stra; -- Der View sucht das passende advstandardmodell 
     101 
     102-- Schriftinhalt ergÀnzen 
     103-- Das sind die Standardschreibweisen aus dem Katalog, die nicht mehr redundant in ap_pto sind. 
     104UPDATE pp_strassenname_p  p 
     105   SET schriftinhalt =     -- Hier ist der Label noch leer 
     106   -- Subquery "Gib mir den Straßennamen": 
     107   ( SELECT k.bezeichnung                         -- Straßenname .. 
     108       FROM ax_lagebezeichnungkatalogeintrag k    --  .. aus Katalog 
     109       JOIN ax_lagebezeichnungohnehausnummer l    -- verwendet als Lage o.H. 
     110         ON (k.land=l.land AND k.regierungsbezirk=l.regierungsbezirk AND k.kreis=l.kreis AND k.gemeinde=l.gemeinde AND k.lage=l.lage ) 
     111      WHERE p.gml_id = l.gml_id                   -- die gml_id wurde aus View importiert 
     112    ) 
    107113 WHERE     p.schriftinhalt IS NULL 
    108114   AND NOT p.the_geom      IS NULL; 
     115 
     116-- FEHLER:  als Ausdruck verwendete Unteranfrage ergab mehr als eine Zeile 
     117-- Ursache: Trigger anpassen an "character varying", arbeitet bisher nur mit "caharacter(16)" korrekt 
     118 
     119 
     120-- Die immer noch leeren Texte sind nun sinnlos. 
     121-- Die finden sich ggf. in der Variante "_l" mit Liniengeometrie. 
     122DELETE FROM pp_strassenname_p WHERE schriftinhalt IS NULL; 
     123 
     124-- Nun das Gleiche noch einmal fÃŒr Linien-Geometrie 
     125 
     126-- Auf Anfang 
     127TRUNCATE pp_strassenname_l; 
     128 
     129-- ZunÀchst die Sonderschreibweisen (AbkÃŒrzungen) und die Standardschreibweisen,  
     130-- die von der Migration redundant abgelegt wurden. 
     131INSERT INTO pp_strassenname_l (gml_id, schriftinhalt, hor, ver, art, the_geom) 
     132       SELECT gml_id, schriftinhalt, hor, ver, art, wkb_geometry 
     133       FROM ap_lto_stra; -- Der View sucht das passende advstandardmodell 
     134 
     135-- Schriftinhalt ergÀnzen (korrigiert 2014-08-25) 
     136-- Das sind die Standardschreibweisen aus dem Katalog, die nicht mehr redundant in ap_pto sind. 
     137-- Der Satz mit der passenen gml_id (Lage o.H.) ist aus dem View bereits importiert. 
     138-- Jetzt noch den dazu passenen Schriftinhalt aus dem Katalog holen. 
     139UPDATE pp_strassenname_l  p 
     140   SET schriftinhalt =     -- Hier ist der Label noch leer 
     141   -- Subquery "Gib mir den Straßennamen": 
     142   ( SELECT k.bezeichnung                         -- Straßenname .. 
     143       FROM ax_lagebezeichnungkatalogeintrag k    --  .. aus Katalog 
     144       JOIN ax_lagebezeichnungohnehausnummer l    -- verwendet als Lage o.H. 
     145         ON (k.land=l.land AND k.regierungsbezirk=l.regierungsbezirk AND k.kreis=l.kreis AND k.gemeinde=l.gemeinde AND k.lage=l.lage ) 
     146      WHERE p.gml_id = l.gml_id                   -- die gml_id wurde aus View importiert 
     147    ) 
     148 WHERE     p.schriftinhalt IS NULL 
     149   AND NOT p.the_geom      IS NULL; 
     150 
     151-- Die immer noch leeren Texte sind sinnlos. 
     152DELETE FROM pp_strassenname_l WHERE schriftinhalt IS NULL; 
    109153 
    110154 
     
    113157-- ======================================================== 
    114158 
    115 -- Für die Regelung der Zugriffsberechtigung einer Gemeindeverwaltung auf die  
    116 -- Flurstücke in ihrem Gebiet braucht man die Information, in welcher Gemeinde eine Gemarkung liegt. 
     159-- FÃŒr die Regelung der Zugriffsberechtigung einer Gemeindeverwaltung auf die  
     160-- FlurstÃŒcke in ihrem Gebiet braucht man die Information, in welcher Gemeinde eine Gemarkung liegt. 
    117161-- 'ax_gemeinde' und 'ax_gemarkung' haben aber im ALKIS keinerlei Beziehung zueinander - kaum zu glauben! 
    118 -- Nur über die Auswertung der Flurstücke kann man die Zuordnung ermitteln. 
    119 -- Da nicht ständig mit 'SELECT DISTINCT' sämtliche Flurstücke durchsucht werden können,  
     162-- Nur ÃŒber die Auswertung der FlurstÃŒcke kann man die Zuordnung ermitteln. 
     163-- Da nicht stÀndig mit 'SELECT DISTINCT' sÀmtliche FlurstÃŒcke durchsucht werden können,  
    120164-- muss diese Information als (redundante) Tabelle nach dem Laden zwischengespeichert werden.  
    121165 
     
    174218 
    175219-- ============================================================================== 
    176 -- Geometrien der Flurstücke schrittweise zu groesseren Einheiten zusammen fassen 
     220-- Geometrien der FlurstÃŒcke schrittweise zu groesseren Einheiten zusammen fassen 
    177221-- ============================================================================== 
    178222 
    179 -- Dies macht nur Sinn, wenn der Inhalt der Datenbank einen ganzen Katasterbezirk enthält. 
     223-- Dies macht nur Sinn, wenn der Inhalt der Datenbank einen ganzen Katasterbezirk enthÀlt. 
    180224-- Wenn ein Gebiet durch geometrische Filter im NBA ausgegeben wurde, dann gibt es Randstreifen,  
    181225-- die zu Pseudo-Fluren zusammen gefasst werden. Fachlich falsch! 
    182226 
    183 -- Ausführungszeit: 1 mittlere Stadt mit ca. 14.000 Flurstücken > 100 Sek 
     227-- AusfÃŒhrungszeit: 1 mittlere Stadt mit ca. 14.000 FlurstÃŒcken > 100 Sek 
    184228 
    185229DELETE FROM pp_flur; 
     
    188232   SELECT  f.land, f.regierungsbezirk, f.kreis, f.gemarkungsnummer as gemarkung, f.flurnummer,  
    189233           count(gml_id) as anz_fs, 
    190            st_multi(st_union(st_buffer(f.wkb_geometry,0.05))) AS the_geom -- Zugabe um Zwischenräume zu vermeiden 
     234           st_multi(st_union(st_buffer(f.wkb_geometry,0.05))) AS the_geom -- Zugabe um ZwischenrÀume zu vermeiden 
    191235     FROM  ax_flurstueck f 
    192236     WHERE f.endet IS NULL 
     
    196240-- ------------------------------------- 
    197241 
    198 -- FEHLER: 290 Absturz PG! Bei Verwendung der ungebufferten präzisen Geometrie.   
     242-- FEHLER: 290 Absturz PG! Bei Verwendung der ungebufferten prÀzisen Geometrie.   
    199243-- bufferOriginalPrecision failed (TopologyException: unable to assign hole to a shell), trying with reduced precision 
    200 -- UPDATE: ../../source/headers/geos/noding/SegmentString.h:175: void geos::noding::SegmentString::testInvariant() const: Zusicherung »pts->size() > 1« nicht erfüllt. 
    201  
    202 -- Flächen vereinigen 
     244-- UPDATE: ../../source/headers/geos/noding/SegmentString.h:175: void geos::noding::SegmentString::testInvariant() const: Zusicherung »pts->size() > 1« nicht erfÃŒllt. 
     245 
     246-- FlÀchen vereinigen 
    203247UPDATE pp_gemarkung a 
    204248  SET the_geom =  
    205    ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.1))) AS the_geom -- Puffer/Zugabe um Löcher zu vermeiden 
     249   ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.1))) AS the_geom -- Puffer/Zugabe um Löcher zu vermeiden 
    206250       FROM pp_flur b 
    207251      WHERE a.land      = b.land  
     
    222266-- ---------------------------------------- 
    223267 
    224 -- Flächen vereinigen (aus der bereits vereinfachten Geometrie) 
     268-- FlÀchen vereinigen (aus der bereits vereinfachten Geometrie) 
    225269UPDATE pp_gemeinde a 
    226270  SET the_geom =  
     
    231275   ); 
    232276 
    233 -- Gemarkungen zählen 
     277-- Gemarkungen zÀhlen 
    234278UPDATE pp_gemeinde a 
    235279  SET anz_gemarkg =  
     
    241285 
    242286 
    243 -- Geometrie glätten / vereinfachen 
    244 -- Diese "simplen" Geometrien sollen nur für die Darstellung einer Übersicht verwendet werden. 
     287-- Geometrie glÀtten / vereinfachen 
     288-- Diese "simplen" Geometrien sollen nur fÃŒr die Darstellung einer Übersicht verwendet werden. 
    245289-- Ablage der simplen Geometrie in einem alternativen Geometriefeld im gleichen Datensatz. 
    246290 
     
    253297 
    254298-- ======================================================= 
    255 -- Tabelle fuer die Zuordnung vom Eigentümern zu Gemeinden 
     299-- Tabelle fuer die Zuordnung vom EigentÃŒmern zu Gemeinden 
    256300-- ======================================================= 
    257301 
     
    261305 
    262306-- alle direkten Buchungen mit View ermitteln und in Tabelle speichern 
    263 -- Für eine Stadt: ca. 20 Sekunden 
     307-- FÃŒr eine Stadt: ca. 20 Sekunden 
    264308INSERT INTO  gemeinde_person  
    265309       (land, regierungsbezirk, kreis, gemeinde, person, buchtyp) 
     
    268312 
    269313 
    270 -- noch die komplexeren Buchungen ergänzen (Recht an ..) 
     314-- noch die komplexeren Buchungen ergÀnzen (Recht an ..) 
    271315-- Mit View ermitteln und in Tabelle speichern 
    272 -- Für eine Stadt: ca. 10 Sekunden 
     316-- FÃŒr eine Stadt: ca. 10 Sekunden 
    273317INSERT INTO  gemeinde_person  
    274318       (  land,   regierungsbezirk,   kreis,   gemeinde,   person,  buchtyp) 
Note: See TracChangeset for help on using the changeset viewer.