Name

ST_ContainsProperly — Prüft, ob jeder Punkt von B im Inneren von A liegt

Synopsis

boolean ST_ContainsProperly(geometry geomA, geometry geomB);

Beschreibung

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.

[Note]

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

[Note]

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

[Important]

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

[Important]

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

Beispiele

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