annotate pkg/mesh/classbreaks.go @ 5591:0011f50cf216 surveysperbottleneckid

Removed no longer used alternative api for surveys/ endpoint. As bottlenecks in the summary for SR imports are now identified by their id and no longer by the (not guarantied to be unique!) name, there is no longer the need to request survey data by the name+date tuple (which isn't reliable anyway). So the workaround was now reversed.
author Sascha Wilde <wilde@sha-bang.de>
date Wed, 06 Apr 2022 13:30:29 +0200
parents b8d5f1cd15fb
children 1222b777f51f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3836
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 //
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 //
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2019 by via donau
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 //
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 // Author(s):
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13
4827
f4abfd0ee8ad Renamed octree package to mesh as there is no octree any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4762
diff changeset
14 package mesh
3836
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 "context"
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "database/sql"
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "errors"
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "math"
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 "sort"
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 "strconv"
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 "strings"
5412
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
24
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
25 "gemma.intevation.de/gemma/pkg/common"
3836
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 )
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 const (
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 selectClassBreaksSQL = `
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 SELECT config_val FROM sys_admin.system_config
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 WHERE config_key = $1`
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 )
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33
5412
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
34 type ClassBreaks []float64
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
35
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
36 func SampleDiffHeights(min, max, step float64) ClassBreaks {
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
37 var heights ClassBreaks
3836
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 switch {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 case min >= 0: // All values positive.
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 for v := 0.0; v <= max; v += step {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 if v >= min {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 heights = append(heights, v)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 case max <= 0: // All values negative.
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 for v := 0.0; v >= min; v -= step {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 if v <= max {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 heights = append(heights, v)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 default: // Positive and negative.
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 for v := step; v <= max; v += step {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 heights = append(heights, v)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 for i, j := 0, len(heights)-1; i < j; i, j = i+1, j-1 {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 heights[i], heights[j] = heights[j], heights[i]
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 for v := 0.0; v >= min; v -= step {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 heights = append(heights, v)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 return heights
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64
5412
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
65 func ParseClassBreaks(config string) (ClassBreaks, error) {
3836
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66
4214
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
67 parts := strings.Split(config, ",")
5412
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
68 classes := make(ClassBreaks, 0, len(parts))
3836
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 for _, part := range parts {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 if idx := strings.IndexRune(part, ':'); idx >= 0 {
3882
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
71 part = part[:idx]
3836
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 if part = strings.TrimSpace(part); part == "" {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 continue
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 v, err := strconv.ParseFloat(part, 64)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 if err != nil {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 return nil, err
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 classes = append(classes, v)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 sort.Float64s(classes)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 return classes, nil
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86
5412
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
87 func LoadClassBreaks(ctx context.Context, tx *sql.Tx, key string) (ClassBreaks, error) {
4214
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
88
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
89 var config sql.NullString
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
90
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
91 err := tx.QueryRowContext(ctx, selectClassBreaksSQL, key).Scan(&config)
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
92
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
93 switch {
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
94 case err == sql.ErrNoRows:
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
95 return nil, nil
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
96 case err != nil:
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
97 return nil, err
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
98 case !config.Valid:
4847
4847ac70103a Made staticcheck happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4827
diff changeset
99 return nil, errors.New("invalid config string")
4214
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
100 }
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
101
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
102 return ParseClassBreaks(config.String)
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
103 }
49564382ffff Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3882
diff changeset
104
4746
5e0041fd3cba Round height values of extrapolated classbreaks to four place behind the dot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4687
diff changeset
105 func round(v float64) float64 {
5e0041fd3cba Round height values of extrapolated classbreaks to four place behind the dot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4687
diff changeset
106 return math.Round(v*10000) / 10000
5e0041fd3cba Round height values of extrapolated classbreaks to four place behind the dot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4687
diff changeset
107 }
5e0041fd3cba Round height values of extrapolated classbreaks to four place behind the dot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4687
diff changeset
108
5412
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
109 func (cbs ClassBreaks) ExtrapolateClassBreaks(min, max float64) ClassBreaks {
3882
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
110 if min > max {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
111 min, max = max, min
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
112 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
113
5412
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
114 n := make(ClassBreaks, len(cbs))
3882
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
115 copy(n, cbs)
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
116 sort.Float64s(n)
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
117
4685
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
118 for len(n) > 0 && n[0] < min {
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
119 n = n[1:]
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
120 }
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
121
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
122 if len(n) == 0 {
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
123 return n
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
124 }
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
125
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
126 for len(n) > 0 && n[len(n)-1] > max {
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
127 n = n[:len(n)-1]
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
128 }
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
129
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
130 if len(n) == 0 {
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
131 return n
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
132 }
7a9388943840 morphology: Clip class breaks again Z min and max of the the height model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4214
diff changeset
133
3882
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
134 for min < n[0] {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
135 diff := n[1] - n[0]
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
136 if diff == 0 {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
137 break
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
138 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
139 m := make([]float64, len(n)+1)
4746
5e0041fd3cba Round height values of extrapolated classbreaks to four place behind the dot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4687
diff changeset
140 m[0] = round(n[0] - diff)
3882
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
141 copy(m[1:], n)
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
142 n = m
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
143 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
144
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
145 for max > n[len(n)-1] {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
146 diff := n[len(n)-1] - n[len(n)-2]
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
147 if diff == 0 {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
148 break
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
149 }
4746
5e0041fd3cba Round height values of extrapolated classbreaks to four place behind the dot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4687
diff changeset
150 n = append(n, round(n[len(n)-1]+diff))
3882
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
151 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
152
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
153 return n
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
154 }
5412
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
155
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
156 func (cbs ClassBreaks) Dedup() ClassBreaks {
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
157 return ClassBreaks(common.DedupFloat64s(cbs))
34bc6041e61e Added a type for class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4847
diff changeset
158 }
5413
99f32f0dc70c Added tools to classify vertices by their heights with class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5412
diff changeset
159
5428
b8d5f1cd15fb Simplified classification. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5413
diff changeset
160 func (cbs ClassBreaks) Classify(points MultiPointZ) []MultiPointZ {
b8d5f1cd15fb Simplified classification. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5413
diff changeset
161 if len(cbs) == 0 {
b8d5f1cd15fb Simplified classification. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5413
diff changeset
162 return nil
b8d5f1cd15fb Simplified classification. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5413
diff changeset
163 }
b8d5f1cd15fb Simplified classification. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5413
diff changeset
164 classes := make([]MultiPointZ, len(cbs))
b8d5f1cd15fb Simplified classification. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5413
diff changeset
165 for _, v := range points {
b8d5f1cd15fb Simplified classification. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5413
diff changeset
166 // Place in last class if greater than all.
b8d5f1cd15fb Simplified classification. Needs testing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5413
diff changeset
167 idx := len(cbs) - 1
5413
99f32f0dc70c Added tools to classify vertices by their heights with class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5412
diff changeset
168 for i, cb := range cbs {
99f32f0dc70c Added tools to classify vertices by their heights with class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5412
diff changeset
169 if v.Z <= cb {
99f32f0dc70c Added tools to classify vertices by their heights with class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5412
diff changeset
170 idx = i
99f32f0dc70c Added tools to classify vertices by their heights with class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5412
diff changeset
171 break
99f32f0dc70c Added tools to classify vertices by their heights with class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5412
diff changeset
172 }
99f32f0dc70c Added tools to classify vertices by their heights with class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5412
diff changeset
173 }
99f32f0dc70c Added tools to classify vertices by their heights with class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5412
diff changeset
174 classes[idx] = append(classes[idx], v)
99f32f0dc70c Added tools to classify vertices by their heights with class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5412
diff changeset
175 }
99f32f0dc70c Added tools to classify vertices by their heights with class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5412
diff changeset
176 return classes
99f32f0dc70c Added tools to classify vertices by their heights with class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5412
diff changeset
177 }