Mercurial > gemma
diff pkg/mesh/classbreaks.go @ 5412:34bc6041e61e marking-single-beam
Added a type for class breaks.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 07 Jul 2021 10:58:14 +0200 |
parents | 4847ac70103a |
children | 99f32f0dc70c |
line wrap: on
line diff
--- a/pkg/mesh/classbreaks.go Wed Jul 07 09:43:41 2021 +0200 +++ b/pkg/mesh/classbreaks.go Wed Jul 07 10:58:14 2021 +0200 @@ -21,6 +21,8 @@ "sort" "strconv" "strings" + + "gemma.intevation.de/gemma/pkg/common" ) const ( @@ -29,8 +31,10 @@ WHERE config_key = $1` ) -func SampleDiffHeights(min, max, step float64) []float64 { - var heights []float64 +type ClassBreaks []float64 + +func SampleDiffHeights(min, max, step float64) ClassBreaks { + var heights ClassBreaks switch { case min >= 0: // All values positive. for v := 0.0; v <= max; v += step { @@ -58,10 +62,10 @@ return heights } -func ParseClassBreaks(config string) ([]float64, error) { +func ParseClassBreaks(config string) (ClassBreaks, error) { parts := strings.Split(config, ",") - classes := make([]float64, 0, len(parts)) + classes := make(ClassBreaks, 0, len(parts)) for _, part := range parts { if idx := strings.IndexRune(part, ':'); idx >= 0 { part = part[:idx] @@ -80,7 +84,7 @@ return classes, nil } -func LoadClassBreaks(ctx context.Context, tx *sql.Tx, key string) ([]float64, error) { +func LoadClassBreaks(ctx context.Context, tx *sql.Tx, key string) (ClassBreaks, error) { var config sql.NullString @@ -102,12 +106,12 @@ return math.Round(v*10000) / 10000 } -func ExtrapolateClassBreaks(cbs []float64, min, max float64) []float64 { +func (cbs ClassBreaks) ExtrapolateClassBreaks(min, max float64) ClassBreaks { if min > max { min, max = max, min } - n := make([]float64, len(cbs)) + n := make(ClassBreaks, len(cbs)) copy(n, cbs) sort.Float64s(n) @@ -148,3 +152,7 @@ return n } + +func (cbs ClassBreaks) Dedup() ClassBreaks { + return ClassBreaks(common.DedupFloat64s(cbs)) +}