ST_Contains — Testar om varje punkt i B ligger i A, och deras interiörer har en gemensam punkt
boolean ST_Contains(
geometry geomA, geometry geomB)
;
Returnerar TRUE om geometri A innehåller geometri B. A innehåller B om och endast om alla punkter i B ligger inuti (dvs. i det inre eller på gränsen till) A (eller motsvarande, inga punkter i B ligger i det yttre av A), och det inre av A och B har minst en punkt gemensamt.
I matematiska termer: ST_Contains(A, B) ⇔ (A ⋂ B = B) ∧ (Int(A) ⋂ Int(B) ≠ ∅)
Förhållandet contains är reflexivt: varje geometri innehåller sig själv. (I predikatet ST_ContainsProperly innehåller däremot en geometri inte sig själv på rätt sätt.) Relationen är antisymmetrisk: om ST_Contains(A,B) = true
och ST_Contains(B,A) = true
, måste de två geometrierna vara topologiskt lika(ST_Equals(A,B) = true)
.
ST_Contains är motsatsen till ST_Within. Så ST_Contains(A,B) = ST_Within(B,A).
.
![]() |
|
Eftersom interiörerna måste ha en gemensam punkt är en finess i definitionen att polygoner och linjer inte innehåller linjer och punkter som ligger helt inom deras gräns. För ytterligare information se Subtiliteter i OGC Covers, Contains, Within. Predikatet ST_Covers ger en mer inkluderande relation. |
![]() |
|
&index_aware; För att undvika indexanvändning, använd funktionen |
Utförs av GEOS-modulen
Förbättrad: 2.3.0 Förbättring av PIP-kortslutning utökad till att stödja MultiPoints med få punkter. Tidigare versioner stödde endast punkt i polygon.
![]() |
|
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. |
OBS: detta är den "tillåtna" versionen som returnerar ett boolean, inte ett heltal.
Denna metod implementerar OGC:s implementeringsspecifikation för enkla funktioner för SQL 1.1. s2.1.1.2 // s2.1.13.3 - samma som inom(geometri B, geometri A)
Denna metod implementerar SQL/MM-specifikationen. SQL-MM 3: 5.1.31
ST_Contains
returnerar TRUE
i följande situationer:
![]()
|
![]()
|
![]()
|
![]()
|
ST_Contains
returnerar FALSE
i följande situationer:
![]()
|
![]()
|
På grund av villkoret för inre skärning returnerar ST_Contains
FALSE
i följande situationer (medan ST_Covers
returnerar TRUE
):
![]()
|
![]()
|
-- A circle within a circle SELECT ST_Contains(smallc, bigc) As smallcontainsbig, ST_Contains(bigc,smallc) As bigcontainssmall, ST_Contains(bigc, ST_Union(smallc, bigc)) as bigcontainsunion, ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion, 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 smallcontainsbig | bigcontainssmall | bigcontainsunion | bigisunion | bigcoversexterior | bigcontainsexterior ------------------+------------------+------------------+------------+-------------------+--------------------- f | t | t | 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_Boundary, ST_ContainsProperly, ST_Covers, ST_CoveredBy, ST_Equals, ST_Within