Håndtering af geomtrifejl

I forbidnelse med indlæsning af data til PostGIS fra forskellige kilder kan der forekomme geometrifejl i de tabeller man opbevarer i sin databse. Det skal meget 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

Test om der findes geometrifejl i en tabel

Man kun hurtigt teste om en tabel har geomtrifejl

SELECT ST_IsValid(geomtrikolonne), *. FROM mintabel;

SELECT ogc_fid, ST_ISValid(wkb_geometry) FROM raw_data.parkarealer_region WHERE not ST_ISValid(wkb_geometry);

Undersøg typerne af geometrifejl i en tabel

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 geometrier 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.

Oprettelse af ny tabel med rettede geometrier

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;

Tabel-constraints på en geometris gyldighed

 ALTER TABLE mytable
  ADD CONSTRAINT geometry_valid_check
    CHECK (ST_IsValid(the_geom));

results matching ""

    No results matching ""