comparison pkg/imports/sr.go @ 4629:7acb03e8a737

SR import: Store in sounding_result table if import is single or multi beam.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 10 Oct 2019 17:23:00 +0200
parents c657dec6b0fa
children 0ed1489af8b6
comparison
equal deleted inserted replaced
4628:28999c7c0c18 4629:7acb03e8a737
122 insertHullSQL = ` 122 insertHullSQL = `
123 INSERT INTO waterway.sounding_results ( 123 INSERT INTO waterway.sounding_results (
124 bottleneck_id, 124 bottleneck_id,
125 date_info, 125 date_info,
126 depth_reference, 126 depth_reference,
127 area 127 area,
128 surtyp
128 ) SELECT 129 ) SELECT
129 bottleneck_id, 130 bottleneck_id,
130 $2::date, 131 $2::date,
131 $3, 132 $3,
132 (SELECT 133 (SELECT
133 CASE WHEN $5::bytea IS NULL THEN 134 CASE WHEN $5::bytea IS NULL THEN
134 ST_Transform(ST_ConcaveHull(ST_Force2D(ST_GeomFromWKB($4, $6::integer)), 0.7), 4326)::geography 135 ST_Transform(ST_ConcaveHull(ST_Force2D(ST_GeomFromWKB($4, $6::integer)), 0.7), 4326)::geography
135 ELSE 136 ELSE
136 ST_MakeValid(ST_Transform(ST_GeomFromWKB($5, $6::integer), 4326))::geography 137 ST_MakeValid(ST_Transform(ST_GeomFromWKB($5, $6::integer), 4326))::geography
137 END) 138 END),
139 $7
138 FROM waterway.bottlenecks 140 FROM waterway.bottlenecks
139 WHERE objnam = $1 AND validity @> CAST($2 AS timestamptz) 141 WHERE objnam = $1 AND validity @> CAST($2 AS timestamptz)
140 RETURNING 142 RETURNING
141 id, 143 id,
142 ST_X(ST_Centroid(area::geometry)), 144 ST_X(ST_Centroid(area::geometry)),
212 214
213 func (sr *SoundingResult) singleBeam() bool { 215 func (sr *SoundingResult) singleBeam() bool {
214 return sr.SingleBeam != nil && *sr.SingleBeam 216 return sr.SingleBeam != nil && *sr.SingleBeam
215 } 217 }
216 218
219 func (sr *SoundingResult) surtype() string {
220 if sr.singleBeam() {
221 return "single"
222 }
223 return "multi"
224 }
225
217 func (sr *SoundingResult) negateZ() bool { 226 func (sr *SoundingResult) negateZ() bool {
218 return sr.NegateZ != nil && *sr.NegateZ 227 return sr.NegateZ != nil && *sr.NegateZ
219 } 228 }
220 229
221 // Do executes the actual sounding result import. 230 // Do executes the actual sounding result import.
331 if err != nil { 340 if err != nil {
332 return nil, err 341 return nil, err
333 } 342 }
334 defer tx.Rollback() 343 defer tx.Rollback()
335 344
336 var summary interface{} 345 summary, err := sr.processScan(
337 346 ctx,
338 if sr.singleBeam() { 347 tx,
339 summary, err = sr.processScan( 348 feedback,
340 ctx, 349 importID,
341 tx, 350 m,
342 feedback, 351 xyz,
343 true, 352 boundary,
344 importID, 353 )
345 m,
346 xyz,
347 boundary,
348 )
349 } else {
350 summary, err = sr.processScan(
351 ctx,
352 tx,
353 feedback,
354 false,
355 importID,
356 m,
357 xyz,
358 boundary,
359 )
360 }
361 if err != nil { 354 if err != nil {
362 return nil, err 355 return nil, err
363 } 356 }
364 357
365 if err = tx.Commit(); err != nil { 358 if err = tx.Commit(); err != nil {
376 369
377 func (sr *SoundingResult) processScan( 370 func (sr *SoundingResult) processScan(
378 ctx context.Context, 371 ctx context.Context,
379 tx *sql.Tx, 372 tx *sql.Tx,
380 feedback Feedback, 373 feedback Feedback,
381 singleBeam bool,
382 importID int64, 374 importID int64,
383 m *models.SoundingResultMeta, 375 m *models.SoundingResultMeta,
384 xyz octree.MultiPointZ, 376 xyz octree.MultiPointZ,
385 boundary polygonSlice, 377 boundary polygonSlice,
386 ) (interface{}, error) { 378 ) (interface{}, error) {
387 379
388 if singleBeam { 380 if sr.singleBeam() {
389 feedback.Info("Processing as single beam scan.") 381 feedback.Info("Processing as single beam scan.")
390 } else { 382 } else {
391 feedback.Info("Processing as multi beam scan.") 383 feedback.Info("Processing as multi beam scan.")
392 } 384 }
393 385
496 str.Build(tin) 488 str.Build(tin)
497 489
498 removed = str.Clip(&clippingPolygon) 490 removed = str.Clip(&clippingPolygon)
499 } 491 }
500 492
501 if singleBeam { 493 if sr.singleBeam() {
502 494
503 // Build the first mesh to generate random points on. 495 // Build the first mesh to generate random points on.
504 496
505 feedback.Info("Build virtual DEM based on original XYZ data.") 497 feedback.Info("Build virtual DEM based on original XYZ data.")
506 498
602 m.Date.Time, 594 m.Date.Time,
603 m.DepthReference, 595 m.DepthReference,
604 nil, 596 nil,
605 clippingPolygonWKB, 597 clippingPolygonWKB,
606 epsg, 598 epsg,
599 sr.surtype(),
607 ).Scan( 600 ).Scan(
608 &id, 601 &id,
609 &lat, 602 &lat,
610 &lon, 603 &lon,
611 &dummy, 604 &dummy,