Retorna true se o primeiro argumento contiver o segundo no eixo especificado.
Sintaxe
bool ST_TContains(tsrange r, trajectory traj);
bool ST_TContains(trajectory traj, tsrange r);
bool ST_2DContains(geometry geom, trajectory traj);
bool ST_2DContains(trajectory traj, geometry geom);
bool ST_2DContains(geometry geom, trajectory traj, timestamp ts, timestamp te);
bool ST_2DContains(trajectory traj, geometry geom, timestamp ts, timestamp te);
bool ST_{2D|2DT|3D|3DT}Contains(boxndf box, trajectory traj);
bool ST_{2D|2DT|3D|3DT}Contains(boxndf box, trajectory traj, timestamp ts, timestamp te);
Variantes
Cada variante da função verifica a contenção em um conjunto diferente de eixos:
|
Variante |
Eixos verificados |
Primeiro argumento |
Segundo argumento |
|
|
Tempo (T) |
|
|
|
|
Espaço 2D (X, Y) |
|
|
|
|
Espaço 2D + tempo (X, Y, T) |
|
|
|
|
Espaço 3D (X, Y, Z) |
|
|
|
|
Espaço 3D + tempo (X, Y, Z, T) |
|
|
Parâmetros
|
Parâmetro |
Descrição |
|
|
Geometria para comparação. |
|
|
Trajetória para comparação ou trajetória source da qual se extrai uma subtrajetória. |
|
|
Bounding box para comparação. |
|
|
Intervalo de tempo da consulta. |
|
|
Início do intervalo de tempo para extração da subtrajetória. Opcional. |
|
|
Fim do intervalo de tempo para extração da subtrajetória. Opcional. |
Descrição
A função ST_{T|2D|2DT|3D|3DT}Contains verifica se o primeiro argumento contém o segundo no eixo especificado.
Variante de intervalo de tempo (ST_TContains): Verifica se o intervalo de tempo ou a trajetória contém o outro argumento no eixo temporal.
Variante de geometria (ST_2DContains): Compara as projeções bidimensionais de trajetórias completas ou subtrajetórias em um intervalo de tempo especificado. Retorna true se a geometria contiver ou for contida pelo outro argumento.
Variantes de bounding box (ST_2DTContains, ST_3DContains, ST_3DTContains): Verificam se uma trajetória (ou sua subtrajetória em um intervalo de tempo especificado) está inteiramente dentro da bounding box em todas as dimensões especificadas. Se a bounding box, a trajetória ou a subtrajetória não possuir determinada dimensão, o sistema considera que essa dimensão aceita qualquer valor e satisfaz automaticamente a condição de contenção.
Tipos de geometria como POLYHEDRALSURFACE e similares não têm suporte.
Exemplos
Os exemplos a seguir usam uma CTE comum para criar uma trajetória e uma bounding box 3D e testar cada variante em três intervalos de tempo.
Configuração:
WITH traj AS (
SELECT
ST_makeTrajectory(
'STPOINT',
'LINESTRING(0 0, 50 50, 100 100)'::geometry,
('[' || ST_PGEpochToTS(0) || ',' || ST_PGEpochToTS(100) || ')')::tsrange,
'{"leafcount":3,"attributes":{"velocity": {"type": "integer", "length": 2,"nullable" : true,"value": [120,130,140]}, "accuracy": {"type": "float", "length": 4, "nullable" : false,"value": [120,130,140]}, "bearing": {"type": "float", "length": 8, "nullable" : false,"value": [120,130,140]}, "acceleration": {"type": "string", "length": 20, "nullable" : true,"value": ["120","130","140"]}, "active": {"type": "timestamp", "nullable" : false,"value": ["Fri Jan 01 11:35:00 2010", "Fri Jan 01 12:35:00 2010", "Fri Jan 01 13:30:00 2010"]}}, "events": [{"2" : "Fri Jan 02 15:00:00 2010"}, {"3" : "Fri Jan 02 15:30:00 2010"}]}'
) AS b,
ST_MakeBox3dt(0,0,0,ST_PgEpochToTS(0), 50,50,50,ST_PgEpochToTS(49)) AS a
)
A bounding box a abrange as coordenadas [0–50, 0–50, 0–50] e o tempo [0–49]. A trajetória b vai de (0,0) a (100,100) durante o intervalo [0–100].
Intervalo de tempo [0, 49] — a subtrajetória permanece dentro da bounding box:
SELECT
ST_2dContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(49)),
ST_3dContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(49)),
ST_2dtContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(49)),
ST_3dtContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(49))
FROM traj;
|
st_2dcontains |
st_3dcontains |
st_2dtcontains |
st_3dtcontains |
|
t |
t |
t |
t |
Todas as variantes retornam true: a subtrajetória do tempo 0 ao 49 está dentro da bounding box em todos os eixos.
Intervalo de tempo [0, 50] — a subtrajetória atinge o limite da bounding box no eixo temporal:
SELECT
ST_2dContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(50)),
ST_3dContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(50)),
ST_2dtContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(50)),
ST_3dtContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(50))
FROM traj;
|
st_2dcontains |
st_3dcontains |
st_2dtcontains |
st_3dtcontains |
|
t |
t |
f |
f |
As funções ST_2DContains e ST_3DContains retornam true porque não verificam o eixo temporal; a projeção espacial da subtrajetória ainda cabe na bounding box. Já ST_2DTContains e ST_3DTContains retornam false pois o tempo 50 ultrapassa o limite temporal da bounding box, que é 49.
Intervalo de tempo [0, 70] — a subtrajetória excede a bounding box nos eixos espaciais e temporais:
SELECT
ST_2dContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(70)),
ST_3dContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(70)),
ST_2dtContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(70)),
ST_3dtContains(a, b, ST_PGEpochToTS(0), ST_PGEpochToTS(70))
FROM traj;
|
st_2dcontains |
st_3dcontains |
st_2dtcontains |
st_3dtcontains |
|
f |
f |
f |
f |
Todas as variantes retornam false: no tempo 70, a trajetória já se moveu para as coordenadas (70, 70), o que excede o limite espacial da bounding box de 50.