Mercurial > gemma
changeset 5031:8c590ef35280
Improve feedback if geometry cannot be stored
This is also a backout of rev. 36a3dce20232
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Wed, 18 Mar 2020 19:19:09 +0100 |
parents | 737d7859dd86 |
children | afc242588642 |
files | pkg/imports/fd.go pkg/pgxutils/errors.go schema/gemma.sql schema/updates/1429/01.disallow_empty_fairway_dimensions.sql schema/version.sql |
diffstat | 5 files changed, 21 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/imports/fd.go Wed Mar 18 18:42:30 2020 +0100 +++ b/pkg/imports/fd.go Wed Mar 18 19:19:09 2020 +0100 @@ -158,8 +158,7 @@ min_depth, date_info, source_organization) -SELECT dmp.geom, $3, $4, $5, $6, $7, $8 - FROM ST_GeomFromWKB($1, $2::integer) AS new_fd (new_fd), +SELECT ST_Multi(ST_CollectionExtract(ST_MakeValid(ST_Transform( CASE WHEN pg_has_role('sys_admin', 'MEMBER') THEN new_fd @@ -167,8 +166,12 @@ (SELECT ST_Buffer(a, -0.0001) FROM resp), ST_MakeValid(ST_Transform(new_fd, (SELECT ST_SRID(a) FROM resp)))) END, - 4326)), 3)) AS dmp (geom) - WHERE NOT ST_IsEmpty(dmp.geom) + 4326)), 3)), + $3, $4, $5, $6, $7, $8 + FROM ST_GeomFromWKB($1, $2::integer) AS new_fd (new_fd) + WHERE pg_has_role('sys_admin', 'MEMBER') + OR ST_Intersects((SELECT a FROM resp), + ST_MakeValid(ST_Transform(new_fd, (SELECT ST_SRID(a) FROM resp)))) RETURNING id, ST_X(ST_Centroid(area::geometry)), ST_Y(ST_Centroid(area::geometry)) @@ -340,9 +343,7 @@ } if outside > 0 { - feedback.Info( - "Features outside responsibility area or no valid polygon: %d", - outside) + feedback.Info("Features outside responsibility area: %d", outside) } if features == 0 {
--- a/pkg/pgxutils/errors.go Wed Mar 18 18:42:30 2020 +0100 +++ b/pkg/pgxutils/errors.go Wed Mar 18 19:19:09 2020 +0100 @@ -158,6 +158,12 @@ c = http.StatusConflict return } + case "fairway_dimensions": + switch err.ConstraintName { + case "fairway_dimensions_area_check": + m = "Geometry could not be stored as valid, non-empty polygon" + return + } } case "internal": switch err.TableName {
--- a/schema/gemma.sql Wed Mar 18 18:42:30 2020 +0100 +++ b/schema/gemma.sql Wed Mar 18 19:19:09 2020 +0100 @@ -708,7 +708,8 @@ CREATE TABLE fairway_dimensions ( id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, area geography(MULTIPOLYGON, 4326) NOT NULL - CHECK(ST_IsValid(CAST(area AS geometry))), + CHECK(ST_IsValid(CAST(area AS geometry)) + AND NOT ST_IsEmpty(CAST(area AS geometry))), level_of_service smallint NOT NULL REFERENCES levels_of_service, min_width smallint NOT NULL, max_width smallint NOT NULL,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1429/01.disallow_empty_fairway_dimensions.sql Wed Mar 18 19:19:09 2020 +0100 @@ -0,0 +1,4 @@ +ALTER TABLE waterway.fairway_dimensions + DROP CONSTRAINT fairway_dimensions_area_check, + ADD CHECK(ST_IsValid(CAST(area AS geometry)) + AND NOT ST_IsEmpty(CAST(area AS geometry)))