Vermeidung von Überlappungen beim Erstellen von neuen Datensätzen: Unterschied zwischen den Versionen
Aus kvwmap
Rahn (Diskussion | Beiträge) |
Rahn (Diskussion | Beiträge) |
||
Zeile 2: | Zeile 2: | ||
Die Regel hat folgende Form: | Die Regel hat folgende Form: | ||
− | CREATE OR REPLACE RULE | + | CREATE OR REPLACE RULE avoid_overlap_insert AS |
− | ON INSERT TO | + | ON INSERT TO frei_polygon |
WHERE ( SELECT true AS bool | WHERE ( SELECT true AS bool | ||
− | FROM | + | FROM frei_polygon |
− | WHERE st_overlaps(new.the_geom, | + | WHERE st_overlaps(new.the_geom, frei_polygon.the_geom) |
− | DO INSTEAD | + | LIMIT 1) |
+ | DO INSTEAD SELECT 'Polygonüberlappung ist nicht erlaubt.'; | ||
− | Soll dieser Test auch bei Änderung eines Datensatz erfolgen, muss eine entsprechende Regel für ON UPDATE erstellt werden. | + | Soll dieser Test auch bei Änderung eines Datensatz erfolgen, muss eine entsprechende Regel für ON UPDATE erstellt werden. Diese hat fast die gleiche Form, außer dass die Bedingung für den Überlappungstest etwas anders ist, denn die neue Geometrie darf sich natürlich mit der alten Geometrie schneiden: |
+ | |||
+ | CREATE OR REPLACE RULE avoid_overlap_update AS | ||
+ | ON UPDATE TO frei_polygon | ||
+ | WHERE ( SELECT true AS bool | ||
+ | FROM frei_polygon | ||
+ | WHERE st_overlaps(new.the_geom, frei_polygon.the_geom) AND NOT frei_polygon.the_geom = old.the_geom | ||
+ | LIMIT 1) | ||
+ | DO INSTEAD SELECT 'Polygonüberlappung ist nicht erlaubt.'; | ||
+ | |||
+ | kvwmap wertet das Ergebnis dieses Überlappungstest allerdings erst in der aktuellen develop-Version, bzw. ab Version 1.12 korrekt aus. |
Version vom 27. Mai 2013, 15:12 Uhr
Wenn man verhindern möchte, dass in einem Layer Datensätze angelegt werden, deren Geometrie sich mit anderen Datensätzen überlappt, kann man das mit einer Regel in der PostgreSQL-DB tun. Die Regel hat folgende Form:
CREATE OR REPLACE RULE avoid_overlap_insert AS ON INSERT TO frei_polygon WHERE ( SELECT true AS bool FROM frei_polygon WHERE st_overlaps(new.the_geom, frei_polygon.the_geom) LIMIT 1) DO INSTEAD SELECT 'Polygonüberlappung ist nicht erlaubt.';
Soll dieser Test auch bei Änderung eines Datensatz erfolgen, muss eine entsprechende Regel für ON UPDATE erstellt werden. Diese hat fast die gleiche Form, außer dass die Bedingung für den Überlappungstest etwas anders ist, denn die neue Geometrie darf sich natürlich mit der alten Geometrie schneiden:
CREATE OR REPLACE RULE avoid_overlap_update AS ON UPDATE TO frei_polygon WHERE ( SELECT true AS bool FROM frei_polygon WHERE st_overlaps(new.the_geom, frei_polygon.the_geom) AND NOT frei_polygon.the_geom = old.the_geom LIMIT 1) DO INSTEAD SELECT 'Polygonüberlappung ist nicht erlaubt.';
kvwmap wertet das Ergebnis dieses Überlappungstest allerdings erst in der aktuellen develop-Version, bzw. ab Version 1.12 korrekt aus.