Mercurial > gemma
changeset 1772:70c4dc694d61
Gauge measurement import: Added a rescale function that brings all numerical values into cm.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 11 Jan 2019 11:36:34 +0100 |
parents | 88b8da513944 |
children | bd72d1a7ffe6 |
files | pkg/imports/agm.go pkg/imports/gm.go |
diffstat | 2 files changed, 44 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/imports/agm.go Fri Jan 11 11:33:34 2019 +0100 +++ b/pkg/imports/agm.go Fri Jan 11 11:36:34 2019 +0100 @@ -18,6 +18,7 @@ "context" "database/sql" "encoding/csv" + "errors" "log" "os" "path/filepath" @@ -112,5 +113,5 @@ log.Printf("%d: %s\n", i, f) } - return nil, nil + return nil, errors.New("Not implemented, yet!") }
--- a/pkg/imports/gm.go Fri Jan 11 11:33:34 2019 +0100 +++ b/pkg/imports/gm.go Fri Jan 11 11:36:34 2019 +0100 @@ -17,6 +17,8 @@ "context" "database/sql" "errors" + "fmt" + "strings" "time" "gemma.intevation.de/gemma/pkg/common" @@ -173,6 +175,32 @@ return &summary, err } +// rescale returns a scaling function to bring the unit all to cm. +func rescale(unit string) (func(float32) float32, error) { + + var scale float32 + + switch strings.ToLower(unit) { + case "mm": + scale = 0.1 + case "cm": + scale = 1.0 + case "dm": + scale = 10.0 + case "m": + scale = 100.0 + case "hm": + scale = 10000.0 + case "km": + scale = 100000.0 + default: + return nil, fmt.Errorf("unknown unit '%s'", unit) + } + + fn := func(x float32) float32 { return scale * x } + return fn, nil +} + func (gm *GaugeMeasurement) doForGM( ctx context.Context, gauges []models.GaugeMeasurement, @@ -235,6 +263,17 @@ continue } for _, measure := range wrm.Measure { + var unit string + if measure.Unit == nil { + feedback.Info("'Unit' not specified. Assuming 'cm'") + unit = "cm" + } else { + unit = string(*measure.Unit) + } + convert, err := rescale(unit) + if err != nil { + return nil, err + } isWaterlevel := *measure.Measure_code == nts.Measure_code_enumWAL err = insertStmt.QueryRowContext( ctx, @@ -248,11 +287,11 @@ msg.Identification.Language_code, msg.Identification.Country_code, msg.Identification.Date_issue, - measure.Value, + convert(measure.Value), measure.Predicted, isWaterlevel, - measure.Value_min, - measure.Value_max, + convert(measure.Value_min), + convert(measure.Value_max), msg.Identification.Date_issue, msg.Identification.Originator, ).Scan(&gid)