Ignore:
Timestamp:
01/08/15 17:13:59 (9 years ago)
Author:
frank.jaeger
Message:

Verbesserte Darstellung von Flur, Gemarkung und Gemeinde im WMS.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/import/pp_laden.sql

    r339 r351  
    2323--  2014-09-19 Substring auf gml_id, Korrektur "endet IS NULL" 
    2424--  2014-09-30 RÃŒckbau substring(gml_id) 
     25--  2014-12-17 Neue Spalte "gemeinde" in Tabelle "pp_flur", dient der Filterung im WMS-Layer "Gebiete" 
     26--  2015-01-08 Mehrfach-Versuche der Geometrie-Zusammenfassung mit wachsender Puffergröße. 
    2527 
    2628 
     
    3234-- Die dynamische Aufbereitung ÃŒber Views und Functions wÃŒrde zu lange dauern und somit lange  
    3335-- Antwortzeiten in WMS, WFS, Buchauskunft oder Navigation (Suche) verursachen. 
     36 
     37-- Geometrie glÀtten und vereinfachen fÃŒr Flur, Gemarkung und Gemeinde: 
     38-- Die "simplen" Geometrien sollen nur fÃŒr die Darstellung einer Übersicht verwendet werden. 
     39-- Ablage der simplen Geometrie in einem alternativen Geometriefeld im gleichen Datensatz. 
    3440 
    3541-- Im Rahmen eines "Post-Processing" werden diese Daten nach jeder Konvertierung (NBA-Aktualisierung)  
     
    232238-- Geometrien der FlurstÃŒcke schrittweise zu groesseren Einheiten zusammen fassen 
    233239-- ============================================================================== 
    234  
    235 -- Dies macht nur Sinn, wenn der Inhalt der Datenbank einen ganzen Katasterbezirk enthÀlt. 
    236 -- Wenn ein Gebiet durch geometrische Filter im NBA ausgegeben wurde, dann gibt es Randstreifen,  
    237 -- die zu Pseudo-Fluren zusammen gefasst werden. Fachlich falsch! 
     240-- http://postgis.net/docs/manual-1.5/ST_Union.html (Aggregate version) 
     241-- http://postgis.net/docs/manual-1.5/ST_Collect.html 
     242 
     243-- Wenn ein Gebiet durch geometrische Filter im NBA-Verfahren ausgegeben wurde, dann gibt es  
     244-- Randstreifen, die zu Pseudo-Fluren zusammen gefasst werden.  
     245-- Diese werden fÃŒr den WMS durch einen View ausgefiltert, der nur eine Gemeinde darstellt. 
    238246 
    239247-- AusfÃŒhrungszeit: 1 mittlere Stadt mit ca. 14.000 FlurstÃŒcken > 100 Sek 
    240248 
    241249TRUNCATE pp_flur; 
    242 INSERT INTO pp_flur (land, regierungsbezirk, kreis, gemarkung, flurnummer, anz_fs, the_geom ) 
    243    SELECT  f.land, f.regierungsbezirk, f.kreis, f.gemarkungsnummer as gemarkung, f.flurnummer,  
     250 
     251INSERT INTO pp_flur (land, regierungsbezirk, kreis, gemeinde, gemarkung, flurnummer, anz_fs, the_geom ) 
     252   SELECT  f.land, f.regierungsbezirk, f.kreis, f.gemeinde, f.gemarkungsnummer as gemarkung, f.flurnummer,  
    244253           count(gml_id) as anz_fs, 
    245            st_multi(st_union(st_buffer(f.wkb_geometry,0.06))) AS the_geom -- Zugabe um ZwischenrÀume zu vermeiden 
     254           ST_Multi(st_union(st_buffer(f.wkb_geometry,0.06))) AS the_geom -- Zugabe um ZwischenrÀume zu vermeiden 
    246255     FROM  ax_flurstueck f 
    247256     WHERE f.endet IS NULL AND NOT f.wkb_geometry IS NULL 
    248   GROUP BY f.land, f.regierungsbezirk, f.kreis, f.gemarkungsnummer, f.flurnummer; 
     257  GROUP BY f.land, f.regierungsbezirk, f.kreis, f.gemeinde, f.gemarkungsnummer, f.flurnummer; 
     258 
     259-- Vereinfachte Geometrie der Flur fÃŒr die Darstelung im WMS in einem kleinen Maßstab 
     260UPDATE pp_flur      SET simple_geom = st_simplify(the_geom, 0.5); 
    249261 
    250262 
     
    255267UPDATE pp_gemarkung a 
    256268  SET the_geom =  
    257    ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.12))) AS the_geom -- Puffer/Zugabe um Löcher zu vermeiden 
     269   ( SELECT ST_Multi(ST_Union(ST_Buffer(b.the_geom,0.15))) AS the_geom -- Puffer/Zugabe um Löcher zu vermeiden 
    258270       FROM pp_flur b 
    259271      WHERE a.land      = b.land  
    260272        AND a.gemarkung = b.gemarkung 
    261273   ); 
    262  
    263 -- Fluren zaehlen 
     274-- Hierbei können Exceptions auftreten wobei das Geometriefeld einzelner Gemarkungen leer bleibt. 
     275-- Die Ursache ist unklar. 
     276--  TopologyException: found non-noded intersection between LINESTRING 
     277 
     278-- Praktische Lösung: 
     279-- Bei den Gemarkungen, die nichts abbekommen haben, mit schrittweise groesserem Buffer noch mal versuchen. 
     280UPDATE pp_gemarkung a 
     281  SET the_geom =  
     282   ( SELECT ST_Multi(ST_Union(ST_Buffer(b.the_geom,0.20))) AS the_geom -- Puffer vergroessert 
     283       FROM pp_flur b 
     284      WHERE a.land      = b.land  
     285        AND a.gemarkung = b.gemarkung 
     286   ) WHERE the_geom IS NULL; 
     287 
     288UPDATE pp_gemarkung a 
     289  SET the_geom =  
     290   ( SELECT ST_Multi(ST_Union(ST_Buffer(b.the_geom,0.30))) AS the_geom -- Puffer vergroessert 
     291       FROM pp_flur b 
     292      WHERE a.land      = b.land  
     293        AND a.gemarkung = b.gemarkung 
     294   ) WHERE the_geom IS NULL; 
     295 
     296/* Guggst du (auf leeren Geometry-Typ achten: 
     297 
     298   SELECT gemarkungsname, geometrytype(the_geom) AS typ,  
     299     st_isvalid(the_geom) AS vali, st_asewkt(the_geom) AS ewkt 
     300   FROM pp_gemarkung; 
     301 
     302*/ 
     303 
     304-- Die Fluren in der Gemarkung zaehlen 
    264305UPDATE pp_gemarkung a 
    265306  SET anz_flur =  
     
    271312 
    272313 
     314-- Vereinfachte Geometrie der Gemarkung fÃŒr die Darstellung im WMS in einem kleinen Maßstab 
     315-- Gemarkung (Wirkung siehe pp_gemarkung_analyse) 
     316UPDATE pp_gemarkung SET simple_geom = st_simplify(the_geom, 2.2);  
     317 
     318 
    273319-- Gemarkungen zu Gemeinden zusammen fassen 
    274320-- ---------------------------------------- 
    275321 
    276 -- FlÀchen vereinigen (aus der bereits vereinfachten Geometrie) 
    277 UPDATE pp_gemeinde a 
    278   SET the_geom =  
    279    ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.1))) AS the_geom -- noch mal Zugabe 
     322-- FlÀchen vereinigen 
     323UPDATE pp_gemeinde a 
     324  SET the_geom =  
     325   ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.2))) AS the_geom -- noch mal Zugabe 
    280326     FROM    pp_gemarkung b 
    281327     WHERE a.land     = b.land  
    282328       AND a.gemeinde = b.gemeinde 
    283329   ); 
    284  
    285 -- Gemarkungen zÀhlen 
     330-- Hierbei können Exceptions auftreten wobei das Geometriefeld einzelner Gemarkungen leer bleibt. 
     331-- Die Ursache ist unklar. 
     332 
     333-- Praktische Lösung: 
     334-- weitere Versuche mit mehr Puffer, wenn Exception auftrat 
     335UPDATE pp_gemeinde a 
     336  SET the_geom =  
     337   ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.3))) AS the_geom -- MEHR Zugabe 
     338     FROM    pp_gemarkung b 
     339     WHERE a.land     = b.land  
     340       AND a.gemeinde = b.gemeinde 
     341   ) WHERE the_geom IS NULL; 
     342 
     343UPDATE pp_gemeinde a 
     344  SET the_geom =  
     345   ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.4))) AS the_geom -- noch MEHR Zugabe 
     346     FROM    pp_gemarkung b 
     347     WHERE a.land     = b.land  
     348       AND a.gemeinde = b.gemeinde 
     349   ) WHERE the_geom IS NULL; 
     350 
     351 
     352-- Vereinfachte Geometrie der Gemeinde fÃŒr die Darstellung im WMS in einem kleinen Maßstab 
     353-- Gemeinde (Wirkung siehe pp_gemeinde_analyse) 
     354UPDATE pp_gemeinde  SET simple_geom = st_simplify(the_geom, 5.0);  
     355 
     356-- Gemarkungen in der Gemeinde zÀhlen 
    286357UPDATE pp_gemeinde a 
    287358  SET anz_gemarkg =  
     
    291362       AND a.gemeinde = b.gemeinde 
    292363   ); 
    293  
    294  
    295 -- Geometrie glÀtten und vereinfachen. 
    296 -- Diese "simplen" Geometrien sollen nur fÃŒr die Darstellung einer Übersicht verwendet werden. 
    297 -- Ablage der simplen Geometrie in einem alternativen Geometriefeld im gleichen Datensatz. 
    298  
    299 UPDATE pp_flur      SET simple_geom = st_simplify(the_geom, 0.5); -- Flur  
    300  
    301 UPDATE pp_gemarkung SET simple_geom = st_simplify(the_geom, 2.2); -- Gemarkung (Wirkung siehe pp_gemarkung_analyse) 
    302  
    303 UPDATE pp_gemeinde  SET simple_geom = st_simplify(the_geom, 5.0); -- Gemeinde (Wirkung siehe pp_gemeinde_analyse) 
    304364 
    305365 
Note: See TracChangeset for help on using the changeset viewer.