# HG changeset patch # User Sascha L. Teichmann # Date 1558963058 -7200 # Node ID 83b58f6356e7d3ca02c23ec25248c34b430f3720 # Parent afab8d87932c667f98102b4bf02db0a98381fafd Translate sounding results Z values import to LDC if ZPG was found as depth reference system. diff -r afab8d87932c -r 83b58f6356e7 pkg/imports/sr.go --- 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) {