Mercurial > gemma
annotate pkg/octree/areas.go @ 4640:fb09a43b062e
Decouple the tracing of the iso areas from the octree data structure.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Fri, 11 Oct 2019 20:09:37 +0200 |
parents | 82029885c11b |
children | 3eda5a7215ab |
rev | line source |
---|---|
4570
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1 // This is Free Software under GNU Affero General Public License v >= 3.0 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
2 // without warranty, see README.md and license for details. |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
3 // |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
4 // SPDX-License-Identifier: AGPL-3.0-or-later |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
5 // License-Filename: LICENSES/AGPL-3.0.txt |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
6 // |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
7 // Copyright (C) 2018 by via donau |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
8 // – Österreichische Wasserstraßen-Gesellschaft mbH |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
9 // Software engineering by Intevation GmbH |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 // |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 // Author(s): |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 package octree |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
15 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
16 import ( |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
17 "log" |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
18 "math" |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 "runtime" |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 "sync" |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 "time" |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
22 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
23 "github.com/fogleman/contourmap" |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
24 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
25 "gemma.intevation.de/gemma/pkg/common" |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 "gemma.intevation.de/gemma/pkg/wkb" |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 ) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
28 |
4640
fb09a43b062e
Decouple the tracing of the iso areas from the octree data structure.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4577
diff
changeset
|
29 func TraceAreas( |
4570
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 heights []float64, |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 cellSize float64, |
4640
fb09a43b062e
Decouple the tracing of the iso areas from the octree data structure.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4577
diff
changeset
|
32 min, max Vertex, |
fb09a43b062e
Decouple the tracing of the iso areas from the octree data structure.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4577
diff
changeset
|
33 eval func(float64, float64) (float64, bool), |
4570
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
34 ) []wkb.MultiPolygonGeom { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
35 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 width := max.X - min.X |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 height := max.Y - min.Y |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 log.Printf("info: Width/Height: %.2f / %.2f\n", width, height) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
41 xcells := int(math.Ceil(width / cellSize)) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 ycells := int(math.Ceil(height / cellSize)) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
44 log.Printf("info: Raster size: (%d, %d)\n", xcells, ycells) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
45 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
46 start := time.Now() |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 // Add border for closing |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
49 raster := make([]float64, (xcells+2)*(ycells+2)) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
50 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 // prefill for no data |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
52 const nodata = -math.MaxFloat64 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
53 for i := range raster { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
54 raster[i] = nodata |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
55 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
56 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
57 // rasterize the height model |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
58 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
59 var wg sync.WaitGroup |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
60 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
61 rows := make(chan int) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
62 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
63 rasterRow := func() { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
64 defer wg.Done() |
4575
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
65 quat := 0.25 * cellSize |
4570
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
66 for i := range rows { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
67 pos := (i+1)*(xcells+2) + 1 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
68 row := raster[pos : pos+xcells] |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
69 py := min.Y + float64(i)*cellSize + cellSize/2 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
70 px := min.X + cellSize/2 |
4575
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
71 y1 := py - quat |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
72 y2 := py + quat |
4570
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
73 for j := range row { |
4575
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
74 var n int |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
75 var sum float64 |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
76 |
4640
fb09a43b062e
Decouple the tracing of the iso areas from the octree data structure.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4577
diff
changeset
|
77 if v, ok := eval(px-quat, y1); ok { |
4575
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
78 sum = v |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
79 n = 1 |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
80 } |
4640
fb09a43b062e
Decouple the tracing of the iso areas from the octree data structure.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4577
diff
changeset
|
81 if v, ok := eval(px-quat, y2); ok { |
4575
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
82 sum += v |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
83 n++ |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
84 } |
4640
fb09a43b062e
Decouple the tracing of the iso areas from the octree data structure.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4577
diff
changeset
|
85 if v, ok := eval(px+quat, y1); ok { |
4575
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
86 sum += v |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
87 n++ |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
88 } |
4640
fb09a43b062e
Decouple the tracing of the iso areas from the octree data structure.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4577
diff
changeset
|
89 if v, ok := eval(px+quat, y2); ok { |
4575
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
90 sum += v |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
91 n++ |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
92 } |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
93 |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
94 if n > 0 { |
6415368c2c60
Use simple super-sampling when rasterizing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4570
diff
changeset
|
95 row[j] = sum / float64(n) |
4570
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
96 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
97 px += cellSize |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
98 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
99 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
100 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
101 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
102 for n := runtime.NumCPU(); n >= 1; n-- { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
103 wg.Add(1) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
104 go rasterRow() |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
105 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
106 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
107 for i := 0; i < ycells; i++ { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
108 rows <- i |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
109 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
110 close(rows) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
111 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
112 wg.Wait() |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
113 log.Printf("info: Rastering took %v\n", time.Since(start)) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
114 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
115 start = time.Now() |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
116 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
117 tracer := contourmap.FromFloat64s(xcells+2, ycells+2, raster) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
118 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
119 areas := make([]wkb.MultiPolygonGeom, len(heights)) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
120 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
121 // TODO: Check if this correct! |
4577
82029885c11b
Fixed systematic offset of new iso areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4575
diff
changeset
|
122 reprojX := common.Linear(0.5, min.X, 1.5, min.X+cellSize) |
82029885c11b
Fixed systematic offset of new iso areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4575
diff
changeset
|
123 reprojY := common.Linear(0.5, min.Y, 1.5, min.Y+cellSize) |
4570
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
124 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
125 cnts := make(chan int) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
126 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
127 doContours := func() { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
128 defer wg.Done() |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
129 for hIdx := range cnts { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
130 c := tracer.Contours(heights[hIdx]) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
131 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
132 if len(c) == 0 { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
133 continue |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
134 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
135 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
136 // We need to bring it back to the |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
137 // none raster coordinate system. |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
138 a := make(wkb.MultiPolygonGeom, len(c)) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
139 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
140 for i, pl := range c { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
141 shell := make(wkb.LinearRingGeom, len(pl)) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
142 for j, pt := range pl { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
143 shell[j] = wkb.PointGeom{ |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
144 X: reprojX(pt.X), |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
145 Y: reprojY(pt.Y), |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
146 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
147 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
148 a[i] = wkb.PolygonGeom{shell} |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
149 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
150 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
151 areas[hIdx] = a |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
152 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
153 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
154 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
155 for n := runtime.NumCPU(); n >= 1; n-- { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
156 wg.Add(1) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
157 go doContours() |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
158 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
159 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
160 for i := range heights { |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
161 cnts <- i |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
162 } |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
163 close(cnts) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
164 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
165 wg.Wait() |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
166 log.Printf("info: Tracing areas took %v\n", time.Since(start)) |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
167 |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
168 return areas |
4b3a298b94f8
Moved area tracing to octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
169 } |