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