Mercurial > dive4elements > river
changeset 7352:c6825778de1f
Merged double-precision branch.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Wed, 16 Oct 2013 13:03:13 +0200 (2013-10-16) |
parents | 760ea7f08455 (current diff) 2d912b2a4bdf (diff) |
children | 809e76b7fe38 |
files | backend/contrib/shpimporter/gauges.py backend/contrib/shpimporter/run.sh backend/doc/README.txt |
diffstat | 45 files changed, 1085 insertions(+), 1287 deletions(-) [+] |
line wrap: on
line diff
--- a/backend/contrib/import_river.sh Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/contrib/import_river.sh Wed Oct 16 13:03:13 2013 +0200 @@ -32,12 +32,15 @@ DEFAULT_BACKEND_NAME="XE" JAR="hydr_morph/importer.jar" IMPORTER_DRY_RUN=false -IMPORTER_MAINVALUE_TYPES=QWTD +IMPORTER_MAINVALUE_TYPES=QWTD- IMPORTER_ANNOTATION_TYPES="conf/annotation-types.xml" MIN_MEMORY="8024m" +# Default encoding. Change here if necessary +export LC_ALL=de_DE@euro + if [ -z "$OPTIONAL_LIBS" ]; then OPTIONAL_LIBS="$(dirname $0)/opt" fi @@ -72,13 +75,13 @@ --skip-hydro Skip import of hydrological data --skip-morpho Skip import of morphological data --skip-geo Skip import of geographic data - --skip-wst Skip import of wst data + --skip-prf Skip import of cross section data EOF exit 0 } OPTS=`getopt -o ?u:w:h:p:d: \ - -l help,username:,password:,host:,port:,db-name:,skip-hydro,skip-morpho,skip-geo,skip-wst,postgres \ + -l help,username:,password:,host:,port:,db-name:,skip-hydro,skip-morpho,skip-geo,skip-prf,postgres \ -n $0 -- "$@"` if [ $? != 0 ] ; then usage; fi eval set -- "$OPTS" @@ -113,8 +116,8 @@ "--skip-morpho") SKIP_MORPHO="TRUE" shift;; - "--skip-wst") - SKIP_WST="TRUE" + "--skip-prf") + SKIP_PRF="TRUE" shift;; "--skip-geo") SKIP_GEO="TRUE" @@ -202,19 +205,20 @@ -Dflys.backend.importer.dry.run=$IMPORTER_DRY_RUN \ -Dflys.backend.importer.skip.annotations=false \ -Dflys.backend.importer.skip.bwastr=false \ - -Dflys.backend.importer.skip.da50s=false \ - -Dflys.backend.importer.skip.da66s=false \ -Dflys.backend.importer.skip.extra.wsts=false \ -Dflys.backend.importer.skip.fixations=false \ -Dflys.backend.importer.skip.flood.water=false \ -Dflys.backend.importer.skip.flood.protection=false \ -Dflys.backend.importer.skip.gauges=false \ - -Dflys.backend.importer.skip.historical.discharge.tables=false \ + -Dflys.backend.importer.skip.historical.discharge.tables=true \ -Dflys.backend.importer.skip.hyks=false \ -Dflys.backend.importer.skip.official.lines=false \ - -Dflys.backend.importer.skip.prfs=false \ - -Dflys.backend.importer.skip.w80s=false \ - -Dflys.backend.importer.skip.wst=true \ + -Dflys.backend.importer.skip.prfs=true \ + -Dflys.backend.importer.skip.w80s=true \ + -Dflys.backend.importer.skip.w80.csvs=true \ + -Dflys.backend.importer.skip.da50s=true \ + -Dflys.backend.importer.skip.da66s=true \ + -Dflys.backend.importer.skip.wst=false \ -Dflys.backend.importer.skip.measurement.stations=true \ -Dflys.backend.importer.skip.waterlevel.differences=true \ -Dflys.backend.importer.skip.waterlevels=true \ @@ -248,8 +252,6 @@ -Dflys.backend.importer.dry.run=$IMPORTER_DRY_RUN \ -Dflys.backend.importer.skip.annotations=true \ -Dflys.backend.importer.skip.bwastr=true \ - -Dflys.backend.importer.skip.da50s=true \ - -Dflys.backend.importer.skip.da66s=true \ -Dflys.backend.importer.skip.extra.wsts=true \ -Dflys.backend.importer.skip.fixations=true \ -Dflys.backend.importer.skip.flood.water=true \ @@ -260,6 +262,9 @@ -Dflys.backend.importer.skip.official.lines=true \ -Dflys.backend.importer.skip.prfs=true \ -Dflys.backend.importer.skip.w80s=true \ + -Dflys.backend.importer.skip.w80.csvs=true \ + -Dflys.backend.importer.skip.da50s=true \ + -Dflys.backend.importer.skip.da66s=true \ -Dflys.backend.importer.skip.wst=true \ -Dflys.backend.importer.skip.measurement.stations=false \ -Dflys.backend.importer.skip.waterlevel.differences=false \ @@ -274,9 +279,9 @@ $JAR } -import_wst(){ - LOG_FILE=${LOG_DIR}/wst.log - echo Importing WST data. +import_prf(){ + LOG_FILE=${LOG_DIR}/prf.log + echo Importing cross section data. echo Logging into: $LOG_FILE sed 's!./import.log!'"$LOG_FILE"'!' conf/log4j.properties > $LOG_DIR/log4j.properties java -jar \ @@ -294,8 +299,6 @@ -Dflys.backend.importer.dry.run=$IMPORTER_DRY_RUN \ -Dflys.backend.importer.skip.annotations=true \ -Dflys.backend.importer.skip.bwastr=true \ - -Dflys.backend.importer.skip.da50s=true \ - -Dflys.backend.importer.skip.da66s=true \ -Dflys.backend.importer.skip.extra.wsts=true \ -Dflys.backend.importer.skip.fixations=true \ -Dflys.backend.importer.skip.flood.water=true \ @@ -304,9 +307,12 @@ -Dflys.backend.importer.skip.historical.discharge.tables=true \ -Dflys.backend.importer.skip.hyks=true \ -Dflys.backend.importer.skip.official.lines=true \ - -Dflys.backend.importer.skip.prfs=true \ - -Dflys.backend.importer.skip.w80s=true \ - -Dflys.backend.importer.skip.wst=false \ + -Dflys.backend.importer.skip.prfs=false \ + -Dflys.backend.importer.skip.w80s=false \ + -Dflys.backend.importer.skip.w80.csvs=false \ + -Dflys.backend.importer.skip.da50s=false \ + -Dflys.backend.importer.skip.da66s=false \ + -Dflys.backend.importer.skip.wst=true \ -Dflys.backend.importer.skip.measurement.stations=true \ -Dflys.backend.importer.skip.waterlevel.differences=true \ -Dflys.backend.importer.skip.waterlevels=true \ @@ -333,7 +339,7 @@ --directory $RIVER_PATH \ --river_name "$RIVER_NAME" \ --ogr_connection "$OGR_CONNECTION" \ - --host $DBHOST \ + --host $DBHOST/$BACKEND_NAME \ --user $DBUSER \ --password $DBPASS \ --verbose 1 \ @@ -344,8 +350,8 @@ if [ "$SKIP_HYDRO" != "TRUE" ]; then import_hydro fi -if [ "$SKIP_WST" != "TRUE" ]; then -import_wst +if [ "$SKIP_PRF" != "TRUE" ]; then +import_prf fi if [ "$SKIP_MORPHO" != "TRUE" ]; then import_morpho
--- a/backend/contrib/run_geo.sh Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/contrib/run_geo.sh Wed Oct 16 13:03:13 2013 +0200 @@ -1,11 +1,8 @@ #!/bin/sh -# Required -RIVER_PATH="/vol1/projects/Geospatial/flys-3.0/testdaten/Gewaesser/Saar" -RIVER_NAME="Saar" - # Set this to your target database for Oracle HOST=localhost +BACKEND_NAME="XE" USER=flys28 PASS=flys28 # Alternatively you can provide a direct connection string: @@ -22,14 +19,21 @@ SKIP_HYDR_BOUNDARIES=0 SKIP_HWS_LINES=0 SKIP_HWS_POINTS=0 -SKIP_GAUGE_LOCATION=0 -SKIP_CATCHMENTS=0 SKIP_UESG=0 SKIP_DGM=0 SKIP_JETTIES=0 SKIP_FLOODMARKS=0 +# Default encoding. Change here if necessary +export LC_ALL=de_DE@euro + # There should be no need to change anything below this line +GEW_FILE="$1" +RIVER_NAME=$(grep "Gew.sser" "$1" | sed 's/Gew.sser: //') + +RIVER_PATH=$(grep "WSTDatei:" "$GEW_FILE" | awk '{print $2}') +RIVER_PATH=$(dirname "$RIVER_PATH")/../.. +RIVER_PATH=$(readlink -f "$RIVER_PATH") DIR=`dirname $0` DIR=`readlink -f "$DIR"` @@ -48,7 +52,7 @@ --directory $RIVER_PATH \ --river_name "$RIVER_NAME" \ --ogr_connection "$OGR_CONNECTION" \ - --host $HOST \ + --host $HOST/$BACKEND_NAME \ --user $USER \ --password $PASS \ --verbose $VERBOSE \ @@ -59,7 +63,6 @@ --skip_buildings $SKIP_BUILDINGS \ --skip_floodplains $SKIP_FLOODPLAINS \ --skip_hydr_boundaries $SKIP_HYDR_BOUNDARIES \ - --skip_gauge_locations $SKIP_GAUGE_LOCATION \ --skip_uesgs $SKIP_UESG \ --skip_hws_lines $SKIP_HWS_LINES \ --skip_hws_points $SKIP_HWS_POINTS \
--- a/backend/contrib/run_hydr_morph.sh Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/contrib/run_hydr_morph.sh Wed Oct 16 13:03:13 2013 +0200 @@ -1,7 +1,6 @@ #!/bin/bash ######################### CONFIG OPTIONS ############################ -INFO_GEW="/vol1/projects/Geospatial/flys-3.0/testdaten/saar.gew" BACKEND_USER="flys28" BACKEND_PASS="flys28" BACKEND_HOST="czech-republic.atlas.intevation.de" @@ -22,7 +21,7 @@ ######################## Custom Importer Settings ################### IMPORTER_DRY_RUN=false -IMPORTER_MAINVALUE_TYPES=QWTD +IMPORTER_MAINVALUE_TYPES=QWTD- IMPORTER_ANNOTATION_TYPES="conf/annotation-types.xml" IMPORTER_SKIP_ANNOTATIONS=false @@ -34,7 +33,7 @@ IMPORTER_SKIP_FLOOD_WATER=false IMPORTER_SKIP_FLOOD_PROTECTION=false IMPORTER_SKIP_GAUGES=false -IMPORTER_SKIP_HISTORICAL_DISCHARGE_GAUGES=false +IMPORTER_SKIP_HISTORICAL_DISCHARGE_GAUGES=true IMPORTER_SKIP_HYKS=false IMPORTER_SKIP_OFFICIAL_LINES=false IMPORTER_SKIP_PRFS=false @@ -54,11 +53,11 @@ IMPORTER_SKIP_WATERLEVEL_DIFFERENCES=false ##################################################################### -#MIN_MEMORY="8192m" -MIN_MEMORY="1024m" - +MIN_MEMORY="8192m" ######################### Run Importer ############################## +INFO_GEW=$1 + OPTIONAL_LIBS="${DIR}"/../opt if [ -d "$OPTIONAL_LIBS" ]; then export PATH="$OPTIONAL_LIBS/bin:$PATH" @@ -66,7 +65,8 @@ export LD_LIBRARY_PATH="$OPTIONAL_LIBS/lib64:$LD_LIBRARY_PATH" fi -export LC_ALL=de_DE@euro # Workaround encoding problem +# Default encoding. Change here if necessary +export LC_ALL=de_DE@euro exec java -jar \ -Xmx$MIN_MEMORY \
--- a/backend/contrib/shpimporter/axis.py Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/contrib/shpimporter/axis.py Wed Oct 16 13:03:13 2013 +0200 @@ -38,7 +38,7 @@ def createNewFeature(self, featureDef, feat, **args): newFeat = ogr.Feature(featureDef) geometry = feat.GetGeometryRef() - geometry.SetCoordinateDimension(3) + geometry.SetCoordinateDimension(2) newFeat.SetGeometry(geometry) newFeat.SetField("name", args['name'])
--- a/backend/contrib/shpimporter/boundaries.py Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/contrib/shpimporter/boundaries.py Wed Oct 16 13:03:13 2013 +0200 @@ -84,7 +84,7 @@ def isShapeRelevant(self, name, path): shp = ogr.Open(path) if self.isGeometryValid(shp.GetLayerByName(name).GetGeomType()) and \ - self.getKind(path) > 0: + self.getKind(path) > 0 and not "talaue" in path.lower(): return True else: return False
--- a/backend/contrib/shpimporter/dgm.py Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/contrib/shpimporter/dgm.py Wed Oct 16 13:03:13 2013 +0200 @@ -122,8 +122,10 @@ else: values.append(unicode.encode( fields[namedict[val]], "UTF-8")) - km_von = fields[namedict["km_von"]] - km_bis = fields[namedict["km_bis"]] + km_von = min(float(fields[namedict["km_von"]]), + float(fields[namedict["km_bis"]])) + km_bis = max(float(fields[namedict["km_von"]]), + float(fields[namedict["km_bis"]])) year_from = None year_to = None try:
--- a/backend/contrib/shpimporter/floodmarks.py Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/contrib/shpimporter/floodmarks.py Wed Oct 16 13:03:13 2013 +0200 @@ -15,13 +15,6 @@ logger = logging.getLogger(NAME) -BUILDING_KINDS= { - "sonstige" : 0, - "brücken" : 1, - "wehre" : 2, - "pegel" : 3, - } - class Floodmark(Importer): fieldmap = { "^station$" : "km",
--- a/backend/contrib/shpimporter/gauges.py Wed Oct 16 12:39:33 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -try: - from osgeo import ogr -except ImportError: - import ogr - -from importer import Importer - -TABLE_NAME="gauge_location" -PATH="Hydrologie/Streckendaten" -NAME="Gauge locations" - - -class GaugeLocation(Importer): - - def getPath(self, base): - return "%s/%s" % (base, PATH) - - - def getTablename(self): - return TABLE_NAME - - - def getName(self): - return NAME - - - def isGeometryValid(self, geomType): - return geomType == 1 - - - def isShapeRelevant(self, name, path): - return True - - - def createNewFeature(self, featureDef, feat, **args): - newFeat = ogr.Feature(featureDef) - geometry = feat.GetGeometryRef() - geometry.SetCoordinateDimension(2) - - newFeat.SetGeometry(geometry) - - if self.IsFieldSet(feat, "river_id"): - newFeat.SetField("river_id", feat.GetField("river_id")) - else: - newFeat.SetField("river_id", self.river_id) - - if self.IsFieldSet(feat, "Name"): - newFeat.SetField("name", feat.GetField("name")) - elif self.IsFieldSet(feat, "MPNAAM"): - newFeat.SetField("name", feat.GetField("MPNAAM")) - else: - newFeat.SetField("name", args['name']) - - return newFeat -
--- a/backend/contrib/shpimporter/km.py Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/contrib/shpimporter/km.py Wed Oct 16 13:03:13 2013 +0200 @@ -25,7 +25,7 @@ def isGeometryValid(self, geomType): - return geomType == 1 + return geomType == ogr.wkbPoint or geomType == ogr.wkbPoint25D def isShapeRelevant(self, name, path):
--- a/backend/contrib/shpimporter/run.sh Wed Oct 16 12:39:33 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -#!/bin/sh - -# Required -RIVER_PATH="/path/to/rivers/river" -RIVER_ID=1 -TARGET_SRS=31466 -HOST=localhost -USER=the_user -PASS=the_pass - -# Optional -VERBOSE=1 -SKIP_AXIS=0 -SKIP_KMS=0 -SKIP_CROSSSECTIONS=0 -SKIP_LINES=0 -SKIP_FIXPOINTS=0 -SKIP_BUILDINGS=0 -SKIP_FLOODPLAINS=0 -SKIP_HYDR_BOUNDARIES=0 -SKIP_HWS=0 -SKIP_GAUGE_LOCATION=0 -SKIP_UESG=0 - -exec python shpimporter.py \ - --directory $RIVER_PATH \ - --river_id $RIVER_ID \ - --target_srs $TARGET_SRS \ - --host $HOST \ - --user $USER \ - --password $PASS \ - --verbose $VERBOSE \ - --skip_axis $SKIP_AXIS \ - --skip_kms $SKIP_KMS \ - --skip_crosssections $SKIP_CROSSSECTIONS \ - --skip_lines $SKIP_LINES \ - --skip_fixpoints $SKIP_FIXPOINTS \ - --skip_buildings $SKIP_BUILDINGS \ - --skip_floodplains $SKIP_FLOODPLAINS \ - --skip_hydr_boundaries $SKIP_HYDR_BOUNDARIES \ - --skip_hws $SKIP_HWS \ - --skip_gauge_locations $SKIP_GAUGE_LOCATION \ - --skip_uesgs $SKIP_UESG -
--- a/backend/contrib/shpimporter/shpimporter.py Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/contrib/shpimporter/shpimporter.py Wed Oct 16 13:03:13 2013 +0200 @@ -17,7 +17,6 @@ from floodplains import Floodplain from boundaries import HydrBoundary, HydrBoundaryPoly from hws import HWSLines, HWSPoints -from gauges import GaugeLocation from jetties import Jetties from dgm import insertRiverDgm from floodmarks import Floodmark @@ -47,7 +46,6 @@ HydrBoundaryPoly(river_id, dbconn, dry_run), HWSLines(river_id, dbconn, dry_run), HWSPoints(river_id, dbconn, dry_run), - GaugeLocation(river_id, dbconn, dry_run), Jetties(river_id, dbconn, dry_run), Floodmark(river_id, dbconn, dry_run), UESG(river_id, dbconn, dry_run) @@ -73,7 +71,6 @@ parser.add_option("--skip_floodplains", type="int") parser.add_option("--skip_hws_lines", type="int") parser.add_option("--skip_hws_points", type="int") - parser.add_option("--skip_gauge_locations", type="int") parser.add_option("--skip_kms", type="int") parser.add_option("--skip_uesgs", type="int") parser.add_option("--skip_dgm", type="int") @@ -125,8 +122,6 @@ elif config.skip_hws_points == 1 and isinstance(importer, HWSPoints) and \ not isinstance(importer, HWSLines): return True - elif config.skip_gauge_locations == 1 and isinstance(importer, GaugeLocation): - return True elif config.skip_jetties == 1 and isinstance(importer, Jetties): return True elif config.skip_kms == 1 and isinstance(importer, KM):
--- a/backend/doc/README.txt Wed Oct 16 12:39:33 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,528 +0,0 @@ -FLYS3-Importer - -Der FLYS3-Importer dient dazu, hydrologische und morphologische -Gewässerdaten aus dem Dateisystem in die FLYS3-Datenbank zu importieren. -Das Werkzeug orientiert sich hierbei an der Dateihierachie, -so wie sie auch von Desktop-FLYS ausgelesen wird. - -Als Startargument bekommt der Importer den Pfad zu einer -GEW-Datei übergeben. - -Wichtig für den Importer sind in dieser Datei -die Zeilen, die mit "WSTDatei:" beginnen. In ihnen wird der -Pfad zu der zentralen WST-Datei des jeweiligen Gewässers angegeben. -Alle anderen importierten Dateien werden in ihrer Lage relativ zur -Lage dieser Datei betrachtet. - -Das Verhalten des Importes kann mit sogenannten -System-Properties gesteuert werden. Diese werden im -Allgemeinen in der Form -Dkey=value angegeben. - -Will man z.B. mit dem Importer nur einen simulierten Import -durchführen (also nicht in die Datenbank geschrieben werden), -dann kann dies über die Angabe von -'-Dflys.backend.importer.dry.run=true' erfolgen. - -!!! Der Import geht wie Desktop-FLYS davon aus, dass die Dateien -!!! Latin-1 encodiert vorliegen. - -Für den Importer stellt jeweils der Import eines Gewässers eine -transaktionale Einheit dar. Wird der Import während eines Gewässers -abgebrochen, werden alle Änderungen bzgl. dieses Gewässers zurück gerollt. - -Importierte Daten: - -Der Importer importiert folgende Datentypen: - -- Streckenfavoriten (*.km-Dateien) - Der Import kann mit '-Dflys.backend.importer.skip.annotations=true' - unterdrückt werden. - - Zur Klassifikation von Streckenfavoriten kann mit - -Dflys.backend.importer.annotation.types=DATEI - der Pfad zu einer XML-Datei angegeben werden, in der über - Regeln festgelegt wird, wie diese geschehen soll. - Details hierzu im Anhang 'Klassifikation von Streckenfavoriten'. - -- Pegel, Stammdaten (*.glt, *.sta-Dateien): - Der Import kann mit '-Dflys.backend.importer.skip.gauges=true' - unterdrückt werden. - Die .glt-Datei, die neben der .wst-Datei liegt, wird zuerst - ausgelesen. Es werden nur *.sta-Datei von Pegeln geladen, die - in der .glt-Datei vermerkt sind. - - Wenn "-Dflys.backend.sta.parse.gauge.numbers=true' wird versucht, - die offiziellen Pegelnummern aus den Stammdaten zu extrahieren. - !!! Dies ist mit Vorsicht zu behandeln, denn die meisten STA-Dateien - !!! Enthalten invalide Pegelnummern. - - Die System-Property "flys.backend.main.value.types" kann einen - String mit gültigen Typen von Stammdaten enthalten. Vorbelegt - ist "QWTD". In der Praxis ist "QWD" eine sinnvolle Belegung. - -- Basis-Wasserstände (gewaesser.wst-Dateien): - Der Import kann mit '-Dflys.backend.importer.skip.wst=true' - unterdrückt werden. - -- Zusätzliche Längsschnitte (*.zus, *.wst-Dateien) - Der Import kann mit '-Dflys.backend.importer.skip.extra.wsts=true' - unterdrückt werden. - Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis - "../Zus.Längsschnitte" relativ zur gewaesser.wst-Datei betrachtet. - -- Fixierungen (*.wst-Dateien) - Der Import kann mit '-Dflys.backend.importer.skip.fixations=true' - unterdrückt werden. - Es werden die *.wst-Dateien aus dem Verzeichnis - "../Fixierungen" relativ zur gewaesser.wst-Datei betrachtet. - -- Amtliche Linien (*.wst-Dateien) - Der Import kann mit '-Dflys.backend.importer.skip.official.lines=true' - unterdrückt werden. - Es werden die "Amtl_Linien.wst"-Dateien aus dem Verzeichnis - "../Basisdaten" und "../Fixierungen" relativ zur gewaesser.wst-Datei betrachtet. - -- Profilspuren (*.prf-Dateien) - Der Import kann mit '-Dflys.backend.importer.skip.prfs=true' - unterdrückt werden. - Es werden rekursiv alle *.prf-Dateien aus "../../.." relativ - zur gewaesser.wst-Datei betrachtet. Vor dem Import werden - mithilfe eines Längen- und eines MD5-Summen-Vergleichs - inhaltliche Duplikate ausgeschlossen. - -- Hydraulische Kennzahlen (*.hyk) - Der Import kann mit '-Dflys.backend.importer.skip.hyks=true' - unterdrückt werden. - Es werden rekursiv alle *.hyk-Dateien aus "../../.." relativ - zur gewaesser.wst-Datei betrachtet. Vor dem Import werden - mithilfe eines Längen- und eines MD5-Summen-Vergleichs - inhaltliche Duplikate ausgeschlossen. - -- Hochwassermarken (*.zus, *.wst) - Der Import kann mit '-Dflys.backend.importer.skip.flood.water=true' - unterdrückt werden. - Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis - "../HW-Marken" relativ zur gewaesser.wst-Datei betrachtet. - -- Hochwasserschutzanlagen (*.zus) - Der Import kann mit '-Dflys.backend.importer.skip.flood.protection=true' - unterdrückt werden. - Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis - "../HW-Schutzanlagen" relativ zur gewaesser.wst-Datei betrachtet. - - TODO INGO: - - flys.backend.importer.skip.bed.height.single - flys.backend.importer.skip.bed.height.epoch - flys.backend.importer.skip.sediment.density - flys.backend.importer.skip.morphological.width - flys.backend.importer.skip.flow.velocity - flys.backend.importer.skip.sediment.yield - flys.backend.importer.skip.waterlevels - flys.backend.importer.skip.waterlevel.differences - flys.backend.importer.skip.sq.relation - -Für die Verbindung zur Datenbank ist es nötig, dem Import -die Verbindungsdaten zu übergeben. Dies geschieht ebenfalls -über System-Properties: - - -Dflys.backend.user=NUTZER - Datenbanknutzer - - -Dflys.backend.password=PASSWORT - Datenbankpasswort - - -Dflys.backend.url=URL - URL zur Datenbank. Typische wäre im Fall einer Oracle-XE-Edition z.B.: - jdbc:oracle:thin:@//RECHNER:PORT/XE - mit RECHNER Name des Servers, auf dem die Datenbank läuft - und PORT der Port auf dem die Datenbank konkret zu erreichen ist. - Weitere Details unter http://www.orafaq.com/wiki/JDBC - - -Dflys.backend.driver=TREIBER - mit TREIBER dem Namen des JDBC-Treibers, der es erlaubt - das Protokoll der Datenbank zu sprechen. Im Falle - einer Oracle XE wäre dies z.B.: - oracle.jdbc.OracleDriver - - -Dflys.backend.dialect=DIALECT - mit DIALECT dem Hibernate-Dialekt, den die Datenbank versteht. - Im Falle eine Oracle-XE wäre dies z.B.: - org.hibernate.dialect.OracleDialect - - -Hinweise zum Betrieb: ---------------------- - - Der Speicherverbrauch des Importers ist sehr hoch. Es ist empfehlenswert, - der JVM mindestens 8GiB Hauptspeicher zuzuordnen: '-Xmx8192m' - Besonders speicherintensiv ist der Import der HYKs und der PRFs. - Hier ist es unter Umständen empfehlenswert, diese in zwei oder drei - Schritten zu importieren. Zuerst die sonstigen hydrologischen Daten - (hierbei mit flys.backend.importer.skip.hyks=true und flys.backend.importer.skip.prfs - den Import der HYKs und PRFs verhindern). Dann die HYKs (mit flys.backend.importer.skip.* - der anderen Daten) und im finalen Schritt dann die PRFs. - -Anhang 'Klassifikation von Streckenfavoriten' ---------------------------------------------- -Streckenfavoriten werden aus KM-Dateien importiert. Um die einzelnen Einträge -eine Kategorie (Brücken, Pegel, etc.) zuzuordnen, kann eine XML angegeben werden, -in der Regeln für diese Klassifikation definiert werden. Schematisch gliedert -sich diese Datei in die zwei Bereiche 'types' und 'patterns': - -<annotation> - <types> ... </types> - <patterns> ... </patterns> -</annotation> - -In der Sektion 'types' werden die Kategorien vereinbart, in die -klassifiziert werden sollen. Die geschieht mit einzelnen - - <type name="Pegel"/> - <type name="Brücke"/> - ... - <type name="Sonstige" default="true"/> - -Das Attribut 'default' kann einmal vergeben werden und -besagt, dass diese Kategorie gewählt werden soll, wenn -keine andere Kategorie zugeordnet werden kann. - -In der Sektion 'patterns' werden dann die Regel -definiert, die einzelne Einträge den definierten Kategorien -zuordnet. Hierfür können zwei Arten von Definitionen -angegeben werden: - - <file pattern="^Brücken$" type="Brücke"/> - -oder - - <line pattern="^Brücke[:\s].*$" type="Brücke"/> - -Die erste Variante bestimmt die Kategorie, die pro KM-Datei -gelten soll. 'pattern' ist hierbei ein regulärer Ausdruck, -der auf den Dateinamen angewandt wird. Passt der Name -der Datei auf den regulären Ausdruck, wird 'type' als -Vorgabe angenommen. Treffen mehrere <file>-Regeln zu, -wird der erste Treffer angewandt. Findet keine der <file>-Regeln -Anwendung, wird die Kategorie ausgewählt, die in der <types>-Section -das Attribut 'default' gesetzt hat. - -Die zweite Regel-Variante <line> wird auf jeden Eintrag -innerhalb einer KM-Datei auf den Bezeichner der Streckenfavoriten -angewandt. Als Muster dient auch hier ein regulärer Ausdruck, -der über das Attribut 'pattern' definiert wird. Die Kategorie -wird in Trefferfall über das Attribut 'type' bestimmt. Treffen -mehrere Regeln zu, wird die Kategorie gewählt, die zum ersten -Treffer gehört. Trifft keine Regel zu wird der Eintrag der -Kategorie zugeteilt, die für die beinhaltende Datei als Vorgabe -gilt. - -Anhang 'Fehler und Warnungen': -============================= - -Fehler: -------- - -- 'error while parsing gew' - Die GEW-Datei ist fehlerhaft oder konnte nicht geöffnet werden. - -- 'File 'XYZ' is broken!' - Die Datei XYZ ist inkonsistent und führt zu Fehlern. - -- 'Error while parsing file for morph. width.' - Beim Lesen der morphologischen Breite trat ein Fehler auf. - -- 'Error while storing flow velocity model.' - Beim Schreiben eines Fliessgeschwindigkeitsmodells trat ein Fehler auf. - -- 'Error while storing flow velocity measurement.' - Beim Schreiben einer Fliessgeschwindigkeitsmessung trat ein Fehler auf. - -- 'Error while storing sediment yield.' - Beim Schreiben einer Sedimentablagerung trat ein Fehler auf. - -- 'Error while storing waterlevel diff.' - Beim Schreiben einer Wassspiegeldifferenz trat ein Fehler auf. - -- 'Error while storing sq relation.' - Beim Schreiben einer S(Q) Beziehung trat ein Fehler auf. - -- 'Error reading PRF file.' - Beim Lesen einer PRF-Datei trat ein Fehler auf. - -- 'Error closing PRF file.' - Beim Schliessen einer PRF-Datei trat ein Fehler auf. - -- 'HYK 1: not enough elements in line #' -- 'HYK 2: not enough elements in line #' -- 'HYK 5: not enough elements in line #' -- 'HYK 6: not enough elements in line #' - Eine Zeile in einer HYK-Datei hat nicht genügend Elemente. - -- 'HYK: parsing num zones, bottom or top height failed in line #' -- 'HYK: HYK: number of flow zones mismatches in line #' - Die Anzahl der Zonen oder Daten über die Zonen sind nicht korrekt. - -- 'HYK: cannot parse number in line #' - Eine Zahl wurde erwartet. - -- 'HYK: Error reading file.' - Beim Lesen einer HYK-Datei trat ein Fehler auf. - -- 'HYK: Error closing file.' - Beim Schliessen einer HYK-Datei trat ein Fehler auf. - -Warnungen: ----------- - -- 'annotation type file 'XYZ' is not readable.' - Die Datein XYZ kann nicht gelesen werden. - -- 'cannot parse annotation types file.' - Während der Verarbeitung der Annotationsdatei ist Fehler aufgetreten. - -- 'Cannot read directory.' - verzeichnis konnte nicht gelesen werden. - -- 'no official lines wst file found' - Keine Datei mit amtlichen Linien gefunden. - -- 'cannot read fixations wst file directory' - Das Verzeichnis mit den Fixierungen kann nicht gelesen werden. - -- 'cannot read extra longitudinal wst file directory' - Das Verzeichnis mit den zusätzlichen Längsschnitten kann nicht gelesen werden. - -- 'cannot read gauges from 'XYZ'' - Die Pegelgültigkeiten können nicht gelesen werden. - -- 'HYK file 'XYZ' seems to be a duplicate.' - Die HYK-Datei wurde unter anderem Namen aber gleichen Inhalts - bereits gefunden. - -- 'PRF file 'XYZ' seems to be a duplicate.' - Die PRF-Datei wurde unter anderem Namen aber gleichen Inhalts - bereits gefunden. - -- 'Skip invalid SedimentYield: time interval or unit null!' - Eine Sedimentablagerung ist ungültig und wurde ausgelassen. - -- 'skip flow velocity model: No discharge zone specified.' - Da kein Abflussbereich angegeben wurde, wurde das Fliessgeschwindigkeitsmodell ausgelassen. - -- 'skip invalid waterlevel - no unit set!' - Ein einheitenloser Wasserstand wurde ausgelassen. - -- 'Cannot parse time range.' - Das Zeitformat wurde nicht erkannt. - -- 'skip invalid data line #' - Ungültige Datenzeile wurde ausgelassen. - -- 'Error while parsing sq relation row #' - Eine Zeile in der S(Q)-Beziehung ist ungültig. - -- 'GLT: no gauge found in line #' - In der GLT-Datei wurde ein Pegel erwartet, aber nicht gefunden. - -- 'GLT: line # has not enough columns.' - Eine Zeile in der Pegelgültigkeitsdatei hat nicht genug spalten. - -- 'Error while parsing flow velocity values.' -- 'skip invalid data line: #' - Invalide Datenzeile in einer Datei mit einer Fliessgeschwindigkeitsmessung. - -- 'skip invalid waterlevel line: #' -- 'Error while parsing value: #' -- 'Error while parsing station: #' - Invalide Datenzeile in einer Datei mit Wasserstandsdifferenzen. - -- 'skip invalid MainValue part: #' -- 'skip invalid gauge part: #' -- 'Error while parsing Q value: <Q>' -- 'skip invalid data line: #' -- 'Error while parsing flow velocity values.' - Invalide Datenzeile in einer Datei Fliessgeschwindigkeitsmodellen. - -- 'Error while parsing number from data row: #' - TODO INGO - -- 'Unknown meta line: #' -- 'Error while parsing numbers in: #' -- 'skip invalid data line: #' -- 'Error while parsing numbers in #' - Invalide Datenzeile in einer Datei mit Sedimentdichten. - -- 'STA file is empty' -- 'STA file has not enough lines' -- 'STA file is too short' - Stammdatendatei ist leer oder hat zu wenige Zeilen. - -- 'First line in STA file is too short.' - Die erste Zeile der Stammdaten ist zu kurz. - -- 'STA: second line is too short' - Die zweite Zeile ist zu kurz. - -- 'STA: parsing of the datum of the gauge failed' - -- 'STA: 'XYZ' is not a valid long number.' - Die Pegelnummer ist invalide. - -- 'STA: Not enough columns for aeo and datum. - AEO und Pegelnullpunkt können nicht ermittelt werden. - -- 'STA: cannot parse aeo or datum.' - AEO oder Pegelnullpunkt sind invalide. - -- 'STA: value not parseable in line #' - Wert ist nicht als Zahl zu interpretieren. - -- 'PRF: cannot open file <FILE>' - Die PRF kann nicht geöffnet werden. - -- PRF: file is empty -- PRF: First line does not look like a PRF data pattern. -- PRF: premature EOF. Expected integer in line 2 -- PRF: Expected <num> in line 2 -- PRF: invalid integer in line 2 -- PRF: premature EOF. Expected pattern for km extraction -- PRF: line 4 does not look like a PRF km extraction pattern. -- PRF: premature EOF. Expected skip row count. -- PRF: line 5 is not an positive integer. -- PRF: cannot extract km in line # - Das PRF-Format ist komplex. Hier sollten weitere Information - zur genaueren Analyse herangezogen werden. - -- 'cannot access WST file <FILE>' - Die WST-Datei konnte nicht gefunden werden. - -- 'Found an invalid row in the AT file.' - Eine Zeile in einer AT-Datei ist nicht korrekt. - -- 'AT: invalid number <XYZ>' - Eine Zahl wurde erwartet aber nicht gefunden. - -- 'Try to add Q range without waterlevel!' - Q-Bereich ohne Wasserstand gefunden. - -- 'Error while parsing Q range: #' - Invalider Q-Bereich - -- 'skip invalid waterlevel line: #' - Ungültige Wasserstandslinie - -- 'Error while parsing number values: #' - Ungültige Zahlenwerte. - -- 'ANN: not enough columns in line #' - Nicht genug Zeichenspalten in KM-Datei - -- 'ANN: invalid number in line #' - Ungültige Zahl. - -- 'ANN: cannot parse 'Unterkante' in line #' - Die Unterkante in einer KM-Datei konnte nicht gelesen werden. - -- 'ANN: cannot parse 'Unterkante' or 'Oberkante' in line #' - Unter- oder Oberkannte liegen in einem falschen Format vor. - -- 'ANN: duplicated annotation 'XYZ' in line #' - Ein Duplikat eines Streckenfavoriten wurde gefunden. - -- 'ANN: 'XYZ' is not a directory.' - Unterverzeichnis konnte nicht geöffnet werden. - -- 'ANN: cannot list directory 'XYZ'' - Unterverzeichnis konnte nicht durchsucht werden. - -- 'BHP: Meta line did not match any known type: #' - Unbekannter Typ. - -- 'BHP: Error while parsing timeinterval!' - Ungültiges Zeitinterval. - -- 'BHP: Error while parsing year!' - Ungültige Jahresangabe. - -- 'BHP: Error while parsing sounding width!' - Unbekannte Peilungsbreite. - -- 'BHP: Error while parsing range!' - Bereichsangabe fehlerhaft. - -- 'MWP: Unknown meta line: #' - Meta-Informationen ungültig. - -- 'MWP: skip invalid data line: #' - Ungültige Datenzeile wurde übersprungen. - -- 'MWP: Error while parsing numbers in #' - Falsche Zahlenformat. - -- 'ANNCLASS: rule has no name' - Klassifizierungsregel für Streckenfavoriten hat keinen Namen. - -- 'ANNCLASS: pattern has no 'pattern' attribute.' - Klassifizierungsmuster für Streckenfavoriten hat kein Muster. - -- 'ANNCLASS: pattern has unknown type 'XYZ'' - Klassifizierungsmuster für Streckenfavoriten konnte keinem Typ zugeordnet werden. - -- 'ANNCLASS: pattern 'XYZ' is invalid.' - Klassifizierungsmuster für Streckenfavoriten ist ungültig. - -- 'BSP: Error while parsing data row.' - Ungültige Datenzeile. - -- 'SYP: Unknown meta line: #' - Ungültige Metadatenzeile. - -- 'SYP: skip invalid data line #' - Ungültige Datenzeile wurde übersprungen. - -- 'SYP: Error while parsing numbers in #' - Ungültige Zahlenformatierung. - -- 'SYP: Unknown time interval string <XYZ>' - Falsches Datumformat. - -- 'SYP: Error while parsing years <XYZ>' - Falsches Jahreszahlformat. - -- 'SYP: Error while parsing ranges of <XYZ>' - Bereichsangaben fehlerhaft. - -- 'SYP: Unknown grain fraction <XYZ>' - Unbekannte Kornfraktion. - -- 'WST: invalid number.' - Ungültige Zahl. - -- 'WST: km <km> (<Zeile>) found more than once. -> ignored.' - Ein Kilometer ist doppelt in einer WST-Datei enthalten. - -- 'HYK: zone coordinates swapped in line #' - Fliesszonenkordinaten wurden in umgekehrter Reihenfolge angeben. - -- 'BHS: Skip invalid file 'XYZ'' - Die Inhalte der Datei sind ungültig. - -- 'ISQ: Unable to store sq relation value.' - S(Q) Beziehung konnte nicht gespeichert werden. - -- 'ISQ: Cannot determine sq relation without time interval.' - Einer S(Q)-Beziehung ist keine zeitliche Gültigkeit zugeordnet. - -- 'IWD: skip invalid waterlevel difference - no unit set!' - Wasserstandsdifferenz hat keine Einheit. - -- 'BHE: Skip file - invalid current elevation model.' - Höhenmodell ungültig. - -- 'BHE: Skip file - invalid time range.' - Zeitbereich ungültig. - -- 'BHE: Skip file - invalid km range.' - Kilometerbereich ungültig. -
--- a/backend/doc/documentation/de/importer-geodaesie.tex Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/documentation/de/importer-geodaesie.tex Wed Oct 16 13:03:13 2013 +0200 @@ -3,10 +3,10 @@ Der Geodaten Importer ist ein in der Programmiersprache Python geschriebenes Kommandozeilen Werkzeug zum Import von Shapefiles in eine Datenbank. -Zum Lesen der Shapefiles und zum schreiben der Geodaten -in die Datenbank wird die GDAL Bibliothek verwendet. +Zum Lesen der Shapefiles und zum Schreiben der Geodaten +in die Datenbank wird die GDAL-Bibliothek verwendet. Um Daten in eine Oracle Datenbank zu importieren ist es n�tig, dass -GDAL und GDAL Python Bindungs mit Oracle Unterst�tzung installiert +GDAL und GDAL-Python-Bindings mit Oracle-Unterst�tzung installiert sind. Bei der Verwendung von PostgreSQL entf�llt dieser Schritt. Weitere Details hierzu befinden sich im Kapitel \ref{Systemanforderungen} und \ref{Installationsanleitung}. @@ -19,187 +19,311 @@ Relation der Datenbank schreibt. Die Parser sind speziell auf das Dateisystem der BfG ausgerichtet. So wird beispielsweise erwartet, dass die Shapefiles der Gew�sserachse im Ordner $Geodaesie/Flussachse+km$ liegen. Weitere Informationen zu -den einzelnen Parsern sind dem n�chsten Kapitel \ref{Beschreibung der Parser} zu -entnehmen. Der Erfolg oder Misserfolg eines Shape-Imports wird je nach -Konfiguration im Logfile vermerkt. Folgende Eintr�ge k�nnen dem Logfile +den einzelnen Parsern sind Kapitel \ref{Beschreibung der Parser} zu +entnehmen. + +Damit die Geodaten eines Shapes sp�ter eindeutig in der Datenbank identifiziert +werden k�nnen, wird f�r jede Geometrie der Pfad des Shapes im Dateisystem +im Datenbankfeld 'path' gespeichert. Anwendungen, die auf der Datenbank +aufbauen, k�nnen die Geodaten eines Shapefiles sp�ter anhand dieses Merkmals +gruppieren und anzeigen. + +Bitte beachten Sie, dass der Geodaten Importer aufgrund der eingesetzten +Technologien derzeit nicht in der Lage ist, lesend auf die Oracle-Datenbank +zuzugreifen. Entsprechend kann beim Import nicht festgestellt werden, ob sich +die Daten eines Shapefiles bereits in der Datenbank befinden, oder nicht. +Ein erneuter Import der Geodaten w�rde also dazu f�hren, dass Geometrien doppelt in der +Datenbank abgelegt werden. + +\subsection{Koordination-Transformation} +F�r die Transformation der Daten verwendet GDAL wiederum die PROJ4-Bibliothek. +Die Daten werden vor dem Schreiben in die Datenbank alle +in die Gau�-Kr�ger-Projektion Zone 3 (EPSG-Code 31467) transformiert. +Ist f�r die zu importierenden Daten keine Projektion ersichtlich +(fehlende \textit{*.prj}-Datei), so findet keine Transformation statt. +Dies f�hrt nur zu Problemen mit dem Fachdienst FLYS, falls die Daten nicht +bereits in der genannten Projektion vorlagen. + +Im Falle der Digitalen Gel�ndemodelle (DGM) findet keine Transformation statt, +da zu diesen lediglich Metadaten in der Datenbank gespeichert werden +(siehe Kapitel \ref{dgm_parser}), +w�hrend die Daten selbst von der Anwendung Dive4Elements River +aus dem Dateisystem geholt werden. +F�r Berechnungen mit den DGM werden die Geometrien aus der Datenbank +in Dive4Elements River in die Projektion des jeweiligen DGM transformiert. +Daher ist es besonders wichtig, dass die Angaben des EPSG-Codes +in der Spalte SRID in DGMs.csv korrekt sind (siehe Kapitel \ref{dgm_parser}) + +\subsection{Logfile} +Der Erfolg oder Misserfolg eines Shape-Imports wird +im Logfile vermerkt. Folgende Eintr�ge k�nnen dem Logfile entnommen werden: -%TODO etwas zum srs schreiben. +\textbf{INFO: Inserted \# features} +\\Gibt die Anzahl der erfolgreich importierten Features an. -\textbf{INFO: Inserted 4 features} -\\Gibt die Anzahl der erfolgreich importierten Features an.\\ +\textbf{INFO: Failed to create \# features} +\\Gibt die Anzahl der Features an, die nicht importiert werden konnten. -\textbf{INFO: Failed to create 2 features} -\\Gibt die Anzahl der Features an, die nicht importiert werden konnten.\\ - -\textbf{INFO: Found 3 unsupported features of type: wbkMultiLineString} +\textbf{INFO: Found 3 unsupported features of type: '...'} \\Gibt die Anzahl der Features an, die aufgrund ihres Datentyps nicht importiert werden konnten. Wenn etwa Punkte erwartet wurden aber sich im Shapefile -Polygone befanden.\\ +Polygone befanden. -\textbf{INFO: Did not import values from fields: TYP ID GRUENDUNG BHW} -\\Manche Importer versuchen neben der Geographischen Information weitere -Felder in die Datenbank einzulesen. Um festzustellen ob ein Feld aufgrund -von Tippfehlern oder unterschiedlicher Schreibweise nicht importiert wurde, -gibt diese Information Auskunft dar�ber welche Felder aus der Shape Datei -nicht verwendet wurden.\\ +\textbf{INFO: Did not import values from fields: '...' ...} +\\Der Importer schreibt neben der geographischen Information weitere +Attribut-Daten in die Datenbank. +Attribut-Spalten die nicht importiert wurden (z.B. auf Grund +von Tippfehlern oder unterschiedlicher Schreibweise), +werden wie angegeben im Logfile aufgef�hrt. \textbf{ERROR: No source SRS given! No transformation possible!} \\Das Shapefile enth�lt keine Information, in welcher Projektion die Geometrien vorliegen. Es findet keine Transformation in die Zielprojektion statt. Bitte -beachten Sie, dass FLYS diese Geometrien sp�ter ggf nicht korrekt darstellen +beachten Sie, dass FLYS diese Geometrien sp�ter ggf.\ nicht korrekt darstellen kann. \textbf{ERROR: Unable to insert feature: DETAIL} -\\Beim Lesen der Attribute eines Features ist ein Fehler aufgetreten. -Das Feature konnte nicht in die Datenbank geschrieben werden.\\ +\\Beim Lesen eines Features ist ein Fehler aufgetreten. +Das Feature konnte nicht in die Datenbank geschrieben werden. \textbf{ERROR: Exception while committing transaction} \\Beim Abschluss des Schreib-Vorgangs in die Datenbank ist ein unerwarteter -Fehler aufgetreten. Die Features des Shapes sind nicht importiert worden.\\ +Fehler aufgetreten. Die Features des Shapes sind nicht importiert worden. \textbf{ERROR 1: ORA-01017: invalid username/password; logon denied} \\Es konnte keine Verbindung zur Oracle Datenbank hergestellt werden. Pr�fen Sie die Verbindungseinstellungen. -Damit die Geodaten eines Shapes sp�ter eindeutig in der Datenbank identifiziert -werden k�nnen, wird f�r jede Geometrie der Pfad des Shapes im Dateisystem in -einer Spalte der Datenbank gespeichert. Anwendungen, die auf der Datenbank -aufbauen, k�nnen die Geodaten eines Shapefiles sp�ter anhand dieses Merkmals -gruppieren und anzeigen. +Weitere Fehler, die von der Oracle-Datenbank kommen, k�nnen ebenfalls im +Logfile angezeigt werden. \subsection{Beschreibung der Parser} \label{Beschreibung der Parser} Wie im letzten Kapitel beschrieben, sind die Parser speziell an das Dateisystem -der BfG ausgerichtet. Im Folgenden werden zu jedem Parser folgende Informationen +der BfG angepasst. Im Folgenden werden zu jedem Parser folgende Informationen angegeben: \textbf{Pfad} -\\Der Pfad, in dem die Shapefiles im Dateisystem abgelegt sein m�ssen ausgehend -vom Gew�sser Verzeichnis. +\\Der Pfad, in dem die Shapefiles im Dateisystem abgelegt sein m�ssen (ausgehend +vom Gew�sser Verzeichnis). \textbf{Geometrie} \\Der Geometrie Typ, der f�r diese Klasse von Shapefiles erwartet wird. \textbf{Attribute} \\Eine Liste der Attribute, die vom Parser aus dem Shape gelesen werden. +In Klammern als alternativ bezeichnete Attribut-Namen werden in +das gleiche Datenbankfeld geschrieben, wie das vorgenannte Feld. +Die alternativen Namen werden vom Importer zus�tzlich unterst�tzt, +um Dateien aus dem heterogenen Bestand der BfG unver�ndert +importieren zu k�nnen. +Zudem werden Datenbank-Attribute beschrieben, die nicht direkt aus +Attribut-Spalten des Shapefiles gelesen werden. \subsubsection{Achsen} -\hspace{1cm} -\begin{tabular}[t]{ll} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} Pfad & Geodaesie/Flussachse+km \\ -Geometrie & LINESTRING \\ -Attribute & name, kind \\ -\end{tabular} +Geometrie & LINESTRING, MULTILINESTRING \\ +\end{tabular*} +Das Attribut 'name' wird auf den Namen des Shapefiles gesetzt. +Zus�tzlich wird das Attribut 'kind\_id' gesetzt, welches +f�r die aktuelle Achse (\textit{achse.shp}) 1 ist +und f�r sonstige Achsen (weitere Linien-Shapes) 2. -\subsubsection{Hydrologische Grenzen} -\hspace{1cm} -\begin{tabular}[t]{ll} -Pfad & Hydrologie/Hydr.Grenzen/Linien \\ -Geometrie & LINESTRING, POLYGON \\ -Attribute & name, kind, sectie, sobek \\ -\end{tabular} +\subsubsection{Hydr. Grenzen} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} +Pfad & Hydrologie/Hydr.Grenzen \\ +Geometrie & LINESTRING, MULTILINESTRING, POLYGON, MULTIPOLYGON \\ +Attribute & SECTIE, STROVOER \\ +\end{tabular*} + +Das Attribut 'name' wird auf den Namen des Shapefiles gesetzt. +Das Attribut 'kind' wird 1 gesetzt f�r Daten aus dem +Unterverzeichnis \textit{Linien/BfG}, +2 f�r Daten aus \textit{Linien/Land}, +3 f�r Daten aus \textit{Sonstige} +und f�r alle �brigen 0. +Ausgenommen sind Dateien, in deren Namen 'Talaue' +(Gro�-Klein-Schreibung irrelevant) vorkommt. + +Linien und Polygone werden in der Datenbank in unterschiedlichen +Tabellen gespeichert. \subsubsection{Bauwerke} -\hspace{1cm} -\begin{tabular}[t]{ll} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} Pfad & Geodaesie/Bauwerke \\ Geometrie & LINESTRING \\ -Attribute & name, Name, KWNAAM \\ -\end{tabular} - +Attribute & Name (alternativ: KWNAAM), + km (alternativ: station, wsv-km), + z (alternativ: H�he, Hoehe, m+NHN)\\ +\end{tabular*} -\subsubsection{Einzugsgebiete} -\hspace{1cm} -\begin{tabular}[t]{ll} -Pfad & Hydrologie/Einzugsgebiet \\ -Geometrie & POLYGON, MULTIPOLYGON \\ -Attribute & name, Name, AREA, area \\ -\end{tabular} - +Das Attribut 'name' wird auf den Namen des Shapefiles gesetzt. +Das Attribut 'kind\_id' ist 0 f�r Sonstige, +1 f�r Br�cken, 2 f�r Wehre, 3 f�r Pegel. +Es wird aus dem Dateinamen hergeleitet +(\textit{bruecken.shp, wehre.shp, pegel.shp}, +teilweise auch alternative Schreibweisen unterst�tzt) +oder je Feature gesetzt, wenn in einer Attributspalte +die Werte 'bruecke' und 'wehr' +(teilweise auch alternative Schreibweisen unterst�tzt) vorkommen. +Ausgenommen sind Dateien, in deren Namen 'Buhnen' +(Gro�-Klein-Schreibung irrelevant) vorkommt. \subsubsection{Querprofilspuren} -\hspace{1cm} -\begin{tabular}[t]{ll} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} Pfad & Geodaesie/Querprofile \\ Geometrie & LINESTRING \\ -Attribute & KILOMETER, KM, STATION, ELEVATION \\ -\end{tabular} +Attribute & KILOMETER (alternativ: KM, STATION), ELEVATION \\ +\end{tabular*} +Das Attribut 'kind\_id' wird 1 gesetzt f�r die Datei \textit{qps.shp} (aktuelle Querprofilspuren) +und 0 f�r alle weiteren. \subsubsection{Festpunkte} -\hspace{1cm} -\begin{tabular}[t]{ll} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} Pfad & Geodaesie/Festpunkte \\ Geometrie & POINT \\ -Attribute & name, KM, ELBE\_KM, X, Y, HPGP \\ -\end{tabular} +Attribute & KM (alternativ: ELBE\_KM), X, Y, HPGP (alternativ: ART) \\ +\end{tabular*} +Das Attribut 'name' wird auf den Namen des Shapefiles gesetzt. + +\subsubsection{Hochwassermarken} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} +Pfad & Hydrologie/HW-Marken/hw-marken.shp \\ +Geometrie & POINT \\ +Attribute & Ort (alternativ: Pegel), + km (alternativ: station, wsv-km, FlussKm), + z (alternativ: z mit anschlie�ender Zahl, m+NHN)\\ +\end{tabular*} + +Gro�-Klein-Schreibung im Dateinamen ist irrelevant. +F�r das Attribut 'year' wird im Dateinamen nach einer Jahreszahl +nach folgendem Muster gesucht: \textit{\_YYYY\_} oder \textit{-YYYY-}. +Gelingt dies nicht, erscheint im Logfile die Warnung +'Could not extract year from filename: ...'. \subsubsection{Talaue} -\hspace{1cm} -\begin{tabular}[t]{ll} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} Pfad & Hydrologie/Hydr.Grenzen \\ Geometrie & POLYGON, MULTIPOLYGON \\ -Attribute & name \\ -\end{tabular} - +\end{tabular*} -\subsubsection{Pegelstationen} -\hspace{1cm} +Es werden nur Dateien betrachtet, in deren Namen das Wort 'Talaue' +(Gro�-Klein-Schreibung irrelevant) vorkommt. +Das Attribut 'name' wird auf den Namen des Shapefiles gesetzt. +Das Attribut 'kind\_id' wird 1 gesetzt f�r die Datei \textit{talaue.shp} (aktuelle Talaue) +und 0 f�r alle weiteren. + +\subsubsection{Hochwasserschutzanlagen} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} +Pfad & Hydrologie/HW-Schutzanlagen \\ +Geometrie & LINESTRING, MULTILINESTRING, POINT \\ +Attribute & Name, Art, Quelle, Anmerkung, Stand, Verband, + km (alternativ: Deich\_km), Bereich, + Hoehe, Hoehe\_soll, WSP\_Bfg100, Bundesland + (Teilweise auch alternative Schreibweisen unterst�tzt)\\ +\end{tabular*} + +Das Attribut 'name' wird auf den Namen des Shapefiles gesetzt, +wenn kein Attribut 'Name' im Shapefile vorhanden ist. +Das Feld 'kind\_id' wird per Default auf 2 (f�r Damm) gesetzt. +Wird ein Attribut 'ART' im Shapefile gefunden, +so wird 'kind\_id' entsprechend dieses Feldes gesetzt +(1 f�r die Werte 'Durchlass', 'Rohr1', 'Rohr 1', 'Rohr 2', +2 f�r die Werte 'Damm', 'Deich', 'Hochufer', 'Hauptdeich', 'Sommerdeich', +3 f�r den Wert 'Graben'). +Es wird versucht das Bundesland aus dem Dateinamen zu ermitteln, +wenn das Shapefile kein Attribut 'Bundesland' enth�lt. + +Linien und Punkte werden in der Datenbank in unterschiedlichen +Tabellen gespeichert. + +\subsubsection{Buhnen} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} +Pfad & Geodaesie/Bauwerke/Buhnen.shp \\ +Geometrie & POINT \\ +Attribute & station (alternativ: km, wsv-km), + z (alternativ: Hoehe, H�he, m+NHN) \\ +\end{tabular*} + +Das Attribut 'kind\_id' wird f�r +Buhnenkopf (\textit{bkl, bkr, bk}) 0, +f�r Buhnenfu� (\textit{bfl, bfr, bf}) 1 und +f�r Buhnenwurzel (\textit{bwl, bwr, bw}) 2 gesetzt, + +\subsubsection{Stationierung} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} +Pfad & Geodaesie/Flussachse+km/km.shp \\ +Geometrie & POINT \\ +Attribute & km (alternativ: KM), landkm \\ +\end{tabular*} + +Das Attribut 'name' wird auf den Namen des Shapefiles gesetzt. + +\subsubsection{�berschwemmungsfl�che} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} +Pfad & Hydrologie/UeSG \\ +Geometrie & POLYGON, MULTIPOLYGON \\ +Attribut & diff, count, area, perimeter, GEWAESSER \\ +\end{tabular*} + +Das Attribut 'name' wird auf den Namen des Shapefiles gesetzt. +Das Attribut 'kind' wird nach folgendem Schema gesetzt: + +\hspace{5mm} \begin{tabular}[t]{ll} -Pfad & Hydrologie/Streckendaten \\ -Geometrie & POINT \\ -Attribute & Name, name, MPNAAM \\ +Unterverzeichnis & Wert \\ +\textit{Berechnungen/Aktuell/BfG} & 111 \\ +\textit{Berechnungen/Aktuell/Bundesl�nder} & 112 \\ +\textit{Berechnungen/Potentiell/BfG} & 121 \\ +\textit{Berechnungen/Potentiell/Bundesl�nder} & 122 \\ +\textit{Messungen} & 200 \\ \end{tabular} - -\subsubsection{Hochwasserschutzanlagen} -\hspace{1cm} -\begin{tabular}[t]{ll} -Pfad & Hydrologie/HW-Schutzanlagen \\ -Geometrie & LINESTRING, POINT \\ -Attribute & name, source, description, status\_date, agency, - dike\_km, range, z\_target, rated\_level, z \\ -\end{tabular} - +Das Attribut 'source' wird auf den Namen des Verzeichnisses gesetzt, +indem sich das jeweilige Shapefile befindet. -\subsubsection{Kilometrierung} -\hspace{1cm} -\begin{tabular}[t]{ll} -Pfad & Geodaesie/Flussachse+km \\ -Geometrie & POINT \\ -Attribute & name, km, KM \\ -\end{tabular} +\subsubsection{Metadaten zu Digitalen Gel�nde-Modellen} +\label{dgm_parser} +\hspace{5mm} +\begin{tabular*}{155mm}[t]{l@{\extracolsep\fill}p{125mm}} +Pfad & ../DGMs.csv \\ +Attribut & Projektion, H�henstatus, Format, Bruchkanten, + Aufl�sung, SRID, Pfad\_Bestand, + km\_von, km\_bis, Jahr\_von, Jahr\_bis \\ +\end{tabular*} - -\subsubsection{�berschwemmungsfl�che} -\hspace{1cm} -\begin{tabular}[t]{ll} -Pfad & Hydrologie/UeSG/Berechnung \\ -Geometrie & POLYGON, MULTIPOLYGON \\ -Attribut & name, diff, count, area, perimeter \\ -\end{tabular} +Aus der Spalte 'Gew�sser' in DGMs.csv wird entnommen, +f�r welches Gew�sser das angegebene DGM verwendet wird. +Die Spalte muss daher den exakt gleichen Namen enthalten +wie in der *.gew-Datei des Gew�ssers angegeben +(siehe auch Kapitel \ref{start-hydr}). +Die eigentlichen Geo-Daten der DGM werden nicht in die Datenbank importiert. +Diese werden von der Anwendung Dive4Elements River aus dem Dateisystem geholt. \subsection{Konfiguration} \label{Konfiguration} -Der Geodaten Importer kann �ber die Datei \textit{contrib/run\_geo.sh} -konfiguriert werden. �ffnen Sie die Datei mit einem Texteditor Ihrer Wahl. -In den Zeilen 4-9 werden Optionen definiert, die zwangsl�ufig angepasst -werden m�ssen: - -\textbf{RIVER\_PATH} -\\Der Pfad zum Gew�sser im Dateisystem. - -\textbf{RIVER\_NAME} -\\Der Datenbank Name des zu importierenden Gew�ssers. Wird dieser Parameter -nicht �bergeben werden die Ordnernamen im mit dem Parameter RIVER\_PATH -angegebenen Verzeichnis als Flussnamen interpretiert und es wird versucht -diese zu Importieren. +Der Geodaten Importer kann �ber das Skript \textit{./run\_geo.sh} +konfiguriert werden. �ffnen Sie die Datei mit einem Texteditor Ihrer Wahl +und passen Sie ggf.\ folgende Variablen an: \textbf{HOST} \\Der Host der Datenbank. @@ -210,7 +334,7 @@ \textbf{PASS} \\Das Passwort f�r USER zum Verbinden zur Datenbank. -In den Zeilen 12-23 werden weitere Optionen definiert, die bei Bedarf angepasst +In den weiteren Zeilen werden weitere Optionen definiert, die bei Bedarf angepasst werden k�nnen. Falls nicht anders angegeben, k�nnen die Optionen mit den Werten `0` und `1` belegt werden. @@ -225,16 +349,16 @@ Modus ist haupts�chlich f�r die Entwicklung gedacht. \textbf{OGR\_CONNECTION} -\\Hiermit kann direkt ein beliebiger Verbindungs string angegegeben -werden, welcher die host, user und passwort werde �berschreibt. -Dieser Option wird direkt an die OGR Bibliothek weitergegeben und erm�glicht -verbesserte Tests und Entwicklung mit verschiedenen Daten Backends. +\\Hiermit kann direkt ein beliebiger Verbindungs-String angegegeben +werden, welcher dann anstatt HOST, USER und PASS verwendet wird. +Diese Option wird direkt an die OGR-Bibliothek weitergegeben und erm�glicht +verbesserte Tests und Entwicklung mit verschiedenen Backends. \textbf{SKIP\_AXIS} \\Bei gesetztem Wert `1` werden keine Flussachsen importiert. \textbf{SKIP\_KMS} -\\Bei gesetztem Wert `1` werden keine Kilometrierungen importiert. +\\Bei gesetztem Wert `1` werden keine Stationierungen importiert. \textbf{SKIP\_CROSSSECTIONS} \\Bei gesetztem Wert `1` werden keine Querprofilespuren importiert. @@ -252,43 +376,35 @@ \\Bei gesetztem Wert `1` werden keine hydrologischen Grenzen importiert. \textbf{SKIP\_HWS\_LINES} -\\Bei gesetztem Wert `1` werden kein Hochwasserschutz Liniendaten importiert. +\\Bei gesetztem Wert `1` werden kein Hochwasserschutzanlagen (Liniendaten) importiert. \textbf{SKIP\_HWS\_POINTS} -\\Bei gesetztem Wert `1` werden kein Hochwasserschutz Punktdaten importiert. - -\textbf{SKIP\_CATCHMENTS} -\\Bei gesetztem Wert `1` werden keine Einzugsgebiete importiert. +\\Bei gesetztem Wert `1` werden kein Hochwasserschutzanlagen (Punktdaten) importiert. \textbf{SKIP\_UESG} \\Bei gesetztem Wert `1` werden keine �berschwemmungsfl�chen importiert. \textbf{SKIP\_DGM} -\\Bei gesetztem Wert `1` werden keine Informationen �ber Digitale Gel�ndemodelle importiert. +\\Bei gesetztem Wert `1` werden keine Metadaten zu Digitalen Gel�ndemodellen importiert. \textbf{SKIP\_JETTIES} -\\Bei gesetztem Wert `1` werden keine Informationen �ber Buhnen importiert. +\\Bei gesetztem Wert `1` werden keine Buhnen importiert. \textbf{SKIP\_FLOODMARKS} -\\Bei gesetztem Wert `1` werden keine Informationen �ber HW-Marken importiert. +\\Bei gesetztem Wert `1` werden keine HW-Marken importiert. \subsection{Starten des Geodaten Importers} \label{Starten des Geodaten Importers} -Der Geodaten Importer wird mittels eines Shellskripts von einer Konsole +Der Geodaten Importer wird mittels des Shellskripts, +dass auch f�r die Konfiguration verwendet wird, von einer Konsole gestartet. Dazu f�hren Sie folgenden Befehl aus:\\ \begin{lstlisting} - sh contrib/run_geo.sh > geo-import.log + sh ./run_geo.sh pfad/zur/beispiel.gew > geo-import.log \end{lstlisting} +Bez�glich des �bergebenen Pfades siehe auch Kapitel \ref{start-hydr}. Der Importer wird nun gestartet. S�mtliche Log-Ausgaben werden in die Datei $geo-import.log$ geschrieben. -\textbf{Hinweis} -\\Bitte beachten Sie, dass der Geodaten Importer aufgrund der eingesetzten -Technologien derzeit nicht in der Lage ist, lesend auf die Oracle Datenbank -zuzugreifen. Entsprechend kann beim Import nicht festgestellt werden, ob sich -Shapefiles bereits in der Datenbank befinden, oder nicht. Ein erneuter Import -Vorgang der Geodaten w�rde also dazu f�hren, dass Geometrien doppelt in der -Datenbank abgelegt werden.
--- a/backend/doc/documentation/de/importer-hydr-morph.tex Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/documentation/de/importer-hydr-morph.tex Wed Oct 16 13:03:13 2013 +0200 @@ -10,12 +10,21 @@ \item Schreiben der erfolgreich eingelesenen Daten in die Datenbank. \end{itemize} +Beim Import wird versucht, Datens�tze nicht zu importieren, +die bereits in der Datenbank vorhanden sind. +Dies kann aber nicht immer eindeutig bestimmt werden, +so dass vor dem Import ge�nderter Daten +ein L�schen der entsprechenden Datens�tze in der Datenbank notwendig sein kann, +da sonst m�glicherweise aus fachlicher Sicht Duplikate in der Datenbank vorhanden sind, +ge�nderte Daten nicht importiert werden +oder es zu unerwarteten Fehlern kommt. + Sollte beim Lese- oder Schreib-Vorgang eines Gew�ssers ein Fehler auftreten, so werden s�mtliche Daten des Gew�ssers verworfen. Beide Phasen zusammen bilden somit eine Transaktion. \textbf{Hinweis} -\\Der Import geht wie auch Desktop-FLYS davon aus, dass die Dateien Latin-1 +\\Der Import geht, wie auch Desktop-FLYS, davon aus, dass die Dateien Latin-1 encodiert vorliegen! Stellen Sie also sicher, dass das von Ihnen verwendete Encoding korrekt ist. Andernfalls ist es m�glich, dass es w�hrend des Imports zu unerwarteten Problemen kommt. @@ -32,7 +41,7 @@ \end{lstlisting} Auf gleiche Weise k�nnen dem Importer s�mtliche Optionen zur Konfiguration -beim Start mitgegeben werden. Im Folgenden werden die m�glichen System-Properties und +beim Start mitgegeben werden. Im Folgenden werden die m�glichen \textit{System-Properties} und ihre Auswirkung auf den Import genauer beschrieben. In den Kapiteln \ref{configuration} und \ref{start-hydr} wird zur Einfachheit jedoch ein Shellskript verwendet, das eine Standardkonfiguration vorgibt und den Importer @@ -40,9 +49,30 @@ \subsection{Importierte Daten} -In diesem Kapitel werden die Datentypen aufgelistet und erl�utert, wie sie vom +\label{import_data} +In diesem Kapitel werden die verschiedenen Daten aufgelistet und erl�utert, wie sie vom Importer eingelesen werden. +\subsubsection{Wasserstandsmodell-Stammdaten und H�henreferenz (Basis-*.wst-Datei)} +Der Import von Wasserst�nden der Basis-*.wst-Datei +kann mit \textbf{-Dflys.backend.importer.skip.wst=true} unterdr�ckt werden. +Aus der Basis-*.wst-Datei wird auch die H�henreferenz und -einheit +des Gew�ssers ausgelesen (z.B. 'NN + m'). +Der Import dieser Information in die Datenbank wird daher ebenfalls durch +diese Option unterdr�ckt. +Da es sich hierbei um Gew�sser-Stammdaten handelt, +kann diese Option erst genutzt werden, wenn sich das Gew�sser bereits +in der Datenbank befindet. + +\subsubsection{Pegel-Stammdaten (*.glt, *.at und *.sta-Dateien)} +Der Import von Pegel- und Stammdaten kann mit \textbf{'-Dflys.backend.importer.skip.gauges=true'} +unterdr�ckt werden. Die *.glt-Datei, die neben der Basis-*.wst-Datei liegt, wird zuerst +ausgelesen. Es werden nur Stammdaten von Pegeln geladen, die in der .glt-Datei +vermerkt sind. + +Die System-Property \textbf{flys.backend.main.value.types} kann einen String +mit g�ltigen Typen von Stammdaten enthalten. Vorbelegt ist \textit{QWTD-}. + \subsubsection{Streckenfavoriten (*.km-Dateien)} Der Import der Streckenfavoriten kann mit \textbf{-Dflys.backend.importer.skip.annotations=true} unterdr�ckt werden. @@ -54,44 +84,33 @@ vorgenommen wird. Details hierzu befinden sich im Kapitel \ref{annotation-types}. \subsubsection{Bundeswasserstra�en-IDs} -Der Import und die Zuweisung der Bundeswasserstra�en-IDs kann mit -\textbf{-Dflys.backend.importer.skip.bwastr=true} unterbunden werden. -Beim Import wird davon ausgegangen dass sich die Datei \textbf{BWASTR\_ID.csv} +Der Import und die Zuweisung der Bundeswasserstra�en-IDs kann unterbunden werden +mit \textbf{-Dflys.backend.importer.skip.bwastr=true}. +Beim Import wird davon ausgegangen, dass sich die Datei \textbf{BWASTR\_ID.csv} neben der oder den zu importierenden gew-Dateien befindet. -\subsubsection{Pegel, Stammdaten (*.glt, *.sta-Dateien)} -Der Import von Pegel- und Stammdaten kann mit \textbf{'-Dflys.backend.importer.skip.gauges=true'} -unterdr�ckt werden. Die .glt-Datei, die neben der .wst-Datei liegt, wird zuerst -ausgelesen. Es werden nur *.sta-Datei von Pegeln geladen, die in der .glt-Datei -vermerkt sind. - \subsubsection{Historische Abflusstafeln (*.at-Dateien)} -Der Import von historischen Abflusstafeln kann mit -\textbf{'-Dflys.backend.importer.skip.historical.discharge.tables=true'} +Mit \textbf{'-Dflys.backend.importer.skip.historical.discharge.tables=true'} +kann der Import von historischen Abflusstafeln unterdr�ckt werden. Diese Flagge wird nur ausgewertet, wenn �berhaupt Pegel-Daten (siehe oben) importiert werden. -Mittels \textbf{-Dflys.backend.sta.parse.gauge.numbers=true} wird versucht, die -offiziellen Pegelnummern aus den Stammdaten zu extrahieren. -\textbf{Dies ist mit Vorsicht zu behandeln, denn die meisten STA-Dateien -enthalten invalide Pegelnummern.} - -Die System-Property \textbf{flys.backend.main.value.types} kann einen String -mit g�ltigen Typen von Stammdaten enthalten. Vorbelegt ist \textit{QWTD}. In der -Praxis ist \textit{QWD} eine sinnvolle Belegung. - -\subsubsection{Basis-Wasserst�nde (gewaesser.wst-Dateien)} -Der Import von Wasserst�nden kann mit \textbf{-Dflys.backend.importer.skip.wst=true} unterdr�ckt werden. +% Mittels \textbf{-Dflys.backend.sta.parse.gauge.numbers=true} wird versucht, die +% offiziellen Pegelnummern aus den Stammdaten zu extrahieren. +% \textbf{Dies ist mit Vorsicht zu behandeln, denn die meisten STA-Dateien +% enthalten invalide Pegelnummern.} \subsubsection{Zus�tzliche L�ngsschnitte (*.zus, *.wst-Dateien)} -Der Import von zus�tzlichen L�ngsschnitten kann mit \textbf{-Dflys.backend.importer.skip.extra.wsts=true} +Mit \textbf{-Dflys.backend.importer.skip.extra.wsts=true} kann +der Import von zus�tzlichen L�ngs\-schnitten unterdr�ckt werden. Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis -\textit{../Zus.L�ngsschnitte} relativ zur gewaesser.wst-Datei betrachtet. +\textit{../Zus.L�ngsschnitte} relativ zur +\textit{gewaesser}.wst-Datei betrachtet. \subsubsection{Fixierungen (*.wst-Dateien)} Der Import von Fixierungen kann mit \textbf{-Dflys.backend.importer.skip.fixations=true} -unterdr�ckt werden. Es werden die *.wst-Dateien aus dem Verzeichnis -\textit{../Fixierungen} relativ zur gewaesser.wst-Datei betrachtet. +unterdr�ckt werden. Es werden die *.wst-Dateien aus +\textit{../Fixierungen} relativ zur \textit{gewaesser}.wst-Datei betrachtet. \subsubsection{Amtliche Linien (*.wst-Dateien)} Der Import von amtlichen Linien kann mit \textbf{-Dflys.backend.importer.skip.official.lines=true} @@ -99,89 +118,117 @@ Verzeichnis \textit{../Basisdaten} und \textit{../Fixierungen} relativ zur \textit{gewaesser.wst}-Datei betrachtet. +F�r die Zuordnung zu den Hauptwerten wird zudem die Datei +\textit{Amtl\_Linien.config} ben�tigt. + \subsubsection{Profilspuren (*.prf-Dateien)} Der Import von Profilspuren kann mit \textbf{-Dflys.backend.importer.skip.prfs=true} unterdr�ckt werden. Es werden rekursiv alle *.prf-Dateien aus \textit{../../..} -relativ zur gewaesser.wst-Datei betrachtet. Vor dem Import werden mit Hilfe +relativ zur gewaesser.wst-Datei betrachtet. + +Vor dem Import von Profilspuren werden mit Hilfe eines L�ngen- und eines MD5-Summen-Vergleichs inhaltliche Duplikate ausgeschlossen. \subsubsection{Profilspuren (*.w80-Dateien)} -Der Import von W80-Profilspuren kann mit \textbf{-Dflys.backend.importer.skip.w80=true} +Der Import von W80-Profilspuren kann mit \textbf{-Dflys.backend.importer.skip.w80s=true} unterdr�ckt werden. Es werden rekursiv alle *.w80-Dateien aus \textit{../../..} -relativ zur gewaesser.wst-Datei betrachtet. Vor dem Import werden mit Hilfe -eines L�ngen- und eines MD5-Summen-Vergleichs inhaltliche Duplikate -ausgeschlossen. +relativ zur \textit{gewaesser}.wst-Datei betrachtet. + +\subsubsection{Profilspuren (*.d50-Dateien)} +Der Import von D50-Profilspuren kann mit \textbf{-Dflys.backend.importer.skip.da50s=true} +unterdr�ckt werden. Es werden rekursiv alle *.d50-Dateien aus \textit{../../..} +relativ zur \textit{gewaesser}.wst-Datei betrachtet. + +\subsubsection{Profilspuren (*.d66-Dateien)} +Der Import von D66-Profilspuren kann mit \textbf{-Dflys.backend.importer.skip.da66s=true} +unterdr�ckt werden. Es werden rekursiv alle *.d66-Dateien aus \textit{../../..} +relativ zur \textit{gewaesser}.wst-Datei betrachtet. + +\subsubsection{Profilspuren (*.csv-Dateien)} +Der Import von CSV-Profilspuren kann mit +\textbf{-Dflys.backend.importer.skip.w80.csvs=true} +unterdr�ckt werden. +Es werden rekursiv alle *.csv-Dateien aus +\textit{./Geodaesie/Querprofile/QP-Daten} im Verzeichnis des +Gew�ssers betrachtet. \subsubsection{Hydraulische Kennzahlen (*.hyk)} Der Import von hydraulischen Kennzahlen kann mit \textbf{-Dflys.backend.importer.skip.hyks=true} unterdr�ckt werden. Es werden rekursiv alle *.hyk-Dateien aus \textit{../../..} relativ zur -gewaesser.wst-Datei betrachtet. Vor dem Import werden mit Hilfe eines L�ngen- und +\textit{gewaesser}.wst-Datei betrachtet. Vor dem Import werden mit Hilfe eines L�ngen- und eines MD5-Summen-Vergleichs inhaltliche Duplikate ausgeschlossen. \subsubsection{Hochwassermarken (*.zus, *.wst)} Der Import von Hochwassermarken kann mit \textbf{-Dflys.backend.importer.skip.flood.water=true} unterdr�ckt werden. Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis -\textit{../HW-Marken} relativ zur gewaesser.wst-Datei betrachtet. +\textit{../HW-Marken} relativ zur \textit{gewaesser}.wst-Datei betrachtet. -\subsubsection{Hochwasserschutzanlagen (*.zus)} -Der Import von Hochwasserschutzanlagen kann mit \textbf{-Dflys.backend.importer.skip.flood.protection=true} +\subsubsection{Hochwasserschutzanlagen (*.zus, *.wst)} +Mit \textbf{-Dflys.backend.importer.skip.flood.protection=true} +kann der Import von Hochwasserschutzanlagen unterdr�ckt werden. Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis \textit{../HW-Schutzanlagen} relativ zur \textit{gewaesser.wst}-Datei betrachtet. +\subsubsection{Messstellen-Stammdaten} +Mit \textbf{-Dflys.backend.importer.skip.measurement.stations=true} +kann der Import von Messstellen-Stammdaten aus +\textit{Morphologie/Basisdaten/Messstellen-Stammdaten.csv} +unterdr�ckt werden. + \subsubsection{Sohlh�hen (Peilungen)} Der Import von Sohlh�hen-Peilungen kann mit \textbf{-Dflys.backend.importer.skip.bed.height.single=true} -unterdr�ckt werden. Es werden die Dateien aus dem Verzeichnis +unterdr�ckt werden. Es werden die CSV-Dateien aus dem Verzeichnis \textit{Morphologie/Sohlhoehen/Einzeljahre} geladen. \subsubsection{Sohlh�hen (Epochen)} Der Import Sohlh�hen-Epochen kann mit \textbf{-Dflys.backend.importer.skip.bed.height.epoch=true} -unterdr�ckt werden. Es werden die Dateien aus dem Verzeichnis +unterdr�ckt werden. Es werden die CSV-Dateien aus dem Verzeichnis \textit{Morphologie/Sohlhoehen/Epochen} geladen. \subsubsection{Sedimentdichte} Der Import der Sedimentdichte kann mit \textbf{-Dflys.backend.importer.skip.sediment.density=true} -unterdr�ckt werden. Es werden alle Dateien aus dem Verzeichnis +unterdr�ckt werden. Es werden die CSV-Dateien aus dem Verzeichnis \textit{Morphologie/Sedimentdichte} geladen. \subsubsection{Morphologische Breite} Der Import der morphologischen Breite kann mit \textbf{-Dflys.backend.importer.skip.morphological.width=true} -unterdr�ckt werden. Es werden alle Dateien aus dem Verzeichnis +unterdr�ckt werden. Es werden alle CSV-Dateien aus dem Verzeichnis \textit{Morphologie/morphologische\_Breite} geladen. \subsubsection{Flie�geschwindigkeit} Der Import der Flie�geschwindigkeit kann mit \textbf{-Dflys.backend.importer.skip.flow.velocity=true} -unterdr�ckt werden. Es werden alle Modellrechnungen aus dem Verzeichnis\\ +unterdr�ckt werden. Es werden die CSV-Dateien aus dem Verzeichnis\\ \textit{Morphologie/Geschwindigkeit\_Schubspannung/Modellrechnungen} und\\ \textit{Morphologie/Geschwindigkeit\_Schubspannung/v-Messungen} geladen. \subsubsection{Sedimentfracht} Der Import der Sedimentfracht kann mit \textbf{-Dflys.backend.importer.skip.sediment.yield=true} -unterdr�ckt werden. Es werden alle Dateien aus dem Verzeichnis +unterdr�ckt werden. Es werden die CSV-Dateien aus dem Verzeichnis \textit{Morphologie/Fracht} geladen. Dabei werden die Dateien aus dem Unterverzeichnissen \textit{Einzeljahre} und \textit{Epochen} entsprechend als -\textit{Einzeljahre} und \textit{Epochen} vermerkt. +\textit{Einzeljahre} und \textit{Epochen} gespeichert. -\subsubsection{Wasserspiegellagen f�r MINFO} -Der Import der MINFO spezifischen Wasserspiegellagen kann mit\\ +\subsubsection{Wasserspiegellagen f�r M-INFO} +Der Import der f�r M-INFO spezifischen Wasserspiegellagen kann mit\\ \textbf{-Dflys.backend.importer.skip.waterlevels=true} -unterdr�ckt werden. Es werden alle Dateien aus dem Verzeichnis +unterdr�ckt werden. Es werden die CSV-Dateien aus dem Verzeichnis \textit{Morphologie/Fixierungsanalyse/Wasserspiegellagen} geladen. -\subsubsection{Wasserspiegeldifferenzen f�r MINFO} -Der Import der Wasserspiegellagendifferenzen kann mit\\ +\subsubsection{Wasserspiegeldifferenzen f�r M-INFO} +Der Import der f�r M-INFO spezifischen Wasserspiegeldifferenzen kann mit\\ \textbf{-Dflys.backend.importer.skip.waterlevel.differences=true} -unterdr�ckt werden. Es werden alle Dateien aus dem Verzeichnis +unterdr�ckt werden. Es werden die CSV-Dateien aus dem Verzeichnis \textit{Morphologie/Fixierungsanalyse/Wasserspiegeldifferenzen} geladen. \subsubsection{Transport Abfluss Beziehung} Der Import der Daten f�r die Transport Abfluss Beziehung kann mit\\ \textbf{flys.backend.importer.skip.sq.relation=true} unterdr�ckt -werden. Es werden alle Dateien unter +werden. Es werden die CSV-Dateien unter \textit{Feststofftransport-Abfluss-Beziehung} geladen. @@ -248,7 +295,7 @@ ein regul�rer Ausdruck, der �ber das Attribut \textit{pattern} definiert wird. Die Kategorie wird im Trefferfall �ber das Attribut \textit{type} bestimmt. Treffen mehrere Regeln zu, wird die Kategorie gew�hlt, die zum ersten Treffer -geh�rt. Trifft keine Regel zu wird der Eintrag der Kategorie zugeteilt, die f�r +geh�rt. Trifft keine Regel zu, wird der Eintrag der Kategorie zugeteilt, die f�r die beinhaltende Datei als Vorgabe gilt. @@ -260,13 +307,6 @@ beschrieben, die beim Starten des Importers ber�cksichtigt werden. Folgende Einstellungen sind zwangsl�ufig an die bestehende Umgebung anzupassen: -\textbf{INFO\_GEW} -\\Diese Option muss auf eine valide *.gew Datei verweisen (bekannt aus -Desktop-FLYS). Wichtig f�r den Importer sind in dieser Datei die Zeilen, die mit -\textit{WSTDatei:} beginnen. In ihnen wird der Pfad zu der zentralen WST-Datei -des jeweiligen Gew�ssers angegeben. Alle anderen importierten Dateien werden in -ihrer Lage im Dateisystem relativ zur Lage dieser Datei betrachtet. - \textbf{BACKEND\_USER} \\Der Nutzername, der zum Verbinden zur Datenbank verwendet werden soll. @@ -300,8 +340,9 @@ Weitere Details zum Verbinden zu einer Oracle Datenbank finden Sie unter\\ -\href{http://www.orafaq.com/wiki/JDBC}{http://www.orafaq.com/wiki/JDBC}. Alle weiteren Einstellungen sind -optional anpassbar: +\href{http://www.orafaq.com/wiki/JDBC}{http://www.orafaq.com/wiki/JDBC}. + +Alle weiteren Einstellungen sind optional anpassbar: \textbf{LOG4J\_CONFIG} \\Der Fachdatenimport verwendet die externe Bibliothek \textit{Apache Log4J} zum Loggen @@ -320,10 +361,10 @@ \textbf{IMPORTER\_MAINVALUE\_TYPES} \\Diese Einstellung erlaubt die Angabe eines Textes, der aus den g�ltigen Typen -f�r Hauptwerte zusammengesetzt ist. \textit{QWTD} ist standardm��ig gesetzt. +f�r Hauptwerte zusammengesetzt ist. \textit{QWTD-} ist standardm��ig gesetzt. \textbf{IMPORTER\_ANNOTATION\_TYPES} -\\Diese Einstellung verweist auf eine Datei (relativ zum Ort der \textit{run.sh} +\\Diese Einstellung verweist auf eine Datei (relativ zum Ort der \textit{run\_hydr\_morph.sh} im Dateisystem), die die m�glichen Typen von Streckenfavoriten und deren Regeln definiert. Siehe hierzu auch Kapitel \ref{annotation-types}. @@ -333,81 +374,29 @@ \textbf{IMPORTER\_DRY\_RUN} \\Falls \textit{true} gesetzt wird, wird der Import nur simuliert. Es werden -keine Daten in die Datenbank geschrieben. Dies kann z.B.: zum Ermitteln -potentieller Dateninkonsistenzen sinnvoll sein. - -\textbf{IMPORTER\_SKIP\_GAUGES} -\\Wenn \textit{true} gesetzt ist werden keine Pegel- und Stammdaten bearbeitet. - -\textbf{IMPORTER\_SKIP\_ANNOTATIONS} -\\Wenn \textit{true} gesetzt ist werden keine Streckenfavoriten bearbeitet. - -\textbf{IMPORTER\_SKIP\_WST} -\\Wenn \textit{true} gesetzt ist werden keine WST Dateien bearbeitet. - -\textbf{IMPORTER\_SKIP\_PRFS} -\\Wenn \textit{true} gesetzt ist werden keine Querprofilspuren bearbeitet. - -\textbf{IMPORTER\_SKIP\_HYKS} -\\Wenn \textit{true} gesetzt ist werden keine HYK Dateien bearbeitet. - -\textbf{IMPORTER\_SKIP\_EXTRA\_WST} -\\Wenn \textit{true} gesetzt ist werden keine zus�tzlichen L�ngsschnitte -bearbeitet. - -\textbf{IMPORTER\_SKIP\_FIXATIONS} -\\Wenn \textit{true} gesetzt ist werden keine Fixierungen bearbeitet. - -\textbf{IMPORTER\_SKIP\_OFFICIAL\_LINES} -\\Wenn \textit{true} gesetzt ist werden keine offiziellen Linien bearbeitet. - -\textbf{IMPORTER\_SKIP\_FLOOD\_WATER} -\\Wenn \textit{true} gesetzt ist werden keine Hochwassermarken bearbeitet. +keine Daten in die Datenbank geschrieben. Die Log-Dateien k�nnen dann verwendet werden, um Fehler in den Daten vor dem Schreiben in die +Datenbank zu ermitteln. -\textbf{IMPORTER\_SKIP\_FLOOD\_PROTECTION} -\\Wenn \textit{true} gesetzt ist werden keine Hochwasserschutzanlagen -bearbeitet. - -\textbf{IMPORTER\_SKIP\_BED\_HEIGHT\_SINGLE} -\\Wenn \textit{true} gesetzt ist werden keine mittleren Sohlh�hen (Peilungen) bearbeitet. - -\textbf{IMPORTER\_SKIP\_BED\_HEIGHT\_EPOCH} -\\Wenn \textit{true} gesetzt ist werden keine mittleren Sohlh�hen (Epochen) -bearbeitet. - -\textbf{IMPORTER\_SKIP\_SEDIMENT\_DENSITY} -\\Wenn \textit{true} gesetzt ist werden keine Dateien zur Sedimentdichte -bearbeitet. - -\textbf{IMPORTER\_SKIP\_MORPHOLOGICAL\_WIDTH} -\\Wenn \textit{true} gesetzt ist wird keine morphologische Breite bearbeitet. - -\textbf{IMPORTER\_SKIP\_FLOW\_VELOCITY} -\\Wenn \textit{true} gesetzt ist werden keine Flie�geschwindigkeiten bearbeitet. - -\textbf{IMPORTER\_SKIP\_SEDIMENT\_YIELD} -\\Wenn \textit{true} gesetzt ist werden keine Sedimentfrachten bearbeitet. - -\textbf{IMPORTER\_SKIP\_WATERLEVELS} -\\Wenn \textit{true} gesetzt ist werden keine Wasserspiegellagen f�r MINFO bearbeitet. - -\textbf{IMPORTER\_SKIP\_WATERLEVEL\_DIFFERENCES} -\\Wenn \textit{true} gesetzt ist werden keine Wasserspiegellagendifferenzen f�r -MINFO bearbeitet. - -\textbf{IMPORTER\_SKIP\_SQ\_RELATION} -\\Wenn \textit{true} gesetzt ist werden keine Daten f�r die Berechnungsart -SQ-Beziehung bearbeitet. - - +Die weiteren Optionen entsprechen jenen, die in Kapitel \ref{import_data} +bereits erl�utert wurden. \subsection{Fehler und Warnungen} +Selbsterkl�rende Meldungen sind hier nicht alle aufgef�hrt. \subsubsection{Fehler} \textbf{error while parsing gew} \\Die GEW-Datei ist fehlerhaft oder konnte nicht ge�ffnet werden. +\textbf{River not yet in database. You cannot skip importing waterlevel model.} +\\\textbf{-Dflys.backend.importer.skip.wst=true} wurde verwendet, +obwohl sich das Gew�sser noch nicht in der Datenbank befindet +(siehe Kapitel \ref{import_data}). + +\textbf{Stations in 'XYZ' near line \# not ordered. File rejected.} +\\Die Stationen in einer WST-Datei sind nicht konsequent auf- oder +absteigend geordnet. Die Datei wird verworfen. + \textbf{File 'XYZ' is broken!} \\Die Datei XYZ ist inkonsistent und f�hrt zu Fehlern. @@ -426,9 +415,37 @@ \textbf{Error while storing waterlevel diff.} \\Beim Schreiben einer Wasserspiegeldifferenz trat ein Fehler auf. +\textbf{No core data file '...' found} +\\Keine \textit{Stammdaten\_Messstellen.csv} gefunden. + +\textbf{No measurement stations found at km \#} +\\F�r eine in einer SQ-Beziehungs-Datei gegebene Station liegt +keine Messstelle vor. + +\textbf{No km for measurement station: Can not reference measurement station: ...} +\\In der gegebenen Zeile einer SQ-Beziehungs-Datei liegt ist keine +Station gegeben. Damit ist keine Zuordnung zu einer Messstelle m�glich. +Die Zeile wird verworfen. + +\textbf{Incomplete SQ-relation row (missing a, b, Qmax or parameter): ...} +\\In der gegebenen Zeile einer SQ-Beziehungs-Datei liegt mindestens +ein Pflicht-Wert nicht vor. Die Zeile wird verworfen. + \textbf{Error while storing sq relation.} \\Beim Schreiben einer S(Q) Beziehung trat ein Fehler auf. +\textbf{Unknown bed height type: \#. File ignored.} +\\Die gegebene Aufnahmeart ist unbekannt. Die Datei wird ignoriert. +\\Bekannte Aufnahmearten: +\begin{itemize} +\item Querprofile +\item Fl�chenpeilung +\item Fl�chen- u. Querprofilpeilungen +\item DGM +\item TIN +\item Modell +\end{itemize} + \textbf{Error reading PRF file.} \\Beim Lesen einer PRF-Datei trat ein Fehler auf. @@ -462,7 +479,25 @@ \textbf{HYK: Error closing file.} \\Beim Schlie�en einer HYK-Datei trat ein Fehler auf. +\textbf{Null Start time will be ignored} +\\F�r ein Zeitintervall wurde keine Anfangszeit gegeben. + +\textbf{Skipping malformed w80csv line \#} +\\Die genannte Zeile einer QP-Daten-CSV-Datei wurde verworfen +(z.B.\ weil keine H�he gegeben war). + \subsubsection{Warnungen} +\textbf{No unit given. Waterlevel-model WST-file has to be imported already.} +\\Es wird keine H�henreferenz mit dazugeh�riger Einheit importiert. +Dies ist nur m�glich, wenn sich die Gew�sser-Stammdaten bereits +in der Datenbank befinden (siehe Kapitel \ref{import_data}). + +\textbf{no unit and height reference found. Using default.} +\\Aus einer WST-Datei konnte keine H�henreferenz +mit dazugeh�riger Einheit ausgelesen werden. +Als Default wird 'm �. unbekannte Referenz' verwendet. +Dies hat nur im Falle der Basis-WST-Datei einen Einfluss auf den Import. + \textbf{annotation type file 'XYZ' is not readable.} \\Die Datein XYZ kann nicht gelesen werden. @@ -475,6 +510,10 @@ \textbf{no official lines wst file found} \\Keine Datei mit amtlichen Linien gefunden. +\textbf{Invalid bwastr-id line: ...} +\\Aus einer Zeile in \textbf{BWASTR\_ID.csv} konnte kein Gew�sser bzw. +Bundeswasserstra�en-ID gelesen werden. + \textbf{cannot read fixations wst file directory} \\Das Verzeichnis mit den Fixierungen kann nicht gelesen werden. @@ -517,10 +556,14 @@ \\Eine Zeile in der Pegelg�ltigkeitsdatei hat nicht genug Spalten. \textbf{Error while parsing flow velocity values.} -\\Invalide Datenzeile in einer Datei mit einer Fliessgeschwindigkeitsmessung. +\\Invalide Datenzeile in einer Datei mit einer Flie�geschwindigkeitsmessung. \textbf{skip invalid data line: \#} -\\Invalide Datenzeile in einer Datei mit einer Fliessgeschwindigkeitsmessung. +\\Invalide Datenzeile (weniger als acht Spalten) +in einer Datei mit einer Flie�geschwindigkeitsmessung. + +\textbf{Unparseable flow velocity values: ...} +\\Invalide Werte in einer Datenzeile einer Flie�geschwindigkeitsmessung. \textbf{skip invalid waterlevel line: \#} \\Invalide Datenzeile in einer Datei mit Wasserstandsdifferenzen. @@ -550,16 +593,17 @@ \\In der eingelesenen Zeile konnte keine Zahl gefunden werden. \textbf{Unknown meta line: \#} -\\Invalide Datenzeile in einer Datei mit Sedimentdichten. +\\Meta-Informationen unbekannt. Werden ignoriert. -\textbf{Error while parsing numbers in: \#} -\\Invalide Datenzeile in einer Datei mit Sedimentdichten. +\textbf{Unparseable numbers in '...'} +\\Invalide Zahlen in einer Datenzeile in einer Datei mit Sedimentdichten. \textbf{skip invalid data line: \#} -\\Invalide Datenzeile in einer Datei mit Sedimentdichten. +\\Invalide Datenzeile in einer Datei mit Sedimentdichten wird ignoriert. -\textbf{Error while parsing numbers in \#} -\\Invalide Datenzeile in einer Datei mit Sedimentdichten. +\textbf{SDP: No km nor density given. Skip line} +\\Weder Station noch Dichte gegeben in einer Datenzeile in einer Datei mit Sedimentdichten. +Zeile wird ignoriert. \textbf{STA file is empty} \\Stammdatendatei ist leer oder hat zu wenige Zeilen. @@ -577,7 +621,7 @@ \\Die zweite Zeile ist zu kurz. \textbf{STA: parsing of the datum of the gauge failed} -\\Das Datum in der Stammdatendatei konnte nicht gelesen werden. +\\Die Station in der Stammdatendatei konnte nicht gelesen werden. \textbf{STA: 'XYZ' is not a valid long number.} \\Die Pegelnummer ist invalide. @@ -589,22 +633,45 @@ \\AEO oder Pegelnullpunkt sind invalide. \textbf{STA: value not parseable in line \#} -\\Wert ist nicht als Zahl zu interpretieren. +\\Wert ist nicht als Zahl zu interpretieren (meist Kommentare). + +\textbf{STA: Invalid date ...} +\textbf{STA: Invalid start date ...} +\textbf{STA: Invalid end date ...} +\textbf{STA: Need start date.} +\\M�gliche Datumsangabe zu Hauptwert ist kein g�ltiger Zeitraum. \textbf{PRF: cannot open file $<FILE>$} -\\Die PRF kann nicht ge�ffnet werden. +\\Die PRF-Datei kann nicht ge�ffnet werden. -\textbf{PRF: file is empty}\\ -\textbf{PRF: First line does not look like a PRF data pattern.}\\ -\textbf{PRF: premature EOF. Expected integer in line 2}\\ -\textbf{PRF: Expected $<num>$ in line 2}\\ -\textbf{PRF: invalid integer in line 2}\\ -\textbf{PRF: premature EOF. Expected pattern for km extraction}\\ -\textbf{PRF: line 4 does not look like a PRF km extraction pattern.}\\ -\textbf{PRF: premature EOF. Expected skip row count.}\\ -\textbf{PRF: line 5 is not an positive integer.}\\ +\textbf{PRF: First line does not look like a PRF data pattern.} +\\Erste Zeile entspricht nicht der PRF-Spezifikation. + +\textbf{PRF: premature EOF. Expected integer in line 2} +\\Zweite Zeile entspricht nicht der PRF-Spezifikation. + +\textbf{PRF: Expected $<num>$ in line 2} +\\Zweite Zeile entspricht nicht der PRF-Spezifikation. + +\textbf{PRF: invalid integer in line 2} +\\Zweite Zeile entspricht nicht der PRF-Spezifikation. + +\textbf{PRF: premature EOF. Expected pattern for km extraction} +\\Vierte Zeile entspricht nicht der PRF-Spezifikation. + +\textbf{PRF: line 4 does not look like a PRF km extraction pattern.} +\\Vierte Zeile entspricht nicht der PRF-Spezifikation. + +\textbf{PRF: premature EOF. Expected skip row count.} +\\F�nfte Zeile entspricht nicht der PRF-Spezifikation. + +\textbf{PRF: line 5 is not an positive integer.} +\\F�nfte Zeile entspricht nicht der PRF-Spezifikation. + \textbf{PRF: cannot extract km in line \#} -\\Das PRF-Format ist komplex. Bei oben genannten Fehlern sollten weitere +\\Der gegebenen Zeile konnte die Station nicht entnommen werden. + +Das PRF-Format ist komplex! Bei oben genannten Fehlern sollten ggf. weitere Information zur genaueren Analyse herangezogen werden. \textbf{cannot access WST file $FILE$} @@ -623,7 +690,7 @@ \\Invalider Q-Bereich \textbf{skip invalid waterlevel line: \#} -\\Ung�ltige Wasserstandslinie +\\Ung�ltige Wasserstands-Zeile. \textbf{Error while parsing number values: \#} \\Ung�ltige Zahlenwerte. @@ -650,7 +717,7 @@ \\Unterverzeichnis konnte nicht durchsucht werden. \textbf{BHP: Meta line did not match any known type: \#} -\\Unbekannter Typ. +\\Meta-Informationen unbekannt. Werden ignoriert. \textbf{BHP: Error while parsing timeinterval!} \\Ung�ltiges Zeitinterval. @@ -664,13 +731,20 @@ \textbf{BHP: Error while parsing range!} \\Bereichsangabe fehlerhaft. +\textbf{BHP: Could not parse sounding width in line '...'. -$>$ Set default value '0'} +\\Peilbreite in gegebener Zeile wurde nicht als g�ltige Zahl erkannt. Setze 0. + +\textbf{Unparseable number in data row: \#} +\\In der gegebenen Zeile wurde eine Zahl erwartet, +es konnte aber an entsprechender Stelle nichts als solche gelesen werden. + \textbf{MWP: Unknown meta line: \#} -\\Meta-Informationen ung�ltig. +\\Meta-Informationen unbekannt. Werden ignoriert. \textbf{MWP: skip invalid data line: \#} \\Ung�ltige Datenzeile wurde �bersprungen. -\textbf{MWP: Error while parsing numbers in \#} +\textbf{MWP: unparseable number in data row: \#} \\Falsche Zahlenformat. \textbf{ANNCLASS: rule has no name} @@ -688,8 +762,29 @@ \textbf{BSP: Error while parsing data row.} \\Ung�ltige Datenzeile. +\textbf{duplicate station '...': -$>$ ignored} +\\Duplikat einer Station. Wird ignoriert. + +\textbf{BSP: unparseable height ...} +\\Nicht lesbare Sohlh�he in einer Sohlh�hen-Datei. + +\textbf{BSP: unparseable uncertainty value ...} +\\Nicht lesbare Unsicherheit in einer Sohlh�hen-Datei. + +\textbf{BSP: unparseable data gap ...} +\\Nicht lesbare Datenl�cke in einer Sohlh�hen-Datei. + +\textbf{BSP: unparseable sounding width ...} +\\Nicht lesbare Peilbreite in einer Sohlh�hen-Datei. + +\textbf{BSP: unparseable width ...} +\\Nicht lesbare Breite in einer Sohlh�hen-Datei. + +\textbf{BSP: unparseable value in data row.} +\\Nicht lesbare Werte in einer Sohlh�hen-Datei. + \textbf{SYP: Unknown meta line: \#} -\\Ung�ltige Metadatenzeile. +\\Meta-Informationen unbekannt. Werden ignoriert. \textbf{SYP: skip invalid data line \#} \\Ung�ltige Datenzeile wurde �bersprungen. @@ -712,9 +807,12 @@ \textbf{WST: invalid number.} \\Ung�ltige Zahl. -\textbf{WST: km $km$ ($<Zeile>$) found more than once. $->$ ignored.} +\textbf{WST: km $km$ ($<Zeile>$) found more than once. -$>$ ignored.} \\Ein Kilometer ist doppelt in einer WST-Datei enthalten. +\textbf{WST: String ... could not be interpreted as valid timestamp} +\\In einer Kopfzeile einer WST-Datei konnte ein Eintrag nicht als Datum erkannt werden. + \textbf{HYK: zone coordinates swapped in line \#} \\Flie�zonenkordinaten wurden in umgekehrter Reihenfolge angeben. @@ -727,6 +825,9 @@ \textbf{ISQ: Cannot determine sq relation without time interval.} \\Einer S(Q)-Beziehung ist keine zeitliche G�ltigkeit zugeordnet. +\textbf{Unparseable ... in sq relation row: ...} +\\Der gegebene Wert in der gegebenen Zeile konnte nicht als Zahl gelesen werden. + \textbf{IWD: skip invalid waterlevel difference - no unit set!} \\Wasserstandsdifferenz hat keine Einheit. @@ -739,6 +840,20 @@ \textbf{BHE: Skip file - invalid km range.} \\Kilometerbereich ung�ltig. +\textbf{No upper value for range found in ...} +\textbf{No range found for measurement station '...'} +\\Streckeng�ltigkeit einer Messstelle in \textit{Stammdaten\_Messstellen.csv} ung�ltig. + +\textbf{invalid gauge found: ...} +\\Kein g�ltiger Pegel zur Messstelle gegeben. + +\textbf{Found invalid observation time ...} +\textbf{Observation time date invalid: ...} +\textbf{Observation time date not parseable: ...} +\\Kein g�ltiger zeitlicher Bezug zur Messstelle gegeben. + +\textbf{No gauge found for measurement station '...'} +\\Der in \textit{Stammdaten\_Messstellen.csv} gegebene Pegel existiert nicht in der Datenbank. \subsection{Hinweise zum Betrieb} Aufgrund des hohen Speicherverbrauchs des Importers wird empfohlen, der JVM @@ -760,9 +875,26 @@ gestartet. Dazu f�hren folgenden Befehl aus:\\ \begin{lstlisting} - ./run_hydr_morph.sh + ./run_hydr_morph.sh pfad/zur/beispiel.gew \end{lstlisting} +\textbf{INFO\_GEW} +Der �bergebene Pfad muss auf eine valide *.gew Datei verweisen (bekannt aus +Desktop-FLYS). Wichtig f�r den Importer sind in dieser Datei die Zeilen, die mit +\textit{WSTDatei:} beginnen. In ihnen wird der Pfad zu der zentralen WST-Datei +des jeweiligen Gew�ssers angegeben. Alle anderen importierten Dateien werden in +ihrer Lage im Dateisystem relativ zur Lage dieser Datei betrachtet. +Ebenfalls wichtig ist die Zeile beginnend mit \textit{Gew�sser:} +in der der Name des Gew�ssers festgelegt wird. Nachdem der Prompt der Konsole zur�ckkehrt, ist der Import abgeschlossen oder es ist ein Fehler aufgetreten. Weitere Informationen entnehmen Sie der Log-Datei. +Um einen Gew�sserdatensatz in einem Durchlauf (inkl.\ Geodaten) +zu importieren, kann auch das Skript \textit{import\_river.sh} verwendet werden. + +Details zur Verwendung erhalten Sie auf der Kommandozeile mit +\begin{lstlisting} + ./import_river.sh --help +\end{lstlisting} +Alternativ k�nnen auch in diesem Skript einige Variablen +(\textit{DEFAULT\_*}) angepasst werden.
--- a/backend/doc/documentation/de/importer-manual.tex Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/documentation/de/importer-manual.tex Wed Oct 16 13:03:13 2013 +0200 @@ -26,9 +26,9 @@ % Document DATE and VERSION % set these values when releasing a new version -\newcommand{\documentdate}{19. Februar 2013} -\newcommand{\documentversion}{1.1} -\newcommand{\documentrevision}{rev5062} +\newcommand{\documentdate}{\today} +\newcommand{\documentversion}{1.2} +\newcommand{\documentrevision}{rev6811} \newcommand{\documentID}{importer-manual.tex} %----------------------------------------------
--- a/backend/doc/documentation/de/overview.tex Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/documentation/de/overview.tex Wed Oct 16 13:03:13 2013 +0200 @@ -2,8 +2,7 @@ Diese Dokumentation beschreibt die von Intevation entwickelten Werkzeuge zum Importieren der hydrologischen, morphologischen und geod�tischen Daten der BfG. -Die im Folgenden\\ beschriebenen Werkzeuge zum Importieren der fachlichen und -geod�tischen Daten sind speziell auf das Verzeichnissystem der BfG ausgerichtet. +Die im Folgenden beschriebenen Werkzeuge zum Importieren der Daten sind speziell auf das Verzeichnissystem der BfG ausgerichtet. Dabei wird angenommen, dass sich das Verzeichnis eines Gew�ssers auf oberster Ebene in drei Unterverzeichnisse aufgliedert: @@ -69,7 +68,7 @@ \end{lstlisting} \subsubsection{Java} -Der flys-importer ben�tigt Java Version 6 um diese zu installieren laden Sie +Der flys-importer ben�tigt Java Version 6. Um diese zu installieren laden Sie bitte von \url{http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html} eine aktulle Java Version als -rpm.bin herunter. Zum Beispiel: jdk-6u41-linux-x64-rpm.bin @@ -95,9 +94,10 @@ \begin{lstlisting} zypper ar http://download.opensuse.org/repositories/home:/intevation:/bfg/SLE_11/ "intevation:bfg" rpm --import http://download.opensuse.org/repositories/home:/intevation:/bfg/SLE_11/repodata/repomd.xml.key - zypper ref # Paketlist neu laden - zypper in python libgeos0 libproj0 proj netcdf libnetcdf4 \ - xerces-c libxerces-c-3_0 unixODBC postgresql-libs + zypper ref # Paketliste neu laden + zypper in python libgeos0 libproj0 proj netcdf \ + libnetcdf4 xerces-c libxerces-c-3_0 unixODBC \ + postgresql-libs zypper mr -d "intevation:bfg" zypper ref # Paketliste neu laden \end{lstlisting} @@ -188,8 +188,8 @@ f�hren Sie im Importer Verzeichnis folgende Befehle aus: \begin{lstlisting} -export LD_LIBRARY_PATH=opt/instantclient\_11\_2/lib:$LD_LIBRARY_PATH -export PATH=opt/instantclient\_11\_2:$PATH +export LD_LIBRARY_PATH=opt/instantclient_11_2/lib:$LD_LIBRARY_PATH +export PATH=opt/instantclient_11_2:$PATH \end{lstlisting} Damit alle in den UTF8-codierten SQL-Skripten vorhandenen Zeichen (also z.B.\ @@ -200,13 +200,30 @@ export NLS_LANG=.AL32UTF8 \end{lstlisting} -Nun erstellen Sie das Schema: +Nun verbinden Sie sich mit der Datenbank +\begin{lstlisting} + sqlplus user/password@connect_identifier +\end{lstlisting} + +und erstellen das Schema: \begin{lstlisting} - sqlplus benutzername/passwort @schema/oracle.sql - sqlplus benutzername/passwort @schema/oracle-minfo.sql - sqlplus benutzername/passwort @schema/oracle-spatial.sql - sqlplus benutzername/passwort @schema/oracle-spatial_idx.sql + @schema/oracle.sql + @schema/oracle-minfo.sql + @schema/oracle-spatial.sql + @schema/oracle-spatial_idx.sql \end{lstlisting} +Hierbei ist +\begin{lstlisting} +user/password@connect_identifier +\end{lstlisting} +so etwas wie +\begin{lstlisting} +ICH/geheim@127.0.0.1:1234/DB.TEST.FIRMA.DE +\end{lstlisting} +Um sqlplus zu verlassen verwenden Sie +\begin{lstlisting} +exit +\end{lstlisting}
--- a/backend/doc/documentation/de/title.tex Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/documentation/de/title.tex Wed Oct 16 13:03:13 2013 +0200 @@ -44,6 +44,7 @@ {\bf Authors}:\\ Ingo Weinzierl$<$ingo.weinzierl@intevation.de$>$\\ Sascha Teichmann $<$sascha.teichmann@intevation.de$>$\\ + Tom Gottfried $<$tom.gottfried@intevation.de$>$\\ {\bf Intevation GmbH},\\ Neuer Graben 17, 49074 Osnabr�ck, Germany\\ Tel: ++49 541 33 50 83 - 0 \\
--- a/backend/doc/schema/oracle-drop-minfo.sql Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/schema/oracle-drop-minfo.sql Wed Oct 16 13:03:13 2013 +0200 @@ -27,14 +27,6 @@ ALTER TABLE sediment_yield DROP CONSTRAINT fk_sy_time_interval_id; ALTER TABLE sediment_yield DROP CONSTRAINT fk_sy_river_id; ALTER TABLE sediment_yield_values DROP CONSTRAINT fk_syv_sediment_yield_id; -ALTER TABLE waterlevel DROP CONSTRAINT fk_w_river_id; -ALTER TABLE waterlevel DROP CONSTRAINT fk_w_unit_id; -ALTER TABLE waterlevel_q_range DROP CONSTRAINT fk_wqr_waterlevel_id; -ALTER TABLE waterlevel_values DROP CONSTRAINT fk_wv_waterlevel_q_range_id; -ALTER TABLE waterlevel_difference DROP CONSTRAINT fk_wd_river_id; -ALTER TABLE waterlevel_difference DROP CONSTRAINT fk_wd_unit_id; -ALTER TABLE waterlevel_difference_column DROP CONSTRAINT fk_wdc_difference_id; -ALTER TABLE waterlevel_difference_values DROP CONSTRAINT fk_wdv_column_id; ALTER TABLE sq_relation DROP CONSTRAINT fk_sqr_tinterval_id; ALTER TABLE sq_relation DROP CONSTRAINT fk_sqr_river_id; ALTER TABLE sq_relation_value DROP CONSTRAINT fk_sqr_id; @@ -44,37 +36,30 @@ ALTER TABLE measurement_station DROP CONSTRAINT fk_ms_reference_gauge_id; ALTER TABLE measurement_station DROP CONSTRAINT fk_ms_observation_timerange_id; -DROP TABLE bed_height_type; -DROP TABLE location_system; -DROP TABLE elevation_model; -DROP TABLE bed_height_single; -DROP TABLE bed_height_single_values; -DROP TABLE bed_height_epoch_values; -DROP TABLE bed_height_epoch; -DROP TABLE depths; -DROP TABLE sediment_density; -DROP TABLE sediment_density_values; -DROP TABLE morphologic_width; -DROP TABLE morphologic_width_values; -DROP TABLE discharge_zone; -DROP TABLE flow_velocity_model; -DROP TABLE flow_velocity_model_values; -DROP TABLE flow_velocity_measurements; -DROP TABLE flow_velocity_measure_values; -DROP TABLE grain_fraction; -DROP TABLE sediment_yield; -DROP TABLE sediment_yield_values; -DROP TABLE waterlevel; -DROP TABLE waterlevel_q_range; -DROP TABLE waterlevel_values; -DROP TABLE waterlevel_difference; -DROP TABLE waterlevel_difference_column; -DROP TABLE waterlevel_difference_values; -DROP TABLE measurement_station; -DROP TABLE sq_relation_value; -DROP TABLE sq_relation; +DROP TABLE bed_height_type PURGE; +DROP TABLE location_system PURGE; +DROP TABLE elevation_model PURGE; +DROP TABLE bed_height_single PURGE; +DROP TABLE bed_height_single_values PURGE; +DROP TABLE bed_height_epoch_values PURGE; +DROP TABLE bed_height_epoch PURGE; +DROP TABLE depths PURGE; +DROP TABLE sediment_density PURGE; +DROP TABLE sediment_density_values PURGE; +DROP TABLE morphologic_width PURGE; +DROP TABLE morphologic_width_values PURGE; +DROP TABLE discharge_zone PURGE; +DROP TABLE flow_velocity_model PURGE; +DROP TABLE flow_velocity_model_values PURGE; +DROP TABLE flow_velocity_measurements PURGE; +DROP TABLE flow_velocity_measure_values PURGE; +DROP TABLE grain_fraction PURGE; +DROP TABLE sediment_yield PURGE; +DROP TABLE sediment_yield_values PURGE; +DROP TABLE measurement_station PURGE; +DROP TABLE sq_relation_value PURGE; +DROP TABLE sq_relation PURGE; -DROP SEQUENCE BED_HEIGHT_TYPE_SEQ; DROP SEQUENCE LOCATION_SYSTEM_SEQ; DROP SEQUENCE ELEVATION_MODEL_SEQ; DROP SEQUENCE BED_HEIGHT_SINGLE_ID_SEQ; @@ -94,11 +79,6 @@ DROP SEQUENCE GRAIN_FRACTION_ID_SEQ; DROP SEQUENCE SEDIMENT_YIELD_ID_SEQ; DROP SEQUENCE SEDIMENT_YIELD_VALUES_ID_SEQ; -DROP SEQUENCE WATERLEVEL_ID_SEQ; -DROP SEQUENCE WATERLEVEL_Q_RANGES_ID_SEQ; -DROP SEQUENCE WATERLEVEL_VALUES_ID_SEQ; -DROP SEQUENCE WATERLEVEL_DIFFERENCE_ID_SEQ; -DROP SEQUENCE WATERLEVEL_DIFF_COLUMN_ID_SEQ; -DROP SEQUENCE WATERLEVEL_DIFF_VALUES_ID_SEQ; +DROP SEQUENCE MEASUREMENT_STATION_ID_SEQ; DROP SEQUENCE SQ_RELATION_ID_SEQ; DROP SEQUENCE SQ_RELATION_VALUES_ID_SEQ;
--- a/backend/doc/schema/oracle-drop-spatial.sql Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/schema/oracle-drop-spatial.sql Wed Oct 16 13:03:13 2013 +0200 @@ -1,88 +1,85 @@ DROP TRIGGER river_axes_trigger; -DROP TABLE river_axes; +DROP TABLE river_axes PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'RIVER_AXES'; DROP SEQUENCE RIVER_AXES_ID_SEQ; DROP TRIGGER river_axes_km_trigger; -DROP TABLE river_axes_km; +DROP TABLE river_axes_km PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'RIVER_AXES_KM'; DROP SEQUENCE RIVER_AXES_KM_ID_SEQ; DROP TRIGGER cross_section_tracks_trigger; -DROP TABLE cross_section_tracks; +DROP TABLE cross_section_tracks PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'CROSS_SECTION_TRACKS'; DROP SEQUENCE CROSS_SECTION_TRACKS_ID_SEQ; DROP TRIGGER buildings_trigger; -DROP TABLE buildings; +DROP TABLE buildings PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'BUILDINGS'; DROP SEQUENCE BUILDINGS_ID_SEQ; DROP TRIGGER fixpoints_trigger; -DROP TABLE fixpoints; +DROP TABLE fixpoints PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'FIXPOINTS'; DROP SEQUENCE FIXPOINTS_ID_SEQ; DROP TRIGGER floodplain_trigger; -DROP TABLE floodplain; +DROP TABLE floodplain PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'FLOODPLAIN'; DROP SEQUENCE FLOODPLAIN_ID_SEQ; DROP TRIGGER dem_trigger; -DROP TABLE dem; +DROP TABLE dem PURGE; DROP SEQUENCE DEM_ID_SEQ; -DROP TRIGGER catchment_trigger; -DROP TABLE catchment; -DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'CATCHMENT'; -DROP SEQUENCE CATCHMENT_ID_SEQ; - DROP TRIGGER hws_lines_trigger; -DROP TABLE hws_lines; +DROP TABLE hws_lines PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'HWS_LINES'; DROP SEQUENCE HWS_LINES_ID_SEQ; DROP TRIGGER hws_points_trigger; -DROP TABLE hws_points; +DROP TABLE hws_points PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'HWS_POINTS'; DROP SEQUENCE HWS_POINTS_ID_SEQ; DROP TRIGGER floodmaps_trigger; -DROP TABLE floodmaps; +DROP TABLE floodmaps PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'FLOODMAPS'; DROP SEQUENCE FLOODMAPS_ID_SEQ; DROP TRIGGER hydr_boundaries_trigger; -DROP TABLE hydr_boundaries; +DROP TABLE hydr_boundaries PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'HYDR_BOUNDARIES'; DROP SEQUENCE HYDR_BOUNDARIES_ID_SEQ; DROP TRIGGER hydr_boundaries_poly_trigger; -DROP TABLE hydr_boundaries_poly; +DROP TABLE hydr_boundaries_poly PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'HYDR_BOUNDARIES_POLY'; DROP SEQUENCE HYDR_BOUNDARIES_POLY_ID_SEQ; DROP TRIGGER gauge_location_trigger; -DROP TABLE gauge_location; +DROP TABLE gauge_location PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'GAUGE_LOCATION'; DROP SEQUENCE GAUGE_LOCATION_ID_SEQ; DROP TRIGGER jetties_trigger; -DROP TABLE jetties; +DROP TABLE jetties PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'JETTIES'; DROP SEQUENCE JETTIES_ID_SEQ; DROP TRIGGER flood_marks_trigger; -DROP TABLE flood_marks; +DROP TABLE flood_marks PURGE; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'FLOOD_MARKS'; DROP SEQUENCE FLOOD_MARKS_ID_SEQ; -DROP TABLE hws_kinds; -DROP TABLE sectie_kinds; -DROP TABLE sobek_kinds; -DROP TABLE fed_states; -DROP TABLE axis_kinds; -DROP TABLE boundary_kinds; -DROP TABLE cross_section_track_kinds; -DROP TABLE floodplain_kinds; -DROP TABLE building_kinds; +DROP TABLE hws_kinds PURGE; +DROP TABLE sectie_kinds PURGE; +DROP TABLE sobek_kinds PURGE; +DROP TABLE fed_states PURGE; +DROP TABLE axis_kinds PURGE; +DROP TABLE boundary_kinds PURGE; +DROP TABLE cross_section_track_kinds PURGE; +DROP TABLE floodplain_kinds PURGE; +DROP TABLE floodmap_kinds PURGE; +DROP TABLE building_kinds PURGE; +DROP TABLE jetty_kinds PURGE;
--- a/backend/doc/schema/oracle-drop.sql Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/schema/oracle-drop.sql Wed Oct 16 13:03:13 2013 +0200 @@ -20,6 +20,8 @@ ALTER TABLE main_values DROP CONSTRAINT cMainValuesGauges; ALTER TABLE main_values DROP CONSTRAINT cMainValuesNamedMainValues; ALTER TABLE named_main_values DROP CONSTRAINT cNamedMainValuesMainValueTypes; +ALTER TABLE official_lines DROP CONSTRAINT cOffLinesNamedMainValues; +ALTER TABLE official_lines DROP CONSTRAINT cOffLinesWstColumns; ALTER TABLE ranges DROP CONSTRAINT cRangesRivers; ALTER TABLE rivers DROP CONSTRAINT cRiversUnits; ALTER TABLE wst_column_q_ranges DROP CONSTRAINT cWstColumnQRangesWstColums; @@ -30,36 +32,36 @@ ALTER TABLE wst_q_ranges DROP CONSTRAINT cWstQRangesRanges; ALTER TABLE wsts DROP CONSTRAINT cWstsRivers; ALTER TABLE wsts DROP CONSTRAINT cWstsWstKinds; -DROP TABLE annotation_types; -DROP TABLE annotations; -DROP TABLE attributes; -DROP TABLE cross_section_lines; -DROP TABLE cross_section_points; -DROP TABLE cross_sections; -DROP TABLE discharge_table_values; -DROP TABLE discharge_tables; -DROP TABLE edges; -DROP TABLE gauges; -DROP TABLE hyk_entries; -DROP TABLE hyk_flow_zone_types; -DROP TABLE hyk_flow_zones; -DROP TABLE hyk_formations; -DROP TABLE hyks; -DROP TABLE main_value_types; -DROP TABLE main_values; -DROP TABLE named_main_values; -DROP TABLE positions; -DROP TABLE ranges; -DROP TABLE rivers; -DROP TABLE time_intervals; -DROP TABLE units; -DROP TABLE wst_column_q_ranges; -DROP TABLE wst_column_values; -DROP TABLE wst_columns; -DROP TABLE wst_q_ranges; -DROP TABLE official_lines; -DROP TABLE wsts; -DROP TABLE wst_kinds; +DROP TABLE annotation_types PURGE; +DROP TABLE annotations PURGE; +DROP TABLE attributes PURGE; +DROP TABLE cross_section_lines PURGE; +DROP TABLE cross_section_points PURGE; +DROP TABLE cross_sections PURGE; +DROP TABLE discharge_table_values PURGE; +DROP TABLE discharge_tables PURGE; +DROP TABLE edges PURGE; +DROP TABLE gauges PURGE; +DROP TABLE hyk_entries PURGE; +DROP TABLE hyk_flow_zone_types PURGE; +DROP TABLE hyk_flow_zones PURGE; +DROP TABLE hyk_formations PURGE; +DROP TABLE hyks PURGE; +DROP TABLE main_value_types PURGE; +DROP TABLE main_values PURGE; +DROP TABLE named_main_values PURGE; +DROP TABLE positions PURGE; +DROP TABLE ranges PURGE; +DROP TABLE rivers PURGE; +DROP TABLE time_intervals PURGE; +DROP TABLE units PURGE; +DROP TABLE wst_column_q_ranges PURGE; +DROP TABLE wst_column_values PURGE; +DROP TABLE wst_columns PURGE; +DROP TABLE wst_q_ranges PURGE; +DROP TABLE official_lines PURGE; +DROP TABLE wsts PURGE; +DROP TABLE wst_kinds PURGE; DROP SEQUENCE ANNOTATION_TYPES_ID_SEQ; DROP SEQUENCE ANNOTATIONS_ID_SEQ; DROP SEQUENCE ATTRIBUTES_ID_SEQ;
--- a/backend/doc/schema/oracle-minfo.sql Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/schema/oracle-minfo.sql Wed Oct 16 13:03:13 2013 +0200 @@ -85,12 +85,12 @@ CREATE TABLE bed_height_single_values ( id NUMBER(38,0) NOT NULL, bed_height_single_id NUMBER(38,0) NOT NULL, - station NUMBER(38,2) NOT NULL, - height NUMBER(38,2), - uncertainty NUMBER(38,2), - data_gap NUMBER(38,2), - sounding_width NUMBER(38,2), - width NUMBER(38,2), + station DOUBLE PRECISION NOT NULL, + height DOUBLE PRECISION, + uncertainty DOUBLE PRECISION, + data_gap DOUBLE PRECISION, + sounding_width DOUBLE PRECISION, + width DOUBLE PRECISION, PRIMARY KEY(id), UNIQUE (station, bed_height_single_id), CONSTRAINT fk_bed_single_values_parent FOREIGN KEY (bed_height_single_id) REFERENCES bed_height_single(id) ON DELETE CASCADE @@ -179,8 +179,8 @@ river_id NUMBER(38,0) NOT NULL, gauge_name VARCHAR(64) NOT NULL, -- this is not very proper, but there are gauges with no db instance value NUMBER(38,3) NOT NULL, - lower_discharge VARCHAR(16) NOT NULL, - upper_discharge VARCHAR(16), + lower_discharge VARCHAR(64) NOT NULL, + upper_discharge VARCHAR(64), PRIMARY KEY(id), CONSTRAINT fk_dz_river_id FOREIGN KEY (river_id) REFERENCES rivers(id) ON DELETE CASCADE ); @@ -247,7 +247,7 @@ name VARCHAR(64) NOT NULL, lower NUMBER(38,3), upper NUMBER(38,3), - PRIMARY KEY (id), + PRIMARY KEY (id) );
--- a/backend/doc/schema/oracle-spatial.sql Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/schema/oracle-spatial.sql Wed Oct 16 13:03:13 2013 +0200 @@ -1,4 +1,4 @@ -WHENEVER SQLERROR EXIT; +--WHENEVER SQLERROR EXIT; CREATE TABLE axis_kinds( id NUMBER PRIMARY KEY NOT NULL, @@ -14,7 +14,7 @@ OGR_FID NUMBER(38), GEOM MDSYS.SDO_GEOMETRY, river_id NUMBER(38) REFERENCES rivers(id) ON DELETE CASCADE, - kind_id NUMBER(38) REFERENCES axis_kinds(id) NOT NULL DEFAULT 0, + kind_id NUMBER(38) DEFAULT 0 NOT NULL REFERENCES axis_kinds(id), name VARCHAR(64), path VARCHAR(256), ID NUMBER PRIMARY KEY NOT NULL @@ -62,7 +62,7 @@ OGR_FID NUMBER(38), GEOM MDSYS.SDO_GEOMETRY, river_id NUMBER(38) REFERENCES rivers(id) ON DELETE CASCADE, - kind_id NUMBER(38) REFERENCES cross_section_track_kinds(id) NOT NULL DEFAULT 0, + kind_id NUMBER(38) DEFAULT 0 NOT NULL REFERENCES cross_section_track_kinds(id), km NUMBER(38,12) NOT NULL, z NUMBER(38,12) DEFAULT 0 NOT NULL, name VARCHAR(64), @@ -145,7 +145,7 @@ OGR_FID NUMBER(38), GEOM MDSYS.SDO_GEOMETRY, river_id NUMBER(38) REFERENCES rivers(id) ON DELETE CASCADE, - kind_id NUMBER(38) REFERENCES floodplain_kinds(id) NOT NULL DEFAULT 0, + kind_id NUMBER(38) DEFAULT 0 NOT NULL REFERENCES floodplain_kinds(id), name VARCHAR(64), path VARCHAR(256), ID NUMBER PRIMARY KEY NOT NULL @@ -165,7 +165,7 @@ ID NUMBER PRIMARY KEY NOT NULL, river_id NUMBER(38) REFERENCES rivers(id) ON DELETE CASCADE, name VARCHAR(64), - range_id NUMBER(38) REFERENCES ranges(id), + range_id NUMBER(38) REFERENCES ranges(id) ON DELETE CASCADE, time_interval_id NUMBER(38) REFERENCES time_intervals(id), projection VARCHAR(32), elevation_state VARCHAR(32),
--- a/backend/doc/schema/oracle.sql Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/schema/oracle.sql Wed Oct 16 13:03:13 2013 +0200 @@ -27,17 +27,18 @@ CREATE TABLE attributes ( id NUMBER(38,0) NOT NULL, - value VARCHAR2(255) NOT NULL UNIQUE, + value VARCHAR2(255) UNIQUE, primary key (id) ); - +-- value can not be NOT NULL in Oracle: +-- '' is needed here and silently converted to NULL in Oracle -- CROSS_SECTION_LINES CREATE SEQUENCE CROSS_SECTION_LINES_ID_SEQ; CREATE TABLE cross_section_lines ( id NUMBER(38,0) NOT NULL, - km NUMBER(38,2) NOT NULL, + km NUMBER(38,5) NOT NULL, cross_section_id NUMBER(38,0) NOT NULL, PRIMARY KEY (id), UNIQUE (km, cross_section_id) @@ -53,7 +54,7 @@ x NUMBER(38,2) NOT NULL, y NUMBER(38,2) NOT NULL, cross_section_line_id NUMBER(38,0) NOT NULL, - PRIMARY KEY (id), + PRIMARY KEY (id) ); @@ -94,7 +95,7 @@ id NUMBER(38,0) NOT NULL, description VARCHAR2(255) NOT NULL, bfg_id VARCHAR2(50), - kind NUMBER(38,0) NOT NULL DEFAULT 0, + kind NUMBER(38,0) DEFAULT 0 NOT NULL, gauge_id NUMBER(38,0) NOT NULL, time_interval_id NUMBER(38,0), PRIMARY KEY (id), @@ -121,9 +122,9 @@ aeo NUMBER(38,2) NOT NULL, datum NUMBER(38,2) NOT NULL, name VARCHAR2(255) NOT NULL, - station NUMBER(38,2) NOT NULL, + station NUMBER(38,4) NOT NULL, official_number NUMBER(38,0), - range_id NUMBER(38,0) NOT NULL, + range_id NUMBER(38,0), -- TODO: remove river id here because range_id references river already river_id NUMBER(38,0) NOT NULL, PRIMARY KEY (id), @@ -215,8 +216,6 @@ gauge_id NUMBER(38,0) NOT NULL, named_value_id NUMBER(38,0) NOT NULL, time_interval_id NUMBER(38,0), - - -- TODO: better checks UNIQUE (gauge_id, named_value_id, time_interval_id), PRIMARY KEY (id) ); @@ -252,7 +251,8 @@ b NUMBER(38,10), river_id NUMBER(38,0), UNIQUE (river_id, a, b), - PRIMARY KEY (id) + PRIMARY KEY (id), + CHECK (a < b) ); @@ -263,7 +263,7 @@ CREATE TABLE rivers ( id NUMBER(38,0) NOT NULL, official_number NUMBER(38,0), - km_up NUMBER(38,0) NOT NULL DEFAULT 0, + km_up NUMBER(38,0) DEFAULT 0 NOT NULL, name VARCHAR2(255) NOT NULL UNIQUE, wst_unit_id NUMBER(38,0) NOT NULL, PRIMARY KEY (id) @@ -325,7 +325,8 @@ id NUMBER(38,0) NOT NULL, description VARCHAR2(255), name VARCHAR2(255) NOT NULL, - position NUMBER(38,0) NOT NULL DEFAULT 0, + source VARCHAR(256), + position NUMBER(38,0) DEFAULT 0 NOT NULL, time_interval_id NUMBER(38,0), wst_id NUMBER(38,0) NOT NULL, UNIQUE (wst_id, name), @@ -416,7 +417,7 @@ ALTER TABLE wst_column_q_ranges ADD CONSTRAINT cWstColumnQRangesWstQRanges FOREIGN KEY (wst_q_range_id) REFERENCES wst_q_ranges ON DELETE CASCADE; ALTER TABLE wst_columns ADD CONSTRAINT cWstColumnsWsts FOREIGN KEY (wst_id) REFERENCES wsts ON DELETE CASCADE; ALTER TABLE wst_column_values ADD CONSTRAINT cWstColumnValuesWstColumns FOREIGN KEY (wst_column_id) REFERENCES wst_columns ON DELETE CASCADE; -ALTER TABLE wst_q_ranges ADD CONSTRAINT cWstQRangesRanges FOREIGN KEY (range_id) REFERENCES RANGES ON LETE CASCADE; +ALTER TABLE wst_q_ranges ADD CONSTRAINT cWstQRangesRanges FOREIGN KEY (range_id) REFERENCES RANGES ON DELETE CASCADE; ALTER TABLE wsts ADD CONSTRAINT cWstsRivers FOREIGN KEY (river_id) REFERENCES rivers ON DELETE CASCADE; ALTER TABLE wsts ADD CONSTRAINT cWstsWstKinds FOREIGN KEY (kind) REFERENCES wst_kinds;
--- a/backend/doc/schema/postgresql-minfo.sql Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/schema/postgresql-minfo.sql Wed Oct 16 13:03:13 2013 +0200 @@ -179,8 +179,8 @@ river_id int NOT NULL, gauge_name VARCHAR(64) NOT NULL, -- this is not very proper, but there are gauges with no db instance value NUMERIC NOT NULL, - lower_discharge VARCHAR(16) NOT NULL, - upper_discharge VARCHAR(16), + lower_discharge VARCHAR(64) NOT NULL, + upper_discharge VARCHAR(64), PRIMARY KEY(id), CONSTRAINT fk_dz_river_id FOREIGN KEY (river_id) REFERENCES rivers(id) ON DELETE CASCADE ); @@ -247,7 +247,7 @@ name VARCHAR(64) NOT NULL, lower NUMERIC, upper NUMERIC, - PRIMARY KEY (id), + PRIMARY KEY (id) );
--- a/backend/doc/schema/postgresql-setup.sh Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/schema/postgresql-setup.sh Wed Oct 16 13:03:13 2013 +0200 @@ -11,9 +11,12 @@ createuser -S -D -R $1 createdb $1 createlang plpgsql $1 -# Appears e.g. as /usr/share/postgresql/contrib/postgis-1.5/ on other systems. -psql -d $1 -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql -psql -d $1 -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql +# Path appears e.g. as /usr/share/postgresql/contrib/postgis-1.5/ on some systems, +# /usr/share/postgresql/8.4/contrib/postgis-1.5/ on others +POST_INIT_DIR=`find /usr/share/postgresql/ -name spatial_ref_sys.sql | sed -n '1p'` +POST_INIT_DIR=`dirname $POST_INIT_DIR` +psql -d $1 -f $POST_INIT_DIR/postgis.sql +psql -d $1 -f $POST_INIT_DIR/spatial_ref_sys.sql psql -d $1 -c "ALTER USER $1 WITH PASSWORD '$1';" psql -d $1 -c "GRANT ALL ON geometry_columns TO $1; GRANT ALL ON geography_columns TO $1; GRANT ALL ON spatial_ref_sys TO $1;"
--- a/backend/doc/schema/postgresql-spatial.sql Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/schema/postgresql-spatial.sql Wed Oct 16 13:03:13 2013 +0200 @@ -123,7 +123,7 @@ id int PRIMARY KEY NOT NULL, river_id int REFERENCES rivers(id) ON DELETE CASCADE, name VARCHAR(64), - range_id INT REFERENCES ranges(id), + range_id INT REFERENCES ranges(id) ON DELETE CASCADE, time_interval_id INT REFERENCES time_intervals(id), projection VARCHAR(32), srid int NOT NULL,
--- a/backend/doc/schema/postgresql.sql Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/doc/schema/postgresql.sql Wed Oct 16 13:03:13 2013 +0200 @@ -34,7 +34,8 @@ river_id int NOT NULL REFERENCES rivers(id) ON DELETE CASCADE, a NUMERIC NOT NULL, b NUMERIC, - UNIQUE (river_id, a, b) + UNIQUE (river_id, a, b), + CHECK (a < b) ); @@ -91,7 +92,7 @@ -- Pegelnullpunkt datum NUMERIC NOT NULL, -- Streckengueltigkeit - range_id int NOT NULL REFERENCES ranges (id) ON DELETE CASCADE, + range_id int REFERENCES ranges (id) ON DELETE CASCADE, UNIQUE (name, river_id), UNIQUE (official_number, river_id), @@ -201,6 +202,7 @@ wst_id int NOT NULL REFERENCES wsts(id) ON DELETE CASCADE, name VARCHAR(256) NOT NULL, description VARCHAR(256), + source VARCHAR(256), position int NOT NULL DEFAULT 0, time_interval_id int REFERENCES time_intervals(id), @@ -324,7 +326,7 @@ cross_section_line_id int NOT NULL REFERENCES cross_section_lines(id) ON DELETE CASCADE, col_pos int NOT NULL, x NUMERIC NOT NULL, - y NUMERIC NOT NULL, + y NUMERIC NOT NULL ); -- Indices for faster access of the points
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportBedHeightSingleValue.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportBedHeightSingleValue.java Wed Oct 16 13:03:13 2013 +0200 @@ -10,7 +10,7 @@ import java.util.List; -import java.math.BigDecimal; +//import java.math.BigDecimal; import org.apache.log4j.Logger; @@ -29,24 +29,26 @@ protected ImportBedHeightSingle bedHeight; - protected BigDecimal station; - protected BigDecimal height; - protected BigDecimal uncertainty; - protected BigDecimal dataGap; - protected BigDecimal soundingWidth; - protected BigDecimal width; + protected Double station; + protected Double height; + protected Double uncertainty; + protected Double dataGap; + // protected BigDecimal soundingWidth; + protected Double soundingWidth; + protected Double width; protected BedHeightSingleValue peer; public ImportBedHeightSingleValue( ImportBedHeightSingle bedHeight, - BigDecimal station, - BigDecimal height, - BigDecimal uncertainty, - BigDecimal dataGap, - BigDecimal soundingWidth, - BigDecimal width + Double station, + Double height, + Double uncertainty, + Double dataGap, + // BigDecimal soundingWidth, + Double soundingWidth, + Double width ) { this.bedHeight = bedHeight; this.station = station;
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportOfficialLine.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportOfficialLine.java Wed Oct 16 13:03:13 2013 +0200 @@ -45,7 +45,7 @@ // XXX: This is a bit odd. We do not have not enough infos here // to create a new NamedMainValue. So we just look for existing ones. Session session = ImporterSession.getInstance().getDatabaseSession(); - NamedMainValue nmv = NamedMainValue.fetchByName(name, session); + NamedMainValue nmv = NamedMainValue.fetchByNameAndType(name, "Q", session); if (nmv == null) { // failed -> failed to create OfficialLine return null;
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportRange.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportRange.java Wed Oct 16 13:03:13 2013 +0200 @@ -31,8 +31,30 @@ } public ImportRange(BigDecimal a, BigDecimal b) { - this.a = a; - this.b = b; + + // enforce a<b and set only a for zero-length ranges + if (a != null && b == null) { + this.a = a; + this.b = null; + } + else if (a == null && b != null) { + this.a = b; + this.b = null; + } + else if (a == null && b == null) { + throw new IllegalArgumentException("Both a and b are null."); + } + else if (a == b) { + this.a = a; + this.b = null; + } + else { + if (a.compareTo(b) > 0) { + BigDecimal t = a; a = b; b = t; + } + this.a = a; + this.b = b; + } } private static final int compare(BigDecimal a, BigDecimal b) { @@ -48,12 +70,6 @@ return a.compareTo(b); } - public void fixRangesOrder() { - if (compare(a, b) > 0) { - BigDecimal t = a; a = b; b = t; - } - } - public int compareTo(ImportRange other) { int cmp = compare(a, other.a); if (cmp != 0) return cmp; @@ -65,7 +81,12 @@ } public void setA(BigDecimal a) { - this.a = a; + if (this.b != null && a.compareTo(b) >= 0) { + throw new IllegalArgumentException("a (" + a + ") must be smaller than b (" + b + ")."); + } + else { + this.a = a; + } } public BigDecimal getB() { @@ -73,7 +94,12 @@ } public void setB(BigDecimal b) { - this.b = b; + if (b != null && b.compareTo(a) <= 0) { + throw new IllegalArgumentException("b (" + b + ") must be greater than a (" + a + ") or null."); + } + else { + this.b = b; + } } public Range getPeer(River river) {
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportRiver.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportRiver.java Wed Oct 16 13:03:13 2013 +0200 @@ -365,7 +365,7 @@ floodProtection.add(iw); } catch (WstParser.ParseException e) { - log.error(e); + log.error(e.getMessage()); } } } @@ -782,7 +782,7 @@ floodWater.add(iw); } catch (WstParser.ParseException e) { - log.error(e); + log.error(e.getMessage()); } } } @@ -819,7 +819,7 @@ wstParser.parse(file); } catch (WstParser.ParseException e) { - log.error(e); + log.error(e.getMessage()); continue; } @@ -904,7 +904,7 @@ fixations.add(iw); } catch (WstParser.ParseException e) { - log.error(e); + log.error(e.getMessage()); } } } @@ -953,7 +953,7 @@ extraWsts.add(iw); } catch (WstParser.ParseException e) { - log.error(e); + log.error(e.getMessage()); } } @@ -972,7 +972,7 @@ wst.setKmUp(wst.guessWaterLevelIncreasing()); } catch (WstParser.ParseException e) { - log.error(e); + log.error(e.getMessage()); } } @@ -1186,6 +1186,18 @@ } public void storeDependencies() { + /* test whether river is already in database. + * Otherwise it makes no sense to skip waterlevel model WST-file + * because the altitude reference is taken from there. */ + Session session = ImporterSession.getInstance().getDatabaseSession(); + Query query = session.createQuery("from River where name=:name"); + query.setString("name", name); + List<River> rivers = query.list(); + if (rivers.isEmpty() && Config.INSTANCE.skipWst()){ + log.error("River not yet in database. You cannot skip importing waterlevel model."); + return; + } + storeWstUnit(); storeAnnotations(); storeHYKs(); @@ -1211,7 +1223,7 @@ public void storeWstUnit() { if (wst == null) { - wstUnit = new ImportUnit("NN + m"); + log.warn("No unit given. Waterlevel-model WST-file has to be imported already."); } else { wstUnit = wst.getUnit();
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportWst.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportWst.java Wed Oct 16 13:03:13 2013 +0200 @@ -147,12 +147,6 @@ return up > columns.size() - up; } - public void fixRangesOrder() { - for (ImportWstColumn column: columns) { - column.fixRangesOrder(); - } - } - /** Get corresponding mapped wst (from database). */ public Wst getPeer(River river) { if (peer == null) {
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportWstColumn.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportWstColumn.java Wed Oct 16 13:03:13 2013 +0200 @@ -212,10 +212,5 @@ return peer; } - public void fixRangesOrder() { - for (ImportWstColumnQRange wcqr: columnQRanges) { - wcqr.fixRangesOrder(); - } - } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportWstColumnQRange.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportWstColumnQRange.java Wed Oct 16 13:03:13 2013 +0200 @@ -52,10 +52,6 @@ this.qRange = qRange; } - public void fixRangesOrder() { - qRange.fixRangesOrder(); - } - public WstColumnQRange getPeer(River river) { if (peer == null) { WstColumn c = wstColumn.getPeer(river);
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportWstQRange.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportWstQRange.java Wed Oct 16 13:03:13 2013 +0200 @@ -62,10 +62,6 @@ this.q = q; } - public void fixRangesOrder() { - range.fixRangesOrder(); - } - public WstQRange getPeer(River river) { if (peer == null) { Range r = range.getPeer(river);
--- a/backend/src/main/java/org/dive4elements/river/importer/Importer.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/Importer.java Wed Oct 16 13:03:13 2013 +0200 @@ -183,7 +183,7 @@ // Now link rivers with official numbers. for(ImportRiver river: infoGewParser.getRivers()) { for(Map.Entry<String, Long> entry: map.entrySet()) { - if (StringUtil.containsIgnoreCase(entry.getKey(), river.getName())) { + if (StringUtil.containsIgnoreCase(river.getName(), entry.getKey())) { river.setOfficialNumber(entry.getValue()); log.debug(river.getName() + " is mapped to bwastr " + entry.getValue()); }
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java Wed Oct 16 13:03:13 2013 +0200 @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.TreeSet; import java.util.Locale; import java.util.regex.Matcher; @@ -39,6 +40,8 @@ import org.dive4elements.river.importer.ImportUnit; import org.dive4elements.river.model.BedHeightType; import org.dive4elements.river.importer.ImporterSession; +import org.dive4elements.river.utils.EpsilonComparator; +import org.dive4elements.river.importer.parsers.LineParser; public abstract class BedHeightParser { @@ -97,9 +100,11 @@ String line ); + protected TreeSet<Double> kmExists; public BedHeightParser() { - this.bedHeights = new ArrayList<ImportBedHeight>(); + bedHeights = new ArrayList<ImportBedHeight>(); + kmExists = new TreeSet<Double>(EpsilonComparator.CMP); } @@ -113,12 +118,15 @@ ImportBedHeight obj = newImportBedHeight(file.getName().replaceAll("\\.csv", "")); - LineNumberReader in = - new LineNumberReader( - new InputStreamReader( - new FileInputStream(file), ENCODING)); + kmExists.clear(); + LineNumberReader in = null; try { + in = + new LineNumberReader( + new InputStreamReader( + new FileInputStream(file), ENCODING)); + String line = null; while ((line = in.readLine()) != null) { if ((line = line.trim()).length() == 0) { @@ -137,7 +145,9 @@ bedHeights.add(obj); } finally { - in.close(); + if (in != null) { + in.close(); + } } } @@ -327,7 +337,7 @@ String tmp = m.group(1).replace(";", "").trim(); BedHeightType bht = BedHeightType.fetchBedHeightTypeForType( - tmp, ImporterSession.getInstance().getDatabaseSession()); + tmp, ImporterSession.getInstance().getDatabaseSession()); if (bht != null) { obj.setType(new ImportBedHeightType(bht));
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightSingleParser.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightSingleParser.java Wed Oct 16 13:03:13 2013 +0200 @@ -46,11 +46,21 @@ return; } - BigDecimal km; + Double km; try { - km = new BigDecimal(nf.parse(values[0]).doubleValue()); - } + km = new Double(nf.parse(values[0]).doubleValue()); + + Double key = Double.valueOf(km); + + if (kmExists.contains(key)) { + log.warn("duplicate station '" + km + "': -> ignored"); + return; + } + + kmExists.add(key); + } + catch (ParseException e) { // We expect a lot of ";;;;;;" lines. //log.warn("BSP: Error while parsing km of data row.", e); @@ -66,44 +76,95 @@ // Because we cannot enforce consistency of values with complete data // via null constraints in the database (as there are "gap" values), // do this checks manually. - if (values[3].length() == 0 || values[4].length() == 0 - || values[5].length() == 0) { + // if (values[3].length() == 0 || values[4].length() == 0 + // || values[5].length() == 0) { //log.warn("BSP: Error while parsing data row (manual null constraint violated)."); - return; - } + // return; + //} - try { - ImportBedHeightSingleValue value = new ImportBedHeightSingleValue( - (ImportBedHeightSingle) obj, - km, - new BigDecimal(nf.parse(values[1]).doubleValue()), - new BigDecimal(nf.parse(values[2]).doubleValue()), - new BigDecimal(nf.parse(values[3]).doubleValue()), - parseBigDecimal(values[4], line), - new BigDecimal(nf.parse(values[5]).doubleValue()) - ); + Double height = null; + if (values[1].length() > 0) { + try { + height = new Double(nf.parse(values[1]).doubleValue()); + } + catch (ParseException e) { + log.warn("BSP: unparseable height " + values[1]); + } + } - obj.addValue(value); - } - catch (ParseException e) { - log.warn("BSP: unparseable value in data row.", e); - } + Double uncertainty = null; + if (values[2].length() > 0) { + try { + uncertainty = new Double(nf.parse(values[2]).doubleValue()); + } + catch (ParseException e) { + log.warn("BSP: unparseable uncertainty value " + values[2]); + } + } + + Double dataGap = null; + if (values[3].length() > 0) { + try { + dataGap = new Double(nf.parse(values[3]).doubleValue()); + } + catch (ParseException e) { + log.warn("BSP: unparseable data gap " + values[3]); + } + } + + Double soundingWidth = null; + if (values[4].length() > 0) { + try { + soundingWidth = new Double(nf.parse(values[4]).doubleValue()); + } + catch (ParseException e) { + log.warn("BSP: unparseable sounding width " + values[4]); + } + } + + Double width = null; + if (values[5].length() > 0) { + try { + width = new Double(nf.parse(values[5]).doubleValue()); + } + catch (ParseException e) { + log.warn("BSP: unparseable width " + values[5]); + } + } + + // try { + ImportBedHeightSingleValue value = new ImportBedHeightSingleValue( + (ImportBedHeightSingle) obj, + km, + height,//new Double(nf.parse(values[1]).doubleValue()), + uncertainty, + dataGap, + soundingWidth, + // parseBigDecimal(values[4], line), + width + ); + + obj.addValue(value); + // } +// catch (ParseException e) { +// log.warn("BSP: unparseable value in data row.", e); + //} } - private BigDecimal parseBigDecimal(String value, String line) { - BigDecimal result = null; - try { - Double dValue = Double.valueOf(value.replace(",", ".")); - result = new BigDecimal(dValue.doubleValue()); - } - catch (NumberFormatException nfe) { - log.warn( - "Could not parse " + - value + - " in bed heigt single row: " - + line); - } - return result; - } +// private BigDecimal parseBigDecimal(String value, String line) { +// BigDecimal result = null; +// try { +// Double dValue = Double.valueOf(value.replace(",", ".")); +// result = new BigDecimal(dValue.doubleValue()); +// } +// catch (NumberFormatException nfe) { +// log.warn( +// "Could not parse " + +// value + +// " in bed heigt single row: " +// + line); +// } +// return result; +// } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/FlowVelocityModelParser.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/FlowVelocityModelParser.java Wed Oct 16 13:03:13 2013 +0200 @@ -34,25 +34,25 @@ Logger.getLogger(FlowVelocityModelParser.class); private static final Pattern META_REGEX = - Pattern.compile(".*Rechnung (.*) \\(Pegel (.*)\\).*"); + Pattern.compile(".*Rechnung [unter ]*(.*) \\(Pegel (.*)\\).*"); private static final Pattern META_GAUGE = Pattern.compile("(.*) Q=(\\w*)m3/s"); private static final Pattern META_MAINVALUE_A = - Pattern.compile("([a-zA-Z]+)+(\\d+)*"); + Pattern.compile("([a-zA-Z]+)+(\\d+)*[\\w()]*"); private static final Pattern META_MAINVALUE_B = - Pattern.compile("(([a-zA-Z]+)+(\\d+)*)\\s*-\\s*(([a-zA-Z]+)+(\\d+)*)"); + Pattern.compile("(([a-zA-Z]+)+(\\d+)*)\\s*-\\s*(([a-zA-Z]+)+(\\d+)*\\S*)"); private static final Pattern META_MAINVALUE_C = - Pattern.compile("([0-9]++)\\s?(\\w*)|([0-9]++,[0-9]++)\\s?(\\w*)"); + Pattern.compile("([0-9]++)\\s?(\\S*)|([0-9]++,[0-9]++)\\s?(\\S*)"); private static final Pattern META_MAINVALUE_D = - Pattern.compile("(([0-9]*)\\s?(\\w*)|([0-9]++,[0-9]++)\\s?(\\w*)) bis (([0-9]*)\\s?(\\w*)|([0-9]++,[0-9]++)\\s?(\\w*))"); + Pattern.compile("(([0-9]*)\\s?(\\w*)|([0-9]++,[0-9]++)\\s?(\\w*))\\s*bis (([0-9]*)\\s?(\\S*)|([0-9]++,[0-9]++)\\s?(\\S*))"); private static final Pattern META_MAINVALUE_E = - Pattern.compile("(([a-zA-Z]+)+(\\d+)*) bis (([a-zA-Z]+)+(\\d+)*)"); + Pattern.compile("(([a-zA-Z]+)+(\\d+)*)\\s*bis (([a-zA-Z]+)+(\\d+)*\\S*)"); private static final NumberFormat nf = NumberFormat.getInstance(DEFAULT_LOCALE); @@ -114,18 +114,19 @@ if (m.matches()) { String mainValueStr = m.group(1); + log.debug("mainValueStr = '" + mainValueStr + "'"); String gaugeStr = m.group(2); Object[] valueData = handleMainValueString(mainValueStr); Object[] gaugeData = handleGaugeString(gaugeStr); if (valueData == null || valueData.length < 2) { - log.warn("skip invalid MainValue part: '" + line + "'"); + log.warn("skip invalid MainValue part in '" + line + "'"); return; } if (gaugeData == null || gaugeData.length < 2) { - log.warn("skip invalid gauge part: '" + line + "'"); + log.warn("skip invalid gauge part in '" + line + "'"); return; } @@ -148,23 +149,26 @@ protected Object[] handleMainValueString(String mainValueStr) { - Matcher mA = META_MAINVALUE_A.matcher(mainValueStr); + Matcher mA = META_MAINVALUE_A.matcher(mainValueStr.trim()); if (mA.matches()) { + log.debug("mainValueStr matches META_MAINVALUE_A"); String name = mA.group(0); return new Object[] { name, name }; } - Matcher mB = META_MAINVALUE_B.matcher(mainValueStr); + Matcher mB = META_MAINVALUE_B.matcher(mainValueStr.trim()); if (mB.matches()) { + log.debug("mainValueStr matches META_MAINVALUE_B"); String lower = mB.group(1); String upper = mB.group(4); return new Object[] { lower, upper }; } - Matcher mC = META_MAINVALUE_C.matcher(mainValueStr); + Matcher mC = META_MAINVALUE_C.matcher(mainValueStr.trim()); if (mC.matches()) { + log.debug("mainValueStr matches META_MAINVALUE_C"); String facA = mC.group(1); String nameA = mC.group(2); String facB = mC.group(3); @@ -178,8 +182,9 @@ return new Object[] { mainValue, mainValue }; } - Matcher mD = META_MAINVALUE_D.matcher(mainValueStr); + Matcher mD = META_MAINVALUE_D.matcher(mainValueStr.trim()); if (mD.matches()) { + log.debug("mainValueStr matches META_MAINVALUE_D"); String loFacA = mD.group(2); String loNameA = mD.group(3); String loFacB = mD.group(4); @@ -202,14 +207,16 @@ return new Object[] { loMainValue, upMainValue }; } - Matcher mE = META_MAINVALUE_E.matcher(mainValueStr); + Matcher mE = META_MAINVALUE_E.matcher(mainValueStr.trim()); if (mE.matches()) { + log.debug("mainValueStr matches META_MAINVALUE_E"); String lower = mE.group(1); String upper = mE.group(4); return new Object[] { lower, upper }; } + log.debug("mainValueStr not matched"); return null; }
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentDensityParser.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentDensityParser.java Wed Oct 16 13:03:13 2013 +0200 @@ -39,12 +39,16 @@ public static final Pattern META_DEPTH = Pattern.compile("^Tiefe: (\\w++)-(\\w++)( (\\w++))?.*"); + public static final Pattern META_YEAR = + Pattern.compile("^Jahr: (\\d{4}).*"); + protected List<ImportSedimentDensity> sedimentDensities; protected ImportSedimentDensity current; protected String currentDescription; + protected String yearString; public SedimentDensityParser() { sedimentDensities = new ArrayList<ImportSedimentDensity>(); @@ -88,6 +92,9 @@ if (handleMetaDepth(line)) { return; } + else if (handleMetaYear(line)) { + return; + } else { log.warn("Unknown meta line: '" + line + "'"); } @@ -124,6 +131,23 @@ return false; } + protected boolean handleMetaYear(String line) { + Matcher m = META_YEAR.matcher(line); + + if (m.matches()) { + yearString = m.group(1); + + log.info("Found sediment density year: " + yearString); + + return true; + } + else { + log.debug("Meta line doesn't contain year: " + line); + } + + return false; + } + protected void handleDataLine(String line) { String[] vals = line.split(SEPERATOR_CHAR); @@ -153,6 +177,14 @@ } BigDecimal year = null; + if (yearString != null) { + try { + year = new BigDecimal(nf.parse(yearString).doubleValue()); + } + catch (ParseException pe) { + log.warn("Unparseable year string"); + } + } current.addValue(new ImportSedimentDensityValue( km,
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/WstParser.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/WstParser.java Wed Oct 16 13:03:13 2013 +0200 @@ -69,6 +69,8 @@ protected ImportWst wst; protected ImportRange lastRange; + protected Double lastA; + protected Double lastB; public WstParser() { } @@ -118,7 +120,12 @@ log.info("Parsing WST file '" + file + "'"); - wst = new ImportWst(file.getName()); + if (wst == null) { + wst = new ImportWst(file.getName()); + } + else { + wst.setDescription(file.getName()); + } LineNumberReader in = new LineNumberReader( @@ -145,7 +152,11 @@ boolean columnHeaderChecked = false; - String einheit = "Wasserstand [NN + m]"; + /* Default string for altitude reference + * if none is found in WST-file. + * Use in case no unit comment is found in file */ + String einheit = "m ü. unbekannte Referenz"; + boolean unitFound = false; HashSet<BigDecimal> kms = new HashSet<BigDecimal>(); @@ -181,7 +192,7 @@ if (aktAbfluesse != null) { if (kmHist1 != null && kmHist2 != null - && kmHist1.compareTo(kmHist2) < 0) { + && kmHist1.compareTo(kmHist2) < 0) { // stations descending in file BigDecimal t = minKm; minKm = maxKm; maxKm = t; } addInterval(minKm, maxKm, aktAbfluesse); @@ -264,7 +275,9 @@ m = UNIT.matcher(units[0]); einheit = m.matches() ? m.group(1) : units[0]; log.debug("unit: " + einheit); + unitFound = true; } + continue; } @@ -325,9 +338,19 @@ continue; } + // check consistence of station ordering in file + if (kmHist2 != null && + kmHist2.compareTo(kmHist1) != kmHist1.compareTo(kaem)) { + throw new ParseException("Stations in " + file + + " near line " + in.getLineNumber() + + " not ordered. File rejected."); + } + + // remember stations in two previous lines kmHist2 = kmHist1; kmHist1 = kaem; + // iteratively determine actual km-range if (kaem.compareTo(minKm) < 0) { minKm = kaem; } @@ -373,25 +396,22 @@ } // for all lines in WST file + if (!unitFound) { + log.warn("no unit and height reference found. Using default."); + } wst.setUnit(new ImportUnit(einheit)); if (kmHist1 != null && kmHist2 != null - && kmHist1.compareTo(kmHist2) < 0) { + && kmHist1.compareTo(kmHist2) < 0) { // stations descending in file BigDecimal t = minKm; minKm = maxKm; maxKm = t; } addInterval(minKm, maxKm, aktAbfluesse); - - fixRangesOrder(); } finally { in.close(); } } - protected void fixRangesOrder() { - wst.fixRangesOrder(); - } - protected void addValue(BigDecimal km, BigDecimal w, int index) { if (w != null) { ImportWstColumn column = wst.getColumn(index); @@ -423,6 +443,16 @@ return; } + // expand single-line i.e. 0-lenght Q-range to minimal length + if (from == to) { + if (lastRange != null && lastA > lastB) { + to = new BigDecimal(from.doubleValue() - INTERVAL_GAP); + } + else { + to = new BigDecimal(from.doubleValue() + INTERVAL_GAP); + } + } + ImportRange range = new ImportRange(from, to); // little workaround to make the q ranges tightly fit. @@ -430,15 +460,14 @@ // still work. if (lastRange != null) { - double a1 = lastRange.getA().doubleValue(); - double b1 = lastRange.getB().doubleValue(); double a2 = range.getA().doubleValue(); + double b2 = range.getB().doubleValue(); - if (a1 < b1) { + if (lastA < lastB) { lastRange.setB(new BigDecimal(a2 - INTERVAL_GAP)); } - else { // a1 >= b1 - lastRange.setB(new BigDecimal(a2 + INTERVAL_GAP)); + else { // lastA >= lastB + lastRange.setA(new BigDecimal(b2 + INTERVAL_GAP)); } } @@ -448,6 +477,8 @@ column.addColumnQRange(wstQRange); } + lastA = from.doubleValue(); + lastB = to.doubleValue(); lastRange = range; }
--- a/backend/src/main/java/org/dive4elements/river/model/BedHeightSingleValue.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/BedHeightSingleValue.java Wed Oct 16 13:03:13 2013 +0200 @@ -11,7 +11,7 @@ import java.util.List; import java.io.Serializable; -import java.math.BigDecimal; +//import java.math.BigDecimal; import javax.persistence.Entity; import javax.persistence.Id; @@ -43,12 +43,13 @@ private BedHeightSingle bedHeight; - private BigDecimal station; - private BigDecimal height; - private BigDecimal uncertainty; - private BigDecimal dataGap; - private BigDecimal soundingWidth; - private BigDecimal width; + private Double station; + private Double height; + private Double uncertainty; + private Double dataGap; + // private BigDecimal soundingWidth; + private Double soundingWidth; + private Double width; public BedHeightSingleValue() { @@ -56,12 +57,13 @@ public BedHeightSingleValue( BedHeightSingle bedHeight, - BigDecimal station, - BigDecimal height, - BigDecimal uncertainty, - BigDecimal dataGap, - BigDecimal soundingWidth, - BigDecimal width + Double station, + Double height, + Double uncertainty, + Double dataGap, + // BigDecimal soundingWidth, + Double soundingWidth, + Double width ) { this.bedHeight = bedHeight; this.station = station; @@ -100,56 +102,58 @@ } @Column(name = "station") - public BigDecimal getStation() { + public Double getStation() { return station; } - public void setStation(BigDecimal station) { + public void setStation(Double station) { this.station = station; } @Column(name = "height") - public BigDecimal getHeight() { + public Double getHeight() { return height; } - public void setHeight(BigDecimal height) { + public void setHeight(Double height) { this.height = height; } @Column(name="uncertainty") - public BigDecimal getUncertainty() { + public Double getUncertainty() { return uncertainty; } - public void setUncertainty(BigDecimal uncertainty) { + public void setUncertainty(Double uncertainty) { this.uncertainty = uncertainty; } @Column(name="data_gap") - public BigDecimal getDataGap() { + public Double getDataGap() { return dataGap; } - public void setDataGap(BigDecimal dataGap) { + public void setDataGap(Double dataGap) { this.dataGap = dataGap; } @Column(name="sounding_width") - public BigDecimal getSoundingWidth() { + // public BigDecimal getSoundingWidth() { + public Double getSoundingWidth() { return soundingWidth; } - public void setSoundingWidth(BigDecimal soundingWidth) { + //public void setSoundingWidth(BigDecimal soundingWidth) { + public void setSoundingWidth(Double soundingWidth) { this.soundingWidth = soundingWidth; } @Column(name="width") - public BigDecimal getWidth() { + public Double getWidth() { return width; } - public void setWidth(BigDecimal width) { + public void setWidth(Double width) { this.width = width; } @@ -166,8 +170,8 @@ " and station >= :kmLo and station <= :kmHi"); query.setParameter("single", single); - query.setParameter("kmLo", new BigDecimal(kmLo)); - query.setParameter("kmHi", new BigDecimal(kmHi)); + query.setParameter("kmLo", new Double(kmLo)); + query.setParameter("kmHi", new Double(kmHi)); return query.list(); }
--- a/backend/src/main/java/org/dive4elements/river/model/NamedMainValue.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/NamedMainValue.java Wed Oct 16 13:03:13 2013 +0200 @@ -90,10 +90,12 @@ this.officialLines = officialLines; } - public static NamedMainValue fetchByName(String name, Session session) { + public static NamedMainValue fetchByNameAndType( + String name, String type, Session session) { Query query = session.createQuery( - "from NamedMainValue where name=:name"); + "from NamedMainValue where name=:name and type.name = :type"); query.setString("name", name); + query.setString("type", type); List<NamedMainValue> named = query.list(); return named.isEmpty() ? null : named.get(0); }
--- a/backend/src/main/java/org/dive4elements/river/model/OfficialLine.java Wed Oct 16 12:39:33 2013 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/OfficialLine.java Wed Oct 16 13:03:13 2013 +0200 @@ -45,7 +45,7 @@ @Id @SequenceGenerator( name = "SEQUENCE_OFFICIAL_LINES_ID_SEQ", - sequenceName = "OFFICIAL_LINES_ID_SEQ_ID_SEQ", + sequenceName = "OFFICIAL_LINES_ID_SEQ", allocationSize = 1) @GeneratedValue( strategy = GenerationType.SEQUENCE,
--- a/contrib/make_flys_release/bin/make-importer-package.sh Wed Oct 16 12:39:33 2013 +0200 +++ b/contrib/make_flys_release/bin/make-importer-package.sh Wed Oct 16 13:03:13 2013 +0200 @@ -47,8 +47,15 @@ cp ${FLYS_DIR}/backend/doc/schema/*.sql $PKG_DIR/schema +# create PDF of manual +REV=`hg parent | sed -n '1s/[[:alnum:]]*: *\([0-9]*:.*\)/\1/;1p'` cd ${FLYS_DIR}/backend/doc/documentation/de/ -make importer-manual.pdf +sed -i "s/documentrevision..rev.*/documentrevision}{rev$REV}/" \ + importer-manual.tex +# run pdflatex three times to get references and page numbering right +pdflatex importer-manual.tex +pdflatex importer-manual.tex +pdflatex importer-manual.tex cp importer-manual.pdf $PKG_DIR sed -i 's/shpimporter\/shp/geodaesie\/shp/' $PKG_DIR/run_geo.sh