Changeset 265 for trunk


Ignore:
Timestamp:
02/21/13 13:56:16 (7 years ago)
Author:
frank.jaeger
Message:

View zum Suchen und SQL-Befehl zum Löschen alter Versionen der ALKIS-Beziehungen zw. Flurstück und Buchungsstelle. Diese werden bei Replace nicht korrekt entfernt, wenn gleichzeitig Flurstück und Buchung geändert werden.

Location:
trunk/import
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/import/pp_laden.sql

    r257 r265  
    1111--  2012-04-24 Generell Filter 'endet IS NULL' um historische Objekte auszublenden 
    1212--  2012-04-25 Abstürze und Fehler (durch kaputte Geometrie?) beim Zusammenfassen der Flächen 
    13 --             Mehr buffer, mehr st_simplify? 
    14 --  2012-10-29 Redundanzen aus alkis_beziehungen beseitigen, die nach NAS replace auftreten 
     13--  2012-10-29 F.J. Redundanzen aus alkis_beziehungen beseitigen, die nach NAS replace auftreten 
     14--  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 
    1516 
    1617-- ============================ 
     
    5253-- auf eine bestimmte gml_id filtert. 
    5354-- Damit wäre die DB schon während der Konvertierung konsistenter. 
     55-- Nachtrag 2013-02-20: 
     56-- Diese provisorische Lösung korrigiert nur die Fälle, wo ein Replace eine redundante Beziehung 
     57-- einträgt. Wenn ein Objekt und seine Beziehung gleichzeitig geändert wird, wird der alte 
     58-- Eintrag nicht gefunden und verbleibt in den Beziehungen. 
     59-- Siehe z.B. in Datei "sichten.sql" die Abfrage "mehrfache_buchung_zu_fs"  
     60 
     61 
     62-- Mehrfache Buchungen zu einem Flurstück korrigieren. 
     63-- Neu 2013-02-21 
     64-- Dieser Fehler enststeht, wenn ein Replace zu "ax_flurstueck" gleichzeitig die 
     65-- Beziehung 'istGebucht' zu "ax_buchungsStelle" ändert. 
     66-- Kann entfallen, sobald PostNAS bei Replace die "alkis_beziehungen" richtig fortführt. 
     67 
     68-- Version Marvin Brandt, Unna 
     69--      DELETE 
     70--      --  SELECT * 
     71--      FROM alkis_beziehungen a1 
     72--      WHERE a1.beziehung_von = ANY(SELECT gml_id FROM ( 
     73--                              SELECT f.*, 
     74--                                              (SELECT count(f2.gml_id) as anzahl 
     75--                                              FROM ax_flurstueck f2 
     76--                                              JOIN alkis_beziehungen a1 ON f2.gml_id = a1.beziehung_von AND a1.beziehungsart = 'istGebucht' 
     77--                                              WHERE f2.gml_id = f.gml_id 
     78--                                              ) as anzahl 
     79--                                      FROM ax_flurstueck f 
     80--                                      ) as sub 
     81--                              WHERE sub.anzahl > 1 ) 
     82--      AND a1.beziehungsart = 'istGebucht' 
     83--      AND a1.ogc_fid = (SELECT min(sub.ogc_fid) as ogc_fid FROM ( 
     84--              SELECT a1.*, 
     85--                      (SELECT count(f2.gml_id) as anzahl 
     86--                              FROM ax_flurstueck f2 
     87--                              JOIN alkis_beziehungen a1 ON f2.gml_id = a1.beziehung_von AND a1.beziehungsart = 'istGebucht' 
     88--                              WHERE f2.gml_id = f.gml_id 
     89--                      ) as anzahl 
     90--              FROM ax_flurstueck f 
     91--              JOIN alkis_beziehungen a1  
     92--              ON f.gml_id = a1.beziehung_von AND a1.beziehungsart = 'istGebucht' 
     93--              ) as sub 
     94--      WHERE sub.beziehung_von = a1.beziehung_von); 
     95 
     96 
     97-- Version Frank Jäger, Lemgo  
     98DELETE 
     99-- SELECT *   -- TEST: erst mal schauen, was gelöscht würde, wenn ... 
     100FROM alkis_beziehungen b 
     101WHERE b.beziehungsart = 'istGebucht' 
     102  -- Die erste subquery zählt die Buchungen zu einer (Flurstücks-) gml_id. 
     103  -- Es wird nur dort gelöscht, wo mehrerer Buchungen existieren. 
     104  AND 1 <  
     105     ( SELECT count(f1.ogc_fid) AS anzfs 
     106        FROM ax_flurstueck f1 
     107        JOIN alkis_beziehungen z 
     108          ON f1.gml_id = z.beziehung_von 
     109       WHERE f1.gml_id = b.beziehung_von 
     110         AND z.beziehungsart = 'istGebucht' 
     111       GROUP BY f1.gml_id ) 
     112  -- Die zweite Subquery liefert die letzte (= aktuelle) Beziehung. 
     113  -- Diese aktuelle Buchung wird vom Löschen ausgeschlossen. 
     114  AND b.ogc_fid < 
     115     ( SELECT max(a.ogc_fid) AS maxi 
     116        FROM ax_flurstueck f2 
     117        JOIN alkis_beziehungen a 
     118          ON f2.gml_id = a.beziehung_von 
     119       WHERE f2.gml_id = b.beziehung_von 
     120         AND a.beziehungsart = 'istGebucht' 
     121       GROUP BY a.beziehung_von ) 
     122-- bei Test mit SELECT darf man sortieren: 
     123--  ORDER BY b.beziehung_von, b.ogc_fid 
     124; 
     125 
    54126 
    55127 
  • trunk/import/sichten.sql

    r215 r265  
    99--  2012-04-24 pauschal Filter 'endet IS NULL' um historische Objekte auszublenden 
    1010--  2012-10-29 Redundanzen in Beziehungen suchen (entstehen durch replace) 
     11--  2013-02-20 Mehrfache Buchungsstellen zum FS suchen, dies sind Auswirkungen eines Fehlers bei Replace 
    1112 
    1213--  ----------------------------------------- 
     
    782783COMMENT 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.'; 
    783784 
     785 
     786-- Suche nach Fehler durch "Replace" 
     787-- Wenn ax_flurstueck ÃŒber "replace" ausgetauscht wird und dabei gleichzeitig eine andere  
     788-- Buchungsstelle bekommt, dann bleibt die alte Buchungsstelle in den alkis_beziehungen. 
     789-- Mail PostNAS Mailingliste von 2013-02-20 
     790 
     791-- Version Marvin Brandt, Unna: 
     792 
     793-- CREATE OR REPLACE VIEW mehrfache_buchung_zu_fs 
     794-- AS 
     795--  SELECT gml_id, anzahl FROM  
     796--  ( SELECT f.*,  
     797--     ( SELECT count(f2.gml_id) as anzahl  
     798--       FROM ax_flurstueck f2  
     799--       JOIN alkis_beziehungen a1  
     800--          ON f2.gml_id = a1.beziehung_von  
     801--         AND a1.beziehungsart = 'istGebucht'  
     802--       WHERE f2.gml_id = f.gml_id  
     803--     ) as anzahl  
     804--     FROM ax_flurstueck f 
     805--  ) as sub  
     806--  WHERE sub.anzahl > 1; 
     807 
     808-- Version Frank JÀger, Lemgo (keep it simple) 
     809CREATE OR REPLACE VIEW mehrfache_buchung_zu_fs 
     810AS 
     811  SELECT f.gml_id, count(b.ogc_fid) AS anzahl 
     812    FROM ax_flurstueck f 
     813    JOIN alkis_beziehungen b 
     814      ON f.gml_id = b.beziehung_von  
     815  WHERE b.beziehungsart = 'istGebucht' 
     816  GROUP BY f.gml_id 
     817  HAVING count(b.ogc_fid) > 1; 
     818 
     819-- Noch einfacher? - Auch ohne JOIN wird das selbe Ergebnis geliefert. 
     820-- Doppelte Verweise zÀhlen ohne zu prÃŒfen, ob die gml_id in ax_flurstueck existiert. 
     821--  SELECT b.beziehung_von, count(b.ogc_fid) AS anzahl 
     822--    FROM alkis_beziehungen b 
     823--   WHERE b.beziehungsart = 'istGebucht' 
     824--  GROUP BY b.beziehung_von 
     825--  HAVING count(b.ogc_fid) > 1; 
     826 
     827COMMENT ON VIEW mehrfache_buchung_zu_fs IS 'Nach replace von ax_flurtstueck mit einer neuen ax_buchungsstelle bleibt die alte Verbindung in alkis_beziehungen'; 
     828 
     829 
    784830-- END -- 
Note: See TracChangeset for help on using the changeset viewer.