Metodología de estimación de subida

Esta sección describe la metodología utilizada para determinar o estimar el punto de subida de una etapa de viaje en el sistema de transporte público. La forma de obtener la subida depende del modo de transporte y de la fuente de información disponible en el evento de validación.

En algunos modos, la ubicación de subida se obtiene de forma directa desde el dato de validación. En otros casos, especialmente en buses, la ubicación debe ser estimada utilizando información GPS, tiempo de validación, servicio, sentido y red de paraderos.


1. Casos con ubicación de subida directa

Para ciertos modos de transporte, la validación está asociada directamente a una infraestructura fija conocida, por lo que no es necesario estimar la ubicación mediante GPS.


1.1 Metro y Metrotren

En el caso de Metro y Metrotren, la estimación de subida es directa. La validación está asociada a una estación específica, por lo que la estación de subida se obtiene desde el mismo dato de validación.

Conceptualmente:

estacion_subida = estacion_asociada_a_la_validacion
ubicacion_subida = coordenada_de_la_estacion

En estos casos, la fuente de la ubicación de subida puede considerarse observada o directamente asignada desde la infraestructura de validación.

Campos derivados:

paradero_subida = estacion_validacion
lat_subida = latitud_estacion
lon_subida = longitud_estacion

1.2 Zonas pagas

En el caso de zonas pagas, la validación se encuentra asociada al identificador del validador. Este validador está vinculado a una zona paga específica, la cual representa el punto de acceso al sistema.

La ubicación de subida se determina a partir de la zona paga asociada al validador.

Conceptualmente:

id_validador = validador_de_la_transaccion
zona_paga = zona_paga_asociada_al_validador
ubicacion_subida = coordenada_de_la_zona_paga

En este caso, la validación ocurre antes de la subida física al bus, pero permite determinar la zona de acceso de la persona usuaria.

Campos derivados:

paradero_validacion = zona_paga
lat_validacion = latitud_zona_paga
lon_validacion = longitud_zona_paga

paradero_subida = zona_paga_o_paradero_asociado
lat_subida = latitud_zona_paga
lon_subida = longitud_zona_paga

2. Estimación de subida en buses

En el caso de buses, la ubicación de subida no siempre se observa directamente. La validación ocurre a bordo del vehículo, pero el evento de validación debe ser asociado a una posición espacial del bus y luego a un paradero probable de subida.

La metodología se compone de dos etapas principales:

  1. Estimar la posición del bus al momento exacto de la validación.
  2. Asignar esa posición estimada al paradero más probable.

2.1 Estimación de posición del bus mediante GPS

Primero se identifica la trayectoria GPS del bus correspondiente a la validación. Luego se buscan los registros GPS inmediatamente anterior y posterior al tiempo de validación.

Conceptualmente:

tiempo_validacion = tiempo de la transacción

gps_anterior = último GPS del bus antes o igual al tiempo_validacion
gps_siguiente = primer GPS del bus después del tiempo_validacion

Con estos dos puntos GPS se estima la posición del bus al momento de la validación mediante interpolación lineal.


2.2 Interpolación lineal de la posición

La interpolación lineal estima la posición del bus entre dos puntos GPS conocidos, asumiendo un desplazamiento proporcional al tiempo transcurrido entre ambos registros.

Si se tienen:

gps_anterior:
    tiempo = t1
    x = x1
    y = y1

gps_siguiente:
    tiempo = t2
    x = x2
    y = y2

tiempo_validacion = tv

Entonces se calcula un factor de interpolación:

factor = (tv - t1) / (t2 - t1)

Y la posición interpolada queda definida como:

x_validacion = x1 + factor * (x2 - x1)
y_validacion = y1 + factor * (y2 - y1)

Esta posición representa la mejor estimación de la ubicación del bus al momento exacto en que ocurrió la validación.


2.3 Uso del servicio y sentido asignado al GPS

Una vez estimada la posición del bus, se utiliza la información operacional disponible en los GPS para identificar el servicio y sentido que estaba realizando el vehículo.

Cuando los GPS tienen asignado un servicio y sentido válido, la búsqueda del paradero de subida se restringe a la secuencia de paradas correspondiente a ese servicio-sentido.

Conceptualmente:

servicio = servicio_asignado_al_gps
sentido = sentido_asignado_al_gps
secuencia_paradas = paradas_del_servicio_sentido

Luego se busca el paradero más cercano a la posición interpolada dentro de esa secuencia.

paradero_subida = paradero_mas_cercano(
    posicion_interpolada,
    secuencia_paradas_servicio_sentido
)

Este enfoque evita asignar la validación a un paradero que no pertenece al recorrido que el bus estaba realizando.


2.4 Caso sin servicio-sentido asignado al GPS

En algunos casos, los registros GPS no tienen un servicio-sentido asignado de forma confiable. Esto puede ocurrir por problemas de asignación operacional, datos incompletos, pérdida de información o inconsistencias entre fuentes.

Cuando no existe un servicio-sentido asignado al GPS, la búsqueda del paradero de subida se realiza sobre toda la red de paraderos.

