changeset 3479:83b58f6356e7 zpg-ldc

Translate sounding results Z values import to LDC if ZPG was found as depth reference system.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 27 May 2019 15:17:38 +0200
parents afab8d87932c
children fdb0439850d5
files pkg/imports/sr.go
diffstat 1 files changed, 28 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/sr.go	Mon May 27 15:08:44 2019 +0200
+++ b/pkg/imports/sr.go	Mon May 27 15:17:38 2019 +0200
@@ -160,6 +160,16 @@
 FROM waterway.sounding_results sr
 WHERE id = $1
 `
+
+	selectGaugeLDCSQL = `
+SELECT
+  grwl.value
+FROM waterway.gauges_reference_water_levels grwl
+  JOIN waterway.bottlenecks bns
+    ON grwl.location = bns.gauge_location
+      AND grwl.validity = bns.gauge_validity
+WHERE bns.objnam = $1 AND grwl.depth_reference like 'LDC%'
+`
 )
 
 // Do executes the actual sounding result import.
@@ -192,6 +202,19 @@
 	feedback.Info("Bottleneck: %s", m.Bottleneck)
 	feedback.Info("Survey date: %s", m.Date.Format(common.DateFormat))
 
+	var heightDelta float64
+	if m.DepthReference == "ZPG" {
+		feedback.Info("Found ZPG as reference system -> translating Z values to LDC")
+		m.DepthReference = "LDC"
+		err := conn.QueryRowContext(ctx, selectGaugeLDCSQL, m.Bottleneck).Scan(&heightDelta)
+		switch {
+		case err == sql.ErrNoRows:
+			return nil, errors.New("Cannot load LDC value")
+		case err != nil:
+			return nil, err
+		}
+	}
+
 	if err := m.Validate(ctx, conn); err != nil {
 		return nil, common.ToError(err)
 	}
@@ -207,7 +230,7 @@
 		return nil, errors.New("Cannot find any *.xyz or *.txt file")
 	}
 
-	xyz, err := loadXYZ(xyzf, feedback)
+	xyz, err := loadXYZ(xyzf, feedback, heightDelta)
 	if err != nil {
 		return nil, err
 	}
@@ -424,7 +447,7 @@
 	return &m, nil
 }
 
-func loadXYZReader(r io.Reader, feedback Feedback) (octree.MultiPointZ, error) {
+func loadXYZReader(r io.Reader, feedback Feedback, heightDelta float64) (octree.MultiPointZ, error) {
 	mpz := make(octree.MultiPointZ, 0, 250000)
 	s := bufio.NewScanner(r)
 
@@ -479,6 +502,7 @@
 				warn("Negative Z value found: Using -Z")
 			}
 		}
+		p.Z += heightDelta
 		mpz = append(mpz, p)
 	}
 
@@ -489,13 +513,13 @@
 	return mpz, nil
 }
 
-func loadXYZ(f *zip.File, feedback Feedback) (octree.MultiPointZ, error) {
+func loadXYZ(f *zip.File, feedback Feedback, heightDelta float64) (octree.MultiPointZ, error) {
 	r, err := f.Open()
 	if err != nil {
 		return nil, err
 	}
 	defer r.Close()
-	return loadXYZReader(r, feedback)
+	return loadXYZReader(r, feedback, heightDelta)
 }
 
 func loadBoundary(z *zip.ReadCloser) (polygonSlice, error) {