ST_Covers — Testar om varje punkt i B ligger i A
boolean ST_Covers(
geometry geomA, geometry geomB)
;
boolean ST_Covers(
geography geogpolyA, geography geogpointB)
;
Returnerar true
om varje punkt i Geometry/Geography B ligger inuti (dvs. skär insidan eller gränsen av) Geometry/Geography A. Testar på motsvarande sätt att ingen punkt i B ligger utanför (i utsidan av) A.
I matematiska termer: ST_Covers(A, B) ⇔ A ⋂ B = B
ST_Covers är det omvända av ST_CoveredBy. Alltså, ST_Covers (A,B) = ST_CoveredBy(B,A).
.
Generellt bör denna funktion användas istället för ST_Contains, eftersom den har en enklare definition som inte har den egenheten att "geometrier inte innehåller sin gräns".
![]() |
|
&index_aware; För att undvika indexanvändning, använd funktionen |
![]() |
|
Förbättrad: 3.0.0 aktiverade stöd för |
![]() |
|
Använd inte denna funktion med ogiltiga geometrier. Du kommer att få oväntade resultat. |
Utförs av GEOS-modulen
Förbättrad: 2.4.0 Stöd för polygon i polygon och linje i polygon har lagts till för geograftyp
Förbättrad: 2.3.0 Förbättring av PIP-kortslutning för geometri utökad för att stödja MultiPoints med få punkter. Tidigare versioner stödde endast punkt i polygon.
Tillgänglighet: 1.5 - stöd för geografi infördes.
Tillgänglighet: 1.2.2
OBS: detta är den "tillåtna" versionen som returnerar ett boolean, inte ett heltal.
Inte en OGC-standard, men Oracle har den också.
Exempel på geometri
--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)
Geografiskt exempel
-- 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