CINXE.COM
Protobuf - General Transit Feed Specification
<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="canonical" href="https://gtfs.org/documentation/realtime/proto/"> <link rel="prev" href="../feed-entities/trip-modifications/"> <link rel="next" href="../language-bindings/overview/"> <link rel="alternate" href="./" hreflang="en"> <link rel="alternate" href="../../../fr/documentation/realtime/proto/" hreflang="fr"> <link rel="alternate" href="../../../es/documentation/realtime/proto/" hreflang="es"> <link rel="alternate" href="../../../ja/documentation/realtime/proto/" hreflang="ja"> <link rel="alternate" href="../../../de/documentation/realtime/proto/" hreflang="de"> <link rel="alternate" href="../../../pt/documentation/realtime/proto/" hreflang="pt"> <link rel="alternate" href="../../../ru/documentation/realtime/proto/" hreflang="ru"> <link rel="alternate" href="../../../id/documentation/realtime/proto/" hreflang="id"> <link rel="alternate" href="../../../ko/documentation/realtime/proto/" hreflang="ko"> <link rel="alternate" href="../../../zh/documentation/realtime/proto/" hreflang="zh"> <link rel="alternate" href="../../../zh-TW/documentation/realtime/proto/" hreflang="zh-TW"> <link rel="icon" href="../../../assets/favicon.ico"> <meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.44+insiders-4.53.14"> <title>Protobuf - General Transit Feed Specification</title> <link rel="stylesheet" href="../../../assets/stylesheets/main.12320a83.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/palette.ab4e12ef.min.css"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Mulish:300,300i,400,400i,700,700i%7CSF+Mono:400,400i,700,700i&display=fallback"> <style>:root{--md-text-font:"Mulish";--md-code-font:"SF Mono"}</style> <link rel="stylesheet" href="../../../assets/stylesheets/extra.css"> <link rel="stylesheet" href="../../../assets/stylesheets/footer.css"> <script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <script id="__analytics">function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-DRBTC7SSDT"),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","G-DRBTC7SSDT",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-DRBTC7SSDT",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script> <script>if("undefined"!=typeof __md_analytics){var consent=__md_get("__consent");consent&&consent.analytics&&__md_analytics()}</script> </head> <body dir="ltr" data-md-color-scheme="gtfs" data-md-color-primary="custom" data-md-color-accent="custom"> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> <a href="#gtfs-realtime-protobuf" class="md-skip"> Skip to content </a> </div> <div data-md-component="announce"> </div> <header class="md-header" data-md-component="header"> <nav class="md-header__inner md-grid" aria-label="Header"> <a href="../../.." title="General Transit Feed Specification" class="md-header__button md-logo" aria-label="General Transit Feed Specification" data-md-component="logo"> <img id="logo_light_mode" src="../../../assets/logo.png" alt="logo"> <img id="logo_dark_mode" src="../../.." alt="logo"> </a> <label class="md-header__button md-icon" for="__drawer"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class="md-header__title" data-md-component="header-title"> <div class="md-header__ellipsis"> <div class="md-header__topic"> <span class="md-ellipsis"> General Transit Feed Specification </span> </div> <div class="md-header__topic" data-md-component="header-topic"> <span class="md-ellipsis"> Protobuf </span> </div> </div> </div> <form class="md-header__option" data-md-component="palette"> <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="gtfs" data-md-color-primary="custom" data-md-color-accent="custom" aria-hidden="true" type="radio" name="__palette" id="__palette_0"> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <div class="md-header__option"> <div class="md-select"> <button class="md-header__button md-icon" aria-label="Select language"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m12.87 15.07-2.54-2.51.03-.03A17.5 17.5 0 0 0 14.07 6H17V4h-7V2H8v2H1v2h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2zm-2.62 7 1.62-4.33L19.12 17z"/></svg> </button> <div class="md-select__inner"> <ul class="md-select__list"> <li class="md-select__item"> <a href="./" hreflang="en" class="md-select__link"> English </a> </li> <li class="md-select__item"> <a href="../../../fr/documentation/realtime/proto/" hreflang="fr" class="md-select__link"> Français </a> </li> <li class="md-select__item"> <a href="../../../es/documentation/realtime/proto/" hreflang="es" class="md-select__link"> Español </a> </li> <li class="md-select__item"> <a href="../../../ja/documentation/realtime/proto/" hreflang="ja" class="md-select__link"> 日本語 </a> </li> <li class="md-select__item"> <a href="../../../de/documentation/realtime/proto/" hreflang="de" class="md-select__link"> Deutsch (wird bald verfügbar sein) </a> </li> <li class="md-select__item"> <a href="../../../pt/documentation/realtime/proto/" hreflang="pt" class="md-select__link"> Português (em breve) </a> </li> <li class="md-select__item"> <a href="../../../ru/documentation/realtime/proto/" hreflang="ru" class="md-select__link"> Русский (будет добавлен позже) </a> </li> <li class="md-select__item"> <a href="../../../id/documentation/realtime/proto/" hreflang="id" class="md-select__link"> Bahasa Indonesia (akan segera hadir) </a> </li> <li class="md-select__item"> <a href="../../../ko/documentation/realtime/proto/" hreflang="ko" class="md-select__link"> 한국어 (곧 제공 예정) </a> </li> <li class="md-select__item"> <a href="../../../zh/documentation/realtime/proto/" hreflang="zh" class="md-select__link"> 中文 - 简体(即将推出) </a> </li> <li class="md-select__item"> <a href="../../../zh-TW/documentation/realtime/proto/" hreflang="zh-TW" class="md-select__link"> 中文 - 繁體(即將推出) </a> </li> </ul> </div> </div> </div> <label class="md-header__button md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class="md-search" data-md-component="search" role="dialog"> <label class="md-search__overlay" for="__search"></label> <div class="md-search__inner" role="search"> <form class="md-search__form" name="search"> <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> <label class="md-search__icon md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class="md-search__options" aria-label="Search"> <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class="md-search__suggest" data-md-component="search-suggest"></div> </form> <div class="md-search__output"> <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix> <div class="md-search-result" data-md-component="search-result"> <div class="md-search-result__meta"> Initializing search </div> <ol class="md-search-result__list" role="presentation"></ol> </div> </div> </div> </div> </div> <div class="md-header__source"> <a href="https://github.com/google/transit" title="Go to repository" class="md-source" data-md-component="source" target="_blank" rel="noopener"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class="md-source__repository"> GTFS Repository </div> </a> </div> </nav> </header> <div class="md-container" data-md-component="container"> <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs"> <div class="md-grid"> <ul class="md-tabs__list"> <li class="md-tabs__item"> <a href="../../.." class="md-tabs__link"> Home </a> </li> <li class="md-tabs__item"> <a href="../../../getting-started/what-is-GTFS/" class="md-tabs__link"> Getting started </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href="../../overview/" class="md-tabs__link"> Technical Documentation </a> </li> <li class="md-tabs__item"> <a href="../../../community/get-involved/" class="md-tabs__link"> Community </a> </li> <li class="md-tabs__item"> <a href="../../../resources/overview/" class="md-tabs__link"> Resources </a> </li> <li class="md-tabs__item"> <a href="../../../about/" class="md-tabs__link"> About </a> </li> <li class="md-tabs__item"> <a href="../../../blog/" class="md-tabs__link"> Blog </a> </li> </ul> </div> </nav> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0"> <label class="md-nav__title" for="__drawer"> <a href="../../.." title="General Transit Feed Specification" class="md-nav__button md-logo" aria-label="General Transit Feed Specification" data-md-component="logo"> <img id="logo_light_mode" src="../../../assets/logo.png" alt="logo"> <img id="logo_dark_mode" src="../../.." alt="logo"> </a> General Transit Feed Specification </label> <div class="md-nav__source"> <a href="https://github.com/google/transit" title="Go to repository" class="md-source" data-md-component="source" target="_blank" rel="noopener"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class="md-source__repository"> GTFS Repository </div> </a> </div> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../.." class="md-nav__link"> <span class="md-ellipsis"> Home </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" > <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0"> <span class="md-ellipsis"> Getting started </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2"> <span class="md-nav__icon md-icon"></span> Getting started </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../getting-started/what-is-GTFS/" class="md-nav__link"> <span class="md-ellipsis"> What is GTFS? </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/why-use-GTFS/" class="md-nav__link"> <span class="md-ellipsis"> Why use GTFS? </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3" > <label class="md-nav__link" for="__nav_2_3" id="__nav_2_3_label" tabindex="0"> <span class="md-ellipsis"> How to produce GTFS? </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_3"> <span class="md-nav__icon md-icon"></span> How to produce GTFS? </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../getting-started/create/" class="md-nav__link"> <span class="md-ellipsis"> Create </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/validate/" class="md-nav__link"> <span class="md-ellipsis"> Validate </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/publish/" class="md-nav__link"> <span class="md-ellipsis"> Publish </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4" > <label class="md-nav__link" for="__nav_2_4" id="__nav_2_4_label" tabindex="0"> <span class="md-ellipsis"> What can GTFS do? </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_4"> <span class="md-nav__icon md-icon"></span> What can GTFS do? </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../getting-started/features/overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/base/" class="md-nav__link"> <span class="md-ellipsis"> Base </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/base-add-ons/" class="md-nav__link"> <span class="md-ellipsis"> Base add-ons </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/accessibility/" class="md-nav__link"> <span class="md-ellipsis"> Accessibility </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/fares/" class="md-nav__link"> <span class="md-ellipsis"> Fares </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/pathways/" class="md-nav__link"> <span class="md-ellipsis"> Pathways </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/flexible-services/" class="md-nav__link"> <span class="md-ellipsis"> Flexible services </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../../getting-started/example-feed/" class="md-nav__link"> <span class="md-ellipsis"> Example GTFS feed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked> <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex=""> <span class="md-ellipsis"> Technical Documentation </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_3"> <span class="md-nav__icon md-icon"></span> Technical Documentation </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" > <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0"> <span class="md-ellipsis"> Schedule </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_2"> <span class="md-nav__icon md-icon"></span> Schedule </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../schedule/reference/" class="md-nav__link"> <span class="md-ellipsis"> Reference </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/schedule-best-practices/" class="md-nav__link"> <span class="md-ellipsis"> Best Practices </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_3" > <label class="md-nav__link" for="__nav_3_2_3" id="__nav_3_2_3_label" tabindex="0"> <span class="md-ellipsis"> Data examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_2_3"> <span class="md-nav__icon md-icon"></span> Data examples </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../schedule/examples/attributions/" class="md-nav__link"> <span class="md-ellipsis"> Attributions </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/examples/continuous-stops/" class="md-nav__link"> <span class="md-ellipsis"> Continuous stops </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/examples/flex/" class="md-nav__link"> <span class="md-ellipsis"> Demand responsive services </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/examples/fares-v1/" class="md-nav__link"> <span class="md-ellipsis"> Fares v1 </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/examples/fares-v2/" class="md-nav__link"> <span class="md-ellipsis"> Fares v2 </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/examples/feed-info/" class="md-nav__link"> <span class="md-ellipsis"> Feed information </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/examples/frequencies/" class="md-nav__link"> <span class="md-ellipsis"> Frequencies </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/examples/pathways/" class="md-nav__link"> <span class="md-ellipsis"> Pathways </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/examples/routes-stops-trips/" class="md-nav__link"> <span class="md-ellipsis"> Routes, Stops & Trips </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/examples/text-to-speech/" class="md-nav__link"> <span class="md-ellipsis"> Text-to-speech </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/examples/transfers/" class="md-nav__link"> <span class="md-ellipsis"> Transfers </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/examples/translations/" class="md-nav__link"> <span class="md-ellipsis"> Translations </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_4" > <label class="md-nav__link" for="__nav_3_2_4" id="__nav_3_2_4_label" tabindex="0"> <span class="md-ellipsis"> Change history </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_2_4"> <span class="md-nav__icon md-icon"></span> Change history </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../schedule/change-history/recent-additions/" class="md-nav__link"> <span class="md-ellipsis"> Recent additions </span> </a> </li> <li class="md-nav__item"> <a href="../../schedule/change-history/revision-history/" class="md-nav__link"> <span class="md-ellipsis"> Full revision history </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" checked> <label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0"> <span class="md-ellipsis"> Realtime </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_3_3"> <span class="md-nav__icon md-icon"></span> Realtime </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../reference/" class="md-nav__link"> <span class="md-ellipsis"> Reference </span> </a> </li> <li class="md-nav__item"> <a href="../realtime-best-practices/" class="md-nav__link"> <span class="md-ellipsis"> Best Practices </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_3" > <label class="md-nav__link" for="__nav_3_3_3" id="__nav_3_3_3_label" tabindex="0"> <span class="md-ellipsis"> Feed Entities </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_3_3"> <span class="md-nav__icon md-icon"></span> Feed Entities </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../feed-entities/overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../feed-entities/trip-updates/" class="md-nav__link"> <span class="md-ellipsis"> Trip Updates </span> </a> </li> <li class="md-nav__item"> <a href="../feed-entities/service-alerts/" class="md-nav__link"> <span class="md-ellipsis"> Service Alerts </span> </a> </li> <li class="md-nav__item"> <a href="../feed-entities/vehicle-positions/" class="md-nav__link"> <span class="md-ellipsis"> Vehicle Positions </span> </a> </li> <li class="md-nav__item"> <a href="../feed-entities/trip-modifications/" class="md-nav__link"> <span class="md-ellipsis"> Trip Modifications </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> <a href="./" class="md-nav__link md-nav__link--active"> <span class="md-ellipsis"> Protobuf </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_5" > <label class="md-nav__link" for="__nav_3_3_5" id="__nav_3_3_5_label" tabindex="0"> <span class="md-ellipsis"> Language Bindings </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_3_5"> <span class="md-nav__icon md-icon"></span> Language Bindings </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../language-bindings/overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../language-bindings/dotnet/" class="md-nav__link"> <span class="md-ellipsis"> .NET </span> </a> </li> <li class="md-nav__item"> <a href="../language-bindings/java/" class="md-nav__link"> <span class="md-ellipsis"> Java </span> </a> </li> <li class="md-nav__item"> <a href="../language-bindings/nodejs/" class="md-nav__link"> <span class="md-ellipsis"> JavaScript/Node.js </span> </a> </li> <li class="md-nav__item"> <a href="../language-bindings/python/" class="md-nav__link"> <span class="md-ellipsis"> Python </span> </a> </li> <li class="md-nav__item"> <a href="../language-bindings/golang/" class="md-nav__link"> <span class="md-ellipsis"> Golang </span> </a> </li> <li class="md-nav__item"> <a href="../language-bindings/ruby/" class="md-nav__link"> <span class="md-ellipsis"> Ruby </span> </a> </li> <li class="md-nav__item"> <a href="../language-bindings/php/" class="md-nav__link"> <span class="md-ellipsis"> PHP </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_6" > <label class="md-nav__link" for="__nav_3_3_6" id="__nav_3_3_6_label" tabindex="0"> <span class="md-ellipsis"> Data examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_3_6"> <span class="md-nav__icon md-icon"></span> Data examples </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../examples/service-alerts/" class="md-nav__link"> <span class="md-ellipsis"> Service alerts </span> </a> </li> <li class="md-nav__item"> <a href="../examples/trip-updates/" class="md-nav__link"> <span class="md-ellipsis"> Trip updates </span> </a> </li> <li class="md-nav__item"> <a href="../examples/migration-duplicated/" class="md-nav__link"> <span class="md-ellipsis"> Migration duplicated </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_7" > <label class="md-nav__link" for="__nav_3_3_7" id="__nav_3_3_7_label" tabindex="0"> <span class="md-ellipsis"> Change history </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_3_7"> <span class="md-nav__icon md-icon"></span> Change history </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../change-history/recent-additions/" class="md-nav__link"> <span class="md-ellipsis"> Recent Additions </span> </a> </li> <li class="md-nav__item"> <a href="../change-history/revision-history/" class="md-nav__link"> <span class="md-ellipsis"> Full revision history </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0"> <span class="md-ellipsis"> Community </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4"> <span class="md-nav__icon md-icon"></span> Community </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../community/get-involved/" class="md-nav__link"> <span class="md-ellipsis"> Get involved </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" > <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0"> <span class="md-ellipsis"> Governance </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_2"> <span class="md-nav__icon md-icon"></span> Governance </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../community/governance/gtfs-schedule-amendment-process/" class="md-nav__link"> <span class="md-ellipsis"> GTFS Schedule Amendment Process </span> </a> </li> <li class="md-nav__item"> <a href="../../../community/governance/gtfs-realtime-amendment-process/" class="md-nav__link"> <span class="md-ellipsis"> GTFS Realtime Amendment Process </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" > <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0"> <span class="md-ellipsis"> Extensions </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_3"> <span class="md-nav__icon md-icon"></span> Extensions </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../community/extensions/overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../community/extensions/fares-v2/" class="md-nav__link"> <span class="md-ellipsis"> Fares v2 </span> </a> </li> <li class="md-nav__item"> <a href="../../../community/extensions/flex/" class="md-nav__link"> <span class="md-ellipsis"> Flex </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" > <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0"> <span class="md-ellipsis"> Resources </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5"> <span class="md-nav__icon md-icon"></span> Resources </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../resources/overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/getting-started/" class="md-nav__link"> <span class="md-ellipsis"> Getting Started </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/community/" class="md-nav__link"> <span class="md-ellipsis"> Community </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/data/" class="md-nav__link"> <span class="md-ellipsis"> Data </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/software-for-creating-apis/" class="md-nav__link"> <span class="md-ellipsis"> Software for Creating APIs </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/agency-tools/" class="md-nav__link"> <span class="md-ellipsis"> Agency Tools </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/hardware/" class="md-nav__link"> <span class="md-ellipsis"> Hardware </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/apps/" class="md-nav__link"> <span class="md-ellipsis"> Apps </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/sdk/" class="md-nav__link"> <span class="md-ellipsis"> SDKs </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/visualizations/" class="md-nav__link"> <span class="md-ellipsis"> Visualizations </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/gtfs/" class="md-nav__link"> <span class="md-ellipsis"> GTFS </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/gtfs-realtime/" class="md-nav__link"> <span class="md-ellipsis"> GTFS Realtime </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/siri/" class="md-nav__link"> <span class="md-ellipsis"> SIRI </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/multimodal/" class="md-nav__link"> <span class="md-ellipsis"> Multimodal </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/other/" class="md-nav__link"> <span class="md-ellipsis"> Other </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" > <div class="md-nav__link md-nav__container"> <a href="../../../about/" class="md-nav__link "> <span class="md-ellipsis"> About </span> </a> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6"> <span class="md-nav__icon md-icon"></span> About </label> <ul class="md-nav__list" data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" > <div class="md-nav__link md-nav__container"> <a href="../../../blog/" class="md-nav__link "> <span class="md-ellipsis"> Blog </span> </a> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7"> <span class="md-nav__icon md-icon"></span> Blog </label> <ul class="md-nav__list" data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <h1 id="gtfs-realtime-protobuf">GTFS Realtime Protobuf<a class="headerlink" href="#gtfs-realtime-protobuf" title="Permanent link">¶</a></h1> <p>Download the <a href="../gtfs-realtime.proto">gtfs-realtime.proto</a> file and use it to compile your GTFS-realtime feed. The contents of the file are shown inline below. For more information about using protobufs, see the <a href="https://developers.google.com/protocol-buffers/docs/overview" target="_blank" rel="noopener">Protocol Buffers Developer Guide</a>. <div class="highlight"><pre><span></span><code><span class="c1">// Copyright 2015 The GTFS Specifications Authors.</span> <span class="c1">//</span> <span class="c1">// Licensed under the Apache License, Version 2.0 (the "License");</span> <span class="c1">// you may not use this file except in compliance with the License.</span> <span class="c1">// You may obtain a copy of the License at</span> <span class="c1">//</span> <span class="c1">// http://www.apache.org/licenses/LICENSE-2.0</span> <span class="c1">//</span> <span class="c1">// Unless required by applicable law or agreed to in writing, software</span> <span class="c1">// distributed under the License is distributed on an "AS IS" BASIS,</span> <span class="c1">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span> <span class="c1">// See the License for the specific language governing permissions and</span> <span class="c1">// limitations under the License.</span> <span class="c1">// Protocol definition file for GTFS Realtime.</span> <span class="c1">//</span> <span class="c1">// GTFS Realtime lets transit agencies provide consumers with realtime</span> <span class="c1">// information about disruptions to their service (stations closed, lines not</span> <span class="c1">// operating, important delays etc), location of their vehicles and expected</span> <span class="c1">// arrival times.</span> <span class="c1">//</span> <span class="c1">// This protocol is published at:</span> <span class="c1">// https://github.com/google/transit/tree/master/gtfs-realtime</span> <span class="k">syntax</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"proto2"</span><span class="p">;</span> <span class="k">option</span><span class="w"> </span><span class="na">java_package</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"com.google.transit.realtime"</span><span class="p">;</span> <span class="kn">package</span><span class="w"> </span><span class="nn">transit_realtime</span><span class="p">;</span> <span class="c1">// The contents of a feed message.</span> <span class="c1">// A feed is a continuous stream of feed messages. Each message in the stream is</span> <span class="c1">// obtained as a response to an appropriate HTTP GET request.</span> <span class="c1">// A realtime feed is always defined with relation to an existing GTFS feed.</span> <span class="c1">// All the entity ids are resolved with respect to the GTFS feed.</span> <span class="c1">// Note that "required" and "optional" as stated in this file refer to Protocol</span> <span class="c1">// Buffer cardinality, not semantic cardinality. See reference.md at</span> <span class="c1">// https://github.com/google/transit/tree/master/gtfs-realtime for field</span> <span class="c1">// semantic cardinality.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">FeedMessage</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Metadata about this feed and feed message.</span> <span class="w"> </span><span class="k">required</span><span class="w"> </span><span class="n">FeedHeader</span><span class="w"> </span><span class="na">header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Contents of the feed.</span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="n">FeedEntity</span><span class="w"> </span><span class="na">entity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// Metadata about a feed, included in feed messages.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">FeedHeader</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Version of the feed specification.</span> <span class="w"> </span><span class="c1">// The current version is 2.0. Valid versions are "2.0", "1.0".</span> <span class="w"> </span><span class="k">required</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">gtfs_realtime_version</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Determines whether the current fetch is incremental. Currently,</span> <span class="w"> </span><span class="c1">// DIFFERENTIAL mode is unsupported and behavior is unspecified for feeds</span> <span class="w"> </span><span class="c1">// that use this mode. There are discussions on the GTFS Realtime mailing</span> <span class="w"> </span><span class="c1">// list around fully specifying the behavior of DIFFERENTIAL mode and the</span> <span class="w"> </span><span class="c1">// documentation will be updated when those discussions are finalized.</span> <span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">Incrementality</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="na">FULL_DATASET</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="na">DIFFERENTIAL</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">Incrementality</span><span class="w"> </span><span class="na">incrementality</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FULL_DATASET</span><span class="p">];</span> <span class="w"> </span><span class="c1">// This timestamp identifies the moment when the content of this feed has been</span> <span class="w"> </span><span class="c1">// created (in server time). In POSIX time (i.e., number of seconds since</span> <span class="w"> </span><span class="c1">// January 1st 1970 00:00:00 UTC).</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint64</span><span class="w"> </span><span class="na">timestamp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// A definition (or update) of an entity in the transit feed.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">FeedEntity</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The ids are used only to provide incrementality support. The id should be</span> <span class="w"> </span><span class="c1">// unique within a FeedMessage. Consequent FeedMessages may contain</span> <span class="w"> </span><span class="c1">// FeedEntities with the same id. In case of a DIFFERENTIAL update the new</span> <span class="w"> </span><span class="c1">// FeedEntity with some id will replace the old FeedEntity with the same id</span> <span class="w"> </span><span class="c1">// (or delete it - see is_deleted below).</span> <span class="w"> </span><span class="c1">// The actual GTFS entities (e.g. stations, routes, trips) referenced by the</span> <span class="w"> </span><span class="c1">// feed must be specified by explicit selectors (see EntitySelector below for</span> <span class="w"> </span><span class="c1">// more info).</span> <span class="w"> </span><span class="k">required</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Whether this entity is to be deleted. Relevant only for incremental</span> <span class="w"> </span><span class="c1">// fetches.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="na">is_deleted</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">];</span> <span class="w"> </span><span class="c1">// Data about the entity itself. Exactly one of the following fields must be</span> <span class="w"> </span><span class="c1">// present (unless the entity is being deleted).</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TripUpdate</span><span class="w"> </span><span class="na">trip_update</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">VehiclePosition</span><span class="w"> </span><span class="na">vehicle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">Alert</span><span class="w"> </span><span class="na">alert</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">Shape</span><span class="w"> </span><span class="na">shape</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">Stop</span><span class="w"> </span><span class="na">stop</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TripModifications</span><span class="w"> </span><span class="na">trip_modifications</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">//</span> <span class="c1">// Entities used in the feed.</span> <span class="c1">//</span> <span class="c1">// Realtime update of the progress of a vehicle along a trip.</span> <span class="c1">// Depending on the value of ScheduleRelationship, a TripUpdate can specify:</span> <span class="c1">// - A trip that proceeds along the schedule.</span> <span class="c1">// - A trip that proceeds along a route but has no fixed schedule.</span> <span class="c1">// - A trip that have been added or removed with regard to schedule.</span> <span class="c1">//</span> <span class="c1">// The updates can be for future, predicted arrival/departure events, or for</span> <span class="c1">// past events that already occurred.</span> <span class="c1">// Normally, updates should get more precise and more certain (see</span> <span class="c1">// uncertainty below) as the events gets closer to current time.</span> <span class="c1">// Even if that is not possible, the information for past events should be</span> <span class="c1">// precise and certain. In particular, if an update points to time in the past</span> <span class="c1">// but its update's uncertainty is not 0, the client should conclude that the</span> <span class="c1">// update is a (wrong) prediction and that the trip has not completed yet.</span> <span class="c1">//</span> <span class="c1">// Note that the update can describe a trip that is already completed.</span> <span class="c1">// To this end, it is enough to provide an update for the last stop of the trip.</span> <span class="c1">// If the time of that is in the past, the client will conclude from that that</span> <span class="c1">// the whole trip is in the past (it is possible, although inconsequential, to</span> <span class="c1">// also provide updates for preceding stops).</span> <span class="c1">// This option is most relevant for a trip that has completed ahead of schedule,</span> <span class="c1">// but according to the schedule, the trip is still proceeding at the current</span> <span class="c1">// time. Removing the updates for this trip could make the client assume</span> <span class="c1">// that the trip is still proceeding.</span> <span class="c1">// Note that the feed provider is allowed, but not required, to purge past</span> <span class="c1">// updates - this is one case where this would be practically useful.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">TripUpdate</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The Trip that this message applies to. There can be at most one</span> <span class="w"> </span><span class="c1">// TripUpdate entity for each actual trip instance.</span> <span class="w"> </span><span class="c1">// If there is none, that means there is no prediction information available.</span> <span class="w"> </span><span class="c1">// It does *not* mean that the trip is progressing according to schedule.</span> <span class="w"> </span><span class="k">required</span><span class="w"> </span><span class="n">TripDescriptor</span><span class="w"> </span><span class="na">trip</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Additional information on the vehicle that is serving this trip.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">VehicleDescriptor</span><span class="w"> </span><span class="na">vehicle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Timing information for a single predicted event (either arrival or</span> <span class="w"> </span><span class="c1">// departure).</span> <span class="w"> </span><span class="c1">// Timing consists of delay and/or estimated time, and uncertainty.</span> <span class="w"> </span><span class="c1">// - delay should be used when the prediction is given relative to some</span> <span class="w"> </span><span class="c1">// existing schedule in GTFS.</span> <span class="w"> </span><span class="c1">// - time should be given whether there is a predicted schedule or not. If</span> <span class="w"> </span><span class="c1">// both time and delay are specified, time will take precedence</span> <span class="w"> </span><span class="c1">// (although normally, time, if given for a scheduled trip, should be</span> <span class="w"> </span><span class="c1">// equal to scheduled time in GTFS + delay).</span> <span class="w"> </span><span class="c1">//</span> <span class="w"> </span><span class="c1">// Uncertainty applies equally to both time and delay.</span> <span class="w"> </span><span class="c1">// The uncertainty roughly specifies the expected error in true delay (but</span> <span class="w"> </span><span class="c1">// note, we don't yet define its precise statistical meaning). It's possible</span> <span class="w"> </span><span class="c1">// for the uncertainty to be 0, for example for trains that are driven under</span> <span class="w"> </span><span class="c1">// computer timing control.</span> <span class="w"> </span><span class="kd">message</span><span class="w"> </span><span class="nc">StopTimeEvent</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Delay (in seconds) can be positive (meaning that the vehicle is late) or</span> <span class="w"> </span><span class="c1">// negative (meaning that the vehicle is ahead of schedule). Delay of 0</span> <span class="w"> </span><span class="c1">// means that the vehicle is exactly on time.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">int32</span><span class="w"> </span><span class="na">delay</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Event as absolute time.</span> <span class="w"> </span><span class="c1">// In Unix time (i.e., number of seconds since January 1st 1970 00:00:00</span> <span class="w"> </span><span class="c1">// UTC).</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">int64</span><span class="w"> </span><span class="na">time</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// If uncertainty is omitted, it is interpreted as unknown.</span> <span class="w"> </span><span class="c1">// If the prediction is unknown or too uncertain, the delay (or time) field</span> <span class="w"> </span><span class="c1">// should be empty. In such case, the uncertainty field is ignored.</span> <span class="w"> </span><span class="c1">// To specify a completely certain prediction, set its uncertainty to 0.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">int32</span><span class="w"> </span><span class="na">uncertainty</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features</span> <span class="w"> </span><span class="c1">// and modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// Realtime update for arrival and/or departure events for a given stop on a</span> <span class="w"> </span><span class="c1">// trip. Updates can be supplied for both past and future events.</span> <span class="w"> </span><span class="c1">// The producer is allowed, although not required, to drop past events.</span> <span class="w"> </span><span class="kd">message</span><span class="w"> </span><span class="nc">StopTimeUpdate</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The update is linked to a specific stop either through stop_sequence or</span> <span class="w"> </span><span class="c1">// stop_id, so one of the fields below must necessarily be set.</span> <span class="w"> </span><span class="c1">// See the documentation in TripDescriptor for more information.</span> <span class="w"> </span><span class="c1">// Must be the same as in stop_times.txt in the corresponding GTFS feed.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint32</span><span class="w"> </span><span class="na">stop_sequence</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Must be the same as in stops.txt in the corresponding GTFS feed.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">stop_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">StopTimeEvent</span><span class="w"> </span><span class="na">arrival</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">StopTimeEvent</span><span class="w"> </span><span class="na">departure</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Expected occupancy after departure from the given stop.</span> <span class="w"> </span><span class="c1">// Should be provided only for future stops.</span> <span class="w"> </span><span class="c1">// In order to provide departure_occupancy_status without either arrival or</span> <span class="w"> </span><span class="c1">// departure StopTimeEvents, ScheduleRelationship should be set to NO_DATA. </span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">VehiclePosition.OccupancyStatus</span><span class="w"> </span><span class="na">departure_occupancy_status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The relation between the StopTimeEvents and the static schedule.</span> <span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">ScheduleRelationship</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The vehicle is proceeding in accordance with its static schedule of</span> <span class="w"> </span><span class="c1">// stops, although not necessarily according to the times of the schedule.</span> <span class="w"> </span><span class="c1">// At least one of arrival and departure must be provided. If the schedule</span> <span class="w"> </span><span class="c1">// for this stop contains both arrival and departure times then so must</span> <span class="w"> </span><span class="c1">// this update. Frequency-based trips (GTFS frequencies.txt with exact_times = 0)</span> <span class="w"> </span><span class="c1">// should not have a SCHEDULED value and should use UNSCHEDULED instead.</span> <span class="w"> </span><span class="na">SCHEDULED</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The stop is skipped, i.e., the vehicle will not stop at this stop.</span> <span class="w"> </span><span class="c1">// Arrival and departure are optional.</span> <span class="w"> </span><span class="na">SKIPPED</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// No StopTimeEvents are given for this stop.</span> <span class="w"> </span><span class="c1">// The main intention for this value is to give time predictions only for</span> <span class="w"> </span><span class="c1">// part of a trip, i.e., if the last update for a trip has a NO_DATA</span> <span class="w"> </span><span class="c1">// specifier, then StopTimeEvents for the rest of the stops in the trip</span> <span class="w"> </span><span class="c1">// are considered to be unspecified as well.</span> <span class="w"> </span><span class="c1">// Neither arrival nor departure should be supplied.</span> <span class="w"> </span><span class="na">NO_DATA</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The vehicle is operating a trip defined in GTFS frequencies.txt with exact_times = 0.</span> <span class="w"> </span><span class="c1">// This value should not be used for trips that are not defined in GTFS frequencies.txt,</span> <span class="w"> </span><span class="c1">// or trips in GTFS frequencies.txt with exact_times = 1. Trips containing StopTimeUpdates</span> <span class="w"> </span><span class="c1">// with ScheduleRelationship=UNSCHEDULED must also set TripDescriptor.ScheduleRelationship=UNSCHEDULED.</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be</span> <span class="w"> </span><span class="c1">// formally adopted in the future.</span> <span class="w"> </span><span class="na">UNSCHEDULED</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">ScheduleRelationship</span><span class="w"> </span><span class="na">schedule_relationship</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span> <span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SCHEDULED</span><span class="p">];</span> <span class="w"> </span><span class="c1">// Provides the updated values for the stop time.</span> <span class="w"> </span><span class="c1">// NOTE: This message is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="kd">message</span><span class="w"> </span><span class="nc">StopTimeProperties</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Supports real-time stop assignments. Refers to a stop_id defined in the GTFS stops.txt.</span> <span class="w"> </span><span class="c1">// The new assigned_stop_id should not result in a significantly different trip experience for the end user than</span> <span class="w"> </span><span class="c1">// the stop_id defined in GTFS stop_times.txt. In other words, the end user should not view this new stop_id as an</span> <span class="w"> </span><span class="c1">// "unusual change" if the new stop was presented within an app without any additional context.</span> <span class="w"> </span><span class="c1">// For example, this field is intended to be used for platform assignments by using a stop_id that belongs to the</span> <span class="w"> </span><span class="c1">// same station as the stop originally defined in GTFS stop_times.txt.</span> <span class="w"> </span><span class="c1">// To assign a stop without providing any real-time arrival or departure predictions, populate this field and set</span> <span class="w"> </span><span class="c1">// StopTimeUpdate.schedule_relationship = NO_DATA.</span> <span class="w"> </span><span class="c1">// If this field is populated, it is preferred to omit `StopTimeUpdate.stop_id` and use only `StopTimeUpdate.stop_sequence`. If</span> <span class="w"> </span><span class="c1">// `StopTimeProperties.assigned_stop_id` and `StopTimeUpdate.stop_id` are populated, `StopTimeUpdate.stop_id` must match `assigned_stop_id`.</span> <span class="w"> </span><span class="c1">// Platform assignments should be reflected in other GTFS-realtime fields as well</span> <span class="w"> </span><span class="c1">// (e.g., `VehiclePosition.stop_id`).</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">assigned_stop_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features</span> <span class="w"> </span><span class="c1">// and modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// Realtime updates for certain properties defined within GTFS stop_times.txt</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">StopTimeProperties</span><span class="w"> </span><span class="na">stop_time_properties</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features</span> <span class="w"> </span><span class="c1">// and modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// Updates to StopTimes for the trip (both future, i.e., predictions, and in</span> <span class="w"> </span><span class="c1">// some cases, past ones, i.e., those that already happened).</span> <span class="w"> </span><span class="c1">// The updates must be sorted by stop_sequence, and apply for all the</span> <span class="w"> </span><span class="c1">// following stops of the trip up to the next specified one.</span> <span class="w"> </span><span class="c1">//</span> <span class="w"> </span><span class="c1">// Example 1:</span> <span class="w"> </span><span class="c1">// For a trip with 20 stops, a StopTimeUpdate with arrival delay and departure</span> <span class="w"> </span><span class="c1">// delay of 0 for stop_sequence of the current stop means that the trip is</span> <span class="w"> </span><span class="c1">// exactly on time.</span> <span class="w"> </span><span class="c1">//</span> <span class="w"> </span><span class="c1">// Example 2:</span> <span class="w"> </span><span class="c1">// For the same trip instance, 3 StopTimeUpdates are provided:</span> <span class="w"> </span><span class="c1">// - delay of 5 min for stop_sequence 3</span> <span class="w"> </span><span class="c1">// - delay of 1 min for stop_sequence 8</span> <span class="w"> </span><span class="c1">// - delay of unspecified duration for stop_sequence 10</span> <span class="w"> </span><span class="c1">// This will be interpreted as:</span> <span class="w"> </span><span class="c1">// - stop_sequences 3,4,5,6,7 have delay of 5 min.</span> <span class="w"> </span><span class="c1">// - stop_sequences 8,9 have delay of 1 min.</span> <span class="w"> </span><span class="c1">// - stop_sequences 10,... have unknown delay.</span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="n">StopTimeUpdate</span><span class="w"> </span><span class="na">stop_time_update</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The most recent moment at which the vehicle's real-time progress was measured</span> <span class="w"> </span><span class="c1">// to estimate StopTimes in the future. When StopTimes in the past are provided,</span> <span class="w"> </span><span class="c1">// arrival/departure times may be earlier than this value. In POSIX</span> <span class="w"> </span><span class="c1">// time (i.e., the number of seconds since January 1st 1970 00:00:00 UTC).</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint64</span><span class="w"> </span><span class="na">timestamp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The current schedule deviation for the trip. Delay should only be</span> <span class="w"> </span><span class="c1">// specified when the prediction is given relative to some existing schedule</span> <span class="w"> </span><span class="c1">// in GTFS.</span> <span class="w"> </span><span class="c1">//</span> <span class="w"> </span><span class="c1">// Delay (in seconds) can be positive (meaning that the vehicle is late) or</span> <span class="w"> </span><span class="c1">// negative (meaning that the vehicle is ahead of schedule). Delay of 0</span> <span class="w"> </span><span class="c1">// means that the vehicle is exactly on time.</span> <span class="w"> </span><span class="c1">//</span> <span class="w"> </span><span class="c1">// Delay information in StopTimeUpdates take precedent of trip-level delay</span> <span class="w"> </span><span class="c1">// information, such that trip-level delay is only propagated until the next</span> <span class="w"> </span><span class="c1">// stop along the trip with a StopTimeUpdate delay value specified.</span> <span class="w"> </span><span class="c1">//</span> <span class="w"> </span><span class="c1">// Feed providers are strongly encouraged to provide a TripUpdate.timestamp</span> <span class="w"> </span><span class="c1">// value indicating when the delay value was last updated, in order to</span> <span class="w"> </span><span class="c1">// evaluate the freshness of the data.</span> <span class="w"> </span><span class="c1">//</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be</span> <span class="w"> </span><span class="c1">// formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">int32</span><span class="w"> </span><span class="na">delay</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Defines updated properties of the trip, such as a new shape_id when there is a detour. Or defines the</span> <span class="w"> </span><span class="c1">// trip_id, start_date, and start_time of a DUPLICATED trip. </span> <span class="w"> </span><span class="c1">// NOTE: This message is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="kd">message</span><span class="w"> </span><span class="nc">TripProperties</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Defines the identifier of a new trip that is a duplicate of an existing trip defined in (CSV) GTFS trips.txt</span> <span class="w"> </span><span class="c1">// but will start at a different service date and/or time (defined using the TripProperties.start_date and</span> <span class="w"> </span><span class="c1">// TripProperties.start_time fields). See definition of trips.trip_id in (CSV) GTFS. Its value must be different</span> <span class="w"> </span><span class="c1">// than the ones used in the (CSV) GTFS. Required if schedule_relationship=DUPLICATED, otherwise this field must not</span> <span class="w"> </span><span class="c1">// be populated and will be ignored by consumers.</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">trip_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Service date on which the DUPLICATED trip will be run, in YYYYMMDD format. Required if</span> <span class="w"> </span><span class="c1">// schedule_relationship=DUPLICATED, otherwise this field must not be populated and will be ignored by consumers.</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">start_date</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Defines the departure start time of the trip when it’s duplicated. See definition of stop_times.departure_time</span> <span class="w"> </span><span class="c1">// in (CSV) GTFS. Scheduled arrival and departure times for the duplicated trip are calculated based on the offset</span> <span class="w"> </span><span class="c1">// between the original trip departure_time and this field. For example, if a GTFS trip has stop A with a</span> <span class="w"> </span><span class="c1">// departure_time of 10:00:00 and stop B with departure_time of 10:01:00, and this field is populated with the value</span> <span class="w"> </span><span class="c1">// of 10:30:00, stop B on the duplicated trip will have a scheduled departure_time of 10:31:00. Real-time prediction</span> <span class="w"> </span><span class="c1">// delay values are applied to this calculated schedule time to determine the predicted time. For example, if a</span> <span class="w"> </span><span class="c1">// departure delay of 30 is provided for stop B, then the predicted departure time is 10:31:30. Real-time</span> <span class="w"> </span><span class="c1">// prediction time values do not have any offset applied to them and indicate the predicted time as provided.</span> <span class="w"> </span><span class="c1">// For example, if a departure time representing 10:31:30 is provided for stop B, then the predicted departure time</span> <span class="w"> </span><span class="c1">// is 10:31:30. This field is required if schedule_relationship is DUPLICATED, otherwise this field must not be</span> <span class="w"> </span><span class="c1">// populated and will be ignored by consumers.</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">start_time</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Specifies the shape of the vehicle travel path when the trip shape differs from the shape specified in</span> <span class="w"> </span><span class="c1">// (CSV) GTFS or to specify it in real-time when it's not provided by (CSV) GTFS, such as a vehicle that takes differing</span> <span class="w"> </span><span class="c1">// paths based on rider demand. See definition of trips.shape_id in (CSV) GTFS. If a shape is neither defined in (CSV) GTFS</span> <span class="w"> </span><span class="c1">// nor in real-time, the shape is considered unknown. This field can refer to a shape defined in the (CSV) GTFS in shapes.txt</span> <span class="w"> </span><span class="c1">// or a Shape in the (protobuf) real-time feed. The order of stops (stop sequences) for this trip must remain the same as</span> <span class="w"> </span><span class="c1">// (CSV) GTFS. Stops that are a part of the original trip but will no longer be made, such as when a detour occurs, should</span> <span class="w"> </span><span class="c1">// be marked as schedule_relationship=SKIPPED.</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future. </span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">shape_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features</span> <span class="w"> </span><span class="c1">// and modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TripProperties</span><span class="w"> </span><span class="na">trip_properties</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// Realtime positioning information for a given vehicle.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">VehiclePosition</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The Trip that this vehicle is serving.</span> <span class="w"> </span><span class="c1">// Can be empty or partial if the vehicle can not be identified with a given</span> <span class="w"> </span><span class="c1">// trip instance.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TripDescriptor</span><span class="w"> </span><span class="na">trip</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Additional information on the vehicle that is serving this trip.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">VehicleDescriptor</span><span class="w"> </span><span class="na">vehicle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Current position of this vehicle.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">Position</span><span class="w"> </span><span class="na">position</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The stop sequence index of the current stop. The meaning of</span> <span class="w"> </span><span class="c1">// current_stop_sequence (i.e., the stop that it refers to) is determined by</span> <span class="w"> </span><span class="c1">// current_status.</span> <span class="w"> </span><span class="c1">// If current_status is missing IN_TRANSIT_TO is assumed.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint32</span><span class="w"> </span><span class="na">current_stop_sequence</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Identifies the current stop. The value must be the same as in stops.txt in</span> <span class="w"> </span><span class="c1">// the corresponding GTFS feed.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">stop_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span> <span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">VehicleStopStatus</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The vehicle is just about to arrive at the stop (on a stop</span> <span class="w"> </span><span class="c1">// display, the vehicle symbol typically flashes).</span> <span class="w"> </span><span class="na">INCOMING_AT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The vehicle is standing at the stop.</span> <span class="w"> </span><span class="na">STOPPED_AT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The vehicle has departed and is in transit to the next stop.</span> <span class="w"> </span><span class="na">IN_TRANSIT_TO</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// The exact status of the vehicle with respect to the current stop.</span> <span class="w"> </span><span class="c1">// Ignored if current_stop_sequence is missing.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">VehicleStopStatus</span><span class="w"> </span><span class="na">current_status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">IN_TRANSIT_TO</span><span class="p">];</span> <span class="w"> </span><span class="c1">// Moment at which the vehicle's position was measured. In POSIX time</span> <span class="w"> </span><span class="c1">// (i.e., number of seconds since January 1st 1970 00:00:00 UTC).</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint64</span><span class="w"> </span><span class="na">timestamp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Congestion level that is affecting this vehicle.</span> <span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">CongestionLevel</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="na">UNKNOWN_CONGESTION_LEVEL</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="na">RUNNING_SMOOTHLY</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="na">STOP_AND_GO</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="na">CONGESTION</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="na">SEVERE_CONGESTION</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span><span class="w"> </span><span class="c1">// People leaving their cars.</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">CongestionLevel</span><span class="w"> </span><span class="na">congestion_level</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The state of passenger occupancy for the vehicle or carriage.</span> <span class="w"> </span><span class="c1">// Individual producers may not publish all OccupancyStatus values. Therefore, consumers</span> <span class="w"> </span><span class="c1">// must not assume that the OccupancyStatus values follow a linear scale.</span> <span class="w"> </span><span class="c1">// Consumers should represent OccupancyStatus values as the state indicated </span> <span class="w"> </span><span class="c1">// and intended by the producer. Likewise, producers must use OccupancyStatus values that</span> <span class="w"> </span><span class="c1">// correspond to actual vehicle occupancy states.</span> <span class="w"> </span><span class="c1">// For describing passenger occupancy levels on a linear scale, see `occupancy_percentage`.</span> <span class="w"> </span><span class="c1">// This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">OccupancyStatus</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The vehicle or carriage is considered empty by most measures, and has few or no</span> <span class="w"> </span><span class="c1">// passengers onboard, but is still accepting passengers.</span> <span class="w"> </span><span class="na">EMPTY</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The vehicle or carriage has a large number of seats available.</span> <span class="w"> </span><span class="c1">// The amount of free seats out of the total seats available to be</span> <span class="w"> </span><span class="c1">// considered large enough to fall into this category is determined at the</span> <span class="w"> </span><span class="c1">// discretion of the producer.</span> <span class="w"> </span><span class="na">MANY_SEATS_AVAILABLE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The vehicle or carriage has a relatively small number of seats available.</span> <span class="w"> </span><span class="c1">// The amount of free seats out of the total seats available to be</span> <span class="w"> </span><span class="c1">// considered small enough to fall into this category is determined at the</span> <span class="w"> </span><span class="c1">// discretion of the feed producer.</span> <span class="w"> </span><span class="na">FEW_SEATS_AVAILABLE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The vehicle or carriage can currently accommodate only standing passengers.</span> <span class="w"> </span><span class="na">STANDING_ROOM_ONLY</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The vehicle or carriage can currently accommodate only standing passengers</span> <span class="w"> </span><span class="c1">// and has limited space for them.</span> <span class="w"> </span><span class="na">CRUSHED_STANDING_ROOM_ONLY</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The vehicle or carriage is considered full by most measures, but may still be</span> <span class="w"> </span><span class="c1">// allowing passengers to board.</span> <span class="w"> </span><span class="na">FULL</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The vehicle or carriage is not accepting passengers, but usually accepts passengers for boarding.</span> <span class="w"> </span><span class="na">NOT_ACCEPTING_PASSENGERS</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The vehicle or carriage doesn't have any occupancy data available at that time.</span> <span class="w"> </span><span class="na">NO_DATA_AVAILABLE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The vehicle or carriage is not boardable and never accepts passengers.</span> <span class="w"> </span><span class="c1">// Useful for special vehicles or carriages (engine, maintenance carriage, etc…).</span> <span class="w"> </span><span class="na">NOT_BOARDABLE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// If multi_carriage_status is populated with per-carriage OccupancyStatus,</span> <span class="w"> </span><span class="c1">// then this field should describe the entire vehicle with all carriages accepting passengers considered.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">OccupancyStatus</span><span class="w"> </span><span class="na">occupancy_status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">9</span><span class="p">;</span> <span class="w"> </span><span class="c1">// A percentage value indicating the degree of passenger occupancy in the vehicle.</span> <span class="w"> </span><span class="c1">// The values are represented as an integer without decimals. 0 means 0% and 100 means 100%.</span> <span class="w"> </span><span class="c1">// The value 100 should represent the total maximum occupancy the vehicle was designed for,</span> <span class="w"> </span><span class="c1">// including both seated and standing capacity, and current operating regulations allow.</span> <span class="w"> </span><span class="c1">// The value may exceed 100 if there are more passengers than the maximum designed capacity.</span> <span class="w"> </span><span class="c1">// The precision of occupancy_percentage should be low enough that individual passengers cannot be tracked boarding or alighting the vehicle.</span> <span class="w"> </span><span class="c1">// If multi_carriage_status is populated with per-carriage occupancy_percentage, </span> <span class="w"> </span><span class="c1">// then this field should describe the entire vehicle with all carriages accepting passengers considered.</span> <span class="w"> </span><span class="c1">// This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint32</span><span class="w"> </span><span class="na">occupancy_percentage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Carriage specific details, used for vehicles composed of several carriages</span> <span class="w"> </span><span class="c1">// This message/field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="kd">message</span><span class="w"> </span><span class="nc">CarriageDetails</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Identification of the carriage. Should be unique per vehicle.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// User visible label that may be shown to the passenger to help identify</span> <span class="w"> </span><span class="c1">// the carriage. Example: "7712", "Car ABC-32", etc...</span> <span class="w"> </span><span class="c1">// This message/field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Occupancy status for this given carriage, in this vehicle</span> <span class="w"> </span><span class="c1">// This message/field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">OccupancyStatus</span><span class="w"> </span><span class="na">occupancy_status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">NO_DATA_AVAILABLE</span><span class="p">];</span> <span class="w"> </span><span class="c1">// Occupancy percentage for this given carriage, in this vehicle.</span> <span class="w"> </span><span class="c1">// Follows the same rules as "VehiclePosition.occupancy_percentage"</span> <span class="w"> </span><span class="c1">// -1 in case data is not available for this given carriage (as protobuf defaults to 0 otherwise)</span> <span class="w"> </span><span class="c1">// This message/field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">int32</span><span class="w"> </span><span class="na">occupancy_percentage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">];</span> <span class="w"> </span><span class="c1">// Identifies the order of this carriage with respect to the other</span> <span class="w"> </span><span class="c1">// carriages in the vehicle's list of CarriageDetails.</span> <span class="w"> </span><span class="c1">// The first carriage in the direction of travel must have a value of 1.</span> <span class="w"> </span><span class="c1">// The second value corresponds to the second carriage in the direction</span> <span class="w"> </span><span class="c1">// of travel and must have a value of 2, and so forth.</span> <span class="w"> </span><span class="c1">// For example, the first carriage in the direction of travel has a value of 1.</span> <span class="w"> </span><span class="c1">// If the second carriage in the direction of travel has a value of 3,</span> <span class="w"> </span><span class="c1">// consumers will discard data for all carriages (i.e., the multi_carriage_details field).</span> <span class="w"> </span><span class="c1">// Carriages without data must be represented with a valid carriage_sequence number and the fields </span> <span class="w"> </span><span class="c1">// without data should be omitted (alternately, those fields could also be included and set to the "no data" values).</span> <span class="w"> </span><span class="c1">// This message/field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint32</span><span class="w"> </span><span class="na">carriage_sequence</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// Details of the multiple carriages of this given vehicle.</span> <span class="w"> </span><span class="c1">// The first occurrence represents the first carriage of the vehicle, </span> <span class="w"> </span><span class="c1">// given the current direction of travel. </span> <span class="w"> </span><span class="c1">// The number of occurrences of the multi_carriage_details </span> <span class="w"> </span><span class="c1">// field represents the number of carriages of the vehicle.</span> <span class="w"> </span><span class="c1">// It also includes non boardable carriages, </span> <span class="w"> </span><span class="c1">// like engines, maintenance carriages, etc… as they provide valuable </span> <span class="w"> </span><span class="c1">// information to passengers about where to stand on a platform.</span> <span class="w"> </span><span class="c1">// This message/field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="n">CarriageDetails</span><span class="w"> </span><span class="na">multi_carriage_details</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">11</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// An alert, indicating some sort of incident in the public transit network.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">Alert</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Time when the alert should be shown to the user. If missing, the</span> <span class="w"> </span><span class="c1">// alert will be shown as long as it appears in the feed.</span> <span class="w"> </span><span class="c1">// If multiple ranges are given, the alert will be shown during all of them.</span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="n">TimeRange</span><span class="w"> </span><span class="na">active_period</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Entities whose users we should notify of this alert.</span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="n">EntitySelector</span><span class="w"> </span><span class="na">informed_entity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Cause of this alert. If cause_detail is included, then Cause must also be included.</span> <span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">Cause</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="na">UNKNOWN_CAUSE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="na">OTHER_CAUSE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"> </span><span class="c1">// Not machine-representable.</span> <span class="w"> </span><span class="na">TECHNICAL_PROBLEM</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="na">STRIKE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span><span class="w"> </span><span class="c1">// Public transit agency employees stopped working.</span> <span class="w"> </span><span class="na">DEMONSTRATION</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span><span class="w"> </span><span class="c1">// People are blocking the streets.</span> <span class="w"> </span><span class="na">ACCIDENT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="na">HOLIDAY</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span> <span class="w"> </span><span class="na">WEATHER</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span> <span class="w"> </span><span class="na">MAINTENANCE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">9</span><span class="p">;</span> <span class="w"> </span><span class="na">CONSTRUCTION</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span> <span class="w"> </span><span class="na">POLICE_ACTIVITY</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">11</span><span class="p">;</span> <span class="w"> </span><span class="na">MEDICAL_EMERGENCY</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">12</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">Cause</span><span class="w"> </span><span class="na">cause</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UNKNOWN_CAUSE</span><span class="p">];</span> <span class="w"> </span><span class="c1">// What is the effect of this problem on the affected entity. If effect_detail is included, then Effect must also be included.</span> <span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">Effect</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="na">NO_SERVICE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="na">REDUCED_SERVICE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// We don't care about INsignificant delays: they are hard to detect, have</span> <span class="w"> </span><span class="c1">// little impact on the user, and would clutter the results as they are too</span> <span class="w"> </span><span class="c1">// frequent.</span> <span class="w"> </span><span class="na">SIGNIFICANT_DELAYS</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="na">DETOUR</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="na">ADDITIONAL_SERVICE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="na">MODIFIED_SERVICE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="na">OTHER_EFFECT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span> <span class="w"> </span><span class="na">UNKNOWN_EFFECT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span> <span class="w"> </span><span class="na">STOP_MOVED</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">9</span><span class="p">;</span> <span class="w"> </span><span class="na">NO_EFFECT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span> <span class="w"> </span><span class="na">ACCESSIBILITY_ISSUE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">11</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">Effect</span><span class="w"> </span><span class="na">effect</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UNKNOWN_EFFECT</span><span class="p">];</span> <span class="w"> </span><span class="c1">// The URL which provides additional information about the alert.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Alert header. Contains a short summary of the alert text as plain-text.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">header_text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Full description for the alert as plain-text. The information in the</span> <span class="w"> </span><span class="c1">// description should add to the information of the header.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">description_text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">11</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Text for alert header to be used in text-to-speech implementations. This field is the text-to-speech version of header_text.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">tts_header_text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">12</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Text for full description for the alert to be used in text-to-speech implementations. This field is the text-to-speech version of description_text.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">tts_description_text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">13</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Severity of this alert.</span> <span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">SeverityLevel</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="na">UNKNOWN_SEVERITY</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="na">INFO</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="na">WARNING</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="na">SEVERE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">SeverityLevel</span><span class="w"> </span><span class="na">severity_level</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">14</span><span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UNKNOWN_SEVERITY</span><span class="p">];</span> <span class="w"> </span><span class="c1">// TranslatedImage to be displayed along the alert text. Used to explain visually the alert effect of a detour, station closure, etc. The image must enhance the understanding of the alert. Any essential information communicated within the image must also be contained in the alert text.</span> <span class="w"> </span><span class="c1">// The following types of images are discouraged : image containing mainly text, marketing or branded images that add no additional information. </span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedImage</span><span class="w"> </span><span class="na">image</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">15</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Text describing the appearance of the linked image in the `image` field (e.g., in case the image can't be displayed</span> <span class="w"> </span><span class="c1">// or the user can't see the image for accessibility reasons). See the HTML spec for alt image text - https://html.spec.whatwg.org/#alt.</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">image_alternative_text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">16</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Description of the cause of the alert that allows for agency-specific language; more specific than the Cause. If cause_detail is included, then Cause must also be included.</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">cause_detail</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">17</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Description of the effect of the alert that allows for agency-specific language; more specific than the Effect. If effect_detail is included, then Effect must also be included.</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">effect_detail</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">18</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features</span> <span class="w"> </span><span class="c1">// and modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">//</span> <span class="c1">// Low level data structures used above.</span> <span class="c1">//</span> <span class="c1">// A time interval. The interval is considered active at time 't' if 't' is</span> <span class="c1">// greater than or equal to the start time and less than the end time.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">TimeRange</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Start time, in POSIX time (i.e., number of seconds since January 1st 1970</span> <span class="w"> </span><span class="c1">// 00:00:00 UTC).</span> <span class="w"> </span><span class="c1">// If missing, the interval starts at minus infinity.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint64</span><span class="w"> </span><span class="na">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// End time, in POSIX time (i.e., number of seconds since January 1st 1970</span> <span class="w"> </span><span class="c1">// 00:00:00 UTC).</span> <span class="w"> </span><span class="c1">// If missing, the interval ends at plus infinity.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint64</span><span class="w"> </span><span class="na">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// A position.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">Position</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Degrees North, in the WGS-84 coordinate system.</span> <span class="w"> </span><span class="k">required</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="na">latitude</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Degrees East, in the WGS-84 coordinate system.</span> <span class="w"> </span><span class="k">required</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="na">longitude</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Bearing, in degrees, clockwise from North, i.e., 0 is North and 90 is East.</span> <span class="w"> </span><span class="c1">// This can be the compass bearing, or the direction towards the next stop</span> <span class="w"> </span><span class="c1">// or intermediate location.</span> <span class="w"> </span><span class="c1">// This should not be direction deduced from the sequence of previous</span> <span class="w"> </span><span class="c1">// positions, which can be computed from previous data.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="na">bearing</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Odometer value, in meters.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="na">odometer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Momentary speed measured by the vehicle, in meters per second.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="na">speed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// A descriptor that identifies an instance of a GTFS trip, or all instances of</span> <span class="c1">// a trip along a route.</span> <span class="c1">// - To specify a single trip instance, the trip_id (and if necessary,</span> <span class="c1">// start_time) is set. If route_id is also set, then it should be same as one</span> <span class="c1">// that the given trip corresponds to.</span> <span class="c1">// - To specify all the trips along a given route, only the route_id should be</span> <span class="c1">// set. Note that if the trip_id is not known, then stop sequence ids in</span> <span class="c1">// TripUpdate are not sufficient, and stop_ids must be provided as well. In</span> <span class="c1">// addition, absolute arrival/departure times must be provided.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">TripDescriptor</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The trip_id from the GTFS feed that this selector refers to.</span> <span class="w"> </span><span class="c1">// For non frequency-based trips, this field is enough to uniquely identify</span> <span class="w"> </span><span class="c1">// the trip. For frequency-based trip, start_time and start_date might also be</span> <span class="w"> </span><span class="c1">// necessary. When schedule_relationship is DUPLICATED within a TripUpdate, the trip_id identifies the trip from</span> <span class="w"> </span><span class="c1">// static GTFS to be duplicated. When schedule_relationship is DUPLICATED within a VehiclePosition, the trip_id</span> <span class="w"> </span><span class="c1">// identifies the new duplicate trip and must contain the value for the corresponding TripUpdate.TripProperties.trip_id.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">trip_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The route_id from the GTFS that this selector refers to.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">route_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The direction_id from the GTFS feed trips.txt file, indicating the</span> <span class="w"> </span><span class="c1">// direction of travel for trips this selector refers to.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint32</span><span class="w"> </span><span class="na">direction_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The initially scheduled start time of this trip instance.</span> <span class="w"> </span><span class="c1">// When the trip_id corresponds to a non-frequency-based trip, this field</span> <span class="w"> </span><span class="c1">// should either be omitted or be equal to the value in the GTFS feed. When</span> <span class="w"> </span><span class="c1">// the trip_id correponds to a frequency-based trip, the start_time must be</span> <span class="w"> </span><span class="c1">// specified for trip updates and vehicle positions. If the trip corresponds</span> <span class="w"> </span><span class="c1">// to exact_times=1 GTFS record, then start_time must be some multiple</span> <span class="w"> </span><span class="c1">// (including zero) of headway_secs later than frequencies.txt start_time for</span> <span class="w"> </span><span class="c1">// the corresponding time period. If the trip corresponds to exact_times=0,</span> <span class="w"> </span><span class="c1">// then its start_time may be arbitrary, and is initially expected to be the</span> <span class="w"> </span><span class="c1">// first departure of the trip. Once established, the start_time of this</span> <span class="w"> </span><span class="c1">// frequency-based trip should be considered immutable, even if the first</span> <span class="w"> </span><span class="c1">// departure time changes -- that time change may instead be reflected in a</span> <span class="w"> </span><span class="c1">// StopTimeUpdate.</span> <span class="w"> </span><span class="c1">// Format and semantics of the field is same as that of</span> <span class="w"> </span><span class="c1">// GTFS/frequencies.txt/start_time, e.g., 11:15:35 or 25:15:35.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">start_time</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The scheduled start date of this trip instance.</span> <span class="w"> </span><span class="c1">// Must be provided to disambiguate trips that are so late as to collide with</span> <span class="w"> </span><span class="c1">// a scheduled trip on a next day. For example, for a train that departs 8:00</span> <span class="w"> </span><span class="c1">// and 20:00 every day, and is 12 hours late, there would be two distinct</span> <span class="w"> </span><span class="c1">// trips on the same time.</span> <span class="w"> </span><span class="c1">// This field can be provided but is not mandatory for schedules in which such</span> <span class="w"> </span><span class="c1">// collisions are impossible - for example, a service running on hourly</span> <span class="w"> </span><span class="c1">// schedule where a vehicle that is one hour late is not considered to be</span> <span class="w"> </span><span class="c1">// related to schedule anymore.</span> <span class="w"> </span><span class="c1">// In YYYYMMDD format.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">start_date</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The relation between this trip and the static schedule. If a trip is done</span> <span class="w"> </span><span class="c1">// in accordance with temporary schedule, not reflected in GTFS, then it</span> <span class="w"> </span><span class="c1">// shouldn't be marked as SCHEDULED, but likely as ADDED.</span> <span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">ScheduleRelationship</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Trip that is running in accordance with its GTFS schedule, or is close</span> <span class="w"> </span><span class="c1">// enough to the scheduled trip to be associated with it.</span> <span class="w"> </span><span class="na">SCHEDULED</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="c1">// An extra trip that was added in addition to a running schedule, for</span> <span class="w"> </span><span class="c1">// example, to replace a broken vehicle or to respond to sudden passenger</span> <span class="w"> </span><span class="c1">// load.</span> <span class="w"> </span><span class="c1">// NOTE: Currently, behavior is unspecified for feeds that use this mode. There are discussions on the GTFS GitHub</span> <span class="w"> </span><span class="c1">// [(1)](https://github.com/google/transit/issues/106) [(2)](https://github.com/google/transit/pull/221)</span> <span class="w"> </span><span class="c1">// [(3)](https://github.com/google/transit/pull/219) around fully specifying or deprecating ADDED trips and the</span> <span class="w"> </span><span class="c1">// documentation will be updated when those discussions are finalized.</span> <span class="w"> </span><span class="na">ADDED</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// A trip that is running with no schedule associated to it (GTFS frequencies.txt exact_times=0).</span> <span class="w"> </span><span class="c1">// Trips with ScheduleRelationship=UNSCHEDULED must also set all StopTimeUpdates.ScheduleRelationship=UNSCHEDULED.</span> <span class="w"> </span><span class="na">UNSCHEDULED</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// A trip that existed in the schedule but was removed.</span> <span class="w"> </span><span class="na">CANCELED</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Should not be used - for backwards-compatibility only.</span> <span class="w"> </span><span class="na">REPLACEMENT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="p">[</span><span class="na">deprecated</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">];</span> <span class="w"> </span><span class="c1">// An extra trip that was added in addition to a running schedule, for example, to replace a broken vehicle or to</span> <span class="w"> </span><span class="c1">// respond to sudden passenger load. Used with TripUpdate.TripProperties.trip_id, TripUpdate.TripProperties.start_date,</span> <span class="w"> </span><span class="c1">// and TripUpdate.TripProperties.start_time to copy an existing trip from static GTFS but start at a different service</span> <span class="w"> </span><span class="c1">// date and/or time. Duplicating a trip is allowed if the service related to the original trip in (CSV) GTFS</span> <span class="w"> </span><span class="c1">// (in calendar.txt or calendar_dates.txt) is operating within the next 30 days. The trip to be duplicated is</span> <span class="w"> </span><span class="c1">// identified via TripUpdate.TripDescriptor.trip_id. This enumeration does not modify the existing trip referenced by</span> <span class="w"> </span><span class="c1">// TripUpdate.TripDescriptor.trip_id - if a producer wants to cancel the original trip, it must publish a separate</span> <span class="w"> </span><span class="c1">// TripUpdate with the value of CANCELED or DELETED. Trips defined in GTFS frequencies.txt with exact_times that is</span> <span class="w"> </span><span class="c1">// empty or equal to 0 cannot be duplicated. The VehiclePosition.TripDescriptor.trip_id for the new trip must contain</span> <span class="w"> </span><span class="c1">// the matching value from TripUpdate.TripProperties.trip_id and VehiclePosition.TripDescriptor.ScheduleRelationship</span> <span class="w"> </span><span class="c1">// must also be set to DUPLICATED.</span> <span class="w"> </span><span class="c1">// Existing producers and consumers that were using the ADDED enumeration to represent duplicated trips must follow</span> <span class="w"> </span><span class="c1">// the migration guide (https://github.com/google/transit/tree/master/gtfs-realtime/spec/en/examples/migration-duplicated.md)</span> <span class="w"> </span><span class="c1">// to transition to the DUPLICATED enumeration.</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="na">DUPLICATED</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="c1">// A trip that existed in the schedule but was removed and must not be shown to users.</span> <span class="w"> </span><span class="c1">// DELETED should be used instead of CANCELED to indicate that a transit provider would like to entirely remove</span> <span class="w"> </span><span class="c1">// information about the corresponding trip from consuming applications, so the trip is not shown as cancelled to</span> <span class="w"> </span><span class="c1">// riders, e.g. a trip that is entirely being replaced by another trip.</span> <span class="w"> </span><span class="c1">// This designation becomes particularly important if several trips are cancelled and replaced with substitute service.</span> <span class="w"> </span><span class="c1">// If consumers were to show explicit information about the cancellations it would distract from the more important</span> <span class="w"> </span><span class="c1">// real-time predictions.</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="na">DELETED</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">ScheduleRelationship</span><span class="w"> </span><span class="na">schedule_relationship</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="kd">message</span><span class="w"> </span><span class="nc">ModifiedTripSelector</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The 'id' from the FeedEntity in which the contained TripModifications object affects this trip.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">modifications_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The trip_id from the GTFS feed that is modified by the modifications_id</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">affected_trip_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The initially scheduled start time of this trip instance, applied to the frequency based modified trip. Same definition as start_time in TripDescriptor.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">start_time</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The start date of this trip instance in YYYYMMDD format, applied to the modified trip. Same definition as start_date in TripDescriptor.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">start_date</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// Linkage to any modifications done to this trip (shape changes, removal or addition of stops). </span> <span class="w"> </span><span class="c1">// If this field is provided, the `trip_id`, `route_id`, `direction_id`, `start_time`, `start_date` fields of the `TripDescriptor` MUST be left empty, to avoid confusion by consumers that aren't looking for the `ModifiedTripSelector` value. </span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">ModifiedTripSelector</span><span class="w"> </span><span class="na">modified_trip</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// Identification information for the vehicle performing the trip.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">VehicleDescriptor</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Internal system identification of the vehicle. Should be unique per</span> <span class="w"> </span><span class="c1">// vehicle, and can be used for tracking the vehicle as it proceeds through</span> <span class="w"> </span><span class="c1">// the system.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// User visible label, i.e., something that must be shown to the passenger to</span> <span class="w"> </span><span class="c1">// help identify the correct vehicle.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The license plate of the vehicle.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">license_plate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">WheelchairAccessible</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The trip doesn't have information about wheelchair accessibility.</span> <span class="w"> </span><span class="c1">// This is the **default** behavior. If the static GTFS contains a</span> <span class="w"> </span><span class="c1">// _wheelchair_accessible_ value, it won't be overwritten.</span> <span class="w"> </span><span class="na">NO_VALUE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The trip has no accessibility value present.</span> <span class="w"> </span><span class="c1">// This value will overwrite the value from the GTFS.</span> <span class="w"> </span><span class="na">UNKNOWN</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The trip is wheelchair accessible.</span> <span class="w"> </span><span class="c1">// This value will overwrite the value from the GTFS.</span> <span class="w"> </span><span class="na">WHEELCHAIR_ACCESSIBLE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The trip is **not** wheelchair accessible.</span> <span class="w"> </span><span class="c1">// This value will overwrite the value from the GTFS.</span> <span class="w"> </span><span class="na">WHEELCHAIR_INACCESSIBLE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">WheelchairAccessible</span><span class="w"> </span><span class="na">wheelchair_accessible</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">NO_VALUE</span><span class="p">];</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// A selector for an entity in a GTFS feed.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">EntitySelector</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The values of the fields should correspond to the appropriate fields in the</span> <span class="w"> </span><span class="c1">// GTFS feed.</span> <span class="w"> </span><span class="c1">// At least one specifier must be given. If several are given, then the</span> <span class="w"> </span><span class="c1">// matching has to apply to all the given specifiers.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">agency_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">route_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// corresponds to route_type in GTFS.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">int32</span><span class="w"> </span><span class="na">route_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TripDescriptor</span><span class="w"> </span><span class="na">trip</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">stop_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Corresponds to trip direction_id in GTFS trips.txt. If provided the</span> <span class="w"> </span><span class="c1">// route_id must also be provided.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint32</span><span class="w"> </span><span class="na">direction_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// An internationalized message containing per-language versions of a snippet of</span> <span class="c1">// text or a URL.</span> <span class="c1">// One of the strings from a message will be picked up. The resolution proceeds</span> <span class="c1">// as follows:</span> <span class="c1">// 1. If the UI language matches the language code of a translation,</span> <span class="c1">// the first matching translation is picked.</span> <span class="c1">// 2. If a default UI language (e.g., English) matches the language code of a</span> <span class="c1">// translation, the first matching translation is picked.</span> <span class="c1">// 3. If some translation has an unspecified language code, that translation is</span> <span class="c1">// picked.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">TranslatedString</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kd">message</span><span class="w"> </span><span class="nc">Translation</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// A UTF-8 string containing the message.</span> <span class="w"> </span><span class="k">required</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// BCP-47 language code. Can be omitted if the language is unknown or if</span> <span class="w"> </span><span class="c1">// no i18n is done at all for the feed. At most one translation is</span> <span class="w"> </span><span class="c1">// allowed to have an unspecified language tag.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">language</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// At least one translation must be provided.</span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="n">Translation</span><span class="w"> </span><span class="na">translation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// An internationalized image containing per-language versions of a URL linking to an image</span> <span class="c1">// along with meta information</span> <span class="c1">// Only one of the images from a message will be retained by consumers. The resolution proceeds</span> <span class="c1">// as follows:</span> <span class="c1">// 1. If the UI language matches the language code of a translation,</span> <span class="c1">// the first matching translation is picked.</span> <span class="c1">// 2. If a default UI language (e.g., English) matches the language code of a</span> <span class="c1">// translation, the first matching translation is picked.</span> <span class="c1">// 3. If some translation has an unspecified language code, that translation is</span> <span class="c1">// picked.</span> <span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">TranslatedImage</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kd">message</span><span class="w"> </span><span class="nc">LocalizedImage</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// String containing an URL linking to an image</span> <span class="w"> </span><span class="c1">// The image linked must be less than 2MB. </span> <span class="w"> </span><span class="c1">// If an image changes in a significant enough way that an update is required on the consumer side, the producer must update the URL to a new one.</span> <span class="w"> </span><span class="c1">// The URL should be a fully qualified URL that includes http:// or https://, and any special characters in the URL must be correctly escaped. See the following http://www.w3.org/Addressing/URL/4_URI_Recommentations.html for a description of how to create fully qualified URL values.</span> <span class="w"> </span><span class="k">required</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// IANA media type as to specify the type of image to be displayed. </span> <span class="w"> </span><span class="c1">// The type must start with "image/"</span> <span class="w"> </span><span class="k">required</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">media_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// BCP-47 language code. Can be omitted if the language is unknown or if</span> <span class="w"> </span><span class="c1">// no i18n is done at all for the feed. At most one translation is</span> <span class="w"> </span><span class="c1">// allowed to have an unspecified language tag.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">language</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// At least one localized image must be provided.</span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="n">LocalizedImage</span><span class="w"> </span><span class="na">localized_image</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// Describes the physical path that a vehicle takes when it's not part of the (CSV) GTFS,</span> <span class="c1">// such as for a detour. Shapes belong to Trips, and consist of a sequence of shape points.</span> <span class="c1">// Tracing the points in order provides the path of the vehicle. Shapes do not need to intercept</span> <span class="c1">// the location of Stops exactly, but all Stops on a trip should lie within a small distance of</span> <span class="c1">// the shape for that trip, i.e. close to straight line segments connecting the shape points</span> <span class="c1">// NOTE: This message is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">Shape</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Identifier of the shape. Must be different than any shape_id defined in the (CSV) GTFS.</span> <span class="w"> </span><span class="c1">// This field is required as per reference.md, but needs to be specified here optional because "Required is Forever"</span> <span class="w"> </span><span class="c1">// See https://developers.google.com/protocol-buffers/docs/proto#specifying_field_rules</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">shape_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Encoded polyline representation of the shape. This polyline must contain at least two points.</span> <span class="w"> </span><span class="c1">// For more information about encoded polylines, see https://developers.google.com/maps/documentation/utilities/polylinealgorithm</span> <span class="w"> </span><span class="c1">// This field is required as per reference.md, but needs to be specified here optional because "Required is Forever"</span> <span class="w"> </span><span class="c1">// See https://developers.google.com/protocol-buffers/docs/proto#specifying_field_rules</span> <span class="w"> </span><span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">encoded_polyline</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// Describes a stop which is served by trips. All fields are as described in the GTFS-Static specification.</span> <span class="c1">// NOTE: This message is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">Stop</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">WheelchairBoarding</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="na">UNKNOWN</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="na">AVAILABLE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="na">NOT_AVAILABLE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">stop_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">stop_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">stop_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">tts_stop_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">stop_desc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="na">stop_lat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">float</span><span class="w"> </span><span class="na">stop_lon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">zone_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">stop_url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">9</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">parent_station</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">11</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">stop_timezone</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">12</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">WheelchairBoarding</span><span class="w"> </span><span class="na">wheelchair_boarding</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">13</span><span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">UNKNOWN</span><span class="p">];</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">level_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">14</span><span class="p">;</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">TranslatedString</span><span class="w"> </span><span class="na">platform_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">15</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">TripModifications</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// A `Modification` message replaces a span of n stop times from each affected trip starting at `start_stop_selector`.</span> <span class="w"> </span><span class="kd">message</span><span class="w"> </span><span class="nc">Modification</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The stop selector of the first stop_time of the original trip that is to be affected by this modification.</span> <span class="w"> </span><span class="c1">// Used in conjuction with `end_stop_selector`. </span> <span class="w"> </span><span class="c1">// `start_stop_selector` is required and is used to define the reference stop used with `travel_time_to_stop`.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">StopSelector</span><span class="w"> </span><span class="na">start_stop_selector</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The stop selector of the last stop of the original trip that is to be affected by this modification. </span> <span class="w"> </span><span class="c1">// The selection is inclusive, so if only one stop_time is replaced by that modification, `start_stop_selector` and `end_stop_selector` must be equivalent.</span> <span class="w"> </span><span class="c1">// If no stop_time is replaced, `end_stop_selector` must not be provided. It's otherwise required.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="n">StopSelector</span><span class="w"> </span><span class="na">end_stop_selector</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The number of seconds of delay to add to all departure and arrival times following the end of this modification. </span> <span class="w"> </span><span class="c1">// If multiple modifications apply to the same trip, the delays accumulate as the trip advances. </span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">int32</span><span class="w"> </span><span class="na">propagated_modification_delay</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="p">[</span><span class="k">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">];</span> <span class="w"> </span><span class="c1">// A list of replacement stops, replacing those of the original trip. </span> <span class="w"> </span><span class="c1">// The length of the new stop times may be less, the same, or greater than the number of replaced stop times. </span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="n">ReplacementStop</span><span class="w"> </span><span class="na">replacement_stops</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="c1">// An `id` value from the `FeedEntity` message that contains the `Alert` describing this Modification for user-facing communication.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">service_alert_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span> <span class="w"> </span><span class="c1">// This timestamp identifies the moment when the modification has last been changed.</span> <span class="w"> </span><span class="c1">// In POSIX time (i.e., number of seconds since January 1st 1970 00:00:00 UTC).</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint64</span><span class="w"> </span><span class="na">last_modified_time</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">6</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="kd">message</span><span class="w"> </span><span class="nc">SelectedTrips</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// A list of trips affected with this replacement that all have the same new `shape_id`.</span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">trip_ids</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The ID of the new shape for the modified trips in this SelectedTrips.</span> <span class="w"> </span><span class="c1">// May refer to a new shape added using a GTFS-RT Shape message, or to an existing shape defined in the GTFS-Static feed’s shapes.txt.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">shape_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="c1">// A list of selected trips affected by this TripModifications.</span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="n">SelectedTrips</span><span class="w"> </span><span class="na">selected_trips</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// A list of start times in the real-time trip descriptor for the trip_id defined in trip_ids. </span> <span class="w"> </span><span class="c1">// Useful to target multiple departures of a trip_id in a frequency-based trip.</span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">start_times</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Dates on which the modifications occurs, in the YYYYMMDD format. Producers SHOULD only transmit detours occurring within the next week.</span> <span class="w"> </span><span class="c1">// The dates provided should not be used as user-facing information, if a user-facing start and end date needs to be provided, they can be provided in the linked service alert with `service_alert_id`</span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">service_dates</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> <span class="w"> </span><span class="c1">// A list of modifications to apply to the affected trips. </span> <span class="w"> </span><span class="k">repeated</span><span class="w"> </span><span class="n">Modification</span><span class="w"> </span><span class="na">modifications</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="c1">// Select a stop by stop sequence or by stop_id. At least one of the two values must be provided.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">StopSelector</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Must be the same as in stop_times.txt in the corresponding GTFS feed.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">uint32</span><span class="w"> </span><span class="na">stop_sequence</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// Must be the same as in stops.txt in the corresponding GTFS feed.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">stop_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// NOTE: This field is still experimental, and subject to change. It may be formally adopted in the future.</span> <span class="kd">message</span><span class="w"> </span><span class="nc">ReplacementStop</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// The difference in seconds between the arrival time at this stop and the arrival time at the reference stop. The reference stop is the stop prior to start_stop_selector. If the modification begins at the first stop of the trip, then the first stop of the trip is the reference stop.</span> <span class="w"> </span><span class="c1">// This value MUST be monotonically increasing and may only be a negative number if the first stop of the original trip is the reference stop.</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">int32</span><span class="w"> </span><span class="na">travel_time_to_stop</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The replacement stop ID which will now be visited by the trip. May refer to a new stop added using a GTFS-RT Stop message, or to an existing stop defined in the GTFS-Static feed’s stops.txt. The stop MUST have location_type=0 (routable stops).</span> <span class="w"> </span><span class="k">optional</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="na">stop_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The extensions namespace allows 3rd-party developers to extend the</span> <span class="w"> </span><span class="c1">// GTFS Realtime Specification in order to add and evaluate new features and</span> <span class="w"> </span><span class="c1">// modifications to the spec.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">1000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">1999</span><span class="p">;</span> <span class="w"> </span><span class="c1">// The following extension IDs are reserved for private use by any organization.</span> <span class="w"> </span><span class="k">extensions</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="mi">9999</span><span class="p">;</span> <span class="p">}</span> </code></pre></div></p> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type="button" class="md-top md-icon" data-md-component="top" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class="md-footer"> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-footer-copyright"> <c>Maintained by </c> <a class="footer-link" href="https://mobilitydata.org/" target="_blank" rel="noopener"> <svg class="only-light" width="26%" height="26%" style="vertical-align:middle" style="float:left" version="1.1" id="Calque_1" x="0px" y="0px" viewBox="0 0 850.40002 205.24001" xml:space="preserve" sodipodi:docname="md-white.svg" inkscape:version="1.1.1 (c3084ef, 2021-09-22)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><defs id="defs39" /><sodipodi:namedview id="namedview37" pagecolor="#505050" bordercolor="#ffffff" borderopacity="1" inkscape:pageshadow="0" inkscape:pageopacity="0" inkscape:pagecheckerboard="1" showgrid="false" inkscape:zoom="0.44880624" inkscape:cx="355.38721" inkscape:cy="387.69514" inkscape:window-width="1277" inkscape:window-height="847" inkscape:window-x="0" inkscape:window-y="25" inkscape:window-maximized="0" inkscape:current-layer="Calque_1" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" /> <style type="text/css" id="style2"> .st0{fill:#19132D;} </style> <g id="g32" style="fill:#ffffff" transform="translate(-31.33,-15.87)"> <path class="st0" d="m 322.73,81.87 h -12.08 c -0.37,0 -0.7,0.19 -0.89,0.51 L 287.48,115.86 265.1,82.37 c -0.19,-0.31 -0.52,-0.51 -0.89,-0.51 h -12.08 c -0.55,0 -1,0.45 -1,1 v 72.39 c 0,0.55 0.45,1 1,1 h 13.42 c 0.55,0 1,-0.45 1,-1 v -43.7 c 0,-0.14 0.18,-0.19 0.25,-0.07 l 19.81,28.8 c 0.19,0.3 0.52,0.46 0.87,0.47 0.35,0 0.67,-0.18 0.87,-0.48 l 19.59,-29.19 c 0.07,-0.12 0.25,-0.07 0.25,0.07 l 0.22,44.05 c 0,0.58 0.47,1.05 1.04,1.05 h 13.28 c 0.55,0 1,-0.45 1,-1 V 82.86 c 0,-0.55 -0.45,-0.99 -1,-0.99 z" id="path4" style="fill:#ffffff" /> <path class="st0" d="m 360.01,101.15 c -16.28,0 -29.03,12.42 -29.03,28.28 0,15.86 12.75,28.28 29.03,28.28 16.34,0 29.14,-12.42 29.14,-28.28 0,-15.86 -12.8,-28.28 -29.14,-28.28 z m 13.58,28.28 c 0,7.76 -5.71,13.4 -13.58,13.4 -7.81,0 -13.47,-5.64 -13.47,-13.4 0,-7.76 5.67,-13.4 13.47,-13.4 7.87,0 13.58,5.63 13.58,13.4 z" id="path6" style="fill:#ffffff" /> <path class="st0" d="m 427.6,101.15 c -6.77,0 -12.25,2.05 -16.35,6.11 v -24.4 c 0,-0.55 -0.45,-1 -1,-1 h -13.56 c -0.55,0 -1,0.45 -1,1 v 72.39 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 v -3.66 c 4.1,4.06 9.59,6.11 16.35,6.11 7.2,0 13.95,-2.9 19,-8.17 5.09,-5.31 7.9,-12.45 7.9,-20.11 0,-7.66 -2.8,-14.8 -7.9,-20.11 -5.06,-5.26 -11.81,-8.16 -19,-8.16 z m 11.34,28.28 c 0,8.07 -5.72,13.71 -13.9,13.71 -8.12,0 -13.79,-5.64 -13.79,-13.71 0,-8.07 5.67,-13.71 13.79,-13.71 8.18,0 13.9,5.63 13.9,13.71 z" id="path8" style="fill:#ffffff" /> <path class="st0" d="m 469.41,80.31 c -4.83,0 -8.9,4.02 -8.9,8.79 0,4.71 4.08,8.69 8.9,8.69 4.96,0 9,-3.9 9,-8.69 0,-4.77 -4.12,-8.79 -9,-8.79 z" id="path10" style="fill:#ffffff" /> <path class="st0" d="m 476.24,102.6 h -13.56 c -0.55,0 -1,0.45 -1,1 v 51.66 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 V 103.6 c 0,-0.55 -0.45,-1 -1,-1 z" id="path12" style="fill:#ffffff" /> <path class="st0" d="m 504.74,78.76 h -13.56 c -0.55,0 -1,0.45 -1,1 v 75.5 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 v -75.5 c 0,-0.56 -0.45,-1 -1,-1 z" id="path14" style="fill:#ffffff" /> <path class="st0" d="m 532.65,102.6 h -13.56 c -0.55,0 -1,0.45 -1,1 v 51.66 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 V 103.6 c 0,-0.55 -0.45,-1 -1,-1 z" id="path16" style="fill:#ffffff" /> <path class="st0" d="m 525.82,80.31 c -4.83,0 -8.9,4.02 -8.9,8.79 0,4.71 4.08,8.69 8.9,8.69 4.96,0 9,-3.9 9,-8.69 0.01,-4.77 -4.12,-8.79 -9,-8.79 z" id="path18" style="fill:#ffffff" /> <path class="st0" d="M 576.69,102.6 H 565.65 V 89.08 c 0,-0.55 -0.45,-1 -1,-1 h -13.56 c -0.55,0 -1,0.45 -1,1 v 13.52 h -8.27 c -0.55,0 -1,0.45 -1,1 v 12.67 c 0,0.55 0.45,1 1,1 h 8.27 v 20.66 c 0,6.93 1.56,11.56 4.91,14.57 3.13,2.81 7.86,4.18 14.64,4.18 2.17,0 4.55,-0.14 7.15,-0.42 0.51,-0.05 0.89,-0.48 0.89,-0.99 v -11.95 c 0,-0.27 -0.11,-0.54 -0.31,-0.72 -0.2,-0.19 -0.47,-0.29 -0.74,-0.27 -4.86,0.25 -8.41,0.32 -9.95,-1.14 -0.71,-0.67 -1.04,-1.7 -1.04,-3.25 v -20.66 h 11.04 c 0.55,0 1,-0.45 1,-1 V 103.6 c 0.01,-0.55 -0.44,-1 -0.99,-1 z" id="path20" style="fill:#ffffff" /> <path class="st0" d="M 676.43,81.87 H 646.9 c -0.55,0 -1,0.45 -1,1 v 72.39 c 0,0.55 0.45,1 1,1 h 29.53 c 10.15,0 19.49,-3.82 26.31,-10.76 6.77,-6.89 10.5,-16.28 10.5,-26.44 0,-10.16 -3.73,-19.55 -10.5,-26.44 -6.82,-6.93 -16.16,-10.75 -26.31,-10.75 z m 20.93,37.19 c 0,12.77 -8.61,21.69 -20.93,21.69 H 662.42 V 97.37 h 14.01 c 12.32,0 20.93,8.92 20.93,21.69 z" id="path22" style="fill:#ffffff" /> <path class="st0" d="M 775.16,102.6 H 761.6 c -0.55,0 -1,0.45 -1,1 v 3.7 c -4.15,-4.03 -9.8,-6.15 -16.46,-6.15 -7.15,0 -13.87,2.9 -18.91,8.17 -5.08,5.31 -7.88,12.45 -7.88,20.1 0,7.65 2.8,14.79 7.88,20.11 5.04,5.27 11.76,8.17 18.91,8.17 6.66,0 12.3,-2.12 16.46,-6.15 v 3.7 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 V 103.6 c 0,-0.55 -0.45,-1 -1,-1 z m -14.56,26.83 c 0,8.07 -5.72,13.71 -13.9,13.71 -8.12,0 -13.79,-5.64 -13.79,-13.71 0,-8.07 5.67,-13.71 13.79,-13.71 8.19,0 13.9,5.63 13.9,13.71 z" id="path24" style="fill:#ffffff" /> <path class="st0" d="M 818.36,102.6 H 807.32 V 89.08 c 0,-0.55 -0.45,-1 -1,-1 h -13.56 c -0.55,0 -1,0.45 -1,1 v 13.52 h -8.27 c -0.55,0 -1,0.45 -1,1 v 12.67 c 0,0.55 0.45,1 1,1 h 8.27 v 20.66 c 0,6.93 1.56,11.56 4.91,14.57 3.13,2.81 7.86,4.18 14.64,4.18 2.17,0 4.55,-0.14 7.15,-0.42 0.51,-0.05 0.89,-0.48 0.89,-0.99 v -11.95 c 0,-0.27 -0.11,-0.54 -0.31,-0.72 -0.2,-0.19 -0.47,-0.29 -0.74,-0.27 -4.85,0.25 -8.41,0.32 -9.95,-1.14 -0.71,-0.67 -1.04,-1.7 -1.04,-3.25 v -20.66 h 11.04 c 0.55,0 1,-0.45 1,-1 V 103.6 c 0.01,-0.55 -0.44,-1 -0.99,-1 z" id="path26" style="fill:#ffffff" /> <path class="st0" d="m 880.73,102.6 h -13.56 c -0.55,0 -1,0.45 -1,1 v 3.7 c -4.15,-4.03 -9.8,-6.15 -16.46,-6.15 -7.15,0 -13.87,2.9 -18.91,8.17 -5.08,5.31 -7.88,12.45 -7.88,20.1 0,7.65 2.8,14.79 7.88,20.11 5.04,5.27 11.76,8.17 18.91,8.17 6.66,0 12.31,-2.12 16.46,-6.15 v 3.7 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 V 103.6 c -0.01,-0.55 -0.45,-1 -1,-1 z m -14.56,26.83 c 0,8.07 -5.72,13.71 -13.9,13.71 -8.12,0 -13.79,-5.64 -13.79,-13.71 0,-8.07 5.67,-13.71 13.79,-13.71 8.18,0 13.9,5.63 13.9,13.71 z" id="path28" style="fill:#ffffff" /> <path class="st0" d="m 637.94,102.65 h -14.4 c -0.49,0 -0.92,0.31 -1.08,0.77 l -11.13,33.32 -13.05,-33.37 c -0.17,-0.44 -0.59,-0.72 -1.06,-0.72 h -14.71 c -0.38,0 -0.74,0.19 -0.95,0.51 -0.21,0.32 -0.25,0.72 -0.1,1.07 l 21.83,50.99 c -2.51,6.69 -6.12,9.31 -12.78,9.31 -0.05,0 -0.1,0 -0.14,0 -0.3,0 -0.59,0.12 -0.8,0.33 -0.22,0.21 -0.33,0.5 -0.33,0.8 v 12.36 c 0,0.61 0.48,1.11 1.08,1.14 0.63,0.03 1.25,0.05 1.87,0.05 6.25,0 11.45,-1.62 15.85,-4.92 4.83,-3.63 8.57,-9.21 11.43,-17.07 L 639,104.17 c 0.13,-0.35 0.08,-0.74 -0.13,-1.04 -0.21,-0.3 -0.56,-0.48 -0.93,-0.48 z" id="path30" style="fill:#ffffff" /> </g> <path class="st0" d="m 215.93,168.67 -9.88,-9.88 -3.3,3.3 5.03,5.03 h -22.43 c -0.93,-2.53 -2.93,-4.55 -5.45,-5.51 V 35.56 c 0,-2.16 -1.75,-3.91 -3.91,-3.91 h -27.18 c -1.8,0 -3.49,0.95 -4.42,2.49 L 108.64,90.65 72.71,34.12 C 71.77,32.59 70.09,31.65 68.3,31.65 H 49.2 C 48.24,29.13 46.23,27.13 43.7,26.2 V 0 h -6.4 v 26.2 c -2.56,0.94 -4.6,2.98 -5.54,5.54 H 8.83 l 5.03,-5.03 -3.3,-3.3 -9.88,9.88 C 0.24,33.73 0,34.32 0,34.94 c 0,0.62 0.25,1.21 0.68,1.65 l 9.88,9.88 3.3,-3.3 -5.03,-5.03 h 22.91 c 0.93,2.54 2.93,4.56 5.46,5.52 V 169.7 c 0,2.16 1.75,3.91 3.91,3.91 h 28.82 c 2.16,0 3.91,-1.75 3.91,-3.91 v -68.08 l 30.47,46.42 c 0.92,1.41 2.5,2.29 4.23,2.35 0.04,0 0.08,0 0.12,0 1.75,0 3.37,-0.89 4.34,-2.39 l 30.1,-46.99 0.35,67.38 c 0,2.87 2.32,5.21 5.18,5.21 h 19.26 c 0.96,2.52 2.97,4.52 5.51,5.45 v 26.19 h 6.4 v -26.19 c 2.56,-0.94 4.6,-2.98 5.54,-5.54 h 22.43 l -5.03,5.03 3.3,3.3 9.88,-9.88 c 0.92,-0.91 0.92,-2.38 0.01,-3.29 z M 40.49,39.6 c -0.16,0 -0.32,-0.01 -0.48,-0.02 -0.03,0 -0.06,-0.01 -0.09,-0.01 -0.13,-0.02 -0.25,-0.03 -0.37,-0.06 -0.02,0 -0.04,-0.01 -0.07,-0.02 -0.13,-0.03 -0.26,-0.06 -0.38,-0.1 -0.01,0 -0.03,-0.01 -0.04,-0.02 -0.13,-0.04 -0.26,-0.09 -0.39,-0.14 0,0 0,0 0,0 -0.14,-0.06 -0.27,-0.12 -0.4,-0.19 -0.4,-0.22 -0.76,-0.49 -1.07,-0.8 -0.03,-0.03 -0.05,-0.06 -0.08,-0.09 -0.2,-0.21 -0.38,-0.43 -0.53,-0.68 0,0 0,0 0,0 -0.08,-0.12 -0.15,-0.24 -0.22,-0.37 0,-0.01 -0.01,-0.02 -0.01,-0.03 -0.06,-0.12 -0.12,-0.24 -0.17,-0.36 -0.01,-0.02 -0.02,-0.05 -0.03,-0.07 -0.04,-0.11 -0.09,-0.22 -0.12,-0.34 -0.01,-0.04 -0.02,-0.09 -0.03,-0.14 -0.03,-0.1 -0.05,-0.2 -0.07,-0.3 -0.02,-0.08 -0.02,-0.15 -0.04,-0.23 -0.01,-0.07 -0.03,-0.15 -0.03,-0.22 -0.02,-0.15 -0.02,-0.31 -0.02,-0.46 0,0 0,0 0,0 0,-0.16 0.01,-0.31 0.02,-0.47 0.01,-0.08 0.02,-0.15 0.03,-0.22 0.01,-0.08 0.02,-0.15 0.03,-0.23 0.02,-0.1 0.05,-0.2 0.08,-0.3 0.01,-0.04 0.02,-0.09 0.03,-0.13 0.04,-0.12 0.08,-0.23 0.12,-0.35 0.01,-0.02 0.02,-0.04 0.02,-0.07 0.05,-0.13 0.11,-0.25 0.17,-0.37 0,-0.01 0.01,-0.02 0.01,-0.02 0.2,-0.39 0.46,-0.74 0.76,-1.05 0.05,-0.05 0.1,-0.1 0.15,-0.15 0.21,-0.2 0.44,-0.38 0.68,-0.54 0,0 0,0 0,0 0.12,-0.08 0.24,-0.15 0.37,-0.22 0.01,0 0.02,-0.01 0.02,-0.01 0.12,-0.06 0.24,-0.12 0.37,-0.17 0.02,-0.01 0.05,-0.02 0.07,-0.02 0.11,-0.04 0.23,-0.09 0.34,-0.12 0.04,-0.01 0.09,-0.02 0.13,-0.03 0.1,-0.03 0.2,-0.05 0.3,-0.07 0.08,-0.02 0.15,-0.02 0.23,-0.04 0.07,-0.01 0.14,-0.03 0.22,-0.03 0.15,-0.02 0.31,-0.02 0.47,-0.02 0.16,0 0.31,0.01 0.47,0.02 0.07,0.01 0.15,0.02 0.22,0.03 0.08,0.01 0.16,0.02 0.23,0.04 0.1,0.02 0.2,0.05 0.3,0.07 0.04,0.01 0.09,0.02 0.13,0.03 0.12,0.04 0.23,0.08 0.34,0.12 0.02,0.01 0.05,0.02 0.07,0.02 0.13,0.05 0.25,0.11 0.37,0.17 0.01,0 0.02,0.01 0.02,0.01 0.13,0.07 0.25,0.14 0.37,0.22 0,0 0,0 0,0 0.24,0.16 0.47,0.34 0.68,0.54 0.02,0.02 0.05,0.04 0.07,0.06 0.32,0.32 0.59,0.68 0.81,1.07 0,0 0,0 0,0 0.07,0.13 0.13,0.26 0.19,0.39 0,0.01 0.01,0.01 0.01,0.02 0.05,0.13 0.1,0.25 0.14,0.38 0,0.02 0.01,0.03 0.02,0.05 0.04,0.12 0.07,0.24 0.1,0.37 0.01,0.03 0.02,0.05 0.02,0.08 0.02,0.12 0.04,0.24 0.06,0.36 0,0.04 0.01,0.07 0.02,0.11 0.02,0.16 0.02,0.31 0.02,0.47 0,0 0,0 0,0 0.01,2.57 -2.07,4.65 -4.64,4.65 z m 109.13,50.25 c -0.01,-1.46 -0.97,-2.74 -2.37,-3.14 -1.4,-0.41 -2.9,0.16 -3.69,1.39 L 108.63,142.63 73.3,88.8 c -0.8,-1.22 -2.3,-1.76 -3.69,-1.35 -1.39,0.42 -2.35,1.7 -2.35,3.15 v 76.42 H 43.79 V 43.66 c 2.49,-0.95 4.48,-2.93 5.42,-5.43 h 18.3 l 38.35,60.33 c 0.6,0.95 1.65,1.53 2.78,1.53 0,0 0,0 0,0 1.13,0 2.18,-0.58 2.78,-1.53 l 38.16,-60.32 h 23.72 v 123.37 c -2.49,0.94 -4.47,2.93 -5.42,5.42 h -17.87 z m 30.18,83.83 v 0 c -0.21,0.2 -0.44,0.38 -0.68,0.54 0,0 0,0 0,0 -0.12,0.08 -0.24,0.15 -0.37,0.22 -0.01,0 -0.02,0.01 -0.03,0.01 -0.12,0.06 -0.24,0.12 -0.37,0.17 -0.02,0.01 -0.05,0.02 -0.07,0.02 -0.11,0.04 -0.23,0.09 -0.34,0.12 -0.04,0.01 -0.09,0.02 -0.13,0.03 -0.1,0.03 -0.2,0.05 -0.3,0.07 -0.07,0.01 -0.15,0.02 -0.23,0.03 -0.07,0.01 -0.15,0.03 -0.22,0.03 -0.15,0.02 -0.31,0.02 -0.47,0.02 -0.16,0 -0.31,-0.01 -0.47,-0.02 -0.07,-0.01 -0.15,-0.02 -0.22,-0.03 -0.08,-0.01 -0.15,-0.02 -0.23,-0.03 -0.1,-0.02 -0.2,-0.05 -0.3,-0.07 -0.04,-0.01 -0.09,-0.02 -0.13,-0.03 -0.12,-0.04 -0.23,-0.08 -0.34,-0.12 -0.02,-0.01 -0.05,-0.02 -0.07,-0.03 -0.12,-0.05 -0.25,-0.11 -0.36,-0.17 -0.01,0 -0.02,-0.01 -0.03,-0.01 -0.13,-0.07 -0.25,-0.14 -0.37,-0.22 0,0 0,0 0,0 -0.24,-0.16 -0.47,-0.34 -0.68,-0.54 -0.03,-0.02 -0.05,-0.05 -0.08,-0.07 -0.32,-0.32 -0.59,-0.68 -0.8,-1.07 0,0 0,0 0,0 -0.07,-0.13 -0.13,-0.26 -0.19,-0.4 0,0 0,-0.01 -0.01,-0.01 -0.05,-0.12 -0.1,-0.25 -0.14,-0.38 -0.01,-0.02 -0.01,-0.03 -0.02,-0.05 -0.04,-0.12 -0.07,-0.24 -0.09,-0.36 -0.01,-0.03 -0.02,-0.06 -0.02,-0.08 -0.02,-0.11 -0.04,-0.22 -0.05,-0.34 -0.01,-0.04 -0.01,-0.08 -0.02,-0.13 -0.02,-0.16 -0.02,-0.31 -0.02,-0.48 0,-2.56 2.09,-4.65 4.65,-4.65 0.16,0 0.32,0.01 0.48,0.02 0.04,0 0.08,0.01 0.13,0.02 0.11,0.01 0.22,0.03 0.33,0.05 0.03,0.01 0.06,0.02 0.09,0.02 0.12,0.03 0.24,0.06 0.36,0.09 0.02,0.01 0.04,0.02 0.06,0.02 0.12,0.04 0.25,0.08 0.37,0.14 0.01,0 0.02,0.01 0.03,0.01 0.13,0.06 0.25,0.12 0.38,0.18 0,0 0.01,0 0.01,0.01 0.39,0.21 0.75,0.48 1.06,0.8 0.02,0.03 0.05,0.05 0.07,0.08 v 0 c 0.2,0.21 0.38,0.44 0.54,0.68 0,0 0,0 0,0 0.08,0.12 0.15,0.24 0.22,0.37 0,0.01 0.01,0.02 0.01,0.03 0.06,0.12 0.12,0.24 0.17,0.37 0.01,0.02 0.02,0.05 0.03,0.07 0.04,0.11 0.09,0.23 0.12,0.34 0.01,0.04 0.02,0.09 0.03,0.13 0.03,0.1 0.05,0.2 0.07,0.3 0.01,0.07 0.02,0.15 0.03,0.23 0.01,0.07 0.03,0.15 0.03,0.22 0.02,0.15 0.02,0.31 0.02,0.47 0,0.16 -0.01,0.31 -0.02,0.47 -0.01,0.08 -0.02,0.15 -0.03,0.22 -0.01,0.08 -0.02,0.15 -0.03,0.23 -0.02,0.1 -0.05,0.2 -0.07,0.3 -0.01,0.04 -0.02,0.09 -0.03,0.13 -0.04,0.12 -0.08,0.23 -0.12,0.34 -0.01,0.02 -0.02,0.05 -0.03,0.07 -0.05,0.12 -0.11,0.25 -0.17,0.37 0,0.01 -0.01,0.02 -0.01,0.03 -0.07,0.13 -0.14,0.25 -0.22,0.37 0,0 0,0 0,0 -0.16,0.24 -0.34,0.47 -0.54,0.68 v 0 c -0.06,0.06 -0.11,0.12 -0.17,0.17 z" id="path34" style="fill:#ffffff" /> </svg> </a> </div> <div class="md-social"> <a href="https://gtfs.org/blog/feed_rss_created.xml" target="_blank" rel="noopener" title="GTFS Digest RSS feed" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M64 32C28.7 32 0 60.7 0 96v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zm32 104c0-13.3 10.7-24 24-24 137 0 248 111 248 248 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-110.5-89.5-200-200-200-13.3 0-24-10.7-24-24m0 96c0-13.3 10.7-24 24-24 83.9 0 152 68.1 152 152 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-57.4-46.6-104-104-104-13.3 0-24-10.7-24-24m0 120a32 32 0 1 1 64 0 32 32 0 1 1-64 0"/></svg> </a> <a href="https://github.com/MobilityData" target="_blank" rel="noopener" title="github.com" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> <a href="https://www.linkedin.com/company/mobilitydata" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg> </a> <a href="https://share.mobilitydata.org/slack" target="_blank" rel="noopener" title="share.mobilitydata.org" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1s21.16-47.06 47.06-47.06h47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06S448 171 448 196.9s-21.16 47.06-47.06 47.06h-47.06zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06S309 480 283.1 480s-47.06-21.16-47.06-47.06v-47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06s21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06z"/></svg> </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <div class="md-consent" data-md-component="consent" id="__consent" hidden> <div class="md-consent__overlay"></div> <aside class="md-consent__inner"> <form class="md-consent__form md-grid md-typeset" name="consent"> <h4>Cookie Consent</h4> <p>We use cookies to track visits, stored anonymously. With your consent, you're helping us to make our documentation better. See our <a href="https://mobilitydata.org/privacy-policy/" target="_blank" rel="noopener">Privacy Policy</a>.</p> <input class="md-toggle" type="checkbox" id="__settings" > <div class="md-consent__settings"> <ul class="task-list"> <li class="task-list-item"> <label class="task-list-control"> <input type="checkbox" name="analytics" checked> <span class="task-list-indicator"></span> Google Analytics </label> </li> <li class="task-list-item"> <label class="task-list-control"> <input type="checkbox" name="github" checked> <span class="task-list-indicator"></span> GitHub </label> </li> </ul> </div> <div class="md-consent__controls"> <button class="md-button md-button--primary">Accept</button> <button type="reset" class="md-button md-button--primary">Reject</button> <label class="md-button" for="__settings">Manage settings</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout((function(){document.querySelector("[data-md-component=consent]").hidden=!1}),250);var form=document.forms.consent;for(var action of["submit","reset"])form.addEventListener(action,(function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map((function(e){return[e,!0]})))),location.hash="",location.reload()}))</script> <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.tabs", "navigation.indexes", "navigation.top", "navigation.footer", "content.tabs.link", "search.suggest"], "search": "../../../assets/javascripts/workers/search.c7c1ca2c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> <script src="../../../assets/javascripts/bundle.203fd0bc.min.js"></script> </body> </html>