ST_Covers — Prüft, ob jeder Punkt von B in A liegt
boolean ST_Covers(geometry geomA, geometry geomB);
boolean ST_Covers(geography geogpolyA, geography geogpointB);
Gibt true zurück, wenn jeder Punkt in Geometrie/Geografie B innerhalb von Geometrie/Geografie A liegt (d. h. das Innere oder den Rand von A schneidet). Äquivalent dazu wird getestet, dass kein Punkt von B außerhalb (im Äußeren von) A liegt.
Mathematisch ausgedrückt: ST_Covers(A, B) ⇔ A ⋂ B = B
ST_Covers ist die Umkehrung von ST_CoveredBy. ST_Covers(A,B) = ST_CoveredBy(B,A).
Im Allgemeinen sollte diese Funktion anstelle von ST_Contains verwendet werden, da sie eine einfachere Definition hat, die nicht die Eigenart hat, dass "Geometrien ihre Begrenzung nicht enthalten".
|
|
|
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 |
|
|
|
Verbessert: 3.0.0 ermöglicht die Unterstützung von |
|
|
|
Verwenden Sie diese Funktion nicht mit ungültigen Geometrien. Sie werden unerwartete Ergebnisse erhalten. |
Wird durch das GEOS Modul ausgeführt
Verbessert: 2.4.0 Unterstützung für Polygon in Polygon und Linie in Polygon für Geografietypen hinzugefügt
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.
Verfügbarkeit: 1.5 - Unterstützung von geograpischen Koordinaten.
Verfügbarkeit: 1.2.2
HINWEIS: Dies ist die "zulässige" Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.
Kein OGC-Standard, aber Oracle hat ihn auch.
Beispiel für Geometrie
--a circle covering a circle
SELECT ST_Covers(smallc,smallc) As smallinsmall,
ST_Covers(smallc, bigc) As smallcoversbig,
ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior,
ST_Contains(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
smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior
--------------+----------------+-------------------+---------------------
t | f | t | f
(1 row)
Geographie Beispiel
-- a point with a 300 meter buffer compared to a point, a point and its 10 meter buffer
SELECT ST_Covers(geog_poly, geog_pt) As poly_covers_pt,
ST_Covers(ST_Buffer(geog_pt,10), geog_pt) As buff_10m_covers_cent
FROM (SELECT ST_Buffer(ST_GeogFromText('SRID=4326;POINT(-99.327 31.4821)'), 300) As geog_poly,
ST_GeogFromText('SRID=4326;POINT(-99.33 31.483)') As geog_pt ) As foo;
poly_covers_pt | buff_10m_covers_cent
----------------+------------------
f | t