Mercurial > gemma
changeset 3487:fdb0439850d5 zpg-ldc
Generalized transformation of vertices during sounding result import a bit.
Calculate p.Z = LDC - p.Z if ZPG reference system is given.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 27 May 2019 16:37:19 +0200 |
parents | 83b58f6356e7 |
children | aa264021e2bf |
files | pkg/imports/sr.go |
diffstat | 1 files changed, 17 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/imports/sr.go Mon May 27 15:17:38 2019 +0200 +++ b/pkg/imports/sr.go Mon May 27 16:37:19 2019 +0200 @@ -202,17 +202,22 @@ feedback.Info("Bottleneck: %s", m.Bottleneck) feedback.Info("Survey date: %s", m.Date.Format(common.DateFormat)) - var heightDelta float64 + var xform vertexTransform + 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) + 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 { @@ -230,7 +235,7 @@ return nil, errors.New("Cannot find any *.xyz or *.txt file") } - xyz, err := loadXYZ(xyzf, feedback, heightDelta) + xyz, err := loadXYZ(xyzf, feedback, xform) if err != nil { return nil, err } @@ -447,7 +452,9 @@ return &m, nil } -func loadXYZReader(r io.Reader, feedback Feedback, heightDelta float64) (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) @@ -502,7 +509,9 @@ warn("Negative Z value found: Using -Z") } } - p.Z += heightDelta + if xform != nil { + p = xform(p) + } mpz = append(mpz, p) } @@ -513,13 +522,13 @@ return mpz, nil } -func loadXYZ(f *zip.File, feedback Feedback, heightDelta float64) (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, heightDelta) + return loadXYZReader(r, feedback, xform) } func loadBoundary(z *zip.ReadCloser) (polygonSlice, error) {