Cómo redujimos nuestro planificador de viajes hasta que no necesitó datos.

Presentamos el planificador de viajes más rápido, pequeño y sin conexión del transporte público 🗺

En un mundo de sitios web hinchados y aplicaciones móviles de glotón de datos, puede parecer que los únicos desarrolladores que se preocupan por la compresión de archivos son los ficticios en Silicon Valley ...

yo: cargando un artículo de 200 palabras con 500MB de anuncios y javascript

… Afortunadamente, nuestra oficina en Transit está llena de obsesivos por la compresión. Al igual que el CTO Guillaume y el dios del mapa Anton, que ayudaron a hacer que características como horarios de tránsito, mapas, listas de paradas, etc. estén disponibles sin conexión, a velocidades increíbles, en menos MB que un par de Vines.

En Transit, queremos que cada usuario tenga la mejor información disponible en todo momento. Incluso si están fuera de línea, ya que pueden tener planes de datos a todo costo , están en algún lugar con una recepción celular poco confiable o están a 10 km de profundidad a bordo del Gringotts Express. Lo que nos lleva a la actualidad: nos complace anunciar nuestro último golpe de estado fuera de línea, planificación de viajes en tránsito.

Pioneros de nuestro rey interno de la compresión Rod , hemos logrado construir el primer planificador de viajes de tránsito que funciona fuera de línea, sin importar en qué ciudad se encuentre.

CTO, Map God y nuestro nuevo Compression King ™.

Cómo lo hicimos (paso 1)

Los datos de tránsito estático (es decir, horarios, listas de paradas, mapas de rutas) proporcionan el primer obstáculo para el acceso fuera de línea. ¿Por qué? Los archivos son enormes! Las agencias de tránsito usan un formato de datos llamado GTFS, cuyos archivos pueden tener más de 100 MB. Esa es una gran cantidad de datos, y solo para horarios, listas de paradas, mapas de rutas. Además, se deben analizar muchos datos cada vez que necesita calcular un plan de viaje.

Pero esos archivos de 100 MB tienen muchas redundancias. Con las matemáticas correctas, puede descubrir patrones en los horarios de tránsito y representarlos de manera más eficiente. ¿Por qué almacenar un horario de autobús como “12:00 AM, 12:10 AM, 12:20 AM” si pudieras almacenarlo como “0:00, +10, +10”, que requiere menos caracteres y, por lo tanto, menos espacio?

¿Qué pasaría si pudiera encontrar aún más trucos, formas más eficientes de representar datos? ¿Cuánto espacio podrías ahorrar?

Resulta ... mucho.

Horario de paradas en la misma calle: en GTFS,

Para exprimir esas eficiencias, Anton y Guillaume construyeron una biblioteca de compresión interna llamada bGTFS, donde la "b" significa binario. Puede reducir los archivos de datos de tránsito de su ciudad entre 30X y 200X.

Es significativamente más eficiente que la compresión .zip, y le permite descargar / almacenar / cargar los datos de tránsito de su ciudad en segundos.

Es por eso que Transit se siente tan refrescantemente rápido.

Después de construir bGTFS, ampliamos nuestro repertorio de trucos de compresión a mapas: bOSM es nuestra forma de comprimir datos de Open Street Map. Nos permite tomar todas las cosas relevantes que queremos (calles, intersecciones, senderos, senderos para bicicletas) y arroja la información que no (como la "accesibilidad de los caballos" de ciertas calles ... jajaja).

De la wiki de OSM. ¿Pero nos importan los caballos? Relinchar….

Con bOSM, representamos al mundo en una cuadrícula comprimida de 1024 fichas x 1024 fichas, de las cuales necesitamos ~ 9 fichas por ciudad. Pero donde un mapa OSM del mundo necesitaría ~ 44GB de datos, un mapa bOSM necesita solo ~ 3.4GB, de los cuales su ciudad es una fracción pequeña. En Montreal, un mapa bOSM requiere solo 10 MB. ¡Muy agradable!

Junto con bGTFS + bOSM, ahora podemos almacenar todos los datos de tránsito, ciclismo y caminata de su ciudad en archivos súper pequeños, directamente en su teléfono.

Paso 2: desconectarse (y salir de la nube ...)

Almacenar datos de tránsito en su teléfono es una cosa. Pero hacer cálculos sobre esos datos es otro plato de espaguetis.

