{"id":3877,"date":"2018-05-25T11:32:03","date_gmt":"2018-05-25T09:32:03","guid":{"rendered":"http:\/\/www.ingartek.com\/?p=3877"},"modified":"2022-12-02T08:38:04","modified_gmt":"2022-12-02T07:38:04","slug":"los-gtfs-desde-un-punto-de-vista-tecnologico","status":"publish","type":"post","link":"https:\/\/www.ingartek.com\/es\/los-gtfs-desde-un-punto-de-vista-tecnologico\/","title":{"rendered":"Los GTFS desde un punto de vista tecnol\u00f3gico"},"content":{"rendered":"<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">GTFS viene de las siglas en ingl\u00e9s General Transit Feed Specification, o en castellano Especificaci\u00f3n General de Feeds de Transporte P\u00fablico. El objetivo es establecer un formato com\u00fan para los horarios de transporte p\u00fablico e informaci\u00f3n geogr\u00e1fica asociada a ellos.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Gracias a este est\u00e1ndar, las operadoras de transporte ofrecen a sus viajeras y viajeros informaci\u00f3n acerca de los viajes.<\/span><\/p>\n<p><strong>Un poco de historia<\/strong><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Cuentan que todo empez\u00f3 en Google all\u00e1 por el a\u00f1o 2005. Los empleados y las empleadas de esta compa\u00f1\u00eda disponen de una pol\u00edtica llamada \u201c20% del tiempo\u201d, lo que les permite dedicar el 20% del tiempo a leer todo tipo de cosas y a pensar en ideas y promover experimentos. Chris Harrelson deseaba incorporar informaci\u00f3n de tr\u00e1nsito en Google Maps cuando conoci\u00f3 a Tim y Bibiana McHugh, una pareja que trabaja en la compa\u00f1\u00eda de transporte TriMet, de Portland, Oregon. En aquella \u00e9poca, los servicios de mapas m\u00e1s populares ofrec\u00edan indicaciones de viaje mientras se conduc\u00eda, mientras que la informaci\u00f3n de tr\u00e1nsito en ciudades desconocidas era una utop\u00eda. Entonces, el de Google y la pareja de TriMet comenzaron a intercambiarse informaci\u00f3n, informaci\u00f3n de horarios en formato CSV.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">De ah\u00ed naci\u00f3 Google Transit Trip Planner, siendo Portland la primera ciudad inclu\u00edda en el proyecto con informaci\u00f3n de su sistema de metro. Pronto se incluyeron m\u00e1s ciudades de Estados Unidos y se fue extendiendo paulatinamente a lo largo de todo el mundo, a medida que su popularidad crec\u00eda.<\/span><\/p>\n<p><strong>Visi\u00f3n general de un feed GTFS<\/strong><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Un fichero GTFS es un archivo comprimido en formato ZIP que contiene varios archivos de texto en formato CSV. Habitualmente se conoce a \u00e9ste como feed GTFS.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Cada archivo de texto que compone el feed modela un aspecto en especial de la informaci\u00f3n de tr\u00e1nsito, los cuales vamos a pasar a enumerar ahora mismo.<\/span><\/p>\n<ul>\n<li><strong>agency.txt<\/strong><\/li>\n<\/ul>\n<p>Obligatorio. Define una o varias empresas de transporte p\u00fablico que proporcionan los datos de este feed.<\/p>\n<ul>\n<li><strong>stops.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Obligatorio. Aqu\u00ed se especifican las paradas a las que se da servicio.<\/span><\/p>\n<ul>\n<li><strong>routes.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Obligatorio. Se definen las rutas del transporte p\u00fablico. Una ruta es un conjunto de viajes que se muestra a los pasajeros y pasajeras como un solo servicio.<\/span><\/p>\n<ul>\n<li><strong>trips.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Obligatorio. Son los viajes para cada ruta. Un viaje es una secuencia de dos o m\u00e1s paradas que tienen lugar a una hora en especial.<\/span><\/p>\n<ul>\n<li><strong>stop_times.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Obligatorio. Dentro de un viaje, especifica el horario al que llega un veh\u00edculo a una parada y sale de la misma.<\/span><\/p>\n<ul>\n<li><strong>calendar.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Obligatorio. Define patrones de servicio en los que la empresa opera, como por ejemplo todos los d\u00edas de la semana, solo fines de semana o de lunes a mi\u00e9rcoles.<\/span><\/p>\n<ul>\n<li><strong>calendar_dates.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Opcional. Indica las excepciones de servicio de calendar.txt, aunque puede sustituirlo en caso de disponer de todas las fechas de servicio.<\/span><\/p>\n<ul>\n<li><strong>fare_attributes.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Opcional. Aqu\u00ed es donde se definen las tarifas de las rutas.<\/span><\/p>\n<ul>\n<li><strong>fare_rules.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Opcional. Son las reglas de aplicaci\u00f3n de la informaci\u00f3n sobre tarifas correspondiente a las rutas.<\/span><\/p>\n<ul>\n<li><strong>shapes.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Opcional. Aqu\u00ed se definen las reglas para el trazado de las l\u00edneas en un mapa. Si no se definiera este archivo, las rutas estar\u00edan dibujadas como l\u00edneas rectas.<\/span><\/p>\n<ul>\n<li><strong>frequencies.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Opcional. Define el tiempo entre viajes para las rutas cuya frecuencia de servicio es variable.<\/span><\/p>\n<ul>\n<li><strong>transfers.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Opcional. En este fichero se especifican las reglas para establecer conexiones en los puntos de transbordo entre rutas.<\/span><\/p>\n<ul>\n<li><strong>feed_info.txt<\/strong><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Opcional. Aqu\u00ed se incluye informaci\u00f3n adicional sobre el feed en s\u00ed, es decir, incluye informaci\u00f3n sobre el editor, la versi\u00f3n o el vencimiento del feed.<\/span><\/p>\n<p><strong>Generaci\u00f3n de los feed<\/strong><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Habitualmente el origen de los datos se encuentra en un Sistema de Ayuda a la Explotaci\u00f3n o SAE, al cual es necesario conectarse y documentarse para encontrar lo necesario para el feed. En estos casos, la tarea dif\u00edcil radica en bucear entre las diferentes bases de datos en busca de la tabla que provea de lo necesario. En realidad este tipo de conexi\u00f3n no es otro que una base de datos donde elegir justamente lo necesario.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Sin embargo, el objetivo es siempre el mismo. Para empezar, se buscan los operadores que conforman el feed a construir, que suelen ser \u00fanico. Adem\u00e1s, se tratan de hallar los datos m\u00e1s est\u00e1ticos, tales como sus paradas, rutas y calendarios. A partir de ah\u00ed, las tareas m\u00e1s dif\u00edciles las conforman el hecho de buscar los viajes para cada ruta y la generaci\u00f3n de los tiempos por parada. Por norma general se evita mostrar las rutas en l\u00ednea recta ofrecer el fichero shapes.txt, tal que las l\u00edneas que se dibujen en los mapas reflejen los trayectos realizados por las v\u00edas adecuadas (carreteras, v\u00edas de tren o metro&#8230;). Desafortunadamente, informaci\u00f3n como las tarifas, frecuencias o transbordos son raramente incluidas.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Lo deseable es que se provea de informaci\u00f3n fiel al est\u00e1ndar GTFS, de tal manera que su procesamiento sea \u00e1gil y no requiera de un largo tiempo de creaci\u00f3n, dejando la informaci\u00f3n en repositorios como FTP, Amazon S3, etc.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Asimismo, dejando de lado los SAE y estos \u00faltimos, son muchos los or\u00edgenes de datos que se pueden tratar en Servicios Web, ya sean SOAP o Rest.<\/span><\/p>\n<p><strong>Tecnolog\u00edas a nuestro servicio<\/strong><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Desde Ingartek apostamos y promovemos el uso del Software Libre. Partiendo del uso de tecnolog\u00edas Java, nuestros desarrollos para el trato de feeds GTFS son construidos a partir del framework Spring Boot y de las herramientas creadas por Conveyal, OneBusAway u OpenTripPlanner, adem\u00e1s de las propias que facilita Google.<\/span><\/p>\n<p><strong>Validaci\u00f3n de feeds<\/strong><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Una vez generado un feed GTFS, es necesario comprobar que no contiene errores de ning\u00fan tipo. Para ello, Google cre\u00f3 FeedValidator, una herramienta que analiza feeds GTFS y genera un informe web donde muestra los errores y advertencias o recomendaciones.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Esta herramienta requiere conocimientos de empleo de terminales\/consolas y l\u00ednea de comandos, desde las cuales se hacen referencia a los feed GTFS y, con diferentes par\u00e1metros de personalizaci\u00f3n, se generan las validaciones.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Una vez realizada esa primera comprobaci\u00f3n, es necesario subir los feed GTFS a la plataforma Partner Dash de Google. Ah\u00ed, se realiza una segunda y \u00faltima validaci\u00f3n, para despu\u00e9s poner a disposici\u00f3n del p\u00fablico la informaci\u00f3n.<\/span><\/p>\n<p><strong>Conclusiones<\/strong><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">En definitiva, el est\u00e1ndar GTFS requiere de conocimientos espec\u00edficos para su implementaci\u00f3n, ya sean t\u00e9cnicos en torno a las nuevas tecnolog\u00edas o aquellos inherentes al transporte. Adem\u00e1s, tiene que pasar por unos filtros muy estrictos que responden a est\u00e1ndares definidos por Google, lo que exige del dominio de una serie de herramientas.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>GTFS viene de las siglas en ingl\u00e9s General Transit Feed Specification, o en castellano Especificaci\u00f3n General de Feeds de Transporte P\u00fablico. El objetivo es establecer un formato com\u00fan para los horarios de transporte p\u00fablico e informaci\u00f3n geogr\u00e1fica asociada a ellos&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[125,1433,1458],"tags":[1446],"class_list":["post-3877","post","type-post","status-publish","format-standard","hentry","category-blog-del-conocimiento","category-asistencia-tecnica-y-desarrollo-tecnologico","category-producto-gtfsuite","tag-asistencia-tecnica-y-desarrollo-tecnologico"],"_links":{"self":[{"href":"https:\/\/www.ingartek.com\/es\/wp-json\/wp\/v2\/posts\/3877","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ingartek.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ingartek.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ingartek.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ingartek.com\/es\/wp-json\/wp\/v2\/comments?post=3877"}],"version-history":[{"count":0,"href":"https:\/\/www.ingartek.com\/es\/wp-json\/wp\/v2\/posts\/3877\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ingartek.com\/es\/wp-json\/wp\/v2\/media?parent=3877"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ingartek.com\/es\/wp-json\/wp\/v2\/categories?post=3877"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ingartek.com\/es\/wp-json\/wp\/v2\/tags?post=3877"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}