Name

ST_Within — Tests, wenn jeder Punkt von A in B liegt und ihre Innenräume einen gemeinsamen Punkt haben

Übersicht

boolean ST_Within(geometry A, geometry B);

Beschreibung

Gibt TRUE zurück, wenn Geometrie A innerhalb von Geometrie B liegt. A liegt nur dann innerhalb von B, wenn alle Punkte von A innerhalb (d. h. im Inneren oder am Rand) von B liegen (oder gleichwertig, keine Punkte von A liegen im Äußeren von B) und die Innenräume von A und B mindestens einen Punkt gemeinsam haben.

Damit diese Funktion sinnvoll ist, müssen die Ausgangsgeometrien beide die gleiche Koordinatenprojektion und den gleichen SRID haben.

Mathematisch ausgedrückt: ST_Within(A, B) ⇔ (A ⋂ B = A) ∧ (Int(A) ⋂ Int(B) ≠ ∅)

Die Within-Relation ist reflexiv: jede Geometrie ist in sich selbst. Die Beziehung ist antisymmetrisch: Wenn ST_Within(A,B) = true und ST_Within(B,A) = true, dann müssen die beiden Geometrien topologisch gleich sein (ST_Equals(A,B) = true).

ST_Within ist die Umkehrung von ST_Contains. ST_Within(A,B) = ST_Contains(B,A).

[Anmerkung]

Da die Innenräume einen gemeinsamen Punkt haben müssen, besteht eine Feinheit der Definition darin, dass Linien und Punkte, die vollständig in der Begrenzung von Polygonen oder Linien liegen, nicht innerhalb der Geometrie sind. Für weitere Details siehe Subtleties of OGC Covers, Contains, Within. Das Prädikat ST_CoveredBy bietet eine umfassendere Beziehung.

[Anmerkung]

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 _ST_Within.

Wird durch das GEOS Modul ausgeführt

Verbessert: 2.3.0 Verbesserung des PIP-Kurzschlusses für Geometrien, erweitert um die Unterstützung von MultiPoints mit wenigen Punkten. Frühere Versionen unterstützten nur Punkte in Polygonen.

Verbessert: 3.0.0 ermöglicht die Unterstützung von GEOMETRYCOLLECTION

[Wichtig]

Verwenden Sie diese Funktion nicht mit ungültigen Geometrien. Sie werden unerwartete Ergebnisse erhalten.

HINWEIS: Dies ist die "zulässige" Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3 - a.Relate(b, "T*F**F***")

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.30

Beispiele

This example defines two concentric circles once in a CTE so the same inputs can be rendered and then reused in related predicate checks.

Code
WITH circles AS (
  SELECT ST_Buffer(center, 20) AS smallc,
         ST_Buffer(center, 40) AS bigc
  FROM (SELECT 'POINT(50 50)'::geometry AS center) AS p
)
SELECT smallc AS small_circle,
       bigc AS big_circle
FROM circles;
Ausgabe von Rastern
POLYGON((70 50,69.616 46.098,68.478 42.346,66.629 38.889,64.142 35.858,61.111 33.371,57.654 31.522,53.902 30.384,50 30,46.098 30.384,42.346 31.522,38.889 33.371,35.858 35.858,33.371 38.889,31.522 42.346,30.384 46.098,30 50,30.384 53.902,31.522 57.654,33.371 61.111,35.858 64.142,38.889 66.629,42.346 68.478,46.098 69.616,50 70,53.902 69.616,57.654 68.478,61.111 66.629,64.142 64.142,66.629 61.111,68.478 57.654,69.616 53.902,70 50)) | POLYGON((90 50,89.231 42.196,86.955 34.693,83.259 27.777,78.284 21.716,72.223 16.741,65.307 13.045,57.804 10.769,50 10,42.196 10.769,34.693 13.045,27.777 16.741,21.716 21.716,16.741 27.777,13.045 34.693,10.769 42.196,10 50,10.769 57.804,13.045 65.307,16.741 72.223,21.716 78.284,27.777 83.259,34.693 86.955,42.196 89.231,50 90,57.804 89.231,65.307 86.955,72.223 83.259,78.284 78.284,83.259 72.223,86.955 65.307,89.231 57.804,90 50))
Figure
Geometry figure for visual-st-within-01

Using the same circles, ST_Within is reflexive on each circle, false from the larger circle into the smaller one, and true for ST_Union only when the union does not extend beyond the larger circle.

Code
WITH circles AS (
  SELECT ST_Buffer(center, 20) AS smallc,
         ST_Buffer(center, 40) AS bigc
  FROM (SELECT 'POINT(50 50)'::geometry AS center) AS p
)
SELECT
  ST_Within(smallc, smallc) AS smallinsmall,
  ST_Within(smallc, bigc) AS smallinbig,
  ST_Within(bigc, smallc) AS biginsmall,
  ST_Within(ST_Union(smallc, bigc), bigc) AS unioninbig,
  ST_Within(bigc, ST_Union(smallc, bigc)) AS biginunion,
  ST_Equals(bigc, ST_Union(smallc, bigc)) AS bigisunion
FROM circles;
Ausgabe von Rastern
t | t | f | t | t | t
Figure
Geometry figure for visual-st-within-02