Renvoie chaque point d'échantillonnage où une trajectoire traverse la limite d'une zone géométrique, lors de l'entrée ou de la sortie.
Syntaxe
TABLE(idx integer, inside bool, pnt trajectory, t timestamp, x double precision, y double precision) ST_CrossingPoints(trajectory traj, geometry geom)
Paramètres
| Paramètre | Description |
|---|---|
traj |
L'objet de trajectoire. |
geom |
La zone géométrique de référence. |
Valeurs renvoyées
Chaque point d'intersection est renvoyé sous forme de ligne distincte.
| Colonne | Type | Description |
|---|---|---|
idx |
integer | Le numéro de séquence du point d'échantillonnage, à partir de 0. |
inside |
bool | Indique si le point se trouve à l'intérieur de la zone géométrique. |
pnt |
trajectory | Le point d'intersection sous forme de trajectoire mono-point, incluant les informations d'attribut. |
t |
timestamp | L'horodatage du point d'intersection. |
x |
double precision | La coordonnée x du point d'intersection. |
y |
double precision | La coordonnée y du point d'intersection. |
Fonctionnement
Un point d'échantillonnage est un point d'intersection lorsque la trajectoire traverse la limite de la zone géométrique :
Le point d'échantillonnage précédent se trouve outside de la zone et le point suivant se trouve inside — la trajectoire entre dans la zone.
Le point d'échantillonnage précédent se trouve inside de la zone et le point suivant se trouve outside — la trajectoire sort de la zone.
Exemple
Recherchez tous les points d'intersection d'une trajectoire qui entre puis sort d'une zone polygonale.
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))'
);
Résultat :
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)
La trajectoire comporte 7 points d'échantillonnage (indices 0–6). Le point 3 (inside=t) se situe aux coordonnées (3, 3) le 2000-01-04. Le point 4 (inside=f) se situe aux coordonnées (0, 0) le 2000-01-05.