Mercurial > gemma
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() |