# HG changeset patch # User Sascha L. Teichmann # Date 1558971237 -7200 # Node ID 220713fcb190a7572829a8d468dfb16c6b7fa4e6 # Parent da58cf951342b88b056237043d4fa5ed9b0c20b8# Parent 97326e30407c69c93379756bf6234d2698e0c466 merged zpg-ldc into default branch. diff -r da58cf951342 -r 220713fcb190 client/src/components/importconfiguration/types/Soundingresults.vue --- 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:57 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 []; } diff -r da58cf951342 -r 220713fcb190 pkg/imports/sr.go --- a/pkg/imports/sr.go Mon May 27 17:27:39 2019 +0200 +++ b/pkg/imports/sr.go Mon May 27 17:33:57 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) {