Mercurial > gemma
changeset 3945:3bdbaf1b282a
SR import: Negate the Z values in the XYZ files if the flag `negate-z` is set.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 14 Jul 2019 17:19:22 +0200 |
parents | 0ed8af02d5a9 |
children | d668742c8978 |
files | pkg/controllers/srimports.go pkg/imports/sr.go pkg/models/sr.go |
diffstat | 3 files changed, 39 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/controllers/srimports.go Fri Jul 12 11:58:20 2019 +0200 +++ b/pkg/controllers/srimports.go Sun Jul 14 17:19:22 2019 +0200 @@ -97,6 +97,19 @@ sr.Bottleneck = &v } + if v := req.FormValue("negate-z"); v != "" { + var negateZ bool + switch strings.ToLower(v) { + case "true", "1": + negateZ = true + case "false", "0": + negateZ = false + default: + return fmt.Errorf("Unknown negate-z '%s'", v) + } + sr.NegateZ = negateZ + } + if v := req.FormValue("single-beam"); v != "" { var singleBeam bool switch strings.ToLower(v) {
--- a/pkg/imports/sr.go Fri Jul 12 11:58:20 2019 +0200 +++ b/pkg/imports/sr.go Sun Jul 14 17:19:22 2019 +0200 @@ -60,6 +60,9 @@ DepthReference *string `json:"depth-reference,omitempty"` // SingleBeam indicates that the sounding is a single beam scan. SingleBeam *bool `json:"single-beam,omitempty"` + // NegateZ indicated that the Z values of thy XYZ input should be + // multiplied by -1. + NegateZ bool `json:"negate-z,omitempty"` } const ( @@ -249,6 +252,12 @@ var xform vertexTransform + if m.NegateZ { + xform = negateZTransform + } else { + xform = identityTransform + } + if m.DepthReference == "ZPG" { feedback.Info("Found ZPG as reference system -> translating Z values to LDC") var ldc float64 @@ -270,9 +279,11 @@ // LDC is cm. The data is in m. ldc /= 100 - xform = func(v octree.Vertex) octree.Vertex { - return octree.Vertex{X: v.X, Y: v.Y, Z: v.Z + ldc} - } + xform = chainTransforms( + xform, + func(v octree.Vertex) octree.Vertex { + return octree.Vertex{X: v.X, Y: v.Y, Z: v.Z + ldc} + }) m.DepthReference = depthReference } @@ -705,12 +716,20 @@ type vertexTransform func(octree.Vertex) octree.Vertex +func identityTransform(v octree.Vertex) octree.Vertex { return v } + +func negateZTransform(v octree.Vertex) octree.Vertex { + return octree.Vertex{X: v.X, Y: v.Y, Z: -v.Z} +} + +func chainTransforms(a, b vertexTransform) vertexTransform { + return func(v octree.Vertex) octree.Vertex { return b(a(v)) } +} + func loadXYZReader(r io.Reader, feedback Feedback, xform vertexTransform) (octree.MultiPointZ, error) { mpz := make(octree.MultiPointZ, 0, 250000) s := bufio.NewScanner(r) - var hasNegZ bool - warnLimiter := misc.WarningLimiter{Log: feedback.Warn, MaxWarnings: 100} warn := warnLimiter.Warn defer warnLimiter.Close() @@ -743,16 +762,7 @@ warn("format error in line %d: %v", line, err) continue } - if p.Z < 0 { - p.Z = -p.Z - if !hasNegZ { - hasNegZ = true - warn("Negative Z value found: Using -Z") - } - } - if xform != nil { - p = xform(p) - } + p = xform(p) mpz = append(mpz, p) }