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 }