Name

ST_Within — Testar om varje punkt i A ligger i B, och deras interiörer har en gemensam punkt

Synopsis

boolean ST_Within(geometry A, geometry B);

Beskrivning

Returnerar TRUE om geometri A ligger inom geometri B. A ligger inom B om och endast om alla punkter i A ligger inom (dvs. i det inre eller på gränsen till) B (eller motsvarande, inga punkter i A ligger i det yttre av B), och det inre av A och B har minst en punkt gemensamt.

För att denna funktion ska vara meningsfull måste båda källgeometrierna ha samma koordinatprojektion och samma SRID.

I matematiska termer: ST_Within(A, B) ⇔ (A ⋂ B = A) ∧ (Int(A) ⋂ Int(B) ≠ ∅)

Within-relationen är reflexiv: varje geometri är inom sig själv. Relationen är antisymmetrisk: om ST_Within(A,B) = true och ST_Within(B,A) = true, så måste de två geometrierna vara topologiskt lika(ST_Equals(A,B) = true).

ST_Within är det omvända av ST_Contains. Så ST_Within(A,B) = ST_Contains(B,A)..

[Note]

Eftersom interiörerna måste ha en gemensam punkt är en finess i definitionen att linjer och punkter som ligger helt inom polygoners eller linjers gränser inte är inom geometrin. För ytterligare detaljer se Subtiliteter i OGC Covers, Contains, Within. Predikatet ST_CoveredBy ger en mer inkluderande relation.

[Note]

&index_aware; För att undvika indexanvändning, använd funktionen _ST_Within.

Utförs av GEOS-modulen

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.

[Important]

Förbättrad: 3.0.0 aktiverade stöd för GEOMETRYCOLLECTION

[Important]

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 - a.Relate(b, 'T*F**F***')

Denna metod implementerar SQL/MM-specifikationen. SQL-MM 3: 5.1.30

Exempel

--a circle within a circle
SELECT ST_Within(smallc,smallc) As smallinsmall,
  ST_Within(smallc, bigc) As smallinbig,
  ST_Within(bigc,smallc) As biginsmall,
  ST_Within(ST_Union(smallc, bigc), bigc) as unioninbig,
  ST_Within(bigc, ST_Union(smallc, bigc)) as biginunion,
  ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion
FROM
(
SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo;
--Result
 smallinsmall | smallinbig | biginsmall | unioninbig | biginunion | bigisunion
--------------+------------+------------+------------+------------+------------
 t            | t          | f          | t          | t          | t
(1 row)