annotate pkg/octree/classbreaks.go @ 4488:bff6c5c1db4f

client: pdf-gen: improve adding bottleneck info to pdf * Check if the bottleneck is in the current view to add its info to the exported pdf and the pdf filename, this avoid wrong filename and wrong info in pdf in case view has been changed to another location. * Set the bottleneck to print after moving to it in map.
author Fadi Abbud <fadi.abbud@intevation.de>
date Fri, 27 Sep 2019 11:15:02 +0200
parents 49564382ffff
children 7a9388943840
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
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 package octree
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"
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 )
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 const (
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 selectClassBreaksSQL = `
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 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
29 WHERE config_key = $1`
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 )
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 func SampleDiffHeights(min, max, step float64) []float64 {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 var heights []float64
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 switch {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 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
36 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
37 if v >= min {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 heights = append(heights, v)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 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
42 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
43 if v <= max {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 heights = append(heights, v)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 default: // Positive and negative.
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 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
49 heights = append(heights, v)
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 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
52 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
53 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 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
55 heights = append(heights, v)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 }
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 return heights
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60
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
61 func ParseClassBreaks(config string) ([]float64, error) {
3836
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62
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
63 parts := strings.Split(config, ",")
3836
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 classes := make([]float64, 0, len(parts))
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 for _, part := range parts {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 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
67 part = part[:idx]
3836
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 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
70 continue
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 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
73 if err != nil {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 return nil, err
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 classes = append(classes, v)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 sort.Float64s(classes)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 return classes, nil
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
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
83 func LoadClassBreaks(ctx context.Context, tx *sql.Tx, key string) ([]float64, error) {
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
84
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
85 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
86
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
87 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
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 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
90 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
91 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
92 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
93 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
94 case !config.Valid:
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, errors.New("Invalid 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
96 }
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
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 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
99 }
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
3882
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
101 func ExtrapolateClassBreaks(cbs []float64, min, max float64) []float64 {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
102 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
103 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
104 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
105
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
106 if len(cbs) < 2 {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
107 return cbs
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
108 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
109
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 >= cbs[0] && max <= cbs[len(cbs)-1] {
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
111 return cbs
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
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
114 n := make([]float64, len(cbs))
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
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
118 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
119 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
120 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
121 break
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
122 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
123 m := make([]float64, 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
124 m[0] = n[0] - diff
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
125 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
126 n = m
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
127 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
128
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
129 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
130 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
131 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
132 break
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
133 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
134 n = append(n, n[len(n)-1]+diff)
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
135 }
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
136
37d5c4441c70 Use custom morpho class breaks in sounding result contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3836
diff changeset
137 return n
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
3836
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 func InBetweenClassBreaks(cbs []float64, min float64, steps int) []float64 {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141 if len(cbs) < 2 || steps < 2 {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 return cbs
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 out := make([]float64, 1, len(cbs)*steps)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
146
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
147 out[0] = cbs[0]
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
149 _1steps := 1 / float64(steps)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151 for i := 1; i < len(cbs); i++ {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
152 last, curr := cbs[i-1], cbs[i]
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
153
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
154 // Gap already too small -> proceed with next gap.
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
155 diff := curr - last
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
156 if math.Abs(diff) < min {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
157 out = append(out, curr)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
158 continue
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
159 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
160
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
161 delta := diff * _1steps
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
162 for p := last + delta; p < curr; p += delta {
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
163 out = append(out, p)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
164 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
165
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
166 out = append(out, curr)
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
167 }
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
168
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
169 return out
631f5eaf29de First preparation to use custom classbreaks in contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
170 }