Hasta hoy, y hasta que conocimos a Rod , no había forma de planificar un viaje de tránsito sin una conexión de datos. Conectado a los datos, puede planificar viajes que integran interrupciones en tiempo real y posiciones de vehículos. Desconectado, ¡ni siquiera podría planificar un viaje según el horario!

Tendría que encontrar su camino con un mapa, pedir direcciones, abandonar el metro para una mejor recepción o rezar para que recupere la recepción a mitad de viaje.

Si estabas en tu viaje diario, perder tus "superpoderes de planificación de viajes" no era gran cosa. Pero si estuviera en una ciudad nueva o en una ruta desconocida, la dependencia de los datos de nuestro planificador de viajes podría ser estresante. ¿Cómo podríamos hacer que el planificador de viajes sea más útil de manera consistente?

Para que sea totalmente compatible sin conexión, comenzamos con paseos en bicicleta y a pie. Con nuestros pequeños archivos bOSM, no fue tan difícil. Planificación de viajes fuera de línea lanzada para esos viajes, el verano pasado.

Luego, tuvimos que descubrir cómo usar las indicaciones para caminar sin conexión para descubrir qué transferencias de tránsito eran posibles y cuáles no. ¿Qué autobuses y trenes (y a qué horas) se conectan entre sí? Las combinaciones parecían infinitas, y los teléfonos no pueden analizar fácilmente el infinito.

¿Cada transferencia de tránsito? Demasiados datos.

En lugar de que el planificador de viajes fuera de línea se escapara por minutos, buscando transferencias entre cada par de líneas de tránsito, necesitábamos algo más eficiente. Algo para reducir las infinitas posibilidades. Algo más ligero en computación. Algo que podría escupir planes en milisegundos.

Entonces Rod hizo lo que cualquier desarrollador genio haría con el algoritmo de compresión de datos de tránsito más sexy del mundo:

  • Tomó nuestros datos comprimidos de bGTFS (tránsito) y bOSM (mapa).
  • Precalculó las transferencias de tránsito + caminata entre dos paradas (dentro de un radio de 1 km) y las descartó por encima de una caminata de 20 minutos
  • Él almacenó todas esas "posibles transferencias" a la memoria, en un pequeño archivo.

Ahora, nuestra aplicación ya no tenía que calcular las indicaciones para caminar para cada tramo de su viaje: ¡solo necesitaba encontrar indicaciones para llegar desde los puntos de inicio y final hasta la parada de tránsito más cercana, y confiar en las transferencias precalculadas para el resto!

¿Más de 20 minutos a pie? gracias, no ‍

Al guardar los tiempos de transferencia de “tránsito + caminar” en la memoria, podemos compararlos rápidamente con sus horarios de tránsito. Lo que significa que a partir de hoy, puede obtener indicaciones de tránsito confiables sin conexión, incluidas las transferencias de línea a línea que el horario dice que son posibles.

P.ej. ¿Me subirá el metro a mi autobús de la una de la madrugada? No ... pero puedes hacer la 1:20 AM ".
Antes: sin conexión, ¿qué? Después: plan de viaje hasta quedar satisfecho.

El buen tránsito no se trata solo de llevarte de aa b. Se trata de ayudarlo a hacerlo de manera eficiente y de darle la confianza para pasar de a a b, incluso en circunstancias menos que ideales. Se trata de hacer que el tránsito sea más útil en general, asegurando que las personas que no tienen buenos planes de datos puedan obtener la mejor información disponible.

Y aunque nadie prefiere viajar sin datos de tránsito en tiempo real, al hacer que más funciones de tránsito estén disponibles sin conexión, nos aseguramos de que más personas puedan llegar a donde necesitan ir. Incluso cuando su metro no tiene WiFi. Llegaron a su límite de datos. O un ICBM que zumba al rojo vivo en la atmósfera hace explotar su satélite celular.

Pase lo que pase, nuestro planificador de viajes ahora funcionará el 100% del tiempo ™, asegurando una experiencia consistente para todos y en cada viaje.

¿Nunca usó Transit? Lo tenemos cubierto: gratis en iOS y Android
¿Siempre usas Transit? ¡Actualice la aplicación para desbloquear su nuevo planificador de viajes fuera de línea!