Skip to content
gtfs.media

Tu agencia no es genérica. Tus pantallas tampoco deberían serlo.

La suite de código abierto maneja la información de tránsito que toda agencia necesita. Lo que no puede saber es tu hardware, tu flota, tu marca y la manera particular en que se publica tu feed. Esa parte la construimos para ti — como un módulo delgado junto al núcleo, nunca un fork.

En lenguaje sencillo

El software gratuito hace lo que toda agencia necesita.

No puede saber sobre tus pantallas, tus autobuses o tu marca. Esa parte la construimos para ti.

La añadimos junto al software gratuito, no dentro de él. Así puedes seguir recibiendo actualizaciones.

El resto de esta página muestra una agencia para la que hicimos esto.

Lo que puede añadir una capa personalizada

Seis tipos de trabajo, en orden aproximado de frecuencia con que las agencias los solicitan.

Cómo se ve eso en la práctica. El resto de esta página es la capa de una agencia, en producción — lo que contiene y por qué sigue siendo una capa.

Caso de estudio: la capa personalizada de SFMTA

La San Francisco Municipal Transportation Agency ejecuta la suite de código abierto con tres pequeños módulos propios: pilonos de plataforma con la tipografía de Muni, libreas de tranvías históricos en el mapa en vivo y la brecha de identificadores que viene con un feed regional. Todo lo siguiente es aditivo.

El pilono de dos pantallas

Los pilonos de plataforma ejecutan dos paneles apilados. La pantalla superior lleva la marca de la agencia y la insignia de la ruta activa, dimensionada para leerse desde el otro lado de la plataforma; la pantalla inferior sigue con las alertas de esa ruta, salidas en vivo y mapa de la ruta. Ambos paneles consultan un endpoint y pasan páginas sincronizados, así que nunca discrepan sobre qué ruta están mostrando — la pareja de abajo fue capturada en media rotación, ambos en el 25 Treasure Island.

Cada panel es un rol en el motor de pantallas compartido. El módulo de la agencia registra el diseño, la tipografía Frutiger, las etiquetas de sección en cuatro idiomas y el emparejamiento de dos pantallas; el núcleo proporciona los datos, las consultas y el reloj de paginación.

The upper section of a platform pylon display, showing the stop name and a service alert The lower section of a platform pylon display, showing route information

Una pantalla donde un par no cabe

No toda bahía tiene espacio para dos paneles. Los pilonos de pantalla única llevan toda la historia en una superficie: insignia de ruta, salidas en vivo agrupadas por destino, el patrón de servicio en palabras y el mapa propio de la línea.

Es el mismo módulo y el mismo diseño — un segundo diseño de página, no una segunda base de código. Cuál muestra una pantalla dada es un ajuste en su contexto de pantalla, para que la agencia cambie una bahía de un diseño al otro sin un despliegue.

A tall platform pylon display showing a route badge, a service alert, and live departure times

El mapa en vivo, en las propias páginas de ruta de la agencia

La página de F Market & Wharves en sfmta.com lleva un mapa en vivo como iframe. El sitio de la agencia mantiene su propio stack, chrome y navegación; el mapa llega con la maquinaria en tiempo real ya dentro.

An agency route page listing stops, times, and a service alert
Integrado en la propia página de la agencia, bajo su propia navegación. Los orígenes de enmarcado permitidos son configuración, no un cambio de código.

Cada tranvía con su propia pintura

La línea F opera tranvías históricos, cada uno con la librea de una ciudad y época diferente. Los marcadores genéricos descartarían eso, así que el módulo de la agencia proporciona un icono por ID de vehículo — un PNG con el nombre del vehículo, sin cambio de código para añadir uno.

An agency web page with an embedded live map showing vehicle positions along a route
Mismo mapa, ancho completo. Los nombres de paradas y etiquetas de ruta aquí enlazan de vuelta a sfmta.com — la integración toma patrones de URL para ambos, así que apunta a las páginas del sitio anfitrión en lugar de las nuestras.

Horarios del mismo feed

Los horarios publicados se generan del GTFS importado, por dirección y día de servicio, con encabezados de parada que enlazan a la propia página de cada parada.

A printed-style timetable generated from GTFS, with columns per timepoint
Solo puntos horarios por defecto, para que una línea larga se mantenga legible; la lista completa de paradas está a un clic.

Por qué sigue siendo una capa

Todo lo anterior es registro, inyección y valores por defecto — trabajo para el que el núcleo ya publica hooks. Esa es la parte que se transfiere: la agencia sigue los mismos módulos de código abierto que todos los demás ejecutan, y su propio código se mantiene lo suficientemente pequeño para leerlo en una tarde.

  • Núcleo upstream — sin parches que mantener, así que una actualización es una actualización
  • Basado en hooks — tres hooks llevan la mayor parte de la personalización
  • Configuración semilla — los valores por defecto de la agencia se instalan solos y luego pertenecen a la interfaz de administración
# One thin agency module, three hooks

hook_gtfs_display_variants_alter()
  → register the 'pylon' hardware skin

hook_gtfs_display_map_rt_vehicle_icons_alter()
  → per-vehicle liveries from vehicleIcons/*.png

hook_gtfs_display_rt_entity_ids_alter()
  → map static stop IDs to realtime feed IDs

Compatible con

Las especificaciones que implementa la suite, las fuentes de feeds con las que ya ha funcionado y el software subyacente.

Cualquier publicador de GTFS y GTFS‑Realtime funciona; estos son con los que hemos trabajado.

Pon tu feed a trabajar.

Tu hardware, flota y peculiaridades de feed no serán estos. Cuéntanos qué tiene de raro tu sistema — determinar qué pertenece a la capa y qué pertenece al upstream es nuestra parte favorita del trabajo.

hello@gtfs.media Ver las pantallas →