Changeset 354 for trunk/import
- Timestamp:
- 10/27/15 13:04:07 (8 years ago)
- Location:
- trunk/import
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/import/alkis_PostNAS_schema.sql
r353 r354 62 62 -- 2014-10-14 FJ "ax_wirtschaftlicheeinheit.anlass" von integer zu character. Sonst Trigger-Fehler bei "delete". 63 63 64 -- 2015-02-18 FJ "ax_gelaendekante.wkb_geometry" von 'LINESTRING' nach 'GEOMETRY' 64 -- 2015-02-18 FJ "ax_gelaendekante.wkb_geometry" von 'LINESTRING' nach 'GEOMETRY' 65 66 -- 2015-05-26 FJ Spalte "gdalvers" in Tabelle "import" 65 67 66 68 -- Dies Schema kann NICHT mehr mit der gdal-Version 1.9 verwendet werden. … … 109 111 verzeichnis text, 110 112 importart text, 113 gdalvers text, 111 114 anz_delete integer, 112 115 anz_update integer, … … 114 117 CONSTRAINT import_pk PRIMARY KEY (id) 115 118 ); 119 120 -- Spalte nachtragen: 121 -- ALTER TABLE import ADD COLUMN gdalvers text; 116 122 117 123 CREATE UNIQUE INDEX import_id ON import USING btree (id); … … 122 128 COMMENT ON COLUMN import.verzeichnis IS 'Ort von dem die NAS-Dateien verarbeitet wurden.'; 123 129 COMMENT ON COLUMN import.importart IS 'Modus des Konverter-Laufes: e="Erstladen" oder a="NBA-Aktualisierung"'; 130 COMMENT ON COLUMN import.gdalvers IS 'GDAL-Programmversion mit der der Import erfolgte.'; 124 131 125 132 COMMENT ON COLUMN import.anz_delete IS 'Anzahl von delete-Funktionen in der delete-Tabelle nach Ende eines Konvertierungs-Laufes'; -
trunk/import/konv_batch.sh
r353 r354 1 1 #!/bin/bash 2 2 ## ------------------------------------------------- 3 ## DB-Server - Produktion - 3 4 ## Konvertierung von ALKIS NAS-Format nach PostGIS - 4 5 ## NAS-Daten in einem Ordner konvertieren - … … 8 9 ## Ordner-Struktur: 9 10 ## /mandant/ 10 ## /0 001/*.xml.zip11 ## /0 002/*.xml.zip11 ## /01/*.xml.zip 12 ## /02/*.xml.zip 12 13 ## usw. 13 14 ## /temp/ … … 19 20 ## 20 21 ## Stand: 21 ## 2012-02-10 Umbennung nach 0.722 ## 2012-02-17 Optimierung23 ## 2012-02-28 Neuer Parameter 4 um Post-Prozessing zu unterdruecken24 ## 2012-04-25 Durch GDAL Patch #5444 werden die Loeschungen als Trigger auf Tabelle 'delete' verarbeitet25 ## 2012-05-18 Umzug neue GDI, GDAL-Trunk unter Pfad26 22 ## 2012-06-04 SQL-Skripte in deren Verzeichnis ausfuehren (Voraussetzung fuer \i Includes) 27 ## 2012-10-30 Umgebungsvariable setzen, delete-Tabelle am Ende fuer Analyse gefuellt lassen.28 ## Test als 0.7a mit gepatchter gdal-Version (noch 2.0dev)29 ## 2013-10-16 F.J. krz: Neues Script "pp_praesentation_action.sql" fÃŒr Reparatur der30 ## PrÀsentationsobjekte StraÃenname im Post-Processing31 ## 2013-10-24 F.J. krz: Zwischenlösung "praesentation_action.sql" wieder deaktiviert.32 23 ## 2014-01-31 F.J. krz: Import Eintrag erzeugen (nach Vorschlag Marvin Brandt, Unna) 33 24 ## 2014-02-13 A.Emde WhereGroup: EinfÃŒhrung DBUSER, damit im Skript der Datenbankbenutzer angegeben werden kann 34 ## 2014-05-12 F.J. krz: Unterschiedliche Pfade in Test (TRUNK) und Produktion (Rel. 1.11.0)35 25 ## 2014-06-18 F.J. DB-User nicht "postgres" (in $con). 36 26 ## Konverter ind Nacharbeiten sonst mit unterschiedlichem User. 37 ## Abgleich Test/Prod-Version.38 27 ## Entfernen der historischen Objekte nach Konvertierung. 39 ## 2014-09-09 F.J. krz: Parameter "--config PG_USE_COPY YES" zur Beschleunigung. Ausgabe import-Tabelle.40 ## 2014-09-11 F.J. krz: Eintrag in import-Tabelle repariert.41 ## Keine Abfrage des Symlinks auf kill/hist. Enstscheidend ist die aktuelle DB, nicht der Symlink42 28 ## 2014-09-23 F.J. krz: ZÀhlung der Funktionen in delete, dies in import-Tabelle eintragen (Metadaten) 43 ## 2015-02-17 F.J. krz: OGR_SKIP=GML ?44 29 ## 2015-03-16 F.J. krz: "-nlt CONVERT_TO_LINEAR" ersetzt "ST_CurvePolygon" nÀherungsweise durch "ST_Polygon" 45 30 ## 2015-03-24 F.J. krz: export NAS_INDICATOR 31 ## 2015-05-26 F.J. krz: Pfad auf Version 1.11 geÀndert (Parameter -append wird bei TRUNK 2.0 ignoriert) 32 ## Dazu "-nlt CONVERT_TO_LINEAR" vorÃŒbergehend deaktiviert (erst ab 2.0 notwendig) 33 ## gdal-Version in Import-Tabelle schreiben. Zwischenfrage vor Konvertierung. 34 ## DB-Dump vor Aktualisierungslauf, auf Nachfrage. 35 ## 2015-10-27 F.J. krz: Teile von "pp_laden.sql" ausgelegert nach "pp_gebiete.sql". 36 ## Dies wird bei Parameter "pp" (mit Post-Processing) nur beim Erstladen mit ausgefÃŒhrt. 37 ## Bei Aktualisierungen mÃŒssen die Gebiete (Ãbersichten) nicht jedes Mal neu generiert werden. 46 38 47 39 ## ToDo: 48 ## - Vor der Konvertierung: Sicherung der DB als SQL-Dump49 40 ## - Unterscheidung e/a noch sinnvoll? Immer "a" = Aktualisierung = -update ? 50 41 ## - PostProcessing: Aufruf Script, sonst redundant zu pflegen 51 42 52 POSTNAS_HOME=$(dirname $0) 53 54 # Konverterpfad. TRUNK-Version (immer letzter Stand der Entwicklung) 55 PATH=/opt/gdal-2.0/bin:$PATH 56 EPSG=25832 57 DBUSER=b600352 58 59 if [ $DBUSER == "" ] 60 then 61 echo "kein DBUSER gesetzt" 62 else 63 PGUSER=" -U ${DBUSER} " 64 fi 65 66 if [ $DBUSER == "" ] 67 then 68 echo "kein DBUSER gesetzt" 69 else 70 OGRPGUSER=" user=${DBUSER}" 71 fi 43 # Speicher-Ort dieses Scriptes legt den Pfad fuer Logging fest 44 POSTNAS_HOME=$(dirname $0) 45 46 # Konverterpfad. 47 # TRUNK-Version 2.0.0Beta1 (selbst gebaut) 48 # Dabei: "-nlt CONVERT_TO_LINEAR" verwenden 49 # PATH=/opt/gdal-2.0/bin:$PATH 50 51 # Stabile-Version 1.11.2 (selbst gebaut) 52 # Dabei: "-nlt CONVERT_TO_LINEAR" NICHT verwenden 53 PATH=/opt/gdal-1.11/bin:$PATH 54 55 # Konfiguration: 56 EPSG=25832 57 DBUSER=b600352 58 59 if [ $DBUSER == "" ] 60 then 61 echo "kein DBUSER gesetzt" 62 else 63 PGUSER=" -U ${DBUSER} " 64 OGRPGUSER=" user=${DBUSER}" 65 fi 72 66 73 echo " 67 echo " 68 74 69 ********************************************** 75 70 ** K o n v e r t i e r u n g PostNAS ** 76 **********************************************" 77 ## Parameter: 78 ORDNER=$1 79 DBNAME=$2 80 UPD=$3 81 PP=$4 82 71 ********************************************** 72 " 73 74 # Aufruf-Parameter: 75 ORDNER=$1 76 DBNAME=$2 77 UPD=$3 78 PP=$4 79 80 # Parameter plausibilisieren 83 81 if [ $ORDNER == "" ] 84 82 then … … 109 107 if [ $PP == "nopp" ] 110 108 then 111 echo "KEIN Post-Processing nach dieser Konvertierung ."109 echo "KEIN Post-Processing nach dieser Konvertierung" 112 110 else 113 111 if [ $PP == "pp" ] 114 112 then 115 echo " normales Post-Processing."113 echo "mit Post-Processing" 116 114 else 117 115 echo "FEHLER: Parameter 4 'Post-Proscessing' ist weder 'nopp' noch 'pp'" … … 120 118 fi 121 119 120 # DB-Connection (User, Port, Datenbank-Name) 121 con="${PGUSER} -p 5432 -d ${DBNAME} " 122 123 # Anzeige Historie 124 echo "vorangegangene Konvertierung:" 125 psql $con -c "SELECT id, datum, verzeichnis, importart FROM import ORDER BY id DESC LIMIT 1;" 126 127 # Anzeige Parameter 128 echo "Datenbank: ${DBNAME}" 129 echo "DBUSER: ${DBUSER}" 130 #echo "PGUSER: ${PGUSER}" 131 #echo "OGRPGUSER: ${OGRPGUSER}" 132 echo "Ordner NAS-Daten: ${ORDNER}" 133 echo "Verarbeitungs-Modus: ${verarb}" 134 echo "POSTNAS_HOME: ${POSTNAS_HOME}" 135 echo "Programm-Version: `ogr2ogr --version` " 136 137 # Kontrolle der Parameter 138 echo " 139 AbschlieÃende Bestaetigung:" 140 until [ "$JEIN" = "j" -o "$JEIN" = "n" ] 141 do 142 echo "Mit diesen Parametern konvertieren? - j oder n" 143 read JEIN 144 done 145 if test $JEIN != "j" 146 then 147 echo " #### Abbruch" 148 exit 1 149 fi 150 122 151 # Fehlerprotokoll: 123 152 errprot=${POSTNAS_HOME}'/log/postnas_err_'$DBNAME'.prot' 124 125 153 echo "GDAL/PostNAS Konverter-Version:" >> $errprot 126 154 ogr2ogr --version >> $errprot 127 155 128 # DB-Connection 129 con="${PGUSER} -p 5432 -d ${DBNAME} " 130 echo "Datenbank-Name . . = ${DBNAME}" 131 echo "DBUSER ${DBUSER}" 132 echo "PGUSER ${PGUSER}" 133 echo "OGRPGUSER ${OGRPGUSER}" 134 echo "Ordner NAS-Daten . = ${ORDNER}" 135 echo "Verarbeitungs-Modus= ${verarb}" 136 echo "POSTNAS_HOME ${POSTNAS_HOME}" 137 138 # noch alte delete-Eintraege? 139 echo "Leeren der delete-Tabelle" 156 # Sicherung der Datenbank VOR der Aktualisierung 157 if [ $UPD == "a" ] 158 then 159 160 until [ "$DUMP" = "j" -o "$DUMP" = "n" ] 161 do 162 echo "Datenbank-Sicherung? - j oder n" 163 read DUMP 164 done 165 166 if test $DUMP = "j" 167 then 168 echo "DB Dump wird ausgefuehrt" 169 echo "Datenbank-Dump in /data/bkup/${DBNAME}_vor_update.sql.gz" >> $errprot 170 pg_dump -U ${DBUSER} -o -C ${DBNAME} | gzip > /data/bkup/${DBNAME}_vor_update.sql.gz 171 echo "DB Dump wurde ausgefuehrt" 172 sleep 1 173 fi 174 fi 175 176 # Import Eintrag schreiben 177 # Urspruenglich wurde die Tabelle "import" fuer die Trigger-Steuerung benoetigt. 178 # Nun als Metadaten zur Datenbank-Historie nuetzlich. 179 echo "INSERT INTO import (datum, verzeichnis, importart, gdalvers) 180 VALUES ('"$(date '+%Y-%m-%d %H:%M:%S')"','"${ORDNER}"','"${verarb}"', '`ogr2ogr --version`');" | psql $con 181 182 # Alte delete-Eintraege loeschen 183 # Beim Eintrag in die delete-Tabelle wird ein Trigger ausgeloest. 184 # Danach werden die Eintraege nicht mehr benoetigt. 185 echo " 186 Leeren der delete-Tabelle" 140 187 psql $con -c 'TRUNCATE table "delete";' 141 188 142 #echo "Bisherige Konvertierungen (Import-Tabelle):"143 #psql $con -c "SELECT * FROM import ORDER by id;"144 145 # Import Eintrag erzeugen146 # UrsprÃŒnglich fÃŒr Trigger-Steuerung benötigt. Nun als Metadaten nÃŒtzlich.147 echo "INSERT INTO import (datum,verzeichnis,importart) VALUES ('"$(date '+%Y-%m-%d %H:%M:%S')"','"${ORDNER}"','"${verarb}"');" | psql $con148 149 189 # Ordner abarbeiten 150 151 190 cd ${ORDNER} 152 191 rm ../temp/*.gfs … … 172 211 # export OGR_SKIP=GML # NAS-Daten auch mit "falschen Header" nicht wie GML konvertieren - NEIN! 173 212 # http://lists.osgeo.org/pipermail/nas/2014-December/000740.html 174 #export CPL_DEBUG=ON 213 #export CPL_DEBUG=ON # Meldung, wenn Attribute ueberschrieben werden 175 214 176 215 # Headerkennungen die NAS-Daten identifizieren … … 179 218 # PostNAS Konverter-Aufruf 180 219 # --config PG_USE_COPY YES 181 # -nlt CONVERT_TO_LINEAR # 2015-03-16 ersetzt "ST_CurvePolygon" nÀherungsweise durch "ST_Polygon" 182 ogr2ogr -f "PostgreSQL" -append ${update} -skipfailures -nlt CONVERT_TO_LINEAR \ 220 # -nlt CONVERT_TO_LINEAR # ersetzt "ST_CurvePolygon" nÀherungsweise durch "ST_Polygon", ab Vers. 2.0 221 # ogr2ogr -f "PostgreSQL" -append ${update} -skipfailures -nlt CONVERT_TO_LINEAR 222 ogr2ogr -f "PostgreSQL" -append ${update} -skipfailures \ 183 223 PG:"dbname=${DBNAME} host=localhost port=5432 ${OGRPGUSER}" -a_srs EPSG:$EPSG ${nasdatei} 2>> $errprot 184 224 nasresult=$? … … 192 232 echo -e "\e[32m${nasdatei} verarbeitet\e[0m" # grÃŒn 193 233 else 194 echo -e "\e[31m${nasdatei} fehlerhaft\e[0m" # rot234 echo -e "\e[31m${nasdatei} fehlerhaft\e[0m" # rot 195 235 fi 196 236 … … 199 239 done # Ende Ordner 200 240 rm ../temp/*.xml 201 echo " "202 echo "** Ende Konvertierung Ordner ${ORDNER}"241 echo " 242 ** Ende Konvertierung Ordner ${ORDNER}" 203 243 204 244 # Durch EinfÃŒgen in Tabelle 'delete' werden Löschungen und Aktualisierungen anderer Tabellen getriggert … … 209 249 psql $con -c 'SELECT context, COUNT(featureid) AS anzahl FROM "delete" GROUP BY context ORDER BY context;' 210 250 211 # Kontext-Funktionen zÀhlen und d eiAnzahl als Metadaten zum aktuellen Konvertierungslauf speichern251 # Kontext-Funktionen zÀhlen und die Anzahl als Metadaten zum aktuellen Konvertierungslauf speichern 212 252 psql $con -c " 213 253 UPDATE import SET anz_delete=(SELECT count(*) FROM \"delete\" WHERE context='delete') … … 222 262 then 223 263 echo "** KEIN Post-Processing - Dies spaeter nachholen." 224 # Dies kann sinnvoll sein, wenn mehrere kleine Aktualisierungen hintereinander auf einem grossen Bestand laufen 264 # Dies kann sinnvoll sein, wenn mehrere kleine Aktualisierungen hintereinander auf einem grossen Bestand laufen. 225 265 # Der Aufwand fÃŒr das Post-Processing ist dann nur bei der LETZTEN Aktualisierung notwendig. 226 266 else … … 230 270 (cd $POSTNAS_HOME; psql $con -f nutzungsart_laden.sql) 231 271 232 echo "** - Fluren, Gemarkungen, Gemeinden und StraÃen-Namen neu Laden (Script pp_laden.sql):" 233 (cd $POSTNAS_HOME; psql $con -f pp_laden.sql) 272 echo "** - StraÃen-Namen neu Laden (Script pp_laden.sql):" 273 (cd $POSTNAS_HOME; psql $con -f pp_laden.sql) 274 275 if [ $UPD == "e" ] 276 then 277 # Erstladen: Gebiete erstmalig befuellen. 278 echo "** - Fluren, Gemarkungen, Gemeinden neu Laden (Script pp_gebiete.sql):" 279 (cd $POSTNAS_HOME; psql $con -f pp_gebiete.sql) 280 else 281 # Aktualisierung: Gebiete brauchen nicht bei jeder Aktualisierung neu generiert werden. Die aendern sich kaum. 282 echo "Die Uebersichten fÃŒr Flur, Gemarkung und Gemeinde werden nicht neu generiert. Bei Bedarf das SQL-Script pp_gebiete.sql ausfuehren." 283 fi 234 284 fi 235 285 236 286 echo "Das Fehler-Protokoll wurde ausgegeben in die Datei $errprot" 237 echo "** ENDE PostNAS 0.8-Konvertierung DB='$DBNAME' Ordner='$ORDNER' " 287 echo " 288 ** ENDE PostNAS 0.8-Konvertierung DB='$DBNAME' Ordner='$ORDNER' 289 " -
trunk/import/pp_laden.sql
r351 r354 2 2 -- ALKIS PostNAS 0.8 3 3 4 -- Post Processing (pp_) Teil 2 : Laden der Tabellen4 -- Post Processing (pp_) Teil 2 A: Laden der Tabellen 5 5 6 6 -- Stand … … 25 25 -- 2014-12-17 Neue Spalte "gemeinde" in Tabelle "pp_flur", dient der Filterung im WMS-Layer "Gebiete" 26 26 -- 2015-01-08 Mehrfach-Versuche der Geometrie-Zusammenfassung mit wachsender PuffergröÃe. 27 -- 2015-10-27 Die Erzeugung der vereinfachten Geometrie von Gemeinde, Gemarkung und Flur 28 -- wird ausgegliedert in das Script "pp_gebiete.sql". 29 -- Dies Script sollte nach jeder Aktualisierung der Datebnek laufen. 30 -- Die Erzeugung neuer Ãbersichten der Gebiete ist nur gelegendlich notwendig. 27 31 28 32 … … 53 57 54 58 TRUNCATE pp_flurstueck_nr; -- effektiver als DELETE 55 56 /*57 -- Alte Version ÃŒber "alkis_beziehungen"58 -- AusfÃŒhrung: mittlere Stadt: ca. 4 - 18 Sec.59 60 -- 1:1 umgestellt (UNION) unter Verwendeung der neuen Relationenspalten61 62 INSERT INTO pp_flurstueck_nr63 ( fsgml, fsnum, the_geom )64 SELECT f.gml_id,65 f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum,66 p.wkb_geometry -- manuelle Position des Textes67 FROM ax_flurstueck f68 JOIN ap_pto p69 ON f.gml_id = ANY(p.dientzurdarstellungvon)70 WHERE f.endet IS NULL AND p.endet IS NULL -- AND p."art" = 'ZAE_NEN'71 UNION72 SELECT f.gml_id,73 f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS fsnum,74 ST_PointOnSurface(f.wkb_geometry) AS wkb_geometry -- Flaechenmitte als Position des Textes75 FROM ax_flurstueck f76 LEFT JOIN ap_pto p77 ON f.gml_id = ANY(p.dientzurdarstellungvon) -- kein PrÀsentationsobjekt vorhanden78 WHERE p.gml_id is NULL AND f.endet IS NULL ;79 */80 59 81 60 -- Ersatz: FÃŒllen in 3 Schritten … … 179 158 DELETE FROM pp_strassenname_l WHERE schriftinhalt IS NULL; 180 159 181 182 -- Tabellen fuer die Zuordnung vom Gemarkungen zu Gemeinden183 -- ========================================================184 185 -- FÃŒr die Regelung der Zugriffsberechtigung einer Gemeindeverwaltung auf die186 -- FlurstÃŒcke in ihrem Gebiet braucht man die Information, in welcher Gemeinde eine Gemarkung liegt.187 -- 'ax_gemeinde' und 'ax_gemarkung' haben aber im ALKIS keinerlei Beziehung zueinander - kaum zu glauben!188 -- Nur ÃŒber die Auswertung der FlurstÃŒcke kann man die Zuordnung ermitteln.189 -- Da nicht stÀndig mit 'SELECT DISTINCT' sÀmtliche FlurstÃŒcke durchsucht werden können,190 -- muss diese Information als (redundante) Tabelle nach dem Laden zwischengespeichert werden.191 192 193 -- G E M A R K U N G194 195 TRUNCATE pp_gemarkung;196 -- Vorkommende Paarungen Gemarkung <-> Gemeinde in ax_Flurstueck197 INSERT INTO pp_gemarkung198 ( land, regierungsbezirk, kreis, gemeinde, gemarkung )199 SELECT DISTINCT land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer200 FROM ax_flurstueck201 WHERE endet IS NULL202 ORDER BY land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer ;203 204 -- Namen der Gemarkung dazu als Optimierung bei der Auskunft205 UPDATE pp_gemarkung a206 SET gemarkungsname =207 ( SELECT b.bezeichnung208 FROM ax_gemarkung b209 WHERE a.land=b.land210 AND a.gemarkung=b.gemarkungsnummer211 AND b.endet IS NULL212 );213 214 215 -- G E M E I N D E216 217 TRUNCATE pp_gemeinde;218 -- Vorkommende Gemeinden aus den Gemarkungen219 INSERT INTO pp_gemeinde220 ( land, regierungsbezirk, kreis, gemeinde)221 SELECT DISTINCT land, regierungsbezirk, kreis, gemeinde222 FROM pp_gemarkung223 ORDER BY land, regierungsbezirk, kreis, gemeinde;224 225 -- Namen der Gemeinde dazu als Optimierung bei der Auskunft226 UPDATE pp_gemeinde a227 SET gemeindename =228 ( SELECT b.bezeichnung229 FROM ax_gemeinde b230 WHERE a.land=b.land231 AND a.regierungsbezirk=b.regierungsbezirk232 AND a.kreis=b.kreis233 AND a.gemeinde=b.gemeinde234 AND b.endet IS NULL235 );236 237 238 -- Geometrien der FlurstÃŒcke schrittweise zu groesseren Einheiten zusammen fassen239 -- ==============================================================================240 -- http://postgis.net/docs/manual-1.5/ST_Union.html (Aggregate version)241 -- http://postgis.net/docs/manual-1.5/ST_Collect.html242 243 -- Wenn ein Gebiet durch geometrische Filter im NBA-Verfahren ausgegeben wurde, dann gibt es244 -- Randstreifen, die zu Pseudo-Fluren zusammen gefasst werden.245 -- Diese werden fÃŒr den WMS durch einen View ausgefiltert, der nur eine Gemeinde darstellt.246 247 -- AusfÃŒhrungszeit: 1 mittlere Stadt mit ca. 14.000 FlurstÃŒcken > 100 Sek248 249 TRUNCATE pp_flur;250 251 INSERT 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,253 count(gml_id) as anz_fs,254 ST_Multi(st_union(st_buffer(f.wkb_geometry,0.06))) AS the_geom -- Zugabe um ZwischenrÀume zu vermeiden255 FROM ax_flurstueck f256 WHERE f.endet IS NULL AND NOT f.wkb_geometry IS NULL257 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Ãstab260 UPDATE pp_flur SET simple_geom = st_simplify(the_geom, 0.5);261 262 263 -- Fluren zu Gemarkungen zusammen fassen264 -- -------------------------------------265 266 -- FlÀchen vereinigen267 UPDATE pp_gemarkung a268 SET the_geom =269 ( SELECT ST_Multi(ST_Union(ST_Buffer(b.the_geom,0.15))) AS the_geom -- Puffer/Zugabe um Löcher zu vermeiden270 FROM pp_flur b271 WHERE a.land = b.land272 AND a.gemarkung = b.gemarkung273 );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 LINESTRING277 278 -- Praktische Lösung:279 -- Bei den Gemarkungen, die nichts abbekommen haben, mit schrittweise groesserem Buffer noch mal versuchen.280 UPDATE pp_gemarkung a281 SET the_geom =282 ( SELECT ST_Multi(ST_Union(ST_Buffer(b.the_geom,0.20))) AS the_geom -- Puffer vergroessert283 FROM pp_flur b284 WHERE a.land = b.land285 AND a.gemarkung = b.gemarkung286 ) WHERE the_geom IS NULL;287 288 UPDATE pp_gemarkung a289 SET the_geom =290 ( SELECT ST_Multi(ST_Union(ST_Buffer(b.the_geom,0.30))) AS the_geom -- Puffer vergroessert291 FROM pp_flur b292 WHERE a.land = b.land293 AND a.gemarkung = b.gemarkung294 ) 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 ewkt300 FROM pp_gemarkung;301 302 */303 304 -- Die Fluren in der Gemarkung zaehlen305 UPDATE pp_gemarkung a306 SET anz_flur =307 ( SELECT count(flurnummer) AS anz_flur308 FROM pp_flur b309 WHERE a.land = b.land310 AND a.gemarkung = b.gemarkung311 ); -- Gemarkungsnummer ist je BundesLand eindeutig312 313 314 -- Vereinfachte Geometrie der Gemarkung fÃŒr die Darstellung im WMS in einem kleinen MaÃstab315 -- Gemarkung (Wirkung siehe pp_gemarkung_analyse)316 UPDATE pp_gemarkung SET simple_geom = st_simplify(the_geom, 2.2);317 318 319 -- Gemarkungen zu Gemeinden zusammen fassen320 -- ----------------------------------------321 322 -- FlÀchen vereinigen323 UPDATE pp_gemeinde a324 SET the_geom =325 ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.2))) AS the_geom -- noch mal Zugabe326 FROM pp_gemarkung b327 WHERE a.land = b.land328 AND a.gemeinde = b.gemeinde329 );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 auftrat335 UPDATE pp_gemeinde a336 SET the_geom =337 ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.3))) AS the_geom -- MEHR Zugabe338 FROM pp_gemarkung b339 WHERE a.land = b.land340 AND a.gemeinde = b.gemeinde341 ) WHERE the_geom IS NULL;342 343 UPDATE pp_gemeinde a344 SET the_geom =345 ( SELECT st_multi(st_union(st_buffer(b.the_geom,0.4))) AS the_geom -- noch MEHR Zugabe346 FROM pp_gemarkung b347 WHERE a.land = b.land348 AND a.gemeinde = b.gemeinde349 ) WHERE the_geom IS NULL;350 351 352 -- Vereinfachte Geometrie der Gemeinde fÃŒr die Darstellung im WMS in einem kleinen MaÃstab353 -- Gemeinde (Wirkung siehe pp_gemeinde_analyse)354 UPDATE pp_gemeinde SET simple_geom = st_simplify(the_geom, 5.0);355 356 -- Gemarkungen in der Gemeinde zÀhlen357 UPDATE pp_gemeinde a358 SET anz_gemarkg =359 ( SELECT count(gemarkung) AS anz_gemarkg360 FROM pp_gemarkung b361 WHERE a.land = b.land362 AND a.gemeinde = b.gemeinde363 );364 365 366 160 -- Tabelle fuer die Zuordnung vom EigentÃŒmern zu Gemeinden 367 161 -- =======================================================
Note: See TracChangeset
for help on using the changeset viewer.