Tabla de contenido
Una vez más aquí. Hoy vengo a dejar un pequeño proyecto que empecé a hacer el otro día por un tweet que vi, sobre cómo un usuario creaba un mapa de las líneas de metro de Tokio en 3D, y me pareció mucho chulo. El caso es que no pude saber cómo había creado aquella chulada, y por eso intenté recrear algo similar con aquello que conozco, que viene siendo JavaScript y Python. Y bueno, como no conozco Tokio, pues lo hice con una línea de autobús de la zona. Así ha sido como ha nacido Línea C3PO.
La línea C3 de Vitrasa conecta Bouzas, Coia y Samil con Chapela a través de dos variantes: la C3d, que baja por García Barbón, y la C3i, que lo hace por Travesía de Vigo. Quien usa el bus a diario suele consultar el horario en papel, en la app oficial o en las pantallas de parada. Línea C3PO propone otra forma de entender ese mismo servicio: un atlas interactivo donde el recorrido, las paradas y los autobuses se ven a la vez, en plano o en tres dimensiones, y donde la hora del día se puede recorrer como si fuera un reloj de la línea.
El proyecto es de código abierto y está publicado en GitHub. Quiero aclarar que esto no es un servicio oficial ni está afiliado a Vitrasa ni al Ayuntamiento de Vigo: es una herramienta personal construida sobre datos abiertos municipales solo por curiosidad.
¿Qué problema resuelve Línea C3PO?
Ninguno. Así de simple. Las opciones oficiales son muy buenas. Pero como en Vigo, la línea C3 no es una sola línea con un único sentido quería ver si podía darle una vuelta de tuerca a la forma en la que consultar los horarios. Esta línea son en realidad dos trazados paralelos que se alternan en el centro y que se abren en los extremos. El intervalo de una sola variante puede parecer largo; en la práctica, al combinar C3d y C3i el paso por muchas paradas es más frecuente. Eso cuesta de ver en un PDF o en una lista de salidas.
Línea C3PO concentra en una sola pantalla:
- el trazado de ambas variantes sobre el mapa de la ciudad
- las paradas con su nombre y su hora teórica
- los autobuses según el horario del día (laborable, sábado o domingo)
- una estimación de dónde circulan ahora, cuando se pulsa Ahora
- una vista 3D del mismo recorrido, pensada para explorar la línea y no solo para mirar un plano
- Quien llega a la demo puede abrir el mapa, elegir Ambas, C3d o C3i, cambiar el tipo de día y mover el reloj. El objetivo no es sustituir los canales oficiales de Vitrasa, sino hacer legible un servicio que, sobre papel, se fragmenta en muchas fichas de recorrido.
¿Cómo se usa la interfaz de Línea C3PO?

La aplicación es una página web. A la izquierda hay un panel con el reloj, los filtros y la lista de recorridos. Abajo, una barra de tiempo permite saltar por el día, recorrer el horario en modo animado o volver al momento actual.
Plano muestra la línea sobre un mapa Leaflet con estilo oscuro. Las líneas amarilla y naranja marcan C3d y C3i. Cada autobús aparece como un marcador; si hay datos en vivo, los que están circulando se distinguen de las salidas del horario que aún no tienen un bus emparejado.
3D cambia a un atlas con perspectiva. Se puede girar, acercar, orientar al norte, cambiar la inclinación y, si hay un viaje seleccionado, seguir a ese autobús. Las paradas son discos sobre la calzada; al pulsarlas se abren las horas y, cuando está disponible, la llegada real de esa parada.

Al seleccionar un bus en vivo, el panel indica si va en hora, tarde o adelantado. Esa información también se refleja de forma breve en el propio marcador del mapa. Es una lectura útil para quien quiere saber no solo dónde está el vehículo, sino cómo se comporta respecto al horario teórico.
¿De dónde salen los datos de Línea C3PO?
Los horarios y los trazados proceden del GTFS publicado por el Concello de Vigo. Un script en Python (tools/build_c3.py) convierte ese feed en un JSON propio (data/c3.json) con paradas, formas de línea y salidas por tipo de día. En la versión publicada, el extracto cubre una semana concreta del servicio (cientos de paradas y decenas de recorridos de la C3).
Vitrasa no publica el GPS de cada vehículo. Por eso la posición “en vivo” no es una coordenada directa del autobús. Línea C3PO la estima a partir de la API abierta de llegadas del Concello (TRANSPORTE-ESTIMACION-PARADA en datos.vigo.org):
- Un proxy PHP (api/live.php) consulta, en paralelo, un conjunto de paradas de control repartidas a lo largo del recorrido.
- Cada estimación trae, entre otras cosas, los metros que faltan hasta esa parada.
- El navegador proyecta esos metros sobre el trazado de la línea y coloca el bus en ese punto.
- Lecturas cercanas del mismo vehículo se fusionan, y el resultado se empareja con la salida del horario más coherente para calcular el retraso.
- La caché del proxy evita martillear la API del Ayuntamiento: los visitantes comparten una respuesta reciente. Si la respuesta está un poco antigua, la interfaz puede servirla al momento y refrescar detrás, de modo que el mapa no se quede bloqueado esperando.
Cuando no hay datos en vivo, o cuando se mueve el reloj a otra hora del día, los autobuses vuelven a colocarse según el horario teórico. Las salidas del horario sin bus asociado se dibujan con un contorno distinto, para no confundir “previsto” con “visto”.
Cómo funciona por dentro Línea C3PO (sin jerga innecesaria)
La arquitectura es deliberadamente simple: HTML, CSS, JavaScript, un poco de PHP y un extractor en Python. No hay base de datos propia ni backend pesado.
Leaflet dibuja el mapa plano y los marcadores.
- Three.js construye la vista 3D del recorrido, con luces, autobuses y controles de cámara.
- PHP + curl hace de proxy a la API del Concello, porque el navegador no debería depender solo de peticiones cruzadas a decenas de paradas.
- El reloj del panel es el eje temporal: al cambiar la hora se recalcula qué viajes están en ruta y dónde deberían estar.
- Esa separación permite que la demo se sirva en un hosting web convencional con PHP 8. Abrir el index.html como archivo local no basta para el tiempo real: el proxy necesita un servidor. El repositorio documenta el arranque con el servidor embebido de PHP o con Apache.
¿Por qué importa el código abierto?
Publicar el proyecto en GitHub no es solo un detalle técnico. Permite:
- revisar cómo se construye el JSON a partir del GTFS
- auditar la estimación de posición y sus límites
- adaptar la idea a otras líneas o a otra ciudad con un feed similar
- reportar fallos o mejorar el atlas sin depender de una caja negra
- La licencia del repositorio es GPL-3.0. Quien forkea o reutiliza el código debe respetar esa licencia y, en cualquier caso, la atribución de los datos: GTFS del Concello de Vigo (Open Data Commons Attribution), llegadas de la API VCI+, mapa de OpenStreetMap, Leaflet y Three.js.
Límites que conviene conocer
Un atlas estimado no es un GPS oficial. Puede diferir del servicio real: atascos, refuerzos, salidas canceladas o lecturas incompletas de la API pueden desplazar un bus o dejarlo sin retraso calculable. La estimación se apoya en paradas de control; entre dos sondas lejanas la precisión baja. Por eso la interfaz distingue “en vivo” y “horario”, y por eso el aviso de descargo de responsabilidad aparece en la propia demo.
Para desplazarse de verdad, lo sensato sigue siendo consultar los canales oficiales de Vitrasa y del Concello. Línea C3PO sirve para entender la C3: ver ambas variantes a la vez, comparar el horario con una posición estimada y explorar el trazado en plano o en 3D.
¿Cómo probar Línea C3PO y cómo instalarlo?
La forma más rápida de verlo es la demo. Desde ahí se puede cambiar de plano a 3D, filtrar por línea, pulsar Ahora y abrir una parada o un autobús.
Para instalarlo en local o en un servidor propio:
- Clonar el repositorio entreunosyceros/linea-c3-po.
- Servir la carpeta con PHP 8 y extensión curl.
- Abrir la raíz del proyecto en el navegador.
- Si se quiere regenerar los datos, descargar el GTFS municipal y ejecutar python3 tools/build_c3.py según las instrucciones del README.
Línea C3PO es un atlas horario de la línea C3 de Vitrasa en Vigo: C3d y C3i, de Bouzas–Coia–Samil a Chapela, con mapa, reloj, estimación de posición y vista 3D. Nace de datos abiertos, se ejecuta en el navegador y se puede estudiar o reutilizar desde GitHub. Si te interesa el transporte urbano, los datos municipales o las visualizaciones de movilidad, merece la pena abrirlo en la página de ejemplo y revisar el código fuente.
