Ignore:
Timestamp:
10/27/15 13:04:07 (9 years ago)
Author:
frank.jaeger
Message:

Die Uebersichten (vereinfachte Geometrie) fuer Flur, Gemarkung und Gemeinde werden nicht mehr bei jeder Aktualisierung neu generiert. Dadurch wird das Post-Processing etwas beschleunigt.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/import/konv_batch.sh

    r353 r354  
    11#!/bin/bash 
    22## ------------------------------------------------- 
     3## DB-Server - Produktion                          - 
    34## Konvertierung von ALKIS NAS-Format nach PostGIS - 
    45## NAS-Daten in einem Ordner konvertieren          - 
     
    89## Ordner-Struktur: 
    910##   /mandant/ 
    10 ##           /0001/*.xml.zip 
    11 ##           /0002/*.xml.zip 
     11##           /01/*.xml.zip 
     12##           /02/*.xml.zip 
    1213##          usw. 
    1314##           /temp/ 
     
    1920## 
    2021## Stand:  
    21 ##   2012-02-10 Umbennung nach 0.7 
    22 ##   2012-02-17 Optimierung 
    23 ##   2012-02-28 Neuer Parameter 4 um Post-Prozessing zu unterdruecken 
    24 ##   2012-04-25 Durch GDAL Patch #5444 werden die Loeschungen als Trigger auf Tabelle 'delete' verarbeitet 
    25 ##   2012-05-18 Umzug neue GDI, GDAL-Trunk unter Pfad  
    2622##   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 der  
    30 ##              PrÀsentationsobjekte Straßenname im Post-Processing 
    31 ##   2013-10-24 F.J. krz: Zwischenlösung "praesentation_action.sql" wieder deaktiviert. 
    3223##   2014-01-31 F.J. krz: Import Eintrag erzeugen (nach Vorschlag Marvin Brandt, Unna) 
    3324##   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) 
    3525##   2014-06-18 F.J. DB-User nicht "postgres" (in $con).  
    3626##                   Konverter ind Nacharbeiten sonst mit unterschiedlichem User. 
    37 ##                   Abgleich Test/Prod-Version. 
    3827##                   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 Symlink 
    4228##   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 ? 
    4429##   2015-03-16 F.J. krz: "-nlt CONVERT_TO_LINEAR" ersetzt "ST_CurvePolygon" nÀherungsweise durch "ST_Polygon" 
    4530##   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.  
    4638 
    4739## ToDo:  
    48 ## - Vor der Konvertierung: Sicherung der DB als SQL-Dump 
    4940## - Unterscheidung e/a noch sinnvoll? Immer "a" = Aktualisierung = -update ? 
    5041## - PostProcessing: Aufruf Script, sonst redundant zu pflegen 
    5142 
    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 
    7266  
    73 echo "  
     67  echo "  
     68  
    7469********************************************** 
    7570**   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 
    8381if [ $ORDNER == "" ] 
    8482then 
     
    109107if [ $PP == "nopp" ] 
    110108then 
    111         echo "KEIN Post-Processing nach dieser Konvertierung." 
     109        echo "KEIN Post-Processing nach dieser Konvertierung" 
    112110else 
    113111        if [ $PP == "pp" ] 
    114112        then 
    115                 echo "normales Post-Processing." 
     113                echo "mit Post-Processing" 
    116114        else 
    117115                echo "FEHLER: Parameter 4 'Post-Proscessing' ist weder 'nopp' noch 'pp'" 
     
    120118fi 
    121119 
     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 
    122151# Fehlerprotokoll: 
    123152  errprot=${POSTNAS_HOME}'/log/postnas_err_'$DBNAME'.prot' 
    124  
    125153  echo "GDAL/PostNAS Konverter-Version:" >> $errprot 
    126154  ogr2ogr --version >> $errprot 
    127155 
    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" 
    140187  psql $con -c 'TRUNCATE table "delete";' 
    141188 
    142   #echo "Bisherige Konvertierungen (Import-Tabelle):" 
    143   #psql $con -c "SELECT * FROM import ORDER by id;" 
    144  
    145 # Import Eintrag erzeugen 
    146 # 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 $con 
    148  
    149189# Ordner abarbeiten 
    150  
    151190  cd ${ORDNER} 
    152191  rm ../temp/*.gfs 
     
    172211        #       export OGR_SKIP=GML     # NAS-Daten auch mit "falschen Header" nicht wie GML konvertieren - NEIN! 
    173212                                                                # http://lists.osgeo.org/pipermail/nas/2014-December/000740.html 
    174        #export CPL_DEBUG=ON                     # Meldung, wenn Attribute ueberschrieben werden 
     213       #export CPL_DEBUG=ON     # Meldung, wenn Attribute ueberschrieben werden 
    175214 
    176215        # Headerkennungen die NAS-Daten identifizieren 
     
    179218      # PostNAS Konverter-Aufruf 
    180219      #   --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 \ 
    183223         PG:"dbname=${DBNAME} host=localhost port=5432 ${OGRPGUSER}" -a_srs EPSG:$EPSG ${nasdatei} 2>> $errprot 
    184224      nasresult=$? 
     
    192232        echo -e "\e[32m${nasdatei} verarbeitet\e[0m" # grÃŒn 
    193233      else 
    194         echo -e "\e[31m${nasdatei} fehlerhaft\e[0m" # rot 
     234        echo -e "\e[31m${nasdatei} fehlerhaft\e[0m"  # rot 
    195235      fi 
    196236 
     
    199239  done # Ende Ordner 
    200240  rm ../temp/*.xml 
    201   echo " " 
    202   echo "** Ende Konvertierung Ordner ${ORDNER}" 
     241  echo "  
     242  ** Ende Konvertierung Ordner ${ORDNER}" 
    203243 
    204244  # Durch EinfÃŒgen in Tabelle 'delete' werden Löschungen und Aktualisierungen anderer Tabellen getriggert 
     
    209249  psql $con -c 'SELECT context, COUNT(featureid) AS anzahl FROM "delete" GROUP BY context ORDER BY context;'  
    210250 
    211   # Kontext-Funktionen zÀhlen und dei Anzahl als Metadaten zum aktuellen Konvertierungslauf speichern 
     251  # Kontext-Funktionen zÀhlen und die Anzahl als Metadaten zum aktuellen Konvertierungslauf speichern 
    212252  psql $con -c " 
    213253   UPDATE import SET anz_delete=(SELECT count(*) FROM \"delete\" WHERE context='delete')  
     
    222262  then 
    223263    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. 
    225265    # Der Aufwand fÃŒr das Post-Processing ist dann nur bei der LETZTEN Aktualisierung notwendig. 
    226266  else 
     
    230270    (cd $POSTNAS_HOME; psql $con -f nutzungsart_laden.sql) 
    231271  
    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 
    234284  fi 
    235285 
    236286  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  " 
Note: See TracChangeset for help on using the changeset viewer.