st_contains Polygon beschneiden

Hallo in Forum

Ich versuche gerade eine Aufgabenstellung zu lösen.

Ich habe 4 große Gebiete die durch Polygons dargestellt werden. Ich habe ganz viele kleine Polygons welche ich erst prüfe ob sie innerhalb eines der großen Gebiete liegen.

IF st_contains(geom_gebiet, geom_polygon) = TRUE THEN

Wenn nicht prüfe ich ob sie teilweise in einem Gebiet liegen.

IF st_intersects(geom_gebiet, geom_polygon) = TRUE THEN

Wenn Sie teilweise in einem Gebiet liegen dann splitte ich die Polygons.

SELECT st_split(geom_polygon, ST_Boundary(geom_gebiet

Jetzt gehe ich die erzeugten Teilstücke in einer Schleife durch um zu prüfen welches erzeugte Teilstück sich jetzt innerhalb des Gebiets befindet. Hier kommt mein Problem “st_contains” liefert immer “False” weil sich eine Grenze des Polygons auf der Linie des Gebiets befindet. Wie könnte man jetzt das Polygon des Gebiets um 1-2 Punkte temporär vergrößern so das “st_contains” wieder “True” ergibt?

Vielen Dank im Voraus für die Hilfe
Gruß Thomas

Schau mal was st_covers() für Ergebnisse liefert.
Gruß Uwe

st_within liefert False
st_contains liefert False
st_covers liefert False
st_intersects liefert True

Gruß Thomas

Hm. Leider Sind die kleinen Polygone einzelnen Geometrien oder Multipolygone? hast du die Schnittpunkte in das große Polygon eingefügt? Welches Ergebnis liefern die Funktionen dann? Diese könntest du dann ggf. verschieben, um das kleine Polygon wieder im Inneren zu haben. Oder zu machst einen Buffer um das kleine Polygon, vereinigst diesen mit dem großen und hast wieder die kleine Geometrie im Innern. Oder du probierst st_dwithin() und probierst eine Abstand aus.
Das PostGIS Handbuch hat im übrigen wie ich im Moment sehe ein ganzes Kapitel zu dem Thema (4.3.6). Anscheinend funktionieren die ganzen Funktionen nur, wenn sich die Geometrien in einem Punkt schneiden. Die Funktion ST_Relate() scheint das zu umgehen. Vielleicht hilft dir das weiter.

Gruß Uwe

Edit: Natürlich kannst du auch einfach einen Buffer um das große Polygon legen… Note to myself: Keine Posts mehr ohne Kaffee :slight_smile:

Hallo Uwe,

danke erstmal das du mir hilfst.

Die geschnittenen kleinen Polygone sind alles einzelne Flächen die auch in eine neue Tabelle eingefügt werden und keine Multipolygons. Ja ich belese mich gerade auch noch und bin auch schon auf st_relate gestoßen so richtig weiß ich noch nichts damit anzufangen. Ich glaube eine temporäre Flächenvergrößerung des Gebiets um 0,5m müsste ausreichen. Wie macht man einen Buffer um ein Polygon? Mit Punkten und Linien habe ich es schon gemacht?

Gruß Thomas

Das geht im wesentlichen genauso. Ein negativer Bufferwert erzeugt einen Buffer nach innen.

Gruß Uwe

Hallo Uwe

Danke so hat’s funktioniert :slight_smile:

IF (SELECT public.st_contains(st_buffer(gebiet.wkb_geometry, 0.1), geomItem)) = TRUE THEN

gruß Thomas

PS: Thema kann abgeschlossen werden