Mercurial > gemma
comparison cmd/isoareas/main.go @ 4556:04eba9dc917d iso-areas
Use colors from configuration instead of random rgb values.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 01 Oct 2019 17:37:54 +0200 |
parents | 1c5c6ffab886 |
children | 17cba8b447a6 |
comparison
equal
deleted
inserted
replaced
4555:1c5c6ffab886 | 4556:04eba9dc917d |
---|---|
29 "time" | 29 "time" |
30 | 30 |
31 svg "github.com/ajstarks/svgo" | 31 svg "github.com/ajstarks/svgo" |
32 "github.com/fogleman/contourmap" | 32 "github.com/fogleman/contourmap" |
33 | 33 |
34 "gemma.intevation.de/gemma/pkg/models" | |
34 "gemma.intevation.de/gemma/pkg/octree" | 35 "gemma.intevation.de/gemma/pkg/octree" |
35 ) | 36 ) |
36 | 37 |
37 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` | 38 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` |
38 | 39 |
97 } | 98 } |
98 } | 99 } |
99 | 100 |
100 func dumpContoursSVG( | 101 func dumpContoursSVG( |
101 w io.Writer, | 102 w io.Writer, |
103 heights []float64, | |
104 colors models.ColorValues, | |
102 contours [][]contourmap.Contour, | 105 contours [][]contourmap.Contour, |
103 ) (err error) { | 106 ) (err error) { |
104 | 107 |
105 var ( | 108 var ( |
106 minX = math.MaxFloat64 | 109 minX = math.MaxFloat64 |
141 defer func() { err = out.Flush() }() | 144 defer func() { err = out.Flush() }() |
142 | 145 |
143 canvas := svg.New(out) | 146 canvas := svg.New(out) |
144 canvas.Start(width, height) | 147 canvas.Start(width, height) |
145 | 148 |
146 rnd := rand.New(rand.NewSource(42)) | 149 for j, c := range contours { |
147 | 150 |
148 for _, c := range contours { | 151 h := heights[j] |
149 | 152 col := colors.Clip(h) |
150 r := byte(rnd.Intn(256)) | 153 |
151 g := byte(rnd.Intn(256)) | 154 style := fmt.Sprintf("fill:#%02x%02x%02x", col.R, col.G, col.B) |
152 b := byte(rnd.Intn(256)) | |
153 style := fmt.Sprintf("fill:#%02x%02x%02x", r, g, b) | |
154 | 155 |
155 for _, r := range c { | 156 for _, r := range c { |
156 x := make([]int, len(r)) | 157 x := make([]int, len(r)) |
157 y := make([]int, len(r)) | 158 y := make([]int, len(r)) |
158 for i, p := range r { | 159 for i, p := range r { |
282 | 283 |
283 flag.Float64Var(&cellSize, "cellsize", 0.5, "width/height of raster cell [m]") | 284 flag.Float64Var(&cellSize, "cellsize", 0.5, "width/height of raster cell [m]") |
284 | 285 |
285 flag.Parse() | 286 flag.Parse() |
286 | 287 |
287 heights, err := octree.ParseClassBreaks(classBreaks) | 288 colors, err := models.ParseColorValues(classBreaks) |
288 check(err) | 289 check(err) |
290 | |
291 heights := colors.Heights() | |
292 | |
289 log.Printf("num classes: %d\n", len(heights)) | 293 log.Printf("num classes: %d\n", len(heights)) |
290 | |
291 start := time.Now() | 294 start := time.Now() |
292 xyz, err := loadXYZ(os.Stdin) | 295 xyz, err := loadXYZ(os.Stdin) |
293 check(err) | 296 check(err) |
294 log.Printf("loading took %v\n", time.Since(start)) | 297 log.Printf("loading took %v\n", time.Since(start)) |
295 | 298 |
421 close(cnts) | 424 close(cnts) |
422 | 425 |
423 wg.Wait() | 426 wg.Wait() |
424 | 427 |
425 log.Printf("Calculating contours took %v.\n", time.Since(start)) | 428 log.Printf("Calculating contours took %v.\n", time.Since(start)) |
426 check(dumpContoursSVG(os.Stdout, contours)) | 429 check(dumpContoursSVG(os.Stdout, heights, colors, contours)) |
427 | 430 |
428 /* | 431 /* |
429 | 432 |
430 start = time.Now() | 433 start = time.Now() |
431 polygons := intersectTriangles(tri, heights, min, max) | 434 polygons := intersectTriangles(tri, heights, min, max) |