opengeogroep/NLExtract — Issue #11: Voeg geometrie-validatie toe
Author: justb4
Created: 2012-01-14 12:41:57+00:00
State: open
Labels: bag-extract, top10-extract

In de aangeleverde data kunnen geometrie-fouten zitten. Kan allerlei redenen hebben, bijv. tolerantie (cijfers achter de komma) voor coordinaten die ervoor kunnen zorgen dat bijv een polygoon ergens in het midden ophoudt. Bij een INSERT doet PostGIS (zoals ik begrijp) niet een validatie.

Er zijn manieren om dit te detecterenmbv PostGIS : ST_IsValid(). Zelfs kan gerepareerd worden:
Zie bijv. http://www.beginningspatial.com/fixing_invalid_geography_data

Via een functie kunnen we niet-valide geometrieen detecteren en uitfilteren. Hieronder een voorbeeld van zo'n functie:

-- Function: validategeom(text, text)

-- DROP FUNCTION validategeom(text, text);

CREATE OR REPLACE FUNCTION validategeom(schemaname text, tablename text)
RETURNS text AS
$BODY$
DECLARE
referrer_keys RECORD; -- Declare a generic record to be used in a FOR
a_output varchar(4000);
schema ALIAS for $1;
tabel ALIAS for $2;
BEGIN
a_output := 'UPDATE "' || schema || '"."' || tabel || '" SET geom_valid=CASE WHEN ST_IsValid(geom) THEN TRUE ELSE FALSE END WHERE geom is not null';

EXECUTE a_output;
RETURN a_output;

END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;