Retorna cada ponto de amostragem em que uma trajetória cruza o limite de uma área geométrica, ao entrar ou sair dela.
Sintaxe
TABLE(idx integer, inside bool, pnt trajectory, t timestamp, x double precision, y double precision) ST_CrossingPoints(trajectory traj, geometry geom)
Parâmetros
|
Parâmetro |
Descrição |
|
|
O objeto de trajetória. |
|
|
A área geométrica de referência para o teste. |
Valores de retorno
Cada ponto de cruzamento é retornado em uma linha separada.
|
Coluna |
Tipo |
Descrição |
|
|
integer |
Número sequencial do ponto de amostragem, começando em 0. |
|
|
bool |
Indica se o ponto está dentro da área geométrica. |
|
|
trajectory |
O ponto de cruzamento como uma trajetória de ponto único, incluindo informações de atributo. |
|
|
timestamp |
O timestamp do ponto de cruzamento. |
|
|
double precision |
A coordenada x do ponto de cruzamento. |
|
|
double precision |
A coordenada y do ponto de cruzamento. |
Funcionamento
Um ponto de amostragem é considerado ponto de cruzamento quando a trajetória transita pelo limite da área geométrica:
O ponto de amostragem anterior está outside da área e o próximo está inside — a trajetória entra na área.
O ponto de amostragem anterior está inside da área e o próximo está outside — a trajetória sai da área.
Exemplo
Selecione todos os pontos de cruzamento de uma trajetória que entra e depois sai de uma área poligonal.
SELECT * FROM ST_CrossingPoints(
'{"trajectory":{"version":1,"type":"STPOINT","leafcount":7,"start_time":"2000-01-01 00:00:00","end_time":"2000-01-07 00:00:00","spatial":"LINESTRING(0 0,2 1,0 0,3 3,0 0,1 4,0 0)","timeline":["2000-01-01 00:00:00","2000-01-02 00:00:00","2000-01-03 00:00:00","2000-01-04 00:00:00","2000-01-05 00:00:00","2000-01-06 00:00:00","2000-01-07 00:00:00"]}}',
'POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))'
);
Resultado:
idx | inside | pnt | t | x | y
-----+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+---+---
3 | t | {"trajectory":{"version":1,"type":"STPOINT","leafcount":1,"start_time":"2000-01-04 00:00:00","end_time":"2000-01-04 00:00:00","spatial":"POINT(3 3)","timeline":["2000-01-04 00:00:00"]}} | 2000-01-04 00:00:00 | 3 | 3
4 | f | {"trajectory":{"version":1,"type":"STPOINT","leafcount":1,"start_time":"2000-01-05 00:00:00","end_time":"2000-01-05 00:00:00","spatial":"POINT(0 0)","timeline":["2000-01-05 00:00:00"]}} | 2000-01-05 00:00:00 | 0 | 0
(2 rows)
A trajetória tem 7 pontos de amostragem (índices 0–6). O ponto 3 (inside=t) está nas coordenadas (3, 3) em 2000-01-04. O ponto 4 (inside=f) está nas coordenadas (0, 0) em 2000-01-05.