annotate pkg/octree/contours.go @ 3678:8f58851927c0

client: make layer factory only return new layer config for individual maps instead of each time it is invoked. The purpose of the factory was to support multiple maps with individual layers. But returning a new config each time it is invoked leads to bugs that rely on the layer's state. Now this factory reuses the same objects it created before, per map.
author Markus Kottlaender <markus@intevation.de>
date Mon, 17 Jun 2019 17:31:35 +0200
parents 647a58ee9ae9
children 631f5eaf29de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
2 // without warranty, see README.md and license for details.
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
3 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
6 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
7 // Copyright (C) 2018 by via donau
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
9 // Software engineering by Intevation GmbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
10 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
11 // Author(s):
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
1317
5443f5c9154c Added missing authors names in Go files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1186
diff changeset
13 // * Tom Gottfried <tom.gottfried@intevation.de>
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 977
diff changeset
14
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 package octree
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 import (
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "runtime"
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "sync"
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 )
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21
2576
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
22 func SampleDiffHeights(min, max, step float64) []float64 {
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
23 var heights []float64
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
24 switch {
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
25 case min >= 0: // All values positive.
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
26 for v := 0.0; v <= max; v += step {
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
27 if v >= min {
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
28 heights = append(heights, v)
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
29 }
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
30 }
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
31 case max <= 0: // All values negative.
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
32 for v := 0.0; v >= min; v -= step {
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
33 if v <= max {
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
34 heights = append(heights, v)
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
35 }
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
36 }
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
37 default: // Positive and negative.
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
38 for v := step; v <= max; v += step {
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
39 heights = append(heights, v)
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
40 }
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
41 for i, j := 0, len(heights)-1; i < j; i, j = i+1, j-1 {
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
42 heights[i], heights[j] = heights[j], heights[i]
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
43 }
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
44 for v := 0.0; v >= min; v -= step {
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
45 heights = append(heights, v)
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
46 }
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
47 }
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
48 return heights
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
49 }
647a58ee9ae9 Morphological differences: Centralized generation of height values for differences in octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2529
diff changeset
50
1692
f4dcbe8941a1 Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1317
diff changeset
51 // ContourResult stores an calculated iso line for a given height.
f4dcbe8941a1 Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1317
diff changeset
52 // Is used as a future variable in the concurrent iso line calculation.
977
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
53 type ContourResult struct {
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
54 Height float64
4a2ca0e20006 Fixed build error.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 976
diff changeset
55 Lines MultiLineStringZ
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
56
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
57 done bool
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
58 mu sync.Mutex
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
59 cond *sync.Cond
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
60 }
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
61
1692
f4dcbe8941a1 Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1317
diff changeset
62 // NewContourResult prepares a future variable to later hold
f4dcbe8941a1 Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1317
diff changeset
63 // the result of the iso line calculation.
1186
ba0d8c327b0b Made code more idiomatic.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
64 func NewContourResult(height float64) *ContourResult {
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
65 cr := ContourResult{Height: height}
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
66 cr.cond = sync.NewCond(&cr.mu)
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
67 return &cr
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
68 }
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
69
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
70 func (cr *ContourResult) wait() {
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
71 cr.cond.L.Lock()
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
72 for !cr.done {
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
73 cr.cond.Wait()
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
74 }
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
75 cr.cond.L.Unlock()
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
76 }
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
77
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
78 func (cr *ContourResult) get() float64 {
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
79 cr.cond.L.Lock()
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
80 defer cr.cond.L.Unlock()
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
81 return cr.Height
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
82 }
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
83
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
84 func (cr *ContourResult) set(lines MultiLineStringZ) {
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
85 cr.cond.L.Lock()
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
86 defer cr.cond.L.Unlock()
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
87 cr.Lines = lines
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
88 cr.done = true
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
89 cr.cond.Signal()
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
90 }
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91
1692
f4dcbe8941a1 Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1317
diff changeset
92 // DoContours calculates the iso line for the given heights.
f4dcbe8941a1 Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1317
diff changeset
93 // This is done concurrently.
f4dcbe8941a1 Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1317
diff changeset
94 // It is guaranteed that the results are given to the store
f4dcbe8941a1 Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1317
diff changeset
95 // function in order of the original heights values.
1184
064d44ccc6f2 Adjust contour lines heights to multiples of step width
Tom Gottfried <tom@intevation.de>
parents: 1134
diff changeset
96 func DoContours(tree *Tree, heights []float64, store func(*ContourResult)) {
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97
2479
c85b16db8a02 Calculate better triangulation and store it into database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1692
diff changeset
98 if len(heights) == 0 {
c85b16db8a02 Calculate better triangulation and store it into database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1692
diff changeset
99 return
c85b16db8a02 Calculate better triangulation and store it into database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1692
diff changeset
100 }
c85b16db8a02 Calculate better triangulation and store it into database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1692
diff changeset
101
1186
ba0d8c327b0b Made code more idiomatic.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
102 contours := make([]*ContourResult, len(heights))
ba0d8c327b0b Made code more idiomatic.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
103
ba0d8c327b0b Made code more idiomatic.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
104 for i, h := range heights {
ba0d8c327b0b Made code more idiomatic.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1184
diff changeset
105 contours[i] = NewContourResult(h)
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
106 }
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
107
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
108 jobs := make(chan *ContourResult)
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 var wg sync.WaitGroup
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
111 for i, n := 0, runtime.NumCPU(); i < n; i++ {
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
112 wg.Add(1)
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
113 go processLevels(tree, jobs, &wg)
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114 }
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
115
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
116 done := make(chan struct{})
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
117 go func() {
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
118 defer close(done)
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
119 for _, cr := range contours {
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
120 cr.wait()
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
121 store(cr)
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
122 }
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
123 }()
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
124
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
125 for _, cr := range contours {
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
126 jobs <- cr
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
127 }
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128 close(jobs)
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
129
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 wg.Wait()
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
131 <-done
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132 }
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 func processLevels(
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 tree *Tree,
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
136 jobs <-chan *ContourResult,
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137 wg *sync.WaitGroup,
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138 ) {
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 defer wg.Done()
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
140 for cr := range jobs {
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141 var lines MultiLineStringZ
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
142 h := cr.get()
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143 tree.Horizontal(h, func(t *Triangle) {
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144 line := t.IntersectHorizontal(h)
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 if len(line) > 1 {
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
146 lines = append(lines, line)
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
147 }
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 })
1134
0420761c1c3f Store contour lines in deterministic order.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1017
diff changeset
149 cr.set(lines.Merge())
976
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150 }
c397fdd8c327 Generate the contour lines of the sounding result during the import, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151 }