Sin embargo, para evitar asignaciones incorrectas, no basta con elegir el paradero más cercano. También se considera la dirección de movimiento de la transacción y la dirección de la calle o sentido asociado al paradero.

La regla principal es:

direccion_movimiento_transaccion debe coincidir con direccion_paradero

Esto busca evitar que una transacción sea asignada a un paradero ubicado al otro lado de la calle o en el sentido contrario de circulación.


2.5 Control de sentido de calle

El control de sentido de calle es especialmente importante en vías donde existen paraderos cercanos en ambos sentidos. Si solo se utilizara distancia, el algoritmo podría asignar la subida al paradero físicamente más cercano, pero correspondiente al sentido contrario.

Por eso, cuando no se cuenta con servicio-sentido asignado, el algoritmo evalúa:

  1. La distancia entre la posición estimada de validación y el paradero candidato.
  2. La dirección de movimiento del bus o transacción.
  3. La dirección operacional o sentido de calle asociado al paradero.

Solo se consideran candidatos válidos aquellos cuyo sentido sea compatible con el movimiento observado.

Conceptualmente:

si direccion_movimiento_transaccion coincide con direccion_paradero:
    paradero puede ser candidato
si no:
    descartar paradero

Pseudocódigo de estimación de subida

Entrada:
    transaccion
    trayectoria_gps_bus
    red_paraderos
    secuencias_paradas_por_servicio_sentido

Datos de la transacción:
    tiempo_validacion
    id_vehiculo
    tipo_modo
    id_validador

Si tipo_modo es Metro o Metrotren:

    estacion = obtener_estacion_desde_validacion(transaccion)

    paradero_subida = estacion
    lat_subida = latitud_estacion
    lon_subida = longitud_estacion
    fuente_ubicacion_subida = "Observado"

    terminar

Si tipo_modo es Zona Paga:

    zona_paga = obtener_zona_paga_desde_validador(id_validador)

    paradero_validacion = zona_paga
    lat_validacion = latitud_zona_paga
    lon_validacion = longitud_zona_paga

    paradero_subida = zona_paga_o_paradero_asociado
    lat_subida = latitud_zona_paga
    lon_subida = longitud_zona_paga
    fuente_ubicacion_subida = "Observado" o "Emparejado"

    terminar

Si tipo_modo es Bus:

    gps_anterior = buscar_gps_anterior(
        trayectoria_gps_bus,
        tiempo_validacion
    )

    gps_siguiente = buscar_gps_siguiente(
        trayectoria_gps_bus,
        tiempo_validacion
    )

    Si gps_anterior y gps_siguiente existen:

        factor = (tiempo_validacion - gps_anterior.tiempo)
                 / (gps_siguiente.tiempo - gps_anterior.tiempo)

        x_validacion = gps_anterior.x
                       + factor * (gps_siguiente.x - gps_anterior.x)

        y_validacion = gps_anterior.y
                       + factor * (gps_siguiente.y - gps_anterior.y)

        posicion_validacion = (x_validacion, y_validacion)

    Si no existe gps_anterior o no existe gps_siguiente:

        posicion_validacion = mejor_gps_disponible_cercano_al_tiempo_validacion

    servicio = servicio_asignado_al_gps
    sentido = sentido_asignado_al_gps

    Si servicio y sentido son válidos:

        candidatos = obtener_paraderos_del_servicio_sentido(
            servicio,
            sentido
        )

        paradero_subida = buscar_paradero_mas_cercano(
            posicion_validacion,
            candidatos
        )

        fuente_ubicacion_subida = "Emparejado"

    Si servicio o sentido no son válidos:

        direccion_movimiento = calcular_direccion_movimiento(
            gps_anterior,
            gps_siguiente
        )

        candidatos = []

        Para cada paradero en red_paraderos:

            Si direccion_movimiento coincide con direccion_paradero:

                agregar paradero a candidatos

        paradero_subida = buscar_paradero_mas_cercano(
            posicion_validacion,
            candidatos
        )

        fuente_ubicacion_subida = "Estimado"

Salida:
    paradero_subida
    lat_subida
    lon_subida
    posicion_validacion
    fuente_ubicacion_subida

Interpretación metodológica

La estimación de subida busca asociar cada validación a un punto espacial coherente con la operación real del sistema.

En modos con infraestructura fija, como Metro y Metrotren, la ubicación de subida se obtiene directamente desde la estación de validación. En zonas pagas, la ubicación se determina a partir del validador y la zona paga asociada.

En buses, la validación ocurre a bordo de un vehículo en movimiento. Por eso, primero se estima la posición del bus al instante exacto de la validación mediante interpolación entre los GPS anterior y posterior. Luego, esa posición se asocia al paradero más probable.

Cuando existe información de servicio y sentido, la asignación se restringe a la secuencia de paradas de ese servicio-sentido, lo que mejora la coherencia operacional. Cuando esa información no está disponible, se usa toda la red de paraderos, pero incorporando una restricción de dirección de movimiento para evitar asignaciones al paradero del sentido contrario.