Polygon Überschneidungen verhindern

Hallo liebe Forums-Mitglieder,

ich würde gerne mittels check constraint verhindern, dass User einen Datensatz abspeichern können, dessen Flächen andere bereits vorhandene Flächen überschneiden/überlagern würde.
Ist das irgendwie möglich?

Mein Ansatz wäre so in der Art:
CHECK (st_overlaps(the_geom, the_geom???) = true)
Mir fehlt nur jegliche Idee, wie man die erforderliche zweite Geometrie (die benachbarten Flächen) bekommen kann.
Oder gibt es da bessere Möglichkeiten?

Wäre für diesen Zweck eigentlich st_overlaps() oder st_interersects() (deren Unterschied mir nicht ganz klar ist) oder was sonst die bessere Wahl?

Gruß
Bernd

Du meinst, es sollen sich innerhalb der Tabelle keine Flächen überschneiden?

Ich bin mir jetzt nicht sicher, bin kein PostGIS-Experte, aber das könnte über einen Exclusion Constraint gehen, wie folgt:

test=*# create table demo(id int primary key, flaeche geometry, exclude using gist (flaeche with &&));
CREATE TABLE

Dies sollte verhindern, daß sich 2 Flächen überschneiden, aber ohne Garantie …

Bei st_overlaps müssen mindestens 1 Punkte des Polygons im anderen liegen, bei st_intersects reicht es, wenn sie sich am Rand berühren WIMRE.

Gruß Uwe

Hi Gisman,

klappt das mit dem Exclusion Constraint wie von mir vorgeschlagen?

Nein, mit dem Exclude Constraint funktioniert es leider nicht.
Das liegt sicherlich am &&-Operator, da sich dieser lediglich auf die Bounding-Boxen (Äußerer rechteckiger Rahmen eines Objektes) bezieht.

Wenn ich nur eine Idee hätte, wie ich die Nachbargrundstücke herausfinde und in der Funktion st_intersects verwenden kann.

Gruß
Bernd

ups…
ich meinte natürlich st_overlaps, nicht st_intersects (wie ich von Gisman gelernt habe).
Gruß
Bernd