├── CNAME ├── src ├── components │ ├── ListBus.vue │ ├── Header.vue │ ├── AllBus.vue │ ├── NextBus.vue │ ├── AppBus.vue │ ├── Footer.vue │ ├── BusCard.vue │ ├── AlertCard.vue │ ├── NextBusCard.vue │ └── BusSchedule.vue ├── database │ ├── locations.json │ ├── disclaimers.json │ ├── lines.json │ ├── stops.json │ ├── schedules.json │ └── routes.json ├── assets │ └── logo.png ├── main.js ├── plugins │ ├── vuetify.js │ └── analytics.js ├── utils.js ├── App.vue ├── services │ └── DatabaseService.js └── controllers │ └── BusController.js ├── babel.config.js ├── public ├── googleacc17aaf26b9c108.html ├── favicon.png ├── preview.png ├── sitemap.xml └── index.html ├── vue.config.js ├── .gitignore ├── .travis.yml ├── .eslintrc.json ├── deploy.sh ├── LICENSE ├── .github └── workflows │ └── deploy-to-gh-pages.yml ├── package.json └── README.md /CNAME: -------------------------------------------------------------------------------- 1 | onibusufmg.com 2 | -------------------------------------------------------------------------------- /src/components/ListBus.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/database/locations.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /public/googleacc17aaf26b9c108.html: -------------------------------------------------------------------------------- 1 | google-site-verification: googleacc17aaf26b9c108.html -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/italohdc/UFMG-Bus/HEAD/public/favicon.png -------------------------------------------------------------------------------- /public/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/italohdc/UFMG-Bus/HEAD/public/preview.png -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/italohdc/UFMG-Bus/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | publicPath: process.env.NODE_ENV === 'production' 3 | ? '/' 4 | : '/' 5 | } 6 | -------------------------------------------------------------------------------- /public/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | https://onibusufmg.com/ 6 | 7 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import './plugins/vuetify' 3 | import './plugins/analytics' 4 | import App from './App.vue'; 5 | 6 | Vue.config.productionTip = false; 7 | 8 | new Vue({ 9 | render: h => h(App), 10 | }).$mount('#app'); 11 | -------------------------------------------------------------------------------- /src/database/disclaimers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "retorno-area-militar", 4 | "description": "Retorno na área militar", 5 | "icon": "*" 6 | }, 7 | { 8 | "id": "nao-atende-adm-3", 9 | "description": "Não atende a Unidade Administrativa III", 10 | "icon": "**" 11 | } 12 | ] -------------------------------------------------------------------------------- /src/plugins/vuetify.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuetify from 'vuetify/lib' 3 | import 'vuetify/src/stylus/app.styl' 4 | import pt from 'vuetify/es5/locale/pt' 5 | 6 | Vue.use(Vuetify, { 7 | iconfont: 'md', 8 | lang: { 9 | locales: { pt }, 10 | current: 'pt' 11 | }, 12 | }) 13 | -------------------------------------------------------------------------------- /src/plugins/analytics.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueAnalytics from 'vue-analytics'; 3 | 4 | const isProd = process.env.NODE_ENV === 'production' 5 | 6 | Vue.use(VueAnalytics, { 7 | id: 'UA-105791948-3', 8 | debug: { 9 | enable: !isProd, 10 | sendHitTask: isProd 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | const stringToLocalTime = (string) => { 2 | // Assure the date is parsed as local time 3 | const split = string.split(/:/); 4 | return new Date(1970, 0, 1, split[0], split[1]); 5 | } 6 | 7 | const getNowTime = () => { 8 | return new Date(); 9 | } 10 | 11 | export { 12 | stringToLocalTime, 13 | getNowTime, 14 | } -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "10" 4 | cache: 5 | directories: 6 | - node_modules 7 | 8 | install: 9 | - npm install 10 | - npm run build 11 | 12 | deploy: 13 | provider: pages 14 | skip-cleanup: true 15 | github-token: $GITHUB_ACCESS_TOKEN 16 | target-branch: gh-pages 17 | local-dir: dist 18 | fqdn: onibusufmg.com 19 | on: 20 | branch: master 21 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true 5 | }, 6 | "extends": ["plugin:vue/base"], 7 | "globals": { 8 | "Atomics": "readonly", 9 | "SharedArrayBuffer": "readonly" 10 | }, 11 | "parserOptions": { 12 | "ecmaVersion": 2018, 13 | "sourceType": "module" 14 | }, 15 | "plugins": [ 16 | "vue" 17 | ], 18 | "rules": { 19 | } 20 | } -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # abort on errors 4 | set -e 5 | 6 | # build 7 | npm run build 8 | 9 | # navigate into the build output directory 10 | cd dist 11 | 12 | # if you are deploying to a custom domain 13 | echo 'onibusufmg.com' > CNAME 14 | 15 | git init 16 | git add -A 17 | git commit -m 'deploy' 18 | 19 | # if you are deploying to https://.github.io/ 20 | git push -f git@github.com:italohdc/UFMG-Bus.git master:gh-pages 21 | 22 | cd - 23 | -------------------------------------------------------------------------------- /src/components/Header.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 22 | 23 | 32 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 27 | 28 | 51 | -------------------------------------------------------------------------------- /src/components/AllBus.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Italo Lelis 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/components/NextBus.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 44 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | Horários dos Ônibus - UFMG 13 | 14 | 15 | 16 | 17 | 18 | 21 |
22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /.github/workflows/deploy-to-gh-pages.yml: -------------------------------------------------------------------------------- 1 | name: Build and Deploy to GitHub Pages 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout repository 14 | uses: actions/checkout@v4 15 | 16 | - name: Setup Node.js 17 | uses: actions/setup-node@v4 18 | with: 19 | node-version: '24' 20 | 21 | - name: Install dependencies 22 | run: npm ci 23 | 24 | - name: Build project 25 | run: npm run build 26 | env: 27 | NODE_OPTIONS: --openssl-legacy-provider 28 | 29 | - name: Upload Pages artifact 30 | uses: actions/upload-pages-artifact@v3 31 | with: 32 | path: ./dist 33 | 34 | deploy: 35 | needs: build 36 | runs-on: ubuntu-latest 37 | 38 | # Grant GITHUB_TOKEN the permissions required to make a Pages deployment 39 | permissions: 40 | pages: write # to deploy to Pages 41 | id-token: write # to verify the deployment originates from an appropriate source 42 | 43 | environment: 44 | name: github-pages 45 | url: ${{ steps.deployment.outputs.page_url }} 46 | 47 | steps: 48 | - name: Deploy to GitHub Pages 49 | id: deployment 50 | uses: actions/deploy-pages@v4 51 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ufmg-bus", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint", 9 | "deploy": "./deploy.sh" 10 | }, 11 | "dependencies": { 12 | "core-js": "^2.6.5", 13 | "vue": "^2.6.10", 14 | "vue-analytics": "^5.16.4", 15 | "vuetify": "^1.5.5" 16 | }, 17 | "devDependencies": { 18 | "@vue/cli-plugin-babel": "^3.7.0", 19 | "@vue/cli-plugin-eslint": "^3.7.0", 20 | "@vue/cli-service": "^3.7.0", 21 | "babel-eslint": "^10.0.1", 22 | "eslint": "^5.16.0", 23 | "eslint-config-airbnb-base": "^13.1.0", 24 | "eslint-plugin-import": "^2.17.2", 25 | "eslint-plugin-vue": "^5.2.2", 26 | "stylus": "^0.54.5", 27 | "stylus-loader": "^3.0.1", 28 | "vue-cli-plugin-vuetify": "^0.5.0", 29 | "vue-template-compiler": "^2.5.21", 30 | "vuetify-loader": "^1.0.5" 31 | }, 32 | "eslintConfig": { 33 | "root": true, 34 | "env": { 35 | "node": true 36 | }, 37 | "extends": [ 38 | "plugin:vue/essential", 39 | "eslint:recommended" 40 | ], 41 | "rules": {}, 42 | "parserOptions": { 43 | "parser": "babel-eslint" 44 | } 45 | }, 46 | "postcss": { 47 | "plugins": { 48 | "autoprefixer": {} 49 | } 50 | }, 51 | "browserslist": [ 52 | "> 1%", 53 | "last 2 versions" 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /src/components/AppBus.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 46 | 47 | 54 | -------------------------------------------------------------------------------- /src/components/Footer.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 49 | -------------------------------------------------------------------------------- /src/components/BusCard.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 50 | 51 | 60 | -------------------------------------------------------------------------------- /src/components/AlertCard.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 62 | 63 | 68 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | UFMG Bus: onibusufmg.surge.sh 3 |

4 | 5 |

6 | Página de Horários dos Ônibus internos da UFMG feita em Vue.js 7 |

8 | 9 |

10 | Build Status 11 | Coverage Status 12 |

13 | 14 |

15 | Banner 16 |

17 | 18 | ## Sobre o Projeto 19 | 20 | Este projeto visa contribuir com a **mobilidade** das pessoas no campus. Ele foi desenvolvido utilizando como base o framework [Vue.js](https://vuejs.org/). Além disso, também foi incluída a biblioteca de componentes [Vuetify](https://vuetifyjs.com/), com o intuito de agilizar a criação do design da página. 21 | 22 | Caso você deseja contribuir, sinta-se à vontade para dar sugestões ou adicionar novas funcionalidade ao código do projeto. O seu _pull-request_ será muito bem-vindo! 23 | 24 | 25 | ## Comandos úteis 26 | 27 | Alguns comandos que podem te ajudar caso você queira clonar e realizar modificações neste repositório direto do seu computador: 28 | 29 | ```sh 30 | # Instalar dependências 31 | npm install 32 | 33 | # Rodar a aplicação localmente (ambiente de desenvolvimento) 34 | npm run dev 35 | 36 | # Compilar e compactar projeto para ambiente de produção 37 | npm run build 38 | ``` 39 | 40 | 41 | ## Informações Gerais 42 | 43 | O quadro de horários utilizado foi extraído do [Portal do DLO](https://www.ufmg.br/dlo/tranporteinterno.php). 44 | 45 | Este projeto é independente e não possui vínculo formal com a UFMG. 46 | 47 | 48 | ## Créditos 49 | 50 | O logotipo do projeto foi criado com base na [ilustração](https://www.iconfinder.com/icons/379528/bus_icon) da [Webalys](https://www.webalys.com/). 51 | 52 | 53 | ## Licença 54 | 55 | Este projeto é distribuído sob a [Licença do MIT](LICENSE). 56 | -------------------------------------------------------------------------------- /src/services/DatabaseService.js: -------------------------------------------------------------------------------- 1 | import Lines from '../database/lines.json'; 2 | import Locations from '../database/locations.json'; 3 | import Stops from '../database/stops.json'; 4 | import Routes from '../database/routes.json'; 5 | import Schedules from '../database/schedules.json'; 6 | import Disclaimers from '../database/disclaimers.json'; 7 | 8 | const shouldSortByName = ['lines', 'stops']; 9 | 10 | export default class DatabaseService { 11 | constructor() { 12 | this.db = { 13 | lines: Lines, 14 | locations: Locations, 15 | stops: Stops, 16 | routes: Routes, 17 | schedules: Schedules, 18 | disclaimers: Disclaimers, 19 | }; 20 | 21 | // Sort some collections by name 22 | shouldSortByName.forEach(collection => { 23 | this.db[collection].sort(function(a, b) { 24 | const textA = a.name.toLowerCase(); 25 | const textB = b.name.toLowerCase(); 26 | return (textA < textB) ? -1 : (textA > textB) ? 1 : 0; 27 | }); 28 | }); 29 | 30 | this.populate('_schedule', this.db.lines, this.db.schedules); 31 | this.populate('_route', this.db.lines, this.db.routes); 32 | this.populateArray('_stop', 'route', this.db.routes, this.db.stops); 33 | } 34 | 35 | populate(modelName, collectionToPopulate, collectionToSearchFrom) { 36 | collectionToPopulate.forEach(collection => { 37 | if (typeof collection[modelName] === 'string' || collection[modelName] instanceof String) { 38 | collection[modelName] = collectionToSearchFrom.find(colFrom => colFrom.id === collection[modelName]); 39 | } 40 | }); 41 | } 42 | 43 | populateArray(arrayName, modelName, collectionToPopulate, collectionToSearchFrom) { 44 | collectionToPopulate.forEach(collection => { 45 | collection[modelName].forEach(array => { 46 | if (typeof array[arrayName] === 'string' || array[arrayName] instanceof String) { 47 | array[arrayName] = collectionToSearchFrom.find(colFrom => colFrom.id === array[arrayName]); 48 | } 49 | }); 50 | }); 51 | } 52 | 53 | get(collection) { 54 | return this.db[collection]; 55 | } 56 | 57 | getSortedByName(collection) { 58 | const table = this.db[collection]; 59 | return table 60 | } 61 | 62 | export() { 63 | return this.db; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/controllers/BusController.js: -------------------------------------------------------------------------------- 1 | import DatabaseService from '../services/DatabaseService'; 2 | import { stringToLocalTime, getNowTime } from '../utils' 3 | 4 | const db = new DatabaseService(); 5 | 6 | let sortedSchedules = []; 7 | 8 | export default { 9 | availableLines() { 10 | const lines = db.get('lines'); 11 | return lines; 12 | }, 13 | 14 | availableStops() { 15 | const stops = db.get('stops'); 16 | return stops; 17 | }, 18 | 19 | findDisclaimer(id) { 20 | const disclaimers = db.get('disclaimers'); 21 | return disclaimers.find(disclaimer => disclaimer.id === id); 22 | }, 23 | 24 | sortSchedulesLines() { 25 | const lines = db.get('lines'); 26 | 27 | lines.forEach(line => { 28 | const schedule = line._schedule.times.map(schedule => { 29 | return { 30 | _line: line, 31 | time: stringToLocalTime(schedule.time), 32 | isDuplicate: schedule.isDuplicate, 33 | disclaimer: this.findDisclaimer(schedule._disclaimer), 34 | } 35 | }); 36 | sortedSchedules.push.apply(sortedSchedules, schedule); 37 | }); 38 | 39 | // Remove duplicated line schedules 40 | sortedSchedules = sortedSchedules.filter(schedule => !schedule.isDuplicate); 41 | 42 | sortedSchedules.sort(function(a,b){ 43 | return new Date(a.time) - new Date(b.time); 44 | }); 45 | }, 46 | 47 | nextSchedules(timeOffset, limit) { 48 | // Create a array of schedules sorted by time if non-existent 49 | if (sortedSchedules.length === 0) { 50 | this.sortSchedulesLines(); 51 | } 52 | 53 | // Get current time and change date to 1970 to have 54 | // the same date as saved on db 55 | const now = getNowTime(); 56 | now.setFullYear(1970); 57 | now.setMonth(0); 58 | now.setDate(1); 59 | 60 | // Add time offset to get some schedules before current time 61 | if (timeOffset) { 62 | now.setMinutes(now.getMinutes() - timeOffset); 63 | } 64 | 65 | // Get day of week 66 | const todayDay = getNowTime().getDay(); 67 | 68 | // Only return schedules bigger than current time 69 | // and which is active in today's day of week 70 | const nextBuses = sortedSchedules.filter(time => { 71 | return time.time > now && time._line._schedule.daysOfWeek.includes(todayDay); 72 | }); 73 | return nextBuses.slice(0, limit ? limit : 12); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/components/NextBusCard.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 68 | 69 | 78 | -------------------------------------------------------------------------------- /src/database/lines.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "line-1", 4 | "isDisabled": false, 5 | "name": "Linha 1", 6 | "description": "Período Letivo", 7 | "canHideDescription": true, 8 | "_schedule": "sch-line-1", 9 | "_route": "route-line-1" 10 | }, 11 | { 12 | "id": "line-1-acd", 13 | "isDisabled": true, 14 | "name": "Linha 1", 15 | "description": "Atendimento Curso Design", 16 | "_schedule": "sch-line-1-acd", 17 | "_route": "route-line-1-acd" 18 | }, 19 | { 20 | "id": "line-2", 21 | "isDisabled": false, 22 | "name": "Linha 2", 23 | "description": "Período Letivo", 24 | "canHideDescription": true, 25 | "_schedule": "sch-line-2", 26 | "_route": "route-line-2" 27 | }, 28 | { 29 | "id": "line-2-agcav", 30 | "isDisabled": true, 31 | "name": "Linha 2", 32 | "description": "Atendimento Gravura do Curso Artes Visuais", 33 | "_schedule": "sch-line-2-agcav", 34 | "_route": "route-line-2-agcav" 35 | }, 36 | { 37 | "id": "line-2-acd", 38 | "isDisabled": true, 39 | "name": "Linha 2", 40 | "description": "Atendimento Curso Design", 41 | "_schedule": "sch-line-2-acd", 42 | "_route": "route-line-2-acd" 43 | }, 44 | { 45 | "id": "line-3", 46 | "isDisabled": false, 47 | "name": "Linha 3", 48 | "description": "Período Letivo", 49 | "canHideDescription": true, 50 | "_schedule": "sch-line-3", 51 | "_route": "route-line-3" 52 | }, 53 | { 54 | "id": "line-3-bhtec", 55 | "isDisabled": false, 56 | "name": "Linha 3", 57 | "description": "Atendimento BH-TEC", 58 | "_schedule": "sch-line-3-bhtec", 59 | "_route": "route-line-3-bhtec" 60 | }, 61 | { 62 | "id": "line-4", 63 | "isDisabled": false, 64 | "name": "Linha 4", 65 | "description": "Período Letivo", 66 | "canHideDescription": true, 67 | "_schedule": "sch-line-4", 68 | "_route": "route-line-4" 69 | }, 70 | { 71 | "id": "line-4-mc", 72 | "isDisabled": false, 73 | "name": "Linha 4", 74 | "description": "Atendimento McDonald's", 75 | "_schedule": "sch-line-4-mc", 76 | "_route": "route-line-4-mc" 77 | }, 78 | { 79 | "id": "line-4-mc-bhtec", 80 | "isDisabled": false, 81 | "name": "Linha 4", 82 | "description": "Atendimento BH-TEC e McDonalds", 83 | "_schedule": "sch-line-4-mc-bhtec", 84 | "_route": "route-line-4-mc-bhtec" 85 | }, 86 | { 87 | "id": "line-5", 88 | "isDisabled": false, 89 | "name": "Linha Sábado", 90 | "description": "Circula somente no sábado", 91 | "canHideDescription": true, 92 | "_schedule": "sch-line-5", 93 | "_route": "route-line-3" 94 | } 95 | ] -------------------------------------------------------------------------------- /src/database/stops.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "stop-alameda-dos-jacarandas", 4 | "name": "Alameda dos Jacarandás" 5 | }, 6 | { 7 | "id": "stop-av-abrahao-caram", 8 | "name": "Av. Abrahão Caram (em frente ao Restaurante Farroupilha)" 9 | }, 10 | { 11 | "id": "stop-av-cel-jose-dias-bicalho", 12 | "name": "Av. Cel. José Dias Bicalho" 13 | }, 14 | { 15 | "id": "stop-av-cel-oscar-pascoal", 16 | "name": "Av. Cel. Oscar Pascoal" 17 | }, 18 | { 19 | "id": "stop-av-chaffir-ferreira", 20 | "name": "Av. Chaffir Ferreira" 21 | }, 22 | { 23 | "id": "stop-av-das-palmeiras", 24 | "name": "Av. das Palmeiras" 25 | }, 26 | { 27 | "id": "stop-av-otacilio-negrao-de-lima", 28 | "name": "Av. OtacíLio Negrão De Lima" 29 | }, 30 | { 31 | "id": "stop-av-presidente-antonio-carlos", 32 | "name": "Av. Presidente Antônio Carlos" 33 | }, 34 | { 35 | "id": "stop-av-presidente-carlos-luz", 36 | "name": "Av. Presidente Carlos Luz (em frente ao McDonald's)" 37 | }, 38 | { 39 | "id": "stop-belas-artes", 40 | "name": "Belas Artes" 41 | }, 42 | { 43 | "id": "stop-bhtec", 44 | "name": "BHTEC" 45 | }, 46 | { 47 | "id": "stop-biblioteca-universitaria", 48 | "name": "Biblioteca Universitária" 49 | }, 50 | { 51 | "id": "stop-bioterio-central", 52 | "name": "Biotério Central" 53 | }, 54 | { 55 | "id": "stop-cad-1", 56 | "name": "CAD 1" 57 | }, 58 | { 59 | "id": "stop-cad-2", 60 | "name": "CAD 2" 61 | }, 62 | { 63 | "id": "stop-centro-esportivo", 64 | "name": "Centro Esportivo" 65 | }, 66 | { 67 | "id": "stop-centro-pedagogico", 68 | "name": "Centro Pedagógico" 69 | }, 70 | { 71 | "id": "stop-ciencia-da-informacao", 72 | "name": "Ciência da Informação" 73 | }, 74 | { 75 | "id": "stop-cnen-cdtn", 76 | "name": "CNEN/CDTN" 77 | }, 78 | { 79 | "id": "stop-colegio-tecnico", 80 | "name": "Colégio Técnico" 81 | }, 82 | { 83 | "id": "stop-creche", 84 | "name": "Creche" 85 | }, 86 | { 87 | "id": "stop-eeffto", 88 | "name": "EEFFTO" 89 | }, 90 | { 91 | "id": "stop-engenharia-eletrica", 92 | "name": "Engenharia Elétrica" 93 | }, 94 | { 95 | "id": "stop-engenharia", 96 | "name": "Engenharia" 97 | }, 98 | { 99 | "id": "stop-escola-de-musica", 100 | "name": "Escola de Música" 101 | }, 102 | { 103 | "id": "stop-estacao-ecologica", 104 | "name": "Estação Ecológica" 105 | }, 106 | { 107 | "id": "stop-face", 108 | "name": "FACE" 109 | }, 110 | { 111 | "id": "stop-fae", 112 | "name": "FAE" 113 | }, 114 | { 115 | "id": "stop-fafich", 116 | "name": "FAFICH" 117 | }, 118 | { 119 | "id": "stop-farmacia", 120 | "name": "Farmácia" 121 | }, 122 | { 123 | "id": "stop-fisica", 124 | "name": "Física" 125 | }, 126 | { 127 | "id": "stop-geociencias", 128 | "name": "Geociências" 129 | }, 130 | { 131 | "id": "stop-icb", 132 | "name": "ICB" 133 | }, 134 | { 135 | "id": "stop-icex", 136 | "name": "ICEx" 137 | }, 138 | { 139 | "id": "stop-letras", 140 | "name": "Letras" 141 | }, 142 | { 143 | "id": "stop-odontologia", 144 | "name": "Odontologia" 145 | }, 146 | { 147 | "id": "stop-praca-de-servicos", 148 | "name": "Praça de Serviços" 149 | }, 150 | { 151 | "id": "stop-quimica", 152 | "name": "Química" 153 | }, 154 | { 155 | "id": "stop-reitoria", 156 | "name": "Reitoria" 157 | }, 158 | { 159 | "id": "stop-retorno-na-av-alfredo-camarate", 160 | "name": "Retorno na Av. Alfredo Camarate" 161 | }, 162 | { 163 | "id": "stop-rua-prof-eduardo-m-guimaraes", 164 | "name": "Rua Prof. Eduardo M. Guimarães" 165 | }, 166 | { 167 | "id": "stop-rua-prof-jose-vieira-mendonca", 168 | "name": "Rua Prof. José Vieira Mendonça" 169 | }, 170 | { 171 | "id": "stop-restaurante-setorial-1", 172 | "name": "Restaurante Setorial I (Bandejão 1)" 173 | }, 174 | { 175 | "id": "stop-restaurante-setorial-2", 176 | "name": "Restaurante Setorial II (Bandejão 2)" 177 | }, 178 | { 179 | "id": "stop-unidade-administrativa-3", 180 | "name": "Unidade Administrativa III" 181 | }, 182 | { 183 | "id": "stop-unidade-administrativa-2", 184 | "name": "Unidade Administrativa II" 185 | }, 186 | { 187 | "id": "stop-usiminas", 188 | "name": "Usiminas" 189 | }, 190 | { 191 | "id": "stop-veterinaria", 192 | "name": "Veterinária" 193 | } 194 | ] -------------------------------------------------------------------------------- /src/components/BusSchedule.vue: -------------------------------------------------------------------------------- 1 | 81 | 82 | 149 | 150 | 159 | -------------------------------------------------------------------------------- /src/database/schedules.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "sch-line-1", 4 | "daysOfWeek": [1,2,3,4,5], 5 | "times": [ 6 | { "time": "06:10" }, 7 | { "time": "06:50" }, 8 | { "time": "07:30" }, 9 | { "time": "08:35" }, 10 | { "time": "09:40" }, 11 | { "time": "11:10" }, 12 | { "time": "11:50" }, 13 | { "time": "12:30" }, 14 | { "time": "13:15" }, 15 | { "time": "14:10" }, 16 | { "time": "15:10" }, 17 | { "time": "15:50" }, 18 | { "time": "16:30" }, 19 | { "time": "17:10" }, 20 | { "time": "17:55" }, 21 | { "time": "18:50" }, 22 | { "time": "19:40" } 23 | ] 24 | }, 25 | { 26 | "id": "sch-line-1-acd", 27 | "daysOfWeek": [1,2,3,4,5], 28 | "times": [] 29 | }, 30 | { 31 | "id": "sch-line-2", 32 | "daysOfWeek": [1,2,3,4,5], 33 | "times": [ 34 | { "time": "05:55" }, 35 | { "time": "06:30" }, 36 | { "time": "07:10" }, 37 | { "time": "07:50" }, 38 | { "time": "09:05" }, 39 | { "time": "10:20" }, 40 | { "time": "11:30", "_disclaimer": "retorno-area-militar" }, 41 | { "time": "12:10", "_disclaimer": "retorno-area-militar" }, 42 | { "time": "12:50", "_disclaimer": "retorno-area-militar" }, 43 | { "time": "13:45", "_disclaimer": "retorno-area-militar" }, 44 | { "time": "14:30" }, 45 | { "time": "15:30" }, 46 | { "time": "16:10" }, 47 | { "time": "16:50" }, 48 | { "time": "17:30", "_disclaimer": "retorno-area-militar" }, 49 | { "time": "18:20", "_disclaimer": "retorno-area-militar" }, 50 | { "time": "19:20" }, 51 | { "time": "20:00" }, 52 | { "time": "20:50" }, 53 | { "time": "21:35" }, 54 | { "time": "22:30" } 55 | ] 56 | }, 57 | { 58 | "id": "sch-line-2-agcav", 59 | "daysOfWeek": [1,2,3,4,5], 60 | "times": [] 61 | }, 62 | { 63 | "id": "sch-line-2-acd", 64 | "daysOfWeek": [1,2,3,4,5], 65 | "times": [] 66 | }, 67 | { 68 | "id": "sch-line-3", 69 | "daysOfWeek": [1,2,3,4,5], 70 | "times": [ 71 | { "time": "05:40" }, 72 | { "time": "06:20" }, 73 | { "time": "07:00" }, 74 | { "time": "07:40" }, 75 | { "time": "08:20" }, 76 | { "time": "09:20" }, 77 | { "time": "10:00" }, 78 | { "time": "10:40" }, 79 | { "time": "11:20", "_disclaimer": "retorno-area-militar" }, 80 | { "time": "12:00", "_disclaimer": "retorno-area-militar" }, 81 | { "time": "12:40", "_disclaimer": "retorno-area-militar" }, 82 | { "time": "13:30", "_disclaimer": "retorno-area-militar" }, 83 | { "time": "14:55" }, 84 | { "time": "16:00" }, 85 | { "time": "16:40" }, 86 | { "time": "17:20", "_disclaimer": "retorno-area-militar" }, 87 | { "time": "18:10", "_disclaimer": "retorno-area-militar" }, 88 | { "time": "19:05" }, 89 | { "time": "20:30" }, 90 | { "time": "21:10" }, 91 | { "time": "21:50" }, 92 | { "time": "22:10" }, 93 | { "time": "22:50", "_disclaimer": "nao-atende-adm-3" }, 94 | 95 | 96 | { 97 | "time": "1970-01-01T07:10" 98 | }, 99 | { 100 | "time": "1970-01-01T07:50", 101 | "isDuplicate": true 102 | } 103 | ] 104 | }, 105 | { 106 | "id": "sch-line-3-bhtec", 107 | "daysOfWeek": [1,2,3,4,5], 108 | "times": [ 109 | { "time": "07:40" }, 110 | { "time": "17:20" } 111 | ] 112 | }, 113 | { 114 | "id": "sch-line-4", 115 | "daysOfWeek": [1,2,3,4,5], 116 | "times": [ 117 | { "time": "06:00" }, 118 | { "time": "06:40", "isDuplicate": true }, 119 | { "time": "07:20", "isDuplicate": true }, 120 | { "time": "08:05" }, 121 | { "time": "08:50" }, 122 | { "time": "11:00", "isDuplicate": true, "_disclaimer": "retorno-area-militar" }, 123 | { "time": "11:40", "isDuplicate": true, "_disclaimer": "retorno-area-militar" }, 124 | { "time": "12:20", "isDuplicate": true, "_disclaimer": "retorno-area-militar" }, 125 | { "time": "13:05", "isDuplicate": true, "_disclaimer": "retorno-area-militar" }, 126 | { "time": "13:55", "isDuplicate": true, "_disclaimer": "retorno-area-militar" }, 127 | { "time": "14:45" }, 128 | { "time": "15:40" }, 129 | { "time": "16:20" }, 130 | { "time": "17:00", "isDuplicate": true, "_disclaimer": "retorno-area-militar" }, 131 | { "time": "17:40", "isDuplicate": true, "_disclaimer": "retorno-area-militar" }, 132 | { "time": "18:35", "_disclaimer": "retorno-area-militar" }, 133 | { "time": "20:15" } 134 | ] 135 | }, 136 | { 137 | "id": "sch-line-4-mc", 138 | "daysOfWeek": [1,2,3,4,5], 139 | "times": [ 140 | { "time": "06:40" }, 141 | { "time": "07:20", "isDuplicate": true }, 142 | { "time": "11:00", "_disclaimer": "retorno-area-militar" }, 143 | { "time": "11:40", "_disclaimer": "retorno-area-militar" }, 144 | { "time": "12:20", "isDuplicate": true, "_disclaimer": "retorno-area-militar" }, 145 | { "time": "13:05", "_disclaimer": "retorno-area-militar" }, 146 | { "time": "13:55", "_disclaimer": "retorno-area-militar" }, 147 | { "time": "17:00", "isDuplicate": true, "_disclaimer": "retorno-area-militar" }, 148 | { "time": "17:40", "_disclaimer": "retorno-area-militar" } 149 | ] 150 | }, 151 | { 152 | "id": "sch-line-4-mc-bhtec", 153 | "daysOfWeek": [1,2,3,4,5], 154 | "times": [ 155 | { "time": "07:20" }, 156 | { "time": "12:20", "_disclaimer": "retorno-area-militar" }, 157 | { "time": "17:00", "_disclaimer": "retorno-area-militar" } 158 | ] 159 | }, 160 | { 161 | "id": "sch-line-5", 162 | "daysOfWeek": [6], 163 | "times": [ 164 | { "time": "11:00" }, 165 | { "time": "11:40" }, 166 | { "time": "12:20" }, 167 | { "time": "13:00" }, 168 | { "time": "13:40" } 169 | ] 170 | } 171 | ] -------------------------------------------------------------------------------- /src/database/routes.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "route-line-1", 4 | "route": [ 5 | { 6 | "_stop": "stop-escola-de-musica", 7 | "delay": null 8 | }, 9 | { 10 | "_stop": "stop-belas-artes", 11 | "delay": null 12 | }, 13 | { 14 | "_stop": "stop-cad-2", 15 | "delay": null 16 | }, 17 | { 18 | "_stop": "stop-letras", 19 | "delay": null 20 | }, 21 | { 22 | "_stop": "stop-ciencia-da-informacao", 23 | "delay": null 24 | }, 25 | { 26 | "_stop": "stop-fafich", 27 | "delay": null 28 | }, 29 | { 30 | "_stop": "stop-face", 31 | "delay": null 32 | }, 33 | { 34 | "_stop": "stop-reitoria", 35 | "delay": null 36 | }, 37 | { 38 | "_stop": "stop-praca-de-servicos", 39 | "delay": null 40 | }, 41 | { 42 | "_stop": "stop-biblioteca-universitaria", 43 | "delay": null 44 | }, 45 | { 46 | "_stop": "stop-reitoria", 47 | "delay": null 48 | }, 49 | { 50 | "_stop": "stop-unidade-administrativa-3", 51 | "delay": null 52 | }, 53 | { 54 | "_stop": "stop-unidade-administrativa-2", 55 | "delay": null 56 | }, 57 | { 58 | "_stop": "stop-av-abrahao-caram", 59 | "delay": null 60 | }, 61 | { 62 | "_stop": "stop-centro-esportivo", 63 | "delay": null 64 | }, 65 | { 66 | "_stop": "stop-veterinaria", 67 | "delay": null 68 | }, 69 | { 70 | "_stop": "stop-av-presidente-carlos-luz", 71 | "delay": null 72 | }, 73 | { 74 | "_stop": "stop-eeffto", 75 | "delay": null 76 | }, 77 | { 78 | "_stop": "stop-odontologia", 79 | "delay": null 80 | }, 81 | { 82 | "_stop": "stop-estacao-ecologica", 83 | "delay": null 84 | }, 85 | { 86 | "_stop": "stop-veterinaria", 87 | "delay": null 88 | }, 89 | { 90 | "_stop": "stop-farmacia", 91 | "delay": null 92 | }, 93 | { 94 | "_stop": "stop-restaurante-setorial-2", 95 | "delay": null 96 | }, 97 | { 98 | "_stop": "stop-fisica", 99 | "delay": null 100 | }, 101 | { 102 | "_stop": "stop-engenharia-eletrica", 103 | "delay": null 104 | }, 105 | { 106 | "_stop": "stop-cnen-cdtn", 107 | "delay": null 108 | }, 109 | { 110 | "_stop": "stop-colegio-tecnico", 111 | "delay": null 112 | }, 113 | { 114 | "_stop": "stop-quimica", 115 | "delay": null 116 | }, 117 | { 118 | "_stop": "stop-icex", 119 | "delay": null 120 | }, 121 | { 122 | "_stop": "stop-engenharia", 123 | "delay": null 124 | }, 125 | { 126 | "_stop": "stop-fafich", 127 | "delay": null 128 | }, 129 | { 130 | "_stop": "stop-ciencia-da-informacao", 131 | "delay": null 132 | }, 133 | { 134 | "_stop": "stop-letras", 135 | "delay": null 136 | }, 137 | { 138 | "_stop": "stop-cad-2", 139 | "delay": null 140 | }, 141 | { 142 | "_stop": "stop-belas-artes", 143 | "delay": null 144 | }, 145 | { 146 | "_stop": "stop-escola-de-musica", 147 | "delay": null 148 | } 149 | ] 150 | }, 151 | { 152 | "id": "route-line-1-acd", 153 | "route": [ 154 | { 155 | "_stop": "stop-escola-de-musica", 156 | "delay": null 157 | }, 158 | { 159 | "_stop": "stop-belas-artes", 160 | "delay": null 161 | }, 162 | { 163 | "_stop": "stop-cad-2", 164 | "delay": null 165 | }, 166 | { 167 | "_stop": "stop-letras", 168 | "delay": null 169 | }, 170 | { 171 | "_stop": "stop-ciencia-da-informacao", 172 | "delay": null 173 | }, 174 | { 175 | "_stop": "stop-fafich", 176 | "delay": null 177 | }, 178 | { 179 | "_stop": "stop-face", 180 | "delay": null 181 | }, 182 | { 183 | "_stop": "stop-reitoria", 184 | "delay": null 185 | }, 186 | { 187 | "_stop": "stop-praca-de-servicos", 188 | "delay": null 189 | }, 190 | { 191 | "_stop": "stop-biblioteca-universitaria", 192 | "delay": null 193 | }, 194 | { 195 | "_stop": "stop-reitoria", 196 | "delay": null 197 | }, 198 | { 199 | "_stop": "stop-unidade-administrativa-3", 200 | "delay": null 201 | }, 202 | { 203 | "_stop": "stop-unidade-administrativa-2", 204 | "delay": null 205 | }, 206 | { 207 | "_stop": "stop-av-abrahao-caram", 208 | "delay": null 209 | }, 210 | { 211 | "_stop": "stop-av-das-palmeiras", 212 | "delay": null 213 | }, 214 | { 215 | "_stop": "stop-av-cel-jose-dias-bicalho", 216 | "delay": null 217 | }, 218 | { 219 | "_stop": "stop-av-presidente-antonio-carlos", 220 | "delay": null 221 | }, 222 | { 223 | "_stop": "stop-av-abrahao-caram", 224 | "delay": null 225 | }, 226 | { 227 | "_stop": "stop-centro-esportivo", 228 | "delay": null 229 | }, 230 | { 231 | "_stop": "stop-veterinaria", 232 | "delay": null 233 | }, 234 | { 235 | "_stop": "stop-av-presidente-carlos-luz", 236 | "delay": null 237 | }, 238 | { 239 | "_stop": "stop-eeffto", 240 | "delay": null 241 | }, 242 | { 243 | "_stop": "stop-odontologia", 244 | "delay": null 245 | }, 246 | { 247 | "_stop": "stop-estacao-ecologica", 248 | "delay": null 249 | }, 250 | { 251 | "_stop": "stop-veterinaria", 252 | "delay": null 253 | }, 254 | { 255 | "_stop": "stop-farmacia", 256 | "delay": null 257 | }, 258 | { 259 | "_stop": "stop-restaurante-setorial-2", 260 | "delay": null 261 | }, 262 | { 263 | "_stop": "stop-fisica", 264 | "delay": null 265 | }, 266 | { 267 | "_stop": "stop-engenharia-eletrica", 268 | "delay": null 269 | }, 270 | { 271 | "_stop": "stop-cnen-cdtn", 272 | "delay": null 273 | }, 274 | { 275 | "_stop": "stop-colegio-tecnico", 276 | "delay": null 277 | }, 278 | { 279 | "_stop": "stop-quimica", 280 | "delay": null 281 | }, 282 | { 283 | "_stop": "stop-icex", 284 | "delay": null 285 | }, 286 | { 287 | "_stop": "stop-engenharia", 288 | "delay": null 289 | }, 290 | { 291 | "_stop": "stop-fafich", 292 | "delay": null 293 | }, 294 | { 295 | "_stop": "stop-ciencia-da-informacao", 296 | "delay": null 297 | }, 298 | { 299 | "_stop": "stop-letras", 300 | "delay": null 301 | }, 302 | { 303 | "_stop": "stop-cad-2", 304 | "delay": null 305 | }, 306 | { 307 | "_stop": "stop-belas-artes", 308 | "delay": null 309 | }, 310 | { 311 | "_stop": "stop-escola-de-musica", 312 | "delay": null 313 | } 314 | ] 315 | }, 316 | { 317 | "id": "route-line-2", 318 | "route": [ 319 | { 320 | "_stop": "stop-escola-de-musica", 321 | "delay": null 322 | }, 323 | { 324 | "_stop": "stop-belas-artes", 325 | "delay": null 326 | }, 327 | { 328 | "_stop": "stop-cad-2", 329 | "delay": null 330 | }, 331 | { 332 | "_stop": "stop-letras", 333 | "delay": null 334 | }, 335 | { 336 | "_stop": "stop-ciencia-da-informacao", 337 | "delay": null 338 | }, 339 | { 340 | "_stop": "stop-fafich", 341 | "delay": null 342 | }, 343 | { 344 | "_stop": "stop-face", 345 | "delay": null 346 | }, 347 | { 348 | "_stop": "stop-reitoria", 349 | "delay": null 350 | }, 351 | { 352 | "_stop": "stop-praca-de-servicos", 353 | "delay": null 354 | }, 355 | { 356 | "_stop": "stop-biblioteca-universitaria", 357 | "delay": null 358 | }, 359 | { 360 | "_stop": "stop-reitoria", 361 | "delay": null 362 | }, 363 | { 364 | "_stop": "stop-unidade-administrativa-3", 365 | "delay": null 366 | }, 367 | { 368 | "_stop": "stop-unidade-administrativa-2", 369 | "delay": null 370 | }, 371 | { 372 | "_stop": "stop-av-abrahao-caram", 373 | "delay": null 374 | }, 375 | { 376 | "_stop": "stop-centro-esportivo", 377 | "delay": null 378 | }, 379 | { 380 | "_stop": "stop-veterinaria", 381 | "delay": null 382 | }, 383 | { 384 | "_stop": "stop-av-presidente-carlos-luz", 385 | "delay": null 386 | }, 387 | { 388 | "_stop": "stop-eeffto", 389 | "delay": null 390 | }, 391 | { 392 | "_stop": "stop-odontologia", 393 | "delay": null 394 | }, 395 | { 396 | "_stop": "stop-estacao-ecologica", 397 | "delay": null 398 | }, 399 | { 400 | "_stop": "stop-veterinaria", 401 | "delay": null 402 | }, 403 | { 404 | "_stop": "stop-farmacia", 405 | "delay": null 406 | }, 407 | { 408 | "_stop": "stop-restaurante-setorial-2", 409 | "delay": null 410 | }, 411 | { 412 | "_stop": "stop-fisica", 413 | "delay": null 414 | }, 415 | { 416 | "_stop": "stop-engenharia-eletrica", 417 | "delay": null 418 | }, 419 | { 420 | "_stop": "stop-cnen-cdtn", 421 | "delay": null 422 | }, 423 | { 424 | "_stop": "stop-colegio-tecnico", 425 | "delay": null 426 | }, 427 | { 428 | "_stop": "stop-quimica", 429 | "delay": null 430 | }, 431 | { 432 | "_stop": "stop-icex", 433 | "delay": null 434 | }, 435 | { 436 | "_stop": "stop-engenharia", 437 | "delay": null 438 | }, 439 | { 440 | "_stop": "stop-geociencias", 441 | "delay": null 442 | }, 443 | { 444 | "_stop": "stop-restaurante-setorial-1", 445 | "delay": null 446 | }, 447 | { 448 | "_stop": "stop-fae", 449 | "delay": null 450 | }, 451 | { 452 | "_stop": "stop-centro-pedagogico", 453 | "delay": null 454 | }, 455 | { 456 | "_stop": "stop-creche", 457 | "delay": null 458 | }, 459 | { 460 | "_stop": "stop-belas-artes", 461 | "delay": null 462 | }, 463 | { 464 | "_stop": "stop-escola-de-musica", 465 | "delay": null 466 | } 467 | ] 468 | }, 469 | { 470 | "id": "route-line-2-agcav", 471 | "route": [ 472 | { 473 | "_stop": "stop-escola-de-musica", 474 | "delay": null 475 | }, 476 | { 477 | "_stop": "stop-belas-artes", 478 | "delay": null 479 | }, 480 | { 481 | "_stop": "stop-cad-2", 482 | "delay": null 483 | }, 484 | { 485 | "_stop": "stop-letras", 486 | "delay": null 487 | }, 488 | { 489 | "_stop": "stop-ciencia-da-informacao", 490 | "delay": null 491 | }, 492 | { 493 | "_stop": "stop-fafich", 494 | "delay": null 495 | }, 496 | { 497 | "_stop": "stop-face", 498 | "delay": null 499 | }, 500 | { 501 | "_stop": "stop-reitoria", 502 | "delay": null 503 | }, 504 | { 505 | "_stop": "stop-praca-de-servicos", 506 | "delay": null 507 | }, 508 | { 509 | "_stop": "stop-biblioteca-universitaria", 510 | "delay": null 511 | }, 512 | { 513 | "_stop": "stop-reitoria", 514 | "delay": null 515 | }, 516 | { 517 | "_stop": "stop-unidade-administrativa-3", 518 | "delay": null 519 | }, 520 | { 521 | "_stop": "stop-unidade-administrativa-2", 522 | "delay": null 523 | }, 524 | { 525 | "_stop": "stop-av-abrahao-caram", 526 | "delay": null 527 | }, 528 | { 529 | "_stop": "stop-av-das-palmeiras", 530 | "delay": null 531 | }, 532 | { 533 | "_stop": "stop-alameda-dos-jacarandas", 534 | "delay": null 535 | }, 536 | { 537 | "_stop": "stop-av-chaffir-ferreira", 538 | "delay": null 539 | }, 540 | { 541 | "_stop": "stop-av-otacilio-negrao-de-lima", 542 | "delay": null 543 | }, 544 | { 545 | "_stop": "stop-av-cel-oscar-pascoal", 546 | "delay": null 547 | }, 548 | { 549 | "_stop": "stop-centro-esportivo", 550 | "delay": null 551 | }, 552 | { 553 | "_stop": "stop-veterinaria", 554 | "delay": null 555 | }, 556 | { 557 | "_stop": "stop-av-presidente-antonio-carlos", 558 | "delay": null 559 | }, 560 | { 561 | "_stop": "stop-eeffto", 562 | "delay": null 563 | }, 564 | { 565 | "_stop": "stop-odontologia", 566 | "delay": null 567 | }, 568 | { 569 | "_stop": "stop-estacao-ecologica", 570 | "delay": null 571 | }, 572 | { 573 | "_stop": "stop-veterinaria", 574 | "delay": null 575 | }, 576 | { 577 | "_stop": "stop-farmacia", 578 | "delay": null 579 | }, 580 | { 581 | "_stop": "stop-restaurante-setorial-2", 582 | "delay": null 583 | }, 584 | { 585 | "_stop": "stop-fisica", 586 | "delay": null 587 | }, 588 | { 589 | "_stop": "stop-engenharia-eletrica", 590 | "delay": null 591 | }, 592 | { 593 | "_stop": "stop-cnen-cdtn", 594 | "delay": null 595 | }, 596 | { 597 | "_stop": "stop-colegio-tecnico", 598 | "delay": null 599 | }, 600 | { 601 | "_stop": "stop-quimica", 602 | "delay": null 603 | }, 604 | { 605 | "_stop": "stop-icex", 606 | "delay": null 607 | }, 608 | { 609 | "_stop": "stop-engenharia", 610 | "delay": null 611 | }, 612 | { 613 | "_stop": "stop-geociencias", 614 | "delay": null 615 | }, 616 | { 617 | "_stop": "stop-restaurante-setorial-1", 618 | "delay": null 619 | }, 620 | { 621 | "_stop": "stop-fae", 622 | "delay": null 623 | }, 624 | { 625 | "_stop": "stop-centro-pedagogico", 626 | "delay": null 627 | }, 628 | { 629 | "_stop": "stop-creche", 630 | "delay": null 631 | }, 632 | { 633 | "_stop": "stop-belas-artes", 634 | "delay": null 635 | }, 636 | { 637 | "_stop": "stop-escola-de-musica", 638 | "delay": null 639 | } 640 | ] 641 | }, 642 | { 643 | "id": "route-line-2-acd", 644 | "route": [ 645 | { 646 | "_stop": "stop-escola-de-musica", 647 | "delay": null 648 | }, 649 | { 650 | "_stop": "stop-belas-artes", 651 | "delay": null 652 | }, 653 | { 654 | "_stop": "stop-cad-2", 655 | "delay": null 656 | }, 657 | { 658 | "_stop": "stop-letras", 659 | "delay": null 660 | }, 661 | { 662 | "_stop": "stop-ciencia-da-informacao", 663 | "delay": null 664 | }, 665 | { 666 | "_stop": "stop-fafich", 667 | "delay": null 668 | }, 669 | { 670 | "_stop": "stop-face", 671 | "delay": null 672 | }, 673 | { 674 | "_stop": "stop-reitoria", 675 | "delay": null 676 | }, 677 | { 678 | "_stop": "stop-praca-de-servicos", 679 | "delay": null 680 | }, 681 | { 682 | "_stop": "stop-biblioteca-universitaria", 683 | "delay": null 684 | }, 685 | { 686 | "_stop": "stop-reitoria", 687 | "delay": null 688 | }, 689 | { 690 | "_stop": "stop-unidade-administrativa-3", 691 | "delay": null 692 | }, 693 | { 694 | "_stop": "stop-unidade-administrativa-2", 695 | "delay": null 696 | }, 697 | { 698 | "_stop": "stop-av-abrahao-caram", 699 | "delay": null 700 | }, 701 | { 702 | "_stop": "stop-av-das-palmeiras", 703 | "delay": null 704 | }, 705 | { 706 | "_stop": "stop-av-cel-jose-dias-bicalho", 707 | "delay": null 708 | }, 709 | { 710 | "_stop": "stop-av-presidente-antonio-carlos", 711 | "delay": null 712 | }, 713 | { 714 | "_stop": "stop-av-abrahao-caram", 715 | "delay": null 716 | }, 717 | { 718 | "_stop": "stop-centro-esportivo", 719 | "delay": null 720 | }, 721 | { 722 | "_stop": "stop-veterinaria", 723 | "delay": null 724 | }, 725 | { 726 | "_stop": "stop-av-presidente-carlos-luz", 727 | "delay": null 728 | }, 729 | { 730 | "_stop": "stop-eeffto", 731 | "delay": null 732 | }, 733 | { 734 | "_stop": "stop-odontologia", 735 | "delay": null 736 | }, 737 | { 738 | "_stop": "stop-estacao-ecologica", 739 | "delay": null 740 | }, 741 | { 742 | "_stop": "stop-veterinaria", 743 | "delay": null 744 | }, 745 | { 746 | "_stop": "stop-farmacia", 747 | "delay": null 748 | }, 749 | { 750 | "_stop": "stop-restaurante-setorial-2", 751 | "delay": null 752 | }, 753 | { 754 | "_stop": "stop-fisica", 755 | "delay": null 756 | }, 757 | { 758 | "_stop": "stop-engenharia-eletrica", 759 | "delay": null 760 | }, 761 | { 762 | "_stop": "stop-cnen-cdtn", 763 | "delay": null 764 | }, 765 | { 766 | "_stop": "stop-colegio-tecnico", 767 | "delay": null 768 | }, 769 | { 770 | "_stop": "stop-quimica", 771 | "delay": null 772 | }, 773 | { 774 | "_stop": "stop-icex", 775 | "delay": null 776 | }, 777 | { 778 | "_stop": "stop-engenharia", 779 | "delay": null 780 | }, 781 | { 782 | "_stop": "stop-geociencias", 783 | "delay": null 784 | }, 785 | { 786 | "_stop": "stop-restaurante-setorial-1", 787 | "delay": null 788 | }, 789 | { 790 | "_stop": "stop-fae", 791 | "delay": null 792 | }, 793 | { 794 | "_stop": "stop-centro-pedagogico", 795 | "delay": null 796 | }, 797 | { 798 | "_stop": "stop-creche", 799 | "delay": null 800 | }, 801 | { 802 | "_stop": "stop-belas-artes", 803 | "delay": null 804 | }, 805 | { 806 | "_stop": "stop-escola-de-musica", 807 | "delay": null 808 | } 809 | ] 810 | }, 811 | { 812 | "id": "route-line-3", 813 | "route": [ 814 | { 815 | "_stop": "stop-escola-de-musica", 816 | "delay": null 817 | }, 818 | { 819 | "_stop": "stop-belas-artes", 820 | "delay": null 821 | }, 822 | { 823 | "_stop": "stop-creche", 824 | "delay": null 825 | }, 826 | { 827 | "_stop": "stop-centro-pedagogico", 828 | "delay": null 829 | }, 830 | { 831 | "_stop": "stop-fae", 832 | "delay": null 833 | }, 834 | { 835 | "_stop": "stop-restaurante-setorial-1", 836 | "delay": null 837 | }, 838 | { 839 | "_stop": "stop-geociencias", 840 | "delay": null 841 | }, 842 | { 843 | "_stop": "stop-engenharia", 844 | "delay": null 845 | }, 846 | { 847 | "_stop": "stop-praca-de-servicos", 848 | "delay": null 849 | }, 850 | { 851 | "_stop": "stop-biblioteca-universitaria", 852 | "delay": null 853 | }, 854 | { 855 | "_stop": "stop-reitoria", 856 | "delay": null 857 | }, 858 | { 859 | "_stop": "stop-cad-1", 860 | "delay": null 861 | }, 862 | { 863 | "_stop": "stop-icb", 864 | "delay": null 865 | }, 866 | { 867 | "_stop": "stop-bioterio-central", 868 | "delay": null 869 | }, 870 | { 871 | "_stop": "stop-farmacia", 872 | "delay": null 873 | }, 874 | { 875 | "_stop": "stop-veterinaria", 876 | "delay": null 877 | }, 878 | { 879 | "_stop": "stop-odontologia", 880 | "delay": null 881 | }, 882 | { 883 | "_stop": "stop-estacao-ecologica", 884 | "delay": null 885 | }, 886 | { 887 | "_stop": "stop-eeffto", 888 | "delay": null 889 | }, 890 | { 891 | "_stop": "stop-av-presidente-antonio-carlos", 892 | "delay": null 893 | }, 894 | { 895 | "_stop": "stop-veterinaria", 896 | "delay": null 897 | }, 898 | { 899 | "_stop": "stop-av-abrahao-caram", 900 | "delay": null 901 | }, 902 | { 903 | "_stop": "stop-unidade-administrativa-2", 904 | "delay": null 905 | }, 906 | { 907 | "_stop": "stop-unidade-administrativa-3", 908 | "delay": null 909 | }, 910 | { 911 | "_stop": "stop-reitoria", 912 | "delay": null 913 | }, 914 | { 915 | "_stop": "stop-rua-prof-eduardo-m-guimaraes", 916 | "delay": null 917 | }, 918 | { 919 | "_stop": "stop-fafich", 920 | "delay": null 921 | }, 922 | { 923 | "_stop": "stop-ciencia-da-informacao", 924 | "delay": null 925 | }, 926 | { 927 | "_stop": "stop-letras", 928 | "delay": null 929 | }, 930 | { 931 | "_stop": "stop-belas-artes", 932 | "delay": null 933 | }, 934 | { 935 | "_stop": "stop-escola-de-musica", 936 | "delay": null 937 | } 938 | ] 939 | }, 940 | { 941 | "id": "route-line-3-bhtec", 942 | "route": [ 943 | { 944 | "_stop": "stop-escola-de-musica", 945 | "delay": null 946 | }, 947 | { 948 | "_stop": "stop-belas-artes", 949 | "delay": null 950 | }, 951 | { 952 | "_stop": "stop-creche", 953 | "delay": null 954 | }, 955 | { 956 | "_stop": "stop-centro-pedagogico", 957 | "delay": null 958 | }, 959 | { 960 | "_stop": "stop-fae", 961 | "delay": null 962 | }, 963 | { 964 | "_stop": "stop-restaurante-setorial-1", 965 | "delay": null 966 | }, 967 | { 968 | "_stop": "stop-geociencias", 969 | "delay": null 970 | }, 971 | { 972 | "_stop": "stop-engenharia", 973 | "delay": null 974 | }, 975 | { 976 | "_stop": "stop-praca-de-servicos", 977 | "delay": null 978 | }, 979 | { 980 | "_stop": "stop-biblioteca-universitaria", 981 | "delay": null 982 | }, 983 | { 984 | "_stop": "stop-reitoria", 985 | "delay": null 986 | }, 987 | { 988 | "_stop": "stop-cad-1", 989 | "delay": null 990 | }, 991 | { 992 | "_stop": "stop-icb", 993 | "delay": null 994 | }, 995 | { 996 | "_stop": "stop-bioterio-central", 997 | "delay": null 998 | }, 999 | { 1000 | "_stop": "stop-farmacia", 1001 | "delay": null 1002 | }, 1003 | { 1004 | "_stop": "stop-veterinaria", 1005 | "delay": null 1006 | }, 1007 | { 1008 | "_stop": "stop-odontologia", 1009 | "delay": null 1010 | }, 1011 | { 1012 | "_stop": "stop-estacao-ecologica", 1013 | "delay": null 1014 | }, 1015 | { 1016 | "_stop": "stop-eeffto", 1017 | "delay": null 1018 | }, 1019 | { 1020 | "_stop": "stop-usiminas", 1021 | "delay": null 1022 | }, 1023 | { 1024 | "_stop": "stop-rua-prof-jose-vieira-mendonca", 1025 | "delay": null 1026 | }, 1027 | { 1028 | "_stop": "stop-bhtec", 1029 | "delay": null 1030 | }, 1031 | { 1032 | "_stop": "stop-av-presidente-antonio-carlos", 1033 | "delay": null 1034 | }, 1035 | { 1036 | "_stop": "stop-veterinaria", 1037 | "delay": null 1038 | }, 1039 | { 1040 | "_stop": "stop-av-abrahao-caram", 1041 | "delay": null 1042 | }, 1043 | { 1044 | "_stop": "stop-unidade-administrativa-2", 1045 | "delay": null 1046 | }, 1047 | { 1048 | "_stop": "stop-unidade-administrativa-3", 1049 | "delay": null 1050 | }, 1051 | { 1052 | "_stop": "stop-reitoria", 1053 | "delay": null 1054 | }, 1055 | { 1056 | "_stop": "stop-rua-prof-eduardo-m-guimaraes", 1057 | "delay": null 1058 | }, 1059 | { 1060 | "_stop": "stop-fafich", 1061 | "delay": null 1062 | }, 1063 | { 1064 | "_stop": "stop-ciencia-da-informacao", 1065 | "delay": null 1066 | }, 1067 | { 1068 | "_stop": "stop-letras", 1069 | "delay": null 1070 | }, 1071 | { 1072 | "_stop": "stop-belas-artes", 1073 | "delay": null 1074 | }, 1075 | { 1076 | "_stop": "stop-escola-de-musica", 1077 | "delay": null 1078 | } 1079 | ] 1080 | }, 1081 | { 1082 | "id": "route-line-4", 1083 | "route": [ 1084 | { 1085 | "_stop": "stop-escola-de-musica", 1086 | "delay": null 1087 | }, 1088 | { 1089 | "_stop": "stop-belas-artes", 1090 | "delay": null 1091 | }, 1092 | { 1093 | "_stop": "stop-creche", 1094 | "delay": null 1095 | }, 1096 | { 1097 | "_stop": "stop-centro-pedagogico", 1098 | "delay": null 1099 | }, 1100 | { 1101 | "_stop": "stop-fae", 1102 | "delay": null 1103 | }, 1104 | { 1105 | "_stop": "stop-restaurante-setorial-1", 1106 | "delay": null 1107 | }, 1108 | { 1109 | "_stop": "stop-geociencias", 1110 | "delay": null 1111 | }, 1112 | { 1113 | "_stop": "stop-engenharia", 1114 | "delay": null 1115 | }, 1116 | { 1117 | "_stop": "stop-praca-de-servicos", 1118 | "delay": null 1119 | }, 1120 | { 1121 | "_stop": "stop-biblioteca-universitaria", 1122 | "delay": null 1123 | }, 1124 | { 1125 | "_stop": "stop-reitoria", 1126 | "delay": null 1127 | }, 1128 | { 1129 | "_stop": "stop-cad-1", 1130 | "delay": null 1131 | }, 1132 | { 1133 | "_stop": "stop-icb", 1134 | "delay": null 1135 | }, 1136 | { 1137 | "_stop": "stop-bioterio-central", 1138 | "delay": null 1139 | }, 1140 | { 1141 | "_stop": "stop-farmacia", 1142 | "delay": null 1143 | }, 1144 | { 1145 | "_stop": "stop-veterinaria", 1146 | "delay": null 1147 | }, 1148 | { 1149 | "_stop": "stop-estacao-ecologica", 1150 | "delay": null 1151 | }, 1152 | { 1153 | "_stop": "stop-odontologia", 1154 | "delay": null 1155 | }, 1156 | { 1157 | "_stop": "stop-eeffto", 1158 | "delay": null 1159 | }, 1160 | { 1161 | "_stop": "stop-eeffto", 1162 | "delay": null 1163 | }, 1164 | { 1165 | "_stop": "stop-odontologia", 1166 | "delay": null 1167 | }, 1168 | { 1169 | "_stop": "stop-estacao-ecologica", 1170 | "delay": null 1171 | }, 1172 | { 1173 | "_stop": "stop-veterinaria", 1174 | "delay": null 1175 | }, 1176 | { 1177 | "_stop": "stop-farmacia", 1178 | "delay": null 1179 | }, 1180 | { 1181 | "_stop": "stop-restaurante-setorial-2", 1182 | "delay": null 1183 | }, 1184 | { 1185 | "_stop": "stop-icex", 1186 | "delay": null 1187 | }, 1188 | { 1189 | "_stop": "stop-engenharia", 1190 | "delay": null 1191 | }, 1192 | { 1193 | "_stop": "stop-geociencias", 1194 | "delay": null 1195 | }, 1196 | { 1197 | "_stop": "stop-restaurante-setorial-1", 1198 | "delay": null 1199 | }, 1200 | { 1201 | "_stop": "stop-fae", 1202 | "delay": null 1203 | }, 1204 | { 1205 | "_stop": "stop-centro-pedagogico", 1206 | "delay": null 1207 | }, 1208 | { 1209 | "_stop": "stop-creche", 1210 | "delay": null 1211 | }, 1212 | { 1213 | "_stop": "stop-belas-artes", 1214 | "delay": null 1215 | }, 1216 | { 1217 | "_stop": "stop-escola-de-musica", 1218 | "delay": null 1219 | } 1220 | ] 1221 | }, 1222 | { 1223 | "id": "route-line-4-mc", 1224 | "route": [ 1225 | { 1226 | "_stop": "stop-escola-de-musica", 1227 | "delay": null 1228 | }, 1229 | { 1230 | "_stop": "stop-belas-artes", 1231 | "delay": null 1232 | }, 1233 | { 1234 | "_stop": "stop-creche", 1235 | "delay": null 1236 | }, 1237 | { 1238 | "_stop": "stop-centro-pedagogico", 1239 | "delay": null 1240 | }, 1241 | { 1242 | "_stop": "stop-fae", 1243 | "delay": null 1244 | }, 1245 | { 1246 | "_stop": "stop-restaurante-setorial-1", 1247 | "delay": null 1248 | }, 1249 | { 1250 | "_stop": "stop-geociencias", 1251 | "delay": null 1252 | }, 1253 | { 1254 | "_stop": "stop-engenharia", 1255 | "delay": null 1256 | }, 1257 | { 1258 | "_stop": "stop-praca-de-servicos", 1259 | "delay": null 1260 | }, 1261 | { 1262 | "_stop": "stop-biblioteca-universitaria", 1263 | "delay": null 1264 | }, 1265 | { 1266 | "_stop": "stop-reitoria", 1267 | "delay": null 1268 | }, 1269 | { 1270 | "_stop": "stop-cad-1", 1271 | "delay": null 1272 | }, 1273 | { 1274 | "_stop": "stop-icb", 1275 | "delay": null 1276 | }, 1277 | { 1278 | "_stop": "stop-bioterio-central", 1279 | "delay": null 1280 | }, 1281 | { 1282 | "_stop": "stop-farmacia", 1283 | "delay": null 1284 | }, 1285 | { 1286 | "_stop": "stop-veterinaria", 1287 | "delay": null 1288 | }, 1289 | { 1290 | "_stop": "stop-estacao-ecologica", 1291 | "delay": null 1292 | }, 1293 | { 1294 | "_stop": "stop-odontologia", 1295 | "delay": null 1296 | }, 1297 | { 1298 | "_stop": "stop-eeffto", 1299 | "delay": null 1300 | }, 1301 | { 1302 | "_stop": "stop-av-presidente-antonio-carlos", 1303 | "delay": null 1304 | }, 1305 | { 1306 | "_stop": "stop-retorno-na-av-alfredo-camarate", 1307 | "delay": null 1308 | }, 1309 | { 1310 | "_stop": "stop-av-presidente-antonio-carlos", 1311 | "delay": null 1312 | }, 1313 | { 1314 | "_stop": "stop-eeffto", 1315 | "delay": null 1316 | }, 1317 | { 1318 | "_stop": "stop-odontologia", 1319 | "delay": null 1320 | }, 1321 | { 1322 | "_stop": "stop-estacao-ecologica", 1323 | "delay": null 1324 | }, 1325 | { 1326 | "_stop": "stop-veterinaria", 1327 | "delay": null 1328 | }, 1329 | { 1330 | "_stop": "stop-farmacia", 1331 | "delay": null 1332 | }, 1333 | { 1334 | "_stop": "stop-restaurante-setorial-2", 1335 | "delay": null 1336 | }, 1337 | { 1338 | "_stop": "stop-icex", 1339 | "delay": null 1340 | }, 1341 | { 1342 | "_stop": "stop-engenharia", 1343 | "delay": null 1344 | }, 1345 | { 1346 | "_stop": "stop-geociencias", 1347 | "delay": null 1348 | }, 1349 | { 1350 | "_stop": "stop-restaurante-setorial-1", 1351 | "delay": null 1352 | }, 1353 | { 1354 | "_stop": "stop-fae", 1355 | "delay": null 1356 | }, 1357 | { 1358 | "_stop": "stop-centro-pedagogico", 1359 | "delay": null 1360 | }, 1361 | { 1362 | "_stop": "stop-creche", 1363 | "delay": null 1364 | }, 1365 | { 1366 | "_stop": "stop-belas-artes", 1367 | "delay": null 1368 | }, 1369 | { 1370 | "_stop": "stop-escola-de-musica", 1371 | "delay": null 1372 | } 1373 | ] 1374 | }, 1375 | { 1376 | "id": "route-line-4-mc-bhtec", 1377 | "route": [ 1378 | { 1379 | "_stop": "stop-escola-de-musica", 1380 | "delay": null 1381 | }, 1382 | { 1383 | "_stop": "stop-belas-artes", 1384 | "delay": null 1385 | }, 1386 | { 1387 | "_stop": "stop-creche", 1388 | "delay": null 1389 | }, 1390 | { 1391 | "_stop": "stop-centro-pedagogico", 1392 | "delay": null 1393 | }, 1394 | { 1395 | "_stop": "stop-fae", 1396 | "delay": null 1397 | }, 1398 | { 1399 | "_stop": "stop-restaurante-setorial-1", 1400 | "delay": null 1401 | }, 1402 | { 1403 | "_stop": "stop-geociencias", 1404 | "delay": null 1405 | }, 1406 | { 1407 | "_stop": "stop-engenharia", 1408 | "delay": null 1409 | }, 1410 | { 1411 | "_stop": "stop-praca-de-servicos", 1412 | "delay": null 1413 | }, 1414 | { 1415 | "_stop": "stop-biblioteca-universitaria", 1416 | "delay": null 1417 | }, 1418 | { 1419 | "_stop": "stop-reitoria", 1420 | "delay": null 1421 | }, 1422 | { 1423 | "_stop": "stop-cad-1", 1424 | "delay": null 1425 | }, 1426 | { 1427 | "_stop": "stop-icb", 1428 | "delay": null 1429 | }, 1430 | { 1431 | "_stop": "stop-bioterio-central", 1432 | "delay": null 1433 | }, 1434 | { 1435 | "_stop": "stop-farmacia", 1436 | "delay": null 1437 | }, 1438 | { 1439 | "_stop": "stop-veterinaria", 1440 | "delay": null 1441 | }, 1442 | { 1443 | "_stop": "stop-estacao-ecologica", 1444 | "delay": null 1445 | }, 1446 | { 1447 | "_stop": "stop-odontologia", 1448 | "delay": null 1449 | }, 1450 | { 1451 | "_stop": "stop-eeffto", 1452 | "delay": null 1453 | }, 1454 | { 1455 | "_stop": "stop-av-presidente-antonio-carlos", 1456 | "delay": null 1457 | }, 1458 | { 1459 | "_stop": "stop-retorno-na-av-alfredo-camarate", 1460 | "delay": null 1461 | }, 1462 | { 1463 | "_stop": "stop-av-presidente-antonio-carlos", 1464 | "delay": null 1465 | }, 1466 | { 1467 | "_stop": "stop-rua-prof-jose-vieira-mendonca", 1468 | "delay": null 1469 | }, 1470 | { 1471 | "_stop": "stop-bhtec", 1472 | "delay": null 1473 | }, 1474 | { 1475 | "_stop": "stop-eeffto", 1476 | "delay": null 1477 | }, 1478 | { 1479 | "_stop": "stop-odontologia", 1480 | "delay": null 1481 | }, 1482 | { 1483 | "_stop": "stop-estacao-ecologica", 1484 | "delay": null 1485 | }, 1486 | { 1487 | "_stop": "stop-veterinaria", 1488 | "delay": null 1489 | }, 1490 | { 1491 | "_stop": "stop-farmacia", 1492 | "delay": null 1493 | }, 1494 | { 1495 | "_stop": "stop-restaurante-setorial-2", 1496 | "delay": null 1497 | }, 1498 | { 1499 | "_stop": "stop-icex", 1500 | "delay": null 1501 | }, 1502 | { 1503 | "_stop": "stop-engenharia", 1504 | "delay": null 1505 | }, 1506 | { 1507 | "_stop": "stop-geociencias", 1508 | "delay": null 1509 | }, 1510 | { 1511 | "_stop": "stop-restaurante-setorial-1", 1512 | "delay": null 1513 | }, 1514 | { 1515 | "_stop": "stop-fae", 1516 | "delay": null 1517 | }, 1518 | { 1519 | "_stop": "stop-centro-pedagogico", 1520 | "delay": null 1521 | }, 1522 | { 1523 | "_stop": "stop-creche", 1524 | "delay": null 1525 | }, 1526 | { 1527 | "_stop": "stop-belas-artes", 1528 | "delay": null 1529 | }, 1530 | { 1531 | "_stop": "stop-escola-de-musica", 1532 | "delay": null 1533 | } 1534 | ] 1535 | } 1536 | ] --------------------------------------------------------------------------------