Mercurial > gemma
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 |
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 } |