ST_ContainsProperly — Prüft, ob jeder Punkt von B im Inneren von A liegt
boolean ST_ContainsProperly(
geometry geomA, geometry geomB)
;
Gibt true
zurück, wenn jeder Punkt von B im Inneren von A liegt (oder äquivalent dazu, kein Punkt von B liegt im Rand oder außerhalb von A).
Mathematisch ausgedrückt: ST_EnthältEcht(A, B) ⇔ Int(A) ⋂ B = B
A enthält B ordnungsgemäß, wenn die DE-9IM-Schnittpunktmatrix für die beiden Geometrien mit [T**FF*FF*]
A enthält sich selbst nicht richtig, aber es enthält sich selbst.
Eine Anwendung für dieses Prädikat ist die Berechnung der Schnittpunkte einer Menge von Geometrien mit einer großen polygonalen Geometrie. Da die Schnittmenge eine recht langsame Operation ist, kann es effizienter sein, containsProperly zu verwenden, um Testgeometrien herauszufiltern, die vollständig innerhalb des Bereichs liegen. In diesen Fällen ist von vornherein bekannt, dass der Schnittpunkt genau die ursprüngliche Testgeometrie ist.
Diese Funktion beinhaltet automatisch einen Bounding-Box-Vergleich, der alle räumlichen Indizes verwendet, die für die Geometrien verfügbar sind. Um die Verwendung von Indizes zu vermeiden, verwenden Sie die Funktion |
Der Vorteil dieses Prädikats gegenüber ST_Contains und ST_Intersects ist, dass es effizienter berechnet werden kann, ohne dass die Topologie an einzelnen Punkten berechnet werden muss. |
Wird vom GEOS Modul ausgeführt
Verfügbarkeit: 1.4.0
Verbessert: 3.0.0 ermöglicht die Unterstützung von |
Verwenden Sie diese Funktion nicht mit ungültigen Geometrien. Sie werden unerwartete Ergebnisse erhalten. |
--a circle within a circle SELECT ST_ContainsProperly(smallc, bigc) As smallcontainspropbig, ST_ContainsProperly(bigc,smallc) As bigcontainspropsmall, ST_ContainsProperly(bigc, ST_Union(smallc, bigc)) as bigcontainspropunion, ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion, ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior, ST_ContainsProperly(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc, ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo; --Result smallcontainspropbig | bigcontainspropsmall | bigcontainspropunion | bigisunion | bigcoversexterior | bigcontainsexterior ------------------+------------------+------------------+------------+-------------------+--------------------- f | t | f | t | t | f --example demonstrating difference between contains and contains properly SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa, ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly(geomA, ST_Boundary(geomA)) As acontainspropba FROM (VALUES ( ST_Buffer(ST_Point(1,1), 5,1) ), ( ST_MakeLine(ST_Point(1,1), ST_Point(-1,-1) ) ), ( ST_Point(1,1) ) ) As foo(geomA); geomtype | acontainsa | acontainspropa | acontainsba | acontainspropba --------------+------------+----------------+-------------+----------------- ST_Polygon | t | f | f | f ST_LineString | t | f | f | f ST_Point | t | t | f | f
ST_GeometryType, ST_Boundary, ST_Contains, ST_Covers, ST_CoveredBy, ST_Equals, ST_Relate, ST_Within