Changeset 183 for trunk/data


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).

Location:
trunk/data/konvert/postnas_0.7
Files:
4 edited

Legend:

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

    r178 r183  
    3838--                Typ 'GEOMETRY' bei Tabellen: AX_WegPfadSteig, AX_UntergeordnetesGewaesser 
    3939 
     40-- 2012-10-31 FJ  Trigger fuer NAS-Replace-Saetze repariert:  
     41--                siehe: FUNCTION delete_feature_kill()  
     42--                ax_historischesflurstueck.buchungsart ist Text nicht integer. 
     43 
    4044--  VERSIONS-NUMMER: 
    4145 
    42 --  Dies Schema kann nicht mehr mit der installierbaren gdal-Version 1.9 verwendet werden. 
     46--  Dies Schema kann NICHT mehr mit der installierbaren gdal-Version 1.9 verwendet werden. 
    4347--  Derzeit muss ogr2ogr (gdal) aus den Quellen compiliert werden, die o.g. Patch enthalten. 
    4448--  WeiterfÃŒhrung dieses Zweiges als PostNAS 0.7 
     
    267271                END IF; 
    268272 
     273                -- Das beginn-Datum des neuen Objektes ermitteln, der Satz ist kurz zuvor eingefuegt worden 
     274 
     275                -- Variante 1 funktioniert, wenn gml_id auch einen Timestamp enthaelt 
    269276                sql := 'SELECT beginnt FROM ' || NEW.typename || ' WHERE identifier=''urn:adv:oid:' || NEW.replacedBy || ''''; 
    270277                -- RAISE NOTICE 'SQL: %', sql;  
    271                  
    272                 -- FEHLER: identifier enthÀlt nur gml_id, aber nicht den Timestamp dahinter 
    273                 --         Daher wird das zu ersetzende Obejkt nicht gefunden 
    274                  
    275278                EXECUTE sql INTO endete; 
    276279 
    277 /* 
    278280                IF endete IS NULL AND length(NEW.replacedBy)>16 THEN 
    279                         RAISE NOTICE '%: Nachfolger % nicht gefunden - versuche ''%''', NEW.featureid, substr(NEW.replacedBy, 1, 16); 
     281                        RAISE NOTICE '%: Nachfolger % nicht gefunden - versuche ''%''', NEW.featureid, NEW.replacedBy, substr(NEW.replacedBy, 1, 16); 
    280282                        sql := 'SELECT beginnt FROM ' || NEW.typename 
    281283                            || ' WHERE gml_id=''' || substr(NEW.replacedBy, 1, 16) || '''' 
     
    284286                        EXECUTE sql INTO endete; 
    285287                END IF; 
    286  */ 
    287288 
    288289                IF endete IS NULL THEN 
     
    296297                END IF; 
    297298 
    298                 -- RAISE NOTICE '%: Nachfolgeobjekt beginnt um %.', NEW.featureid, endete; 
     299                RAISE NOTICE '%: Nachfolgeobjekt beginnt um %.', NEW.featureid, endete; 
    299300        ELSE 
    300301                RAISE EXCEPTION '%: UngÃŒltiger Kontext % (''delete'' oder ''replace'' erwartet).', NEW.featureid, NEW.context; 
    301302        END IF; 
    302303 
     304        -- mit dem zuvor ermittelten Beginn-Datum des replace-Objektes das alte Objekt historisieren 
    303305        sql := 'UPDATE ' || NEW.typename 
    304306                || ' SET endet=''' || endete || '''' 
    305307                || ' WHERE (identifier=''urn:adv:oid:' || NEW.featureid || ''' OR identifier=''urn:adv:oid:' || gml_id || ''')' 
    306308                || ' AND endet IS NULL'; 
    307         -- RAISE NOTICE 'SQL: %', sql;  
     309                RAISE NOTICE 'SQL: %', sql;  
    308310        EXECUTE sql; 
    309311        GET DIAGNOSTICS n = ROW_COUNT; 
     
    328330-- historische Objekte werden sofort gelöscht. 
    329331-- Siehe Mail W. Jacobs vom 23.03.2012 in PostNAS-Mailingliste 
     332-- geaendert krz FJ 2012-10-31 
    330333CREATE OR REPLACE FUNCTION delete_feature_kill() RETURNS TRIGGER AS $$ 
    331334DECLARE 
    332335        query TEXT; 
     336        begsql TEXT; 
     337        aktbeg TEXT; 
    333338        gml_id TEXT; 
    334339BEGIN 
     
    342347 
    343348        IF NEW.context='delete' THEN 
    344                 query := 'DELETE FROM ' || NEW.typename || ' WHERE gml_id = ''' || gml_id || ''''; 
     349                -- ersatzloses Loeschen eines Objektes 
     350 
     351                -- Tabelle der Objekt-Art 
     352                query := 'DELETE FROM ' || NEW.typename  
     353                        || ' WHERE gml_id = ''' || gml_id || ''''; 
    345354                EXECUTE query; 
    346355 
    347                 query := 'DELETE FROM alkis_beziehungen WHERE beziehung_von = ''' || gml_id || ''' OR beziehung_zu = ''' || gml_id || ''''; 
     356                -- Tabelle alkis_beziehungen 
     357                query := 'DELETE FROM alkis_beziehungen WHERE beziehung_von = ''' || gml_id  
     358                        || ''' OR beziehung_zu = ''' || gml_id || ''''; 
    348359                EXECUTE query; 
     360                RAISE NOTICE 'Lösche gml_id % in % und Beziehungen', gml_id, NEW.typename; 
     361 
    349362        ELSE 
    350                 -- replace 
    351                 query := 'DELETE FROM ' || NEW.typename || ' WHERE gml_id = ''' || gml_id || ''''; 
     363                -- Ersetzen eines Objektes 
     364                -- In der objekt-Tabelle sind bereits 2 Objekte vorhanden (alt und neu). 
     365                -- Die 2 DatensÀtze unterscheiden sich nur in ogc_fid und beginnt 
     366 
     367                -- beginnt-Wert des aktuellen Objektes ermitteln  
     368                -- RAISE NOTICE 'Suche beginnt von neuem gml_id % ', substr(NEW.replacedBy, 1, 16); 
     369                begsql := 'SELECT max(beginnt) FROM ' || NEW.typename || ' WHERE gml_id = ''' || substr(NEW.replacedBy, 1, 16) || ''' AND endet IS NULL'; 
     370                EXECUTE begsql INTO aktbeg; 
     371 
     372                -- Nur alte Objekte entfernen 
     373                query := 'DELETE FROM ' || NEW.typename  
     374                        || ' WHERE gml_id = ''' || gml_id || ''' AND beginnt < ''' || aktbeg || ''''; 
    352375                EXECUTE query; 
    353                 -- alkis_beziehungen bleibt so 
     376 
     377                -- Tabelle alkis_beziehungen 
     378                IF gml_id = substr(NEW.replacedBy, 1, 16) THEN -- gml_id gleich 
     379                        -- Beziehungen des Objektes wurden redundant noch einmal eingetragen 
     380                        -- ToDo:         HIER sofort die Redundanzen zum aktuellen Objekt beseitigen. 
     381                        -- Work-Arround: Nach der Konvertierung werden im Post-Processing  
     382                        --               ALLE Redundanzen mit einem SQL-Statemant beseitigt. 
     383                --      RAISE NOTICE 'Ersetze gleiche gml_id % in %', gml_id, NEW.typename; 
     384 
     385                -- ENTWURF ungetestet: 
     386                --query := 'DELETE FROM alkis_beziehungen AS bezalt  
     387                --      WHERE (bezalt.beziehung_von = ' || gml_id || ' OR bezalt.beziehung_zu = ' || gml_id ||') 
     388                --      AND EXISTS (SELECT ogc_fid FROM alkis_beziehungen AS bezneu  
     389                --              WHERE bezalt.beziehung_von = bezneu.beziehung_von  
     390                --              AND bezalt.beziehung_zu = bezneu.beziehung_zu 
     391                --              AND bezalt.beziehungsart = bezneu.beziehungsart 
     392                --              AND bezalt.ogc_fid < bezneu.ogc_fid);' 
     393                --EXECUTE query; 
     394 
     395                ELSE 
     396                        -- replace mit ungleicher gml_id 
     397                        -- Falls dies vorkommt, die Function erweitern 
     398                        RAISE EXCEPTION '%: neue gml_id % bei Replace in %. alkis_beziehungen muss aktualisiert werden!', gml_id, NEW.replacedBy, NEW.typename; 
     399                END IF; 
    354400        END IF; 
    355401 
     
    361407-- Im Trigger 'delete_feature_trigger' muss eine dieser beiden Functions (_hist oder _kill) verlinkt werden,  
    362408-- je nachdem ob nur aktuelle oder auch historische Objekte in der Datenbank gefÃŒhrt werden sollen. 
    363  
    364409 
    365410-- Wenn die Datenbank MIT Historie angelegt wurde, aber eigentlich stört die nur. 
     
    377422        LOOP 
    378423                EXECUTE 'DELETE FROM ' || c.table_name || ' WHERE NOT endet IS NULL'; 
    379                 RAISE NOTICE 'Lösche ended in: %', c.table_name; 
     424                -- RAISE NOTICE 'Lösche ended in: %', c.table_name; 
    380425        END LOOP; 
    381426END; 
     
    383428 
    384429 
    385 -- Alle Tabellen löschen 
    386 -- SELECT alkis_drop(); 
     430-- Alle Tabellen löschen: 
     431--  SELECT alkis_drop(); 
    387432 
    388433 
     
    844889        nachfolgerflurstueckskennzeichen        varchar[], 
    845890        blattart                        integer, 
    846         buchungsart                     integer, 
     891        --buchungsart                   integer,  -- Aenderung krz FJ 2012-10-31: Meldung aus Konverter 
     892        buchungsart                     varchar, 
    847893        buchungsblattkennzeichen        double precision, 
    848894        bezirk                          integer, 
     
    12831329--  beziehtSichAufFlurstueck  --> AX_Flurstueck 
    12841330 
     1331 
     1332-- BEGIN - Nur fuer Test-Zwecke 
     1333 CREATE OR REPLACE FUNCTION info_flurstueck() RETURNS TRIGGER AS $$ 
     1334 BEGIN 
     1335        RAISE NOTICE 'Insert Flurstueck %', NEW.gml_id; 
     1336        RETURN NEW; 
     1337 END; 
     1338 $$ LANGUAGE plpgsql; 
     1339 
     1340-- CREATE TRIGGER neues_fs_trigger 
     1341--        BEFORE INSERT ON ax_flurstueck  
     1342--        FOR EACH ROW  
     1343--           EXECUTE PROCEDURE info_flurstueck(); 
     1344 
     1345-- ENDE - Nur fuer Test-Zwecke 
    12851346 
    12861347 
  • trunk/data/konvert/postnas_0.7/konv_batch.sh

    r178 r183  
    1 #!/bin/bash 
     1#!/bin/bash 
    22## ------------------------------------------------- 
    33## Konvertierung von ALKIS NAS-Format nach PosGIS  - 
     
    2323##   2012-02-28 Neuer Parameter 4 um Post-Prozessing zu unterdrücken 
    2424##   2012-04-25 Durch GDAL Patch #5444 werden die Löschungen als Trigger auf Tabelle 'delete' verarbeitet 
     25##   2012-05-18 Umzug neue GDI, GDAL-Trunk unter Pfad  
     26##   2012-10-30 Umgebungsvariable setzen, delete-Tabelle am Ende für Analyse gefüllt lassen. 
     27##              Test als 0.7a mit gepatchter gdal-Version (noch 2.0dev) 
    2528## 
    26 ## ToDo: Option "-skipfailures" nach Test entfernen ? 
    27 ## 
    28 ## Konverter:   /opt/gdal-1.9.1/bin/ = GDAL 1.9-DEV / PostNAS 0.7 
     29## Konverter:   /opt/gdal-2.0/bin/ = GDAL 2.0-DEV / PostNAS 0.7 
    2930## Koordinaten: EPSG:25832  UTM, Zone 32 
    3031##              -a_srs EPSG:25832   - bleibt im UTM-System (korrigierte Werte) 
    3132## 
    3233echo "**************************************************" 
    33 echo "**   K o n v e r t i e r u n g     PostNAS 0.7  **" 
     34echo "**   K o n v e r t i e r u n g     PostNAS 0.7a **" 
    3435echo "**************************************************" 
    3536## Parameter: 
     
    7576fi 
    7677# Fehlerprotokoll: 
    77   errprot='/data/konvert/postnas_0.7/log/postnas_err_'$DBNAME'.prot' 
     78  errprot='/data/konvert/postnas_0.7a/log/postnas_err_'$DBNAME'.prot' 
    7879# 
    7980# DB-Connection 
     
    8384  echo "Verarbeitungs-Modus= ${verarb}" 
    8485  echo " " 
    85 # Alte delete-Eintraege in DB? 
     86# noch alte delete-Eintraege in DB? 
     87  echo "Leeren der delete-Tabelle" 
    8688  echo 'TRUNCATE table "delete";' | psql $con  
    8789# 
     
    104106      echo "* Datei: " $nasdatei >> $errprot 
    105107      # 
     108      # Umgebungsvariable setzen: 
     109        export GML_FIELDTYPES=ALWAYS_STRINGS    # PostNAS behandelt Zahlen wie Strings, PostgreSQL-Treiber macht daraus Zahlen 
     110        export OGR_SETFIELD_NUMERIC_WARNING=YES # Meldung abgeschnittene Zahlen? 
     111       #export CPL_DEBUG=ON                     # Meldung, wenn Attribute überschrieben werden 
     112      # 
    106113      # PostNAS Konverter-Aufruf 
    107114      # 
    108       /opt/gdal-1.9.1/bin/ogr2ogr -f "PostgreSQL" -append  ${update} -skipfailures \ 
     115      # -skipfailures    # 
     116      # -overwrite       # 
     117      /opt/gdal-2.0/bin/ogr2ogr -f "PostgreSQL" -append  ${update} -skipfailures  \ 
    109118         PG:"dbname=${DBNAME} host=localhost port=5432" -a_srs EPSG:25832 ${nasdatei} 2>> $errprot 
    110119      nasresult=$? 
    111120      echo "* Resultat: " $nasresult " fuer " ${nasdatei} 
     121          echo "* Resultat: " $nasresult " fuer " ${nasdatei}  >> $errprot 
    112122    done # Ende Zipfile 
    113123  done # Ende Ordner 
     
    126136    echo "** Post-Processing (Nacharbeiten zur Konvertierung)" 
    127137    echo "** - Optimierte Nutzungsarten neu Laden:" 
    128     psql -p 5432 -d ${DBNAME} < /data/konvert/postnas_0.7/nutzungsart_laden.sql 
     138    psql -p 5432 -d ${DBNAME} < /data/konvert/postnas_0.7a/nutzungsart_laden.sql 
    129139    ## 
    130140    echo "** - Fluren / Gemarkungen / Gemeinden neu Laden:" 
    131     psql -p 5432 -d ${DBNAME} < /data/konvert/postnas_0.7/pp_laden.sql 
     141    psql -p 5432 -d ${DBNAME} < /data/konvert/postnas_0.7a/pp_laden.sql 
    132142  fi 
    133143# Durch Einfuegen in Tabelle 'delete' werden Loeschungen anderer Tabellen getriggert 
    134144  echo "** delete-Tabelle enthält:" 
    135145  echo 'SELECT COUNT(featureid) AS delete_zeilen FROM "delete";' | psql $con 
    136   echo "   delete-Tabelle loeschen:" 
    137   echo 'TRUNCATE table "delete";' | psql $con 
     146 #echo "   delete-Tabelle loeschen:" 
     147 #echo 'TRUNCATE table "delete";' | psql $con 
     148 # Fuer Analyse-Zwecke sollten die Delete-Eintraege erhalten bleiben bis zum naechsten Lauf. 
     149 # TRUNCATE erfolgt VOR der Konnvertierung. 
    138150# 
    139151# Wenn die Datenbank MIT Historie angelegt wurde, man diese aber gar nicht braucht, 
    140152# dann hinterher aufräumen der historischen Objekte  
    141   echo "** geendete Objekte entfernen:" 
     153 #echo "** geendete Objekte entfernen:" 
    142154# Function : 
    143   echo 'SELECT alkis_delete_all_endet();' | psql $con 
     155 #echo 'SELECT alkis_delete_all_endet();' | psql $con 
     156 #echo "  ... geendete Objekte entfernen wurde fuer Test dektiviert." 
     157 #echo "  Bitte manuell ausfuehren:  SELECT alkis_delete_all_endet(); " 
    144158# 
    145   echo "Das Fehler-Protokoll wurde ausgegeben in die Datei\n$errprot" 
     159  echo "Das Fehler-Protokoll wurde ausgegeben in die Datei $errprot" 
     160 #echo "HINWEIS: -skipfailures  fuer Produktion wieder einschalten." 
    146161# 
  • 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 
  • trunk/data/konvert/postnas_0.7/sichten.sql

    r178 r183  
    88--  2012-04-17 flstnr_ohne_position 
    99--  2012-04-24 pauschal Filter 'endet IS NULL' um historische Objekte auszublenden 
    10  
     10--  2012-10-29 Redundanzen in Beziehungen suchen (entstehen durch replace) 
    1111 
    1212--  ----------------------------------------- 
     
    740740; 
    741741 
     742CREATE OR REPLACE VIEW beziehungen_redundant  
     743AS 
     744SELECT * 
     745 FROM alkis_beziehungen AS bezalt 
     746 WHERE EXISTS 
     747       (SELECT ogc_fid 
     748         FROM alkis_beziehungen AS bezneu 
     749        WHERE bezalt.beziehung_von = bezneu.beziehung_von 
     750          AND bezalt.beziehung_zu  = bezneu.beziehung_zu 
     751          AND bezalt.beziehungsart = bezneu.beziehungsart 
     752          AND bezalt.ogc_fid       < bezneu.ogc_fid 
     753        ); 
     754 
     755COMMENT ON VIEW beziehungen_redundant IS 'alkis_beziehungen zu denen es eine identische neue Version gibt.'; 
     756 
     757 
     758CREATE OR REPLACE VIEW beziehungen_redundant_in_delete 
     759AS 
     760SELECT * 
     761 FROM alkis_beziehungen AS bezalt 
     762 WHERE EXISTS 
     763       (SELECT ogc_fid 
     764         FROM alkis_beziehungen AS bezneu 
     765        WHERE bezalt.beziehung_von = bezneu.beziehung_von 
     766          AND bezalt.beziehung_zu  = bezneu.beziehung_zu 
     767          AND bezalt.beziehungsart = bezneu.beziehungsart 
     768          AND bezalt.ogc_fid       < bezneu.ogc_fid 
     769        ) 
     770     -- mit dem Zusatz nur die Faelle aus dem letzten Durchlauf, 
     771     -- die aktuell noch in der Delet-Tabelle stehen 
     772     AND EXISTS 
     773        (SELECT ogc_fid 
     774         FROM delete 
     775         WHERE bezalt.beziehung_von = substr(featureid, 1, 16) 
     776            OR bezalt.beziehung_zu  = substr(featureid, 1, 16) 
     777        ); 
     778 
     779COMMENT ON VIEW beziehungen_redundant_in_delete IS 'alkis_beziehungen zu denen es eine identische neue Version gibt und wo das Objekt noch in der delete-Tabelle vorkommt.'; 
     780 
    742781-- END -- 
    743  
Note: See TracChangeset for help on using the changeset viewer.