Ignore:
Timestamp:
10/31/12 16:46:53 (11 years ago)
Author:
frank.jaeger
Message:

Trigger fuer NAS-Replace-Sätze repariert (Quick 'n Dirty).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/data/konvert/postnas_0.7/pp_laden.sql

    r178 r183  
    1010--  2012-04-17 Flurstuecksnummern auf Standardposition 
    1111--  2012-04-24 Generell Filter 'endet IS NULL' um historische Objekte auszublenden 
    12  
     12--  2012-04-25 Abstürze und Fehler (durch kaputte Geometrie?) beim Zusammenfassen der Flächen 
     13--             Mehr buffer, mehr simplify? 
     14--  2012-10-29 Redundanzen aus alkis_beziehungen beseitigen, die nach NAS replace auftreten 
    1315 
    1416-- ============================ 
     
    2022-- Antwortzeiten in WMS, WFS, Buchauskunft oder Navigation (Suche) verursachen. 
    2123 
    22 -- Im Rahmen eines "Post-Processing" werden diese Daten nach jeder Konvertierung (NBA-Aktialisierung)  
     24-- Im Rahmen eines "Post-Processing" werden diese Daten nach jeder Konvertierung (NBA-Aktualisierung)  
    2325-- einmal komplett aufbereitet. Die benötigten Informationen stehen somit den Anwendungen mundgerecht zur Verfügung. 
    2426 
     
    2729-- Die Ausführung dieses Scriptes auf einer Datenbank für eine 80T-Einwohner-Stadt dauert ca.: 500 Sek. ! 
    2830 
    29  
    30  
    31 -- =========================== 
    32 -- Flurstuecksnummern-Position 
    33 -- =========================== 
     31SET client_encoding = 'UTF-8'; 
     32 
     33 
     34-- ============================================================================ 
     35-- Redundanzen aus alkis_beziehungen beseitigen, die nach NAS replace auftreten 
     36-- ============================================================================ 
     37-- Work arround: alle Redundazen nach einem Lauf entfernen. 
     38-- Besser wäre: sofort im Trigger bei replace entfernen. 
     39-- Siehe Schema in FUNCTION delete_feature_kill 
     40 
     41DELETE  
     42  FROM alkis_beziehungen AS bezalt        -- Beziehung Alt 
     43 WHERE EXISTS 
     44       (SELECT ogc_fid 
     45         FROM alkis_beziehungen AS bezneu -- Beziehung Neu 
     46        WHERE bezalt.beziehung_von = bezneu.beziehung_von 
     47          AND bezalt.beziehung_zu  = bezneu.beziehung_zu 
     48          AND bezalt.beziehungsart = bezneu.beziehungsart 
     49          AND bezalt.ogc_fid       < bezneu.ogc_fid 
     50        ); 
     51-- Denkbar ist eine Variante für den Trigger, die zusätzlich 
     52-- auf eine bestimmte gml_id filtert. 
     53-- Damit wäre die DB schon während der Konvertierung konsistenter. 
     54 
     55 
     56-- SELECT * 
     57--  FROM alkis_beziehungen AS bezalt 
     58--  WHERE EXISTS 
     59--        (SELECT ogc_fid 
     60--          FROM alkis_beziehungen AS bezneu 
     61--         WHERE bezalt.beziehung_von = bezneu.beziehung_von 
     62--           AND bezalt.beziehung_zu  = bezneu.beziehung_zu 
     63--           AND bezalt.beziehungsart = bezneu.beziehungsart 
     64--           AND bezalt.ogc_fid       < bezneu.ogc_fid 
     65--         ); 
     66 
     67-- SELECT * 
     68--  FROM alkis_beziehungen AS bezalt 
     69--  WHERE EXISTS 
     70--        (SELECT ogc_fid 
     71--          FROM alkis_beziehungen AS bezneu 
     72--         WHERE bezalt.beziehung_von = bezneu.beziehung_von 
     73--           AND bezalt.beziehung_zu  = bezneu.beziehung_zu 
     74--           AND bezalt.beziehungsart = bezneu.beziehungsart 
     75--           AND bezalt.ogc_fid       < bezneu.ogc_fid 
     76--         ) 
     77--      -- mit dem Zusatz nur die Faelle aus dem letzten Durchlauf, 
     78--      -- die aktuell noch in der Delet-Tabelle stehen 
     79--      AND EXISTS 
     80--         (SELECT ogc_fid 
     81--          FROM delete 
     82--          WHERE bezalt.beziehung_von = substr(featureid, 1, 16) 
     83--             OR bezalt.beziehung_zu  = substr(featureid, 1, 16) 
     84--         ); 
     85 
     86 
     87-- ================================= 
     88-- Flurstuecksnummern-Label-Position 
     89-- ================================= 
    3490 
    3591-- ersetzt den View "s_flurstueck_nr" für WMS-Layer "ag_t_flurstueck" 
     
    73129 
    74130 
    75 SET client_encoding = 'UTF-8'; 
    76  
    77  
    78 -- Alles auf Anfang! 
    79   DELETE FROM pp_gemeinde; 
    80   DELETE FROM pp_gemarkung; 
    81   DELETE FROM pp_flur; 
    82  
     131-- G E M A R K U N G 
     132 
     133DELETE FROM pp_gemarkung; 
    83134 
    84135-- Vorkommende Paarungen Gemarkung <-> Gemeinde in ax_Flurstueck 
     
    91142; 
    92143 
    93 -- daraus: Vorkommende Gemeinden 
     144-- Namen der Gemarkung dazu als Optimierung bei der Auskunft  
     145UPDATE pp_gemarkung a 
     146   SET gemarkungsname = 
     147   ( SELECT b.bezeichnung  
     148     FROM    ax_gemarkung b 
     149     WHERE a.land=b.land  
     150       AND a.gemarkung=b.gemarkungsnummer 
     151       AND b.endet IS NULL 
     152   ); 
     153 
     154 
     155-- G E M E I N D E 
     156 
     157DELETE FROM pp_gemeinde; 
     158 
     159-- Vorkommende Gemeinden aus den gemarkungen 
    94160INSERT INTO pp_gemeinde 
    95161  (               land, regierungsbezirk, kreis, gemeinde) 
     
    98164  ORDER BY        land, regierungsbezirk, kreis, gemeinde  
    99165; 
     166 
    100167 
    101168-- Namen der Gemeinde dazu als Optimierung bei der Auskunft  
     
    111178   ); 
    112179 
    113 -- Namen der Gemarkung dazu als Optimierung bei der Auskunft  
    114 UPDATE pp_gemarkung a 
    115    SET gemarkungsname = 
    116    ( SELECT b.bezeichnung  
    117      FROM    ax_gemarkung b 
    118      WHERE a.land=b.land  
    119        AND a.gemarkung=b.gemarkungsnummer 
    120        AND b.endet IS NULL 
    121    ); 
    122  
    123180 
    124181-- ============================================================================== 
     
    126183-- ============================================================================== 
    127184 
    128 -- Dies macht nur Sinn, wenn der Inhalt der Datenbenk einen ganzen Katasterbezirk enthält. 
     185-- Dies macht nur Sinn, wenn der Inhalt der Datenbank einen ganzen Katasterbezirk enthält. 
    129186-- Wenn ein Gebiet durch geometrische Filter im NBA ausgegeben wurde, dann gibt es Randstreifen,  
    130187-- die zu Pseudo-Fluren zusammen gefasst werden. Fachlich falsch! 
    131188 
     189-- Ausführungszeit: 1 mittlere Stadt mit ca. 14.000 Flurstücken > 100 Sek 
     190 
    132191-- ToDo: 
    133 --   TopologyException: found non-noded intersection between   ... 
    134192--   Nur "geprüfte Flurstücke" verwenden?  Filter? 
     193 
     194--   070: TopologyException: found non-noded intersection between   ... 
     195 
     196 
     197DELETE FROM pp_flur; 
    135198 
    136199INSERT INTO pp_flur (land, regierungsbezirk, kreis, gemarkung, flurnummer, anz_fs, the_geom ) 
    137200   SELECT  f.land, f.regierungsbezirk, f.kreis, f.gemarkungsnummer as gemarkung, f.flurnummer,  
    138201           count(gml_id) as anz_fs, 
    139            multi(st_union(st_buffer(f.wkb_geometry,0))) AS the_geom  
     202           multi(st_union(st_buffer(f.wkb_geometry,0.05))) AS the_geom -- 5 cm Zugabe um Zwischenräume zu vermeiden 
    140203     FROM  ax_flurstueck f 
    141204     WHERE f.endet IS NULL 
    142205  GROUP BY f.land, f.regierungsbezirk, f.kreis, f.gemarkungsnummer, f.flurnummer; 
    143206 
     207-- Geometrie vereinfachen, auf 1 Meter glätten 
     208UPDATE pp_flur SET simple_geom = simplify(the_geom, 1.0); 
     209 
    144210 
    145211-- Fluren zu Gemarkungen zusammen fassen 
    146212-- ------------------------------------- 
    147213 
    148 -- Flächen vereinigen 
     214-- FEHLER: 290 Absturz PG! Bei Verwendung der ungebufferten präzisen Geometrie.   
     215-- bufferOriginalPrecision failed (TopologyException: unable to assign hole to a shell), trying with reduced precision 
     216-- UPDATE: ../../source/headers/geos/noding/SegmentString.h:175: void geos::noding::SegmentString::testInvariant() const: Zusicherung »pts->size() > 1« nicht erfüllt. 
     217 
     218 
     219-- Flächen vereinigen (aus der bereits vereinfachten Geometrie) 
    149220UPDATE pp_gemarkung a 
    150221  SET the_geom =  
    151    ( SELECT multi(st_union(st_buffer(b.the_geom,0))) AS the_geom  
     222   ( SELECT multi(st_union(st_buffer(b.simple_geom,0.1))) AS the_geom -- noch mal 10 cm Zugabe 
    152223     FROM    pp_flur b 
    153      WHERE a.land=b.land AND a.gemarkung=b.gemarkung 
     224     WHERE a.land      = b.land  
     225       AND a.gemarkung = b.gemarkung 
    154226   ); 
    155227 
     
    159231   ( SELECT count(flurnummer) AS anz_flur  
    160232     FROM    pp_flur b 
    161      WHERE a.land=b.land AND a.gemarkung=b.gemarkung 
     233     WHERE a.land      = b.land  
     234       AND a.gemarkung = b.gemarkung 
    162235   ); -- Gemarkungsnummer ist je BundesLand eindeutig 
    163236 
     
    169242-- ---------------------------------------- 
    170243 
    171 -- Flächen vereinigen 
     244-- Flächen vereinigen (aus der bereits vereinfachten Geometrie) 
    172245UPDATE pp_gemeinde a 
    173246  SET the_geom =  
    174    ( SELECT multi(st_union(st_buffer(b.the_geom,0))) AS the_geom  
     247   ( SELECT multi(st_union(st_buffer(b.simple_geom,0.1))) AS the_geom -- noch mal Zugabe 10 cm 
    175248     FROM    pp_gemarkung b 
    176      WHERE a.land=b.land AND a.gemeinde=b.gemeinde 
     249     WHERE a.land     = b.land  
     250       AND a.gemeinde = b.gemeinde 
    177251   ); 
    178252 
     
    182256   ( SELECT count(gemarkung) AS anz_gemarkg  
    183257     FROM    pp_gemarkung b 
    184      WHERE a.land=b.land AND a.gemeinde=b.gemeinde 
     258     WHERE a.land     = b.land  
     259       AND a.gemeinde = b.gemeinde 
    185260   ); 
    186261 
Note: See TracChangeset for help on using the changeset viewer.