changeset 3494:97326e30407c zpg-ldc

Merged default into zpg-ldc branch.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 27 May 2019 17:33:13 +0200
parents 73285a90cab2 (diff) da58cf951342 (current diff)
children 220713fcb190
files
diffstat 2 files changed, 42 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/client/src/components/importconfiguration/types/Soundingresults.vue	Mon May 27 17:27:39 2019 +0200
+++ b/client/src/components/importconfiguration/types/Soundingresults.vue	Mon May 27 17:33:13 2019 +0200
@@ -366,9 +366,12 @@
     },
     depthReferenceOptions() {
       if (this.bottleneck) {
-        return Object.keys(
-          JSON.parse(this.bottleneck.properties.reference_water_levels)
+        const referenceLevels = JSON.parse(
+          this.bottleneck.properties.reference_water_levels
         );
+        const result = Object.keys(referenceLevels);
+        if (!referenceLevels["ZPG"]) result.push("ZPG"); // ZPG should always be available
+        return result;
       }
       return [];
     }
--- a/pkg/imports/sr.go	Mon May 27 17:27:39 2019 +0200
+++ b/pkg/imports/sr.go	Mon May 27 17:33:13 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,24 @@
 	feedback.Info("Bottleneck: %s", m.Bottleneck)
 	feedback.Info("Survey date: %s", m.Date.Format(common.DateFormat))
 
+	var xform vertexTransform
+
+	if m.DepthReference == "ZPG" {
+		feedback.Info("Found ZPG as reference system -> translating Z values to LDC")
+		var ldc float64
+		err := conn.QueryRowContext(ctx, selectGaugeLDCSQL, m.Bottleneck).Scan(&ldc)
+		switch {
+		case err == sql.ErrNoRows:
+			return nil, errors.New("Cannot load LDC value")
+		case err != nil:
+			return nil, err
+		}
+		xform = func(v octree.Vertex) octree.Vertex {
+			return octree.Vertex{X: v.X, Y: v.Y, Z: ldc - v.Z}
+		}
+		m.DepthReference = "LDC"
+	}
+
 	if err := m.Validate(ctx, conn); err != nil {
 		return nil, common.ToError(err)
 	}
@@ -207,7 +235,7 @@
 		return nil, errors.New("Cannot find any *.xyz or *.txt file")
 	}
 
-	xyz, err := loadXYZ(xyzf, feedback)
+	xyz, err := loadXYZ(xyzf, feedback, xform)
 	if err != nil {
 		return nil, err
 	}
@@ -424,7 +452,9 @@
 	return &m, nil
 }
 
-func loadXYZReader(r io.Reader, feedback Feedback) (octree.MultiPointZ, error) {
+type vertexTransform func(octree.Vertex) octree.Vertex
+
+func loadXYZReader(r io.Reader, feedback Feedback, xform vertexTransform) (octree.MultiPointZ, error) {
 	mpz := make(octree.MultiPointZ, 0, 250000)
 	s := bufio.NewScanner(r)
 
@@ -479,6 +509,9 @@
 				warn("Negative Z value found: Using -Z")
 			}
 		}
+		if xform != nil {
+			p = xform(p)
+		}
 		mpz = append(mpz, p)
 	}
 
@@ -489,13 +522,13 @@
 	return mpz, nil
 }
 
-func loadXYZ(f *zip.File, feedback Feedback) (octree.MultiPointZ, error) {
+func loadXYZ(f *zip.File, feedback Feedback, xform vertexTransform) (octree.MultiPointZ, error) {
 	r, err := f.Open()
 	if err != nil {
 		return nil, err
 	}
 	defer r.Close()
-	return loadXYZReader(r, feedback)
+	return loadXYZReader(r, feedback, xform)
 }
 
 func loadBoundary(z *zip.ReadCloser) (polygonSlice, error) {