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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }