Mercurial > gemma
changeset 4741:5164b4450c42
Removed redundant code in stacking iso polygons correctly.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 18 Oct 2019 12:11:45 +0200 |
parents | 2440d2f86f4e |
children | b88ab93dcb2c |
files | pkg/octree/areas.go |
diffstat | 1 files changed, 7 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/octree/areas.go Fri Oct 18 12:04:04 2019 +0200 +++ b/pkg/octree/areas.go Fri Oct 18 12:11:45 2019 +0200 @@ -228,10 +228,6 @@ children []*bboxNode } -type bboxForest struct { - roots []*bboxNode -} - func (cnt contour) contains(o contour) bool { return contains(cnt, o[0].X, o[0].Y) || contains(cnt, o[len(o)/2].X, o[len(o)/2].Y) @@ -313,49 +309,8 @@ bn.children = append(bn.children, nr) } -func (bf *bboxForest) insert(cnt contour) { - box := cnt.bbox() - - // check if roots are inside new - var nr *bboxNode - - for i, r := range bf.roots { - if r.box.Inside(box) && cnt.contains(r.cnt) { - if nr == nil { - nr = &bboxNode{box: box, cnt: cnt} - } - nr.children = append(nr.children, r) - bf.roots[i] = nil - } - } - - // we have a new root - if nr != nil { - // compact the list - for i := len(bf.roots) - 1; i >= 0; i-- { - if bf.roots[i] == nil { - if i < len(bf.roots)-1 { - copy(bf.roots[i:], bf.roots[i+1:]) - } - bf.roots[len(bf.roots)-1] = nil - bf.roots = bf.roots[:len(bf.roots)-1] - } - } - bf.roots = append(bf.roots, nr) - return - } - - // check if new is inside an old - for _, r := range bf.roots { - if box.Inside(r.box) && r.cnt.contains(cnt) { - r.insert(cnt, box) - return - } - } - - // its a new root node. - nr = &bboxNode{box: box, cnt: cnt} - bf.roots = append(bf.roots, nr) +func (bn *bboxNode) insertRoot(cnt contour) { + bn.insert(cnt, cnt.bbox()) } type bboxOutFunc func(contour, []contour) @@ -378,8 +333,8 @@ } } -func (bf *bboxForest) generate(out bboxOutFunc) { - for _, r := range bf.roots { +func (bn *bboxNode) generateRoot(out bboxOutFunc) { + for _, r := range bn.children { r.generate(out) } } @@ -389,10 +344,10 @@ reprojX, reprojY func(float64) float64, ) wkb.MultiPolygonGeom { - var bf bboxForest + var forest bboxNode for _, cnt := range cnts { - bf.insert(contour(cnt)) + forest.insertRoot(contour(cnt)) } //log.Printf("cnts: %d roots: %d\n", len(cnts), len(bf.roots)) @@ -434,7 +389,7 @@ mp = append(mp, polygon) } - bf.generate(out) + forest.generateRoot(out) return mp }