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