Skip to content

Kwaliteits controle kadastrale kaart

Mark Prins edited this page Feb 5, 2016 · 13 revisions

kadastrale percelen

Een aantal ruimtelijke controles die uitgevoerd kunnen worden op de kadastrale percelen in de RSGB database. NB in deze voorbeelden gaan we uit van een Postgis versie van het RSGB schema.

Resultaten lijstjes uit onderstaande queries kunnen in bijvoorbeeld QGIS worden gevisualiseerd met een filter op de attribuutlijst:

Bijvoorbeeld:

     "sc_kad_identif" in (
         16250196370000,
         16250196470000,
         16250198170000,
         16250219470000,
         16250285670000,
         16250295870000,
         16250295970000,
         16250316670000,
         16250348070000,
         16250354770000,
         16250383670000,
         16250383770000 )

percelen geselecteerd, rakend aan ontbrekend perceel

geometrie check

-- check voor niet "well formed" perceel geometrie
-- resultaat: een lijst met percelen met een ongeldige geometrie
SELECT
    sc_kad_identif
FROM
    kad_perceel 
WHERE NOT 
    ST_IsValid(begrenzing_perceel);

consistentie check

-- test of de punt geometrie van een perceel binnen de vlak geometrie valt
SELECT
    sc_kad_identif
FROM
    kad_perceel 
WHERE NOT 
    ST_Within(plaatscoordinaten_perceel, begrenzing_perceel);

overlap controle

In de kadastrale kaart mogen geen overlappen voorkomen; de meest interessante resultaten zijn de significate overlappen.

-- zoek overlappende percelen, sorteer op overlappende oppervlakte
SELECT 
    k1.sc_kad_identif,k2.sc_kad_identif AS "overlapt met",
    ST_Area(ST_Intersection(k1.begrenzing_perceel, k2.begrenzing_perceel)) "overlap oppervlakte m2"
FROM 
    kad_perceel k1,kad_perceel k2
WHERE 
    k1.sc_kad_identif < k2.sc_kad_identif AND
    ST_Overlaps(k1.begrenzing_perceel, k2.begrenzing_perceel)
ORDER BY 
    "overlap oppervlakte m2" DESC;

gaten controle

Binnen het leveringsgebied mogen geen gaten in de kadastrale kaart voorkomen.

-- zoek percelen die raken aan een gat in de kaart
SELECT 
    sc_kad_identif
FROM 
   kad_perceel,
   (SELECT ST_Difference(
       (SELECT ST_ConcaveHull(ST_Union(begrenzing_perceel), 0.99, false) FROM kad_perceel),
       (SELECT ST_Union(begrenzing_perceel) FROM kad_perceel) 
   ) AS geom) AS "raakt aan gat"
WHERE 
    ST_Touches("raakt aan gat".geom, kad_perceel.begrenzing_perceel);

Het is mogelijk dat bovenstaande query te zwaar is, in dat geval kunnen stapsgewijs het omhullende, bevattende en verschil/gaten vlak worden uitgerekend. Deze zijn ook handig voor de visualisatie.

-- schema+tabel aanmaken voor de tussen resultaten
CREATE SCHEMA test AUTHORIZATION brmo;
GRANT ALL ON SCHEMA test TO brmo;
GRANT ALL ON SCHEMA test TO public;
CREATE TABLE test.testresultaat 
(
  descr character varying(255),
  geom geometry(MultiPolygon,28992),
  CONSTRAINT testresultaat_descr_key UNIQUE (descr)
)
WITH (
  OIDS=TRUE
);
ALTER TABLE test.testresultaat OWNER TO brmo;

INSERT INTO
    test.testresultaat(descr, geom)
VALUES (
    'bevattende',
    (SELECT ST_Multi(ST_Union(begrenzing_perceel)) FROM kad_perceel)
);

INSERT INTO 
    test.testresultaat(descr, geom) 
VALUES (
    'omhullende',
    (SELECT ST_Multi(ST_ConcaveHull(ST_Union(begrenzing_perceel),.99,false)) FROM kad_perceel)
);

INSERT INTO 
    test.testresultaat(descr, geom) 
VALUES (
    'gaten',
    (SELECT ST_Difference(
       (SELECT ST_ConcaveHull(ST_Union(begrenzing_perceel),0.99,false) FROM kad_perceel),
       (SELECT ST_Union(begrenzing_perceel) FROM kad_perceel) 
    ))
);

of

INSERT INTO 
    test.testresultaat(descr, geom) 
VALUES (
    'gaten',
    (SELECT ST_Difference(
       (SELECT geom FROM test.testresultaat WHERE descr='omhullende'),
       (SELECT geom FROM test.testresultaat WHERE descr='bevattende')
    ))
);
Clone this wiki locally