comparison pkg/imports/sr.go @ 3656:2a079d0a71c1

Ensure sounding results are associated to matching bottleneck version
author Tom Gottfried <tom@intevation.de>
date Thu, 13 Jun 2019 19:13:42 +0200
parents 02951a62e8c6
children 66f2cb789905
comparison
equal deleted inserted replaced
3649:fb8a53c7c6d3 3656:2a079d0a71c1
30 "path/filepath" 30 "path/filepath"
31 "strconv" 31 "strconv"
32 "strings" 32 "strings"
33 "time" 33 "time"
34 34
35 "github.com/jackc/pgx"
36 shp "github.com/jonas-p/go-shp" 35 shp "github.com/jonas-p/go-shp"
37 36
38 "gemma.intevation.de/gemma/pkg/common" 37 "gemma.intevation.de/gemma/pkg/common"
39 "gemma.intevation.de/gemma/pkg/misc" 38 "gemma.intevation.de/gemma/pkg/misc"
40 "gemma.intevation.de/gemma/pkg/models" 39 "gemma.intevation.de/gemma/pkg/models"
108 relation = 'waterway.sounding_results'::regclass)` 107 relation = 'waterway.sounding_results'::regclass)`
109 108
110 insertHullSQL = ` 109 insertHullSQL = `
111 INSERT INTO waterway.sounding_results ( 110 INSERT INTO waterway.sounding_results (
112 bottleneck_id, 111 bottleneck_id,
112 bottleneck_validity,
113 date_info, 113 date_info,
114 depth_reference, 114 depth_reference,
115 area 115 area
116 ) SELECT 116 ) SELECT
117 (SELECT id FROM waterway.bottlenecks WHERE objnam = $1 117 bottleneck_id,
118 AND validity @> CAST($2 AS timestamptz)), 118 validity,
119 $2::date, 119 $2::date,
120 $3, 120 $3,
121 (SELECT 121 (SELECT
122 CASE WHEN $5::bytea IS NULL THEN 122 CASE WHEN $5::bytea IS NULL THEN
123 ST_Transform(ST_ConcaveHull(ST_Force2D(ST_GeomFromWKB($4, $6::integer)), 0.7), 4326)::geography 123 ST_Transform(ST_ConcaveHull(ST_Force2D(ST_GeomFromWKB($4, $6::integer)), 0.7), 4326)::geography
124 ELSE 124 ELSE
125 ST_Transform(ST_GeomFromWKB($5, $6::integer), 4326)::geography 125 ST_Transform(ST_GeomFromWKB($5, $6::integer), 4326)::geography
126 END) 126 END)
127 FROM waterway.bottlenecks
128 WHERE objnam = $1 AND validity @> CAST($2 AS timestamptz)
127 RETURNING 129 RETURNING
128 id, 130 id,
129 ST_X(ST_Centroid(area::geometry)), 131 ST_X(ST_Centroid(area::geometry)),
130 ST_Y(ST_Centroid(area::geometry)), 132 ST_Y(ST_Centroid(area::geometry)),
131 best_utm(area), 133 best_utm(area),
417 &epsg, 419 &epsg,
418 &hull, 420 &hull,
419 ) 421 )
420 xyz, boundary = nil, nil // not need from now on. 422 xyz, boundary = nil, nil // not need from now on.
421 feedback.Info("Calculating hull took %s.", time.Since(start)) 423 feedback.Info("Calculating hull took %s.", time.Since(start))
422 if err != nil { 424 switch {
423 if e, isPgErr := err.(pgx.PgError); isPgErr && 425 case err == sql.ErrNoRows:
424 e.Code == notNullViolation && 426 return nil, fmt.Errorf(
425 e.SchemaName == "waterway" && 427 "No bottleneck matching given name and time available")
426 e.TableName == "sounding_results" && 428 case err != nil:
427 e.ColumnName == "bottleneck_id" {
428 return nil, fmt.Errorf(
429 "No bottleneck matching given name and time available")
430 }
431 return nil, err 429 return nil, err
432 } 430 }
433 feedback.Info("Best suited UTM EPSG: %d", epsg) 431 feedback.Info("Best suited UTM EPSG: %d", epsg)
434 432
435 start = time.Now() 433 start = time.Now()