comparison pkg/controllers/diff.go @ 2574:2833ff156cb2

Morphological differences: Moved loading of clipping polygon into octree package.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 11 Mar 2019 14:36:34 +0100
parents 7686c7c23506
children 59e7a011d347
comparison
equal deleted inserted replaced
2573:4486ca003b55 2574:2833ff156cb2
16 import ( 16 import (
17 "database/sql" 17 "database/sql"
18 "fmt" 18 "fmt"
19 "log" 19 "log"
20 "net/http" 20 "net/http"
21 "sync"
21 "time" 22 "time"
22 23
23 "golang.org/x/sync/semaphore" 24 "golang.org/x/sync/semaphore"
24 25
25 "gemma.intevation.de/gemma/pkg/common" 26 "gemma.intevation.de/gemma/pkg/common"
101 102
102 start = time.Now() 103 start = time.Now()
103 points := minuendTree.Diff(subtrahendTree) 104 points := minuendTree.Diff(subtrahendTree)
104 log.Printf("info: A - B took %v\n", time.Since(start)) 105 log.Printf("info: A - B took %v\n", time.Since(start))
105 106
106 start = time.Now() 107 // The Triangulation and the loading of the clipping
107 var tri *octree.Triangulation 108 // polygon can be done concurrently.
108 if tri, err = points.Triangulate(); err != nil { 109
110 jobs := make(chan func())
111
112 wg := new(sync.WaitGroup)
113 for i := 0; i < 2; i++ {
114 wg.Add(1)
115 go func() {
116 defer wg.Done()
117 for job := range jobs {
118 job()
119 }
120 }()
121 }
122
123 var (
124 tri *octree.Triangulation
125 triErr error
126 clip *octree.Polygon
127 clipErr error
128 )
129
130 jobs <- func() {
131 start := time.Now()
132 tri, triErr = points.Triangulate()
133 log.Printf("info: triangulation took %v\n", time.Since(start))
134 }
135
136 jobs <- func() {
137 start := time.Now()
138 clip, clipErr = octree.LoadClippingPolygon(
139 ctx, conn,
140 minuendTree.EPSG,
141 dci.Bottleneck,
142 dci.Minuend.Time,
143 dci.Subtrahend.Time)
144 log.Printf("info: loading clipping polygon took %v\n", time.Since(start))
145 }
146 close(jobs)
147 wg.Wait()
148
149 switch {
150 case triErr != nil && clipErr != nil:
151 err = fmt.Errorf("%v %v", triErr, clipErr)
152 return
153 case triErr != nil:
154 err = triErr
155 return
156 case clipErr != nil:
157 err = clipErr
109 return 158 return
110 } 159 }
111 log.Printf("triangulation took %v\n", time.Since(start))
112
113 _ = tri
114 160
115 // TODO: Implement me! 161 // TODO: Implement me!
116 162
117 return 163 return
118 } 164 }