Suite

Requête de base de données Spatial+Temporal pour l'intersection 4D

Requête de base de données Spatial+Temporal pour l'intersection 4D


Voici la fonction que je dois implémenter. Mon application traite des objets mobiles avec une position et une portée variables (pensez à la portée du radar). Comme je ne peux pas tester chaque minute si n mobiles se détectent (le serveur serait surchargé), je dois précalculer la position et l'heure "future" à laquelle ils se détecteront à partir de leur itinéraire prévu et n'enregistreront que l'événement "futur" dans une pile. Chaque fois qu'un utilisateur modifie l'itinéraire prévu, je recalcule l'événement lié à tous les itinéraires qui se croisent à partir d'autres mobiles.

La meilleure façon de le faire est de faire une sorte de requête et de mise à jour d'intersection 4D, et de pouvoir détecter quand et où les mobiles vont "entrer en collision".

Est-ce possible avec une géodatabase classique comme PostgresQL+PostGis et un autre plugin, ou dois-je regarder une base de données n-dimensionnelle spécifique ?


Cela peut être fait avec la fonction ST_LocateBetween de PostGIS, où vous pouvez extraire des points et des chaînes de lignes à partir d'une seule heure ou entre plusieurs heures. Pour ce faire, vous devez disposer de géométries avec une dimension de mesure, c'est-à-dire[Multi]Point [Z]Mou alors[Multi]LineString [Z]Mgéométries. Un horodatage numérique (par exemple, l'heure Unix) peut être utilisé pour la dimension M.

Par exemple, ce point 4D est capturé à M=4 :

SELECT ST_AsText(ST_LocateBetween('POINT ZM (1 2 3 4)'::geometry, 4, 4)) st_astext ------------------------- MULTIPOINT ZM (1 2 3 4) (1 rangée)

Et s'il ne coupe pas la gamme M, il reviendraMULTIPOINT ZM VIDE, qui peut être filtré d'une requête avec ST_IsEmpty.