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))
+}