# HG changeset patch # User Sascha L. Teichmann # Date 1558967839 -7200 # Node ID fdb0439850d598f8fb49c345ac4b786caadeb137 # Parent 83b58f6356e7d3ca02c23ec25248c34b430f3720 Generalized transformation of vertices during sounding result import a bit. Calculate p.Z = LDC - p.Z if ZPG reference system is given. diff -r 83b58f6356e7 -r fdb0439850d5 pkg/imports/sr.go --- 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) {