5 votos

Cómo calcular información de las rutas superpuestas de los vehículos en un mapa

Tengo múltiples puntos de geometría que identifican la trayectoria de un automóvil en un intervalo de tiempo. Algunos autos pueden seguir una trayectoria que se superpone con la de otro automóvil.

Quiero calcular la velocidad del automóvil para tener diferentes colores de líneas en un mapa y quiero calcular la velocidad promedio para la trayectoria superpuesta.

¿Alguien tiene alguna idea de cómo seleccionar las trayectorias superpuestas y calcular la velocidad promedio?

En mi tabla de base de datos de Postgres tengo estas columnas:
car_id, marca de tiempo (de las mediciones), latitud, longitud, geometría.

Este es un ejemplo de la situación:

El verde representa 40 mph.

El rojo representa 80 mph.

¿Cómo puedo calcular una velocidad promedio para la trayectoria superpuesta?

El objetivo es crear un archivo JSON que represente el estado del tráfico.

0 votos

Seguro no querría ser un peatón en las calles Pine o California. ¿El auto rojo quedó destrozado en una colisión con un autobús en Sacramento?

1voto

dlanod Puntos 8661

Primero formarías linestrings a partir de los puntos de GPS.

CON paths COMO ( SELECCIONAR car_id, 
ST_MakeLine(geometry ORDER BY timestamp) COMO path, 
  tstzrange(MIN(timestamp) , MAX(end_time)) Como trip_period
  DE gps
  GROUP BY car_id, (también podrías querer agrupar por algún rango de tiempo o trip_id) )
SELECCIONAR p.car_id, p.path, (ST_Length(p.path::geography)* 0.000621371) / ( EXTRACT(epoch FROM (upper(trip_period) - lower(trip_period)) ) / 3600 )  Como speed_mph
INTO car_paths
DE paths;

CREAR ÍNDICE idx_car_paths_path USANDO gist(path);
CREAR ÍNDICE idx_car_paths_trip_period USANDO gist(trip_period);

Ahora, para obtener la lista de rutas que se cruzan con otras rutas

SELECCIONAR p.car_id, p.path
DE car_paths Como p 
DONDE EXISTS (SELECCIONAR p2.car_id 
    DE car_paths COMO p2 
        DONDE p2.car_id <> p.car_id Y 
 ST_Intersects(p2.path,  p.path)     
  Y p2.trip_period && p.trip_period );

0 votos

No estoy seguro, pero considerando esta línea verde, debes usar alguna máquina de enrutamiento para conducir este tipo de línea usando estos 3 puntos específicos... a menos que haya suficientes puntos en el conjunto.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X