Mercurial > gemma
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 } |