Mercurial > gemma
comparison pkg/imports/isr.go @ 5436:a65b0891e8fd marking-single-beam
Fixed SQL errors in ISR job.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 13 Jul 2021 11:27:17 +0200 |
parents | fc79622783a7 |
children | 5f47eeea988d |
comparison
equal
deleted
inserted
replaced
5435:351d38269e4e | 5436:a65b0891e8fd |
---|---|
63 deleteIsoAreasSQL = ` | 63 deleteIsoAreasSQL = ` |
64 DELETE FROM waterway.sounding_results_iso_areas | 64 DELETE FROM waterway.sounding_results_iso_areas |
65 WHERE sounding_result_id = $1` | 65 WHERE sounding_result_id = $1` |
66 | 66 |
67 fetchMarkingPointsSQL = ` | 67 fetchMarkingPointsSQL = ` |
68 SELECT ST_AsBinary(ST_Transform(points, 4326)) | 68 SELECT ST_AsBinary(points::geometry(MULTIPOINTZ)) |
69 FROM waterway.sounding_results_marking_points | 69 FROM waterway.sounding_results_marking_points |
70 WHERE sounding_result_id = $1` | 70 WHERE sounding_result_id = $1` |
71 | 71 |
72 deleteMarkingPointsSQL = ` | 72 deleteMarkingPointsSQL = ` |
73 DELETE FROM waterway.sounding_results_marking_points | 73 DELETE FROM waterway.sounding_results_marking_points |
163 | 163 |
164 for i := range bns { | 164 for i := range bns { |
165 start := time.Now() | 165 start := time.Now() |
166 feedback.Info("Processing bottleneck '%s' ...", bns[i].bn) | 166 feedback.Info("Processing bottleneck '%s' ...", bns[i].bn) |
167 err := isr.processBottleneck( | 167 err := isr.processBottleneck( |
168 ctx, conn, isrs, | 168 ctx, conn, feedback, |
169 isrs, | |
169 heights, | 170 heights, |
170 &bns[i], | 171 &bns[i], |
171 ) | 172 ) |
172 feedback.Info("Processing took %v.", time.Since(start)) | 173 feedback.Info("Processing took %v.", time.Since(start)) |
173 if err != nil { | 174 if err != nil { |
222 } | 223 } |
223 | 224 |
224 func (isr *IsoRefresh) processBottleneck( | 225 func (isr *IsoRefresh) processBottleneck( |
225 ctx context.Context, | 226 ctx context.Context, |
226 conn *sql.Conn, | 227 conn *sql.Conn, |
228 feedback Feedback, | |
227 isrs *isrStmts, | 229 isrs *isrStmts, |
228 heights mesh.ClassBreaks, | 230 heights mesh.ClassBreaks, |
229 bn *bottleneckSoundingResults, | 231 bn *bottleneckSoundingResults, |
230 ) error { | 232 ) error { |
231 // Do one transaction per bottleneck. | 233 // Do one transaction per bottleneck. |
241 fetchMarkingPoints = tx.StmtContext(ctx, isrs.fetchMarkingPoints) | 243 fetchMarkingPoints = tx.StmtContext(ctx, isrs.fetchMarkingPoints) |
242 deleteMarkingPoints = tx.StmtContext(ctx, isrs.deleteMarkingPoints) | 244 deleteMarkingPoints = tx.StmtContext(ctx, isrs.deleteMarkingPoints) |
243 insertMarkingPoints = tx.StmtContext(ctx, isrs.insertMarkingPoints) | 245 insertMarkingPoints = tx.StmtContext(ctx, isrs.insertMarkingPoints) |
244 ) | 246 ) |
245 | 247 |
248 var markings, beams int | |
249 | |
246 // For all sounding results in bottleneck. | 250 // For all sounding results in bottleneck. |
247 for _, sr := range bn.srs { | 251 for _, sr := range bn.srs { |
248 switch sr.surveyType { | 252 switch sr.surveyType { |
249 case models.SurveyTypeMarking: | 253 case models.SurveyTypeMarking: |
254 markings++ | |
250 | 255 |
251 // Read all points back in. | 256 // Read all points back in. |
252 | 257 |
253 var points mesh.MultiPointZ | 258 var points mesh.MultiPointZ |
254 | 259 |
295 return err | 300 return err |
296 } | 301 } |
297 } | 302 } |
298 | 303 |
299 case models.SurveyTypeMultiBeam, models.SurveyTypeSingleBeam: | 304 case models.SurveyTypeMultiBeam, models.SurveyTypeSingleBeam: |
305 beams++ | |
306 | |
300 tree, err := mesh.FetchMeshDirectly(ctx, tx, sr.id) | 307 tree, err := mesh.FetchMeshDirectly(ctx, tx, sr.id) |
301 if err != nil { | 308 if err != nil { |
302 return err | 309 return err |
303 } | 310 } |
304 hs := heights.ExtrapolateClassBreaks(tree.Min().Z, tree.Max().Z).Dedup() | 311 hs := heights.ExtrapolateClassBreaks(tree.Min().Z, tree.Max().Z).Dedup() |
305 | 312 |
306 // Delete the old iso areas. | 313 // Delete the old iso areas. |
307 if _, err := deleteAreas.ExecContext(ctx, sr); err != nil { | 314 if _, err := deleteAreas.ExecContext(ctx, sr.id); err != nil { |
308 return err | 315 return err |
309 } | 316 } |
310 | 317 |
311 // Calculate and store the iso areas. | 318 // Calculate and store the iso areas. |
312 box := mesh.Box2D{ | 319 box := mesh.Box2D{ |
324 if len(a) == 0 { | 331 if len(a) == 0 { |
325 continue | 332 continue |
326 } | 333 } |
327 if _, err := insertAreas.ExecContext( | 334 if _, err := insertAreas.ExecContext( |
328 ctx, | 335 ctx, |
329 sr, hs[i], tree.EPSG(), | 336 sr.id, hs[i], tree.EPSG(), |
330 a.AsWKB(), | 337 a.AsWKB(), |
331 contourTolerance, | 338 contourTolerance, |
332 ); err != nil { | 339 ); err != nil { |
333 return err | 340 return err |
334 } | 341 } |
335 } | 342 } |
336 default: | 343 default: |
337 log.Printf("error: unknown survey type '%s'\n", sr.surveyType) | 344 log.Printf("error: unknown survey type '%s'\n", sr.surveyType) |
338 } | 345 } |
339 } | 346 } |
347 feedback.Info("Scan types: Single/Multi: %d Marking: %d", beams, markings) | |
340 | 348 |
341 return tx.Commit() | 349 return tx.Commit() |
342 } | 350 } |