Mercurial > gemma
comparison pkg/imports/sr.go @ 5305:1a565f8a935a zpg-exception
Adjusted Go code to establish ZPG exception during SR import.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 19 May 2021 17:26:02 +0200 |
parents | 56c589f7435d |
children | 0e8fd0e5bf36 |
comparison
equal
deleted
inserted
replaced
5304:6cf4fdaa93f9 | 5305:1a565f8a935a |
---|---|
132 INSERT INTO waterway.sounding_results ( | 132 INSERT INTO waterway.sounding_results ( |
133 bottleneck_id, | 133 bottleneck_id, |
134 date_info, | 134 date_info, |
135 depth_reference, | 135 depth_reference, |
136 area, | 136 area, |
137 surtyp | 137 surtyp, |
138 zpg_exception | |
138 ) SELECT | 139 ) SELECT |
139 bottleneck_id, | 140 bottleneck_id, |
140 $2::date, | 141 $2::date, |
141 $3, | 142 $3, |
142 (SELECT | 143 (SELECT |
143 CASE WHEN $5::bytea IS NULL THEN | 144 CASE WHEN $5::bytea IS NULL THEN |
144 ST_Transform(ST_ConcaveHull(ST_Force2D(ST_GeomFromWKB($4, $6::integer)), 0.7), 4326)::geography | 145 ST_Transform(ST_ConcaveHull(ST_Force2D(ST_GeomFromWKB($4, $6::integer)), 0.7), 4326)::geography |
145 ELSE | 146 ELSE |
146 ST_MakeValid(ST_Transform(ST_GeomFromWKB($5, $6::integer), 4326))::geography | 147 ST_MakeValid(ST_Transform(ST_GeomFromWKB($5, $6::integer), 4326))::geography |
147 END), | 148 END), |
148 $7 | 149 $7, |
150 $8 | |
149 FROM waterway.bottlenecks | 151 FROM waterway.bottlenecks |
150 WHERE objnam = $1 AND validity @> CAST($2 AS timestamptz) | 152 WHERE objnam = $1 AND validity @> CAST($2 AS timestamptz) |
151 RETURNING | 153 RETURNING |
152 id, | 154 id, |
153 ST_X(ST_Centroid(area::geometry)), | 155 ST_X(ST_Centroid(area::geometry)), |
205 WHERE bns.objnam = $1 | 207 WHERE bns.objnam = $1 |
206 AND bns.validity @> CAST($2 AS timestamptz) | 208 AND bns.validity @> CAST($2 AS timestamptz) |
207 AND grwl.depth_reference like 'LDC%' | 209 AND grwl.depth_reference like 'LDC%' |
208 ` | 210 ` |
209 | 211 |
212 selectZPGExceptionAllowedSQL = ` | |
213 SELECT country IN ('BG', 'RO') FROM users.list_users WHERE username = current_user` | |
214 | |
210 reprojectPointsSingleBeamSQL = ` | 215 reprojectPointsSingleBeamSQL = ` |
211 SELECT | 216 SELECT |
212 ST_AsBinary( | 217 ST_AsBinary( |
213 ST_Transform( | 218 ST_Transform( |
214 ST_GeomFromWKB($1, $2::integer), | 219 ST_GeomFromWKB($1, $2::integer), |
291 if sr.negateZ() { | 296 if sr.negateZ() { |
292 xform = negateZTransform | 297 xform = negateZTransform |
293 } else { | 298 } else { |
294 xform = identityTransform | 299 xform = identityTransform |
295 } | 300 } |
301 | |
302 var zpgException bool | |
296 | 303 |
297 if m.DepthReference == "ZPG" { | 304 if m.DepthReference == "ZPG" { |
298 feedback.Info("Found ZPG as reference system -> translating Z values to LDC") | 305 feedback.Info("Found ZPG as reference system -> translating Z values to LDC") |
299 var ldc float64 | 306 var ldc float64 |
300 var depthReference string | 307 var depthReference string |
306 &ldc, | 313 &ldc, |
307 &depthReference, | 314 &depthReference, |
308 ) | 315 ) |
309 switch { | 316 switch { |
310 case err == sql.ErrNoRows: | 317 case err == sql.ErrNoRows: |
311 return nil, errors.New("cannot load LDC value") | 318 if err := conn.QueryRowContext( |
319 ctx, selectZPGExceptionAllowedSQL).Scan(&zpgException); err != nil { | |
320 return nil, err | |
321 } | |
322 if !zpgException { | |
323 return nil, errors.New("cannot load LDC value") | |
324 } | |
325 feedback.Warn("Not LCD found, but ZPG exception granted") | |
326 | |
312 case err != nil: | 327 case err != nil: |
313 return nil, err | 328 return nil, err |
314 } | 329 } |
315 | 330 |
316 // LDC is cm. The data is in m. | 331 if !zpgException { |
317 ldc /= 100 | 332 // LDC is cm. The data is in m. |
318 xform = chainTransforms( | 333 ldc /= 100 |
319 xform, | 334 xform = chainTransforms( |
320 func(v mesh.Vertex) mesh.Vertex { | 335 xform, |
321 return mesh.Vertex{X: v.X, Y: v.Y, Z: v.Z + ldc} | 336 func(v mesh.Vertex) mesh.Vertex { |
322 }) | 337 return mesh.Vertex{X: v.X, Y: v.Y, Z: v.Z + ldc} |
338 }) | |
339 } | |
323 m.DepthReference = depthReference | 340 m.DepthReference = depthReference |
324 } | 341 } |
325 | 342 |
326 if err := m.Validate(ctx, conn); err != nil { | 343 if err := m.Validate(ctx, conn); err != nil { |
327 return nil, common.ToError(err) | 344 return nil, common.ToError(err) |
370 feedback, | 387 feedback, |
371 importID, | 388 importID, |
372 m, | 389 m, |
373 xyz, | 390 xyz, |
374 boundary, | 391 boundary, |
392 zpgException, | |
375 ) | 393 ) |
376 if err != nil { | 394 if err != nil { |
377 return nil, err | 395 return nil, err |
378 } | 396 } |
379 | 397 |
395 feedback Feedback, | 413 feedback Feedback, |
396 importID int64, | 414 importID int64, |
397 m *models.SoundingResultMeta, | 415 m *models.SoundingResultMeta, |
398 xyz mesh.MultiPointZ, | 416 xyz mesh.MultiPointZ, |
399 boundary polygonSlice, | 417 boundary polygonSlice, |
418 zpgException bool, | |
400 ) (interface{}, error) { | 419 ) (interface{}, error) { |
401 | 420 |
402 if sr.singleBeam() { | 421 if sr.singleBeam() { |
403 feedback.Info("Processing as single beam scan.") | 422 feedback.Info("Processing as single beam scan.") |
404 } else { | 423 } else { |
624 m.DepthReference, | 643 m.DepthReference, |
625 nil, | 644 nil, |
626 clippingPolygonWKB, | 645 clippingPolygonWKB, |
627 epsg, | 646 epsg, |
628 sr.surtype(), | 647 sr.surtype(), |
648 zpgException, | |
629 ).Scan( | 649 ).Scan( |
630 &id, | 650 &id, |
631 &lat, | 651 &lat, |
632 &lon, | 652 &lon, |
633 &dummy, | 653 &dummy, |