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)