I fobidnelse med indlæsning af data til PostGIS fra forskellige kilder kan der forekomme geomtrifejl i de tabeller man opbevarer is sin databse. Det skal megter gerne undgås eftersom det kan give anledning til en røkke ubehagelge fejl - herunder fejl, der ikke giver brugeren besked herom. F.eks. kan nogle geomtrifejl resultere i meget store fejl i arealberegningeer mesn andre fejl helt umuligør konfliktanalyser
Man kun hurtigt teste om en tabel har geomtrifejl
SELECT ST_IsValid(geomtrikolonne), *. FROM mintabel
SELECT ST_IsValidReason(geomtrikolonne), *. FROM mintabel
#### Opret geometrifejl i en tabel
Man kan forsøge at rette geometrifejl i en tabel på følgende måde:
```sql
UPDATE error.opus_opland_polygon SET wkb_geometry= ST_MakeValid(wkb_geometry);
Man kan dog let risikere at de resulterende geomtrier har en anden type f.eks. "Geomtrycollection" end den oprindelige tabeldefinition.
Man kan f.eks trække polygonerne ud af en geometrycollection
SELECT st_summary(ST_CollectionExtract(ST_MakeValid(wkb_geometry),3)), * FROM error.opus_opland_polygon WHERE not st_isvalid(wkb_geometry);
Derudover kan man f.eks udtrække den største af polygonerne i den resulterende mulitpolygon.
BEGIN;
DROP TABLE IF EXISTS error.fixed_opus_opland_polygon;
CREATE TABLE error.fixed_opus_opland_polygon AS
SELECT ST_MakeValid(wkb_geometry) as the_geom, objectid, oplands_id, oplandsnav, bynavn,
opland_typ, status_sys, status_ned, status_are, status_bef, status_udl,
status_pe_, status_pe1, status_p_1, status_van, status_ind, status_qsp,
status_q_1, status_ren, status_u_1, status_bem, plan_syste, plan_nedsi,
plan_areal, plan_befae, plan_udloe, plan_pe_bo, plan_pe_in, plan_pe_to,
plan_vandf, plan_indsi, plan_qspv_, plan_qspv1, plan_rense, plan_udl_1,
plan_bemae, navn1201, type1201b, sluaar1201, status_s_1, plan_sys_1,
sm_opland_, shape_leng, shape_area
FROM error.opus_opland_polygon;
COMMIT;
Eller som et view
BEGIN;
DROP VIEW IF EXISTS error.fixed_opus_opland_polygon;
CREATE OR REPLACE VIEW error.fixed_opus_opland_polygon AS
SELECT ST_MakeValid(wkb_geometry) as the_geom, objectid, oplands_id, oplandsnav, bynavn,
opland_typ, status_sys, status_ned, status_are, status_bef, status_udl,
status_pe_, status_pe1, status_p_1, status_van, status_ind, status_qsp,
status_q_1, status_ren, status_u_1, status_bem, plan_syste, plan_nedsi,
plan_areal, plan_befae, plan_udloe, plan_pe_bo, plan_pe_in, plan_pe_to,
plan_vandf, plan_indsi, plan_qspv_, plan_qspv1, plan_rense, plan_udl_1,
plan_bemae, navn1201, type1201b, sluaar1201, status_s_1, plan_sys_1,
sm_opland_, shape_leng, shape_area
FROM error.opus_opland_polygon;
COMMIT;
ALTER TABLE mytable
ADD CONSTRAINT geometry_valid_check
CHECK (ST_IsValid(the_geom));