Mercurial > gemma
annotate cmd/isoareas/main.go @ 4551:b5b23b6d76f1 iso-areas
Move own algorith to separate file.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 01 Oct 2019 11:07:33 +0200 |
parents | aa2d0006e742 |
children | 7ed5a4a94efc |
rev | line source |
---|---|
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1 // This is Free Software under GNU Affero General Public License v >= 3.0 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
2 // without warranty, see README.md and license for details. |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
3 // |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
4 // SPDX-License-Identifier: AGPL-3.0-or-later |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
5 // License-Filename: LICENSES/AGPL-3.0.txt |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
6 // |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
7 // Copyright (C) 2019 by via donau |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
8 // – Österreichische Wasserstraßen-Gesellschaft mbH |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
9 // Software engineering by Intevation GmbH |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 // |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 // Author(s): |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 package main |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
15 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
16 import ( |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
17 "bufio" |
4541
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
18 "fmt" |
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 "io" |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 "log" |
4532
769f723c2581
Cut triangles against class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4531
diff
changeset
|
21 "math" |
4541
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
22 "math/rand" |
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
23 "os" |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
24 "strconv" |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
25 "strings" |
4532
769f723c2581
Cut triangles against class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4531
diff
changeset
|
26 "time" |
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 |
4541
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
28 svg "github.com/ajstarks/svgo" |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
29 |
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 "gemma.intevation.de/gemma/pkg/octree" |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 ) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
33 const classBreaks = `1:#ff00dd,1.5,1.7,1.9,2.1,2.3,2.5:#f25f20,2.7,2.9,3.1:#f7e40e,3.3,3.5,4:#8ad51a,4.5,5,5.5,6,6.5,7:#1414ff` |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
34 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
35 func loadXYZ(r io.Reader) (octree.MultiPointZ, error) { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 scanner := bufio.NewScanner(r) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 points := make(octree.MultiPointZ, 0, 2000000) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
41 var x, y, z float64 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 var err error |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
44 for scanner.Scan() { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
45 line := strings.TrimSpace(scanner.Text()) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
46 if len(line) == 0 || strings.HasPrefix(line, "#") { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 continue |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
49 parts := strings.SplitN(line, " ", 3) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
50 if len(parts) != 3 { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 continue |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
52 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
53 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
54 if x, err = strconv.ParseFloat(parts[0], 64); err != nil { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
55 return nil, err |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
56 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
57 if y, err = strconv.ParseFloat(parts[1], 64); err != nil { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
58 return nil, err |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
59 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
60 if z, err = strconv.ParseFloat(parts[2], 64); err != nil { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
61 return nil, err |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
62 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
63 points = append(points, octree.Vertex{X: x, Y: y, Z: z}) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
64 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
65 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
66 return points, nil |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
67 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
68 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
69 func minMax(points []octree.Vertex) (octree.Vertex, octree.Vertex) { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
70 if len(points) == 0 { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
71 return octree.Vertex{}, octree.Vertex{} |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
72 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
73 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
74 min, max := points[0], points[0] |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
75 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
76 for _, v := range points { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 min.Minimize(v) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
78 max.Maximize(v) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
80 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
81 return min, max |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
82 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
83 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
84 func check(err error) { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
85 if err != nil { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
86 log.Fatalf("error: %v\n", err) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
87 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
88 } |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
89 |
4541
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
90 func linear(x1, y1, x2, y2 float64) func(float64) float64 { |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
91 // f(x1) = y1 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
92 // f(x2) = y2 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
93 // y1 = x1*a + b <=> b = y1 - x1*a |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
94 // y2 = x2*a + b |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
95 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
96 // y1 - y2 = a*(x1 - x2) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
97 // a = (y1-y2)/(x1 - x2) for x1 != x2 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
98 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
99 if x1 == x2 { |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
100 return func(float64) float64 { |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
101 return 0.5 * (y1 + y2) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
102 } |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
103 } |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
104 a := (y1 - y2) / (x1 - x2) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
105 b := y1 - x1*a |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
106 return func(x float64) float64 { |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
107 return x*a + b |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
108 } |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
109 } |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
110 |
4540
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
111 func dumpPolygonsSVG( |
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
112 w io.Writer, |
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
113 min, max octree.Vertex, |
4541
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
114 classPolygons [][]octree.LineStringZ, |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
115 ) (err error) { |
4540
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
116 |
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
117 ratio := (max.X - min.X) / (max.Y - min.Y) |
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
118 |
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
119 log.Printf("ratio: %.2f\n", ratio) |
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
120 |
4547
6247f5a42226
Increased resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4546
diff
changeset
|
121 const width = 50000 |
4541
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
122 height := int(math.Ceil(width * ratio)) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
123 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
124 px := linear(min.X, 0, max.X, width) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
125 py := linear(min.Y, float64(height), max.Y, 0) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
126 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
127 out := bufio.NewWriter(w) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
128 defer func() { err = out.Flush() }() |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
129 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
130 canvas := svg.New(out) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
131 canvas.Start(width, height) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
132 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
133 rnd := rand.New(rand.NewSource(42)) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
134 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
135 for _, polygons := range classPolygons { |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
136 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
137 r := byte(rnd.Intn(256)) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
138 g := byte(rnd.Intn(256)) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
139 b := byte(rnd.Intn(256)) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
140 style := fmt.Sprintf("fill:#%02x%02x%02x", r, g, b) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
141 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
142 for _, polygon := range polygons { |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
143 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
144 x := make([]int, len(polygon)) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
145 y := make([]int, len(polygon)) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
146 for i, p := range polygon { |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
147 x[i] = int(math.Round(px(p.X))) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
148 y[i] = int(math.Round(py(p.Y))) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
149 } |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
150 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
151 canvas.Polygon(x, y, style) |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
152 } |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
153 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
154 } |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
155 |
53b55f811666
Dump generated polygons as SVG.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4540
diff
changeset
|
156 canvas.End() |
4540
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
157 |
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
158 return nil |
4534
b7d31a449dd2
Find out how many inner triangles can be skipped because they are totally inside a class polygon.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4533
diff
changeset
|
159 } |
b7d31a449dd2
Find out how many inner triangles can be skipped because they are totally inside a class polygon.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4533
diff
changeset
|
160 |
4550
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
161 func dumpArcsSVG( |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
162 w io.Writer, |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
163 min, max octree.Vertex, |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
164 cuts [][]indexedArc, |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
165 arcs []octree.LineStringZ, |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
166 ) (err error) { |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
167 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
168 ratio := (max.X - min.X) / (max.Y - min.Y) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
169 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
170 log.Printf("ratio: %.2f\n", ratio) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
171 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
172 const width = 50000 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
173 height := int(math.Ceil(width * ratio)) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
174 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
175 px := linear(min.X, 0, max.X, width) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
176 py := linear(min.Y, float64(height), max.Y, 0) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
177 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
178 out := bufio.NewWriter(w) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
179 defer func() { err = out.Flush() }() |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
180 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
181 canvas := svg.New(out) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
182 canvas.Start(width, height) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
183 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
184 rnd := rand.New(rand.NewSource(42)) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
185 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
186 for _, cut := range cuts { |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
187 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
188 usedArcs := map[int32]struct{}{} |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
189 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
190 r := byte(rnd.Intn(256)) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
191 g := byte(rnd.Intn(256)) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
192 b := byte(rnd.Intn(256)) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
193 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
194 style := fmt.Sprintf("fill:none;stroke:#%02x%02x%02x", r, g, b) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
195 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
196 for i := range cut { |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
197 idx := cut[i].arc |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
198 if _, already := usedArcs[idx]; already { |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
199 continue |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
200 } |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
201 usedArcs[idx] = struct{}{} |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
202 arc := arcs[idx] |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
203 x := make([]int, len(arc)) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
204 y := make([]int, len(arc)) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
205 for i, p := range arc { |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
206 x[i] = int(math.Round(px(p.X))) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
207 y[i] = int(math.Round(py(p.Y))) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
208 } |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
209 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
210 canvas.Polyline(x, y, style) |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
211 } |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
212 } |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
213 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
214 canvas.End() |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
215 |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
216 return nil |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
217 } |
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
218 |
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
219 func main() { |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
220 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
221 heights, err := octree.ParseClassBreaks(classBreaks) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
222 check(err) |
4533
3998a9ab69c6
Find out which triangles are fully inside classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4532
diff
changeset
|
223 log.Printf("num classes: %d\n", len(heights)) |
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
224 |
4533
3998a9ab69c6
Find out which triangles are fully inside classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4532
diff
changeset
|
225 start := time.Now() |
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
226 xyz, err := loadXYZ(os.Stdin) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
227 check(err) |
4533
3998a9ab69c6
Find out which triangles are fully inside classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4532
diff
changeset
|
228 log.Printf("loading took %v\n", time.Since(start)) |
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
229 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
230 log.Printf("num vertices: %d\n", len(xyz)) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
231 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
232 min, max := minMax(xyz) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
233 |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
234 log.Printf("(%.2f, %.2f, %.2f) - (%.2f, %.2f, %.2f)\n", |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
235 min.X, min.Y, min.Z, |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
236 max.X, max.Y, max.Z) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
237 |
4533
3998a9ab69c6
Find out which triangles are fully inside classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4532
diff
changeset
|
238 start = time.Now() |
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
239 tri, err := octree.Triangulate(xyz) |
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
240 check(err) |
4536
3130c005abef
Measure time of triangulation correctly.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4535
diff
changeset
|
241 log.Printf("triangulation took %v\n", time.Since(start)) |
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
242 |
4533
3998a9ab69c6
Find out which triangles are fully inside classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4532
diff
changeset
|
243 log.Printf("number of triangles: %d\n", len(tri.Triangles)/3) |
3998a9ab69c6
Find out which triangles are fully inside classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4532
diff
changeset
|
244 |
3998a9ab69c6
Find out which triangles are fully inside classes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4532
diff
changeset
|
245 start = time.Now() |
4550
aa2d0006e742
Write iso lines between classes to SVG for debugging.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4549
diff
changeset
|
246 polygons := intersectTriangles(tri, heights, min, max) |
4532
769f723c2581
Cut triangles against class breaks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4531
diff
changeset
|
247 log.Printf("intersecting triangles took %v.\n", time.Since(start)) |
4540
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
248 |
e01b6e7cbe7d
Detect isolated triangles as standalone areas.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4539
diff
changeset
|
249 check(dumpPolygonsSVG(os.Stdout, min, max, polygons)) |
4531
c9b6be8d81c8
Started a branch to calculate the iso areas for a given triangulation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
250 } |