José Almeida
José Almeida
José Almeida
Submetido por:
José Almeida
Lista de Figuras ii
Introdução 1
1 Estado da Arte 3
1.1 Programa BaZe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Plano de Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Tecnologias utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Conclusão 18
Referências 19
i
Lista de figuras
ii
Introdução
A consciencialização ambiental é cada vez mais uma parte importante nos nossos com-
portamentos e costumes; existe uma motivação global para a rápida adoção de práticas
amigas do ambiente, tanto a nı́vel pessoal (comportamentos), como a nı́vel institucional
(medidas/apoios).
Desta forma, muitas instituições estão a informatizar os seus serviços para poderem
monitorizar e perceber que reformas precisam de ser tomadas em cada setor.
O setor dos transportes, onde se foca este projeto, é responsável por 16.2% das emissões
mundiais de gazes de estufa, dos quais quase 12% são emitidos por transportes rodoviários[2].
Estes dados permitem perceber de que forma a mobilidade afeta a sustentabilidade e
descarbonização.
Assim sendo, e tendo em vista a melhoria das condições ambientais, a Câmara Municipal
da Maia criou o programa BaZe[17], no qual está inserido este projeto de estágio.
Entidade Acolhedora
O municı́pio da Maia pertence ao distrito do Porto, Região Norte e sub-região da área
metropolitana do Porto, tendo uma área de 82.99 km² e uma população estimada de
138.349 habitantes (2019)[10]. É um dos concelhos mais industrializados em Portugal,
mas pretende, até 2050, tornar a cidade da Maia energeticamente eficiente, e aproximá-
la de uma ’zero carbon community’ [14], melhorando assim a mobilidade e qualidade de
vida dos seus munı́cipes.
Projeto e Objetivos
Este projeto centra-se na recolha, tratamento e disponibilização de dados da rede de
transportes públicos da Maia para serem visualizados numa plataforma online em tempo
real. Os dados pretendidos eram dados de georreferenciação das paragens e linhas da
rede de transportes e foram obtidos através de pedidos às API’s - Application Program-
ming Interface. O armazenamento dos dados foi feito inicialmente com ficheiros CSV -
Comma Separeted Values e mais tarde com SQLite, separando assim os dados em três
grandes tabelas (paragens,linhas e pontos de referência). A disponibilização foi feita
através da construção de uma API em NodeJS onde o servidor respondia assincrona-
mente a consultas feitas pelo cliente. Desta forma, os dados ficam disponı́veis sem haver
1
Introdução 2
Estado da Arte
Neste ponto é apresentado o programa onde este estágio se encontra inserido, bem como
as tecnologias que nele foram usadas e outras que foram consideradas mas não chegaram
ao projeto final.
3
Capitulo 1 - Estado da Arte 4
últimos anos. No entanto, a sua adoção fica condicionada, muitas das vezes e princi-
palmente em meios pequenos, pela falta de acessibilidade à informação por parte dos
utilizadores.
A recolha e tratamento de dados referentes a transportes públicos permite monitorizar
melhor os meios de mobilidade que um municı́pio oferece, e também agregar e disponi-
bilizar de uma forma acessı́vel a informação da rede de transportes de uma determinada
localidade.
A plataforma escolhida foi a OpenStreetMap por ser OpenSource, pela fácil acessibilidade
aos dados e pela grande comunidade que ajuda na resolução de problemas. Também
existe uma aplicação Web-based - OverpassTurbo que faz consultas à Overpass API e
Capitulo 1 - Estado da Arte 6
permite visualizar os dados recolhidos pela consulta, o que facilitou o processo de en-
contrar a informação desejada[9]. Também foi considerada a plataforma MoovitApp[5]
mas esta também utiliza a OpenStreetMap para recolher dados de georreferenciação. O
acesso à API foi feito através de requests Get escritos em Python
A segunda parte consistia no armazenamento da informação. Nesta fase só foi consider-
ado o uso de SQLite[15] - esta livraria implementa um pequeno e rápido SQL database
engine que preenche completamente os requisitos necessários para este projeto. A ter-
Este projeto enquadra-se na área de recolha de dados relativos aos tranportes públicos
que circulam no concelho da Maia. Foram desenvolvidas vária tarefas de preparação
antes do começo da parte prática do projeto.
Tal como já foi refrido anteriormente, o projeto insere-se no do programa BaZe, Balanço
Zero de Carbono, desenvolvido pela entidade acolhedora, a Câmara Municipal da Maia.
Este consiste na criação de plataformas de visualização de dados interoperáveis, muitos
deles em tempo real, em contexto smart city. Foi necessário perceber quais os dados
que eram pertinentes neste contexto, e onde se localizavam, para serem posteriormente
tratados, disponibilizados e apresentados de forma simples e intuitiva.
Inicialmente, o trabalho realizado foi praticamente todo de pesquisa, utilizando: a norma
ISO37120 [4], o Relatório sobre o Estado de Ordenamento do Território (REOT)[11] e o
programa BaZe[17], existente para esclarecer perguntas como:
7
Capitulo 2 - Trabalho realizado 8
Como já foi referido, esta norma expande-se por 19 áreas distintas, como: economia;
educação; ambiente; transporte, planeamento urbano, entre outras. A diversidade de
áreas permite a uma cidade controlar muito melhor os seus recursos e serviços, podendo
identificar padrões entre serviços independentes que, de outra forma, não se conseguiriam
perceber e, assim, melhorar a performance e eficácia na busca pela sustentabilidade. Na
área dos transportes, existem quatro indicadores principais:
Estes indicadores permitem avaliar o quanto uma cidade se move de forma inteligente
mas não define o conceito de mobilidade inteligente.
Este relatório está divido em quatro temas principais que se subdividem em subtemas
de análise, e que são:
Ao longo do relatório conseguimos encontrar vários indicadores que já são utilizados
pelo municı́pio da Maia para monotorizar os seus serviços. No tema da mobilidade são
publicados indicadores como o número de mortes em acidentes rodoviários, o número de
metros lineares da rede rodoviária, ou a evolução do número de passageiros por modo de
transporte. Quando comparados,percebemos que, de todos os meios de transporte con-
siderados, apenas nos autocarros tem-se verificado um decréscimo constante no número
de passageiros.
Sendo o aumento dos preços dos combustı́veis uma das principais razões para meios de
transporte como o metro terem notado um crescimento de afluência, porque é que o
mesmo não se verifica nos autocarros? Algumas razões são apresentadas para justificar
a perda de passageiros como:
2.1.2 OpenStreetMap
O OpenStreetMap é um mapa-mundo editável e gratuito criado em 2004 no Reino Unido,
motivado pela falta de acesso gratuito e fiável e pelas restrições de utilização dos dados
a que estão sujeitos os mapas.
Esta mapa inclui dados relativos a estradas, edifı́cios, endereços, lojas, pontos de inter-
esse, ferrovias, trânsito, uso do solo, recursos naturais, entre outros - o que lhe dá uma
diversidade que torna a plataforma adequada para vários tipos de projetos. O mapa é
criado e mantido por quase 5 milhões de utilizadores e mais de 1 milhão de colaboradores
de todos os paı́ses do mundo, todos utilizando ferramentas e software opensource gratu-
ito. Os dados são usados pelas mais variadas pessoas: as comunidades locais, que usam
o OpenStreetMap para se movimentarem ondem vivem; empresas; governos; developers
de software entre muitos outros.
Este projeto tem uma ligação muito forte à OpenStreetMap Foundation, sendo admin-
istrada inteiramente por voluntários da Fundação. Existem três componentes básicos
do modelo de dados da OpenStreetMap, cada um pode ter tags associadas, uma tag
descreve o significado do elemento a que está atribuı́da contendo toda a informação que
não seja a localização. Uma tag consiste num par ”key”=”value” - a ”key” é usada para
descrever o tópico ou categoria a que pertence o elemento associado e o ”value” é usado
para detalhar o elemento dentro da categoria especificada.O sistema de marcação gra-
tuito do OpenStreetMap permite que o mapa inclua um número ilimitado de atributos
que descrevem cada caracterı́stica.
Os três componentes da OpenStreetMap são:
estruturas únicas, como um banco num parque, um sinal de trânsito, uma paragem
de autocarro ou um ponto de um caminhom (way).
• Ways - Um caminho é uma lista ordenada com entre 2 e 2000 elementos que
definem uma linha. Os caminhos são usados para representar linhas ou ruas, mas
também podem ser usados para representar limites, sendo que seria um caminho
fechado em que o primeiro e último nó seriam iguais. Caminhos que necessitem de
mais de dois mil nós para serem descritos têm de ser divididos em sub-caminhos
sendo preciso criar uma relação que combine os diferentes sub-caminhos.
2.1.2.1 OverpassTurbo
Nesta fase o levantamento da informação relativa às paragens foi a que se revelou ser
mais trabalhosa, pela falta de consistência na forma que os dados estavam guardados.
Depois de os obter, os dados foram guardados em ficheiros ”csv”.
Foi feito um levantamento das linhas de autocarro que cruzavam o concelho: foram
contabilizadas 29 linhas distribuı́das por dois operadores, 11 linhas da empresa Maia
Transportes e 18 da empresa STCP. Destas linhas, foi recolhido o seu identificador,
referência, nome e operador responsável.
Dos caminhos, foram recolhidos apenas as coordenadas (lat,lon) dos nós que os constitu-
iam. Das paragens, foi recolhido o identificador, referência, nome, latitude e longitude.
As relações que descreviam as linhas operadas pelos transportes da Maia não tinham
nenhum nó como membro, apenas o caminho que o autocarro faz foi levantado e por
isso as linhas deste operador foram descartadas.
de pontos para outra que contenha também todos os pontos a pelo menos 0.00269 graus
ou 300 metros de distância dos pontos originais.
Capitulo 2 - Trabalho realizado 15
Numa segunda fase, os dados foram corrigidos à mão, pois o nome e a referência pre-
cisavam de estar iguais aos que a STCP tinha guardado para podermos usar o widget
disponibilizado pelos mesmos. Aqui, a solução para o problema não foi a mais indicada
mas o produto final ficou como era esperado. Aos dados já recolhidos foi feita a com-
paração com os dados da STCP, fazendo as correções necessárias, e para adicionar novas
paragens recorremos ao google maps de forma a chegar às coordenadas.
não tem utilidade distinguir um ponto de outro a não ser que pertençam a linhas difer-
entes; o atributo ”Linhas” é a chave secundária e permite agrupar os pontos por linha.
A tabela ”Linhas” perdeu o identificador do OpenStreetMap pelo que a identificação é
feita com a sua referência, mantendo o atributo ”operador” e alterando o nome, que
agora se chama ”descrição”.
A tabela ”Paragem-Linha” tem duas chaves secundárias de modo a relacionar cada par-
agem com uma ou mais linhas.
A tabela ”Paragens” também perdeu o identificador gerado pelo OpenStreetMap, tendo
como identificador a sua referência.
Capitulo 2 - Trabalho realizado 16
A função um devolve um objeto JSON com uma lista com todas as linhas que o sistema
guarda. Em cada linha existe uma referência, uma descrição e o operador. Esta função
seleciona tudo com, ”.select(”*”)”, da tabela ”Linhas” com, ”knex(”Linhas”)”2.6 (a) e
devolve ao método ”get” a lista com as entradas da tabela. Este método, por sua vez,
responde ao pedido com um objeto JSON com a lista das entradas da tabela. A função
dois devolve todas as paragens que o sistema guarda.
A função três recebe o identificador da linha e devolve uma lista de referências de par-
agens que estão associadas a essa linha. Esta função recebe o identificador no cam-
inho que chama o método ”get” e seleciona todos as entradas da tabela ”Paragem-
Linha” cujo atributo ”Linha” seja igual ao identificador recebido com, ”knex(”Paragem-
Linha”).where(”Linha”,linha).select(”*”)”2.6. (b) A função quatro o recebe a referência
da paragem e devolve toda a informação relativa à mesma. A quinta função recebe o
identificador da linha e devolve uma lista de pontos de referência usados para delinear
o trajeto que um autocarro daquela linha percorre.
A sexta função recebe a referência da paragem e devolve uma lista de próximas pas-
sagens. Primeiro recolhe da base de dados o nome da paragem a que referência está
associada e depois com o nome e a referência usa o widget STCP para recolher as
próximas passagens. Cada passagem é composta pela referência da linha, o destino e,
por fim, o tempo até à próxima passagem.
Passando agora para uma reflexão sobre a minha experiência pessoal ao longo deste
processo, posso dizer que me foi possı́vel pôr em prática muitos dos conhecimentos que
tenho vindo a aprender ao longo do curso, bem como utilizar novas ferramentas com
as quais nunca tinha trabalhado antes. Foi bastante proveitoso passar por todas as
fases de pesquisa sobre o tema, de recolha de dados e informações, do tratamento e
armazenamento dos dados e, depois, da disponibilização dos mesmos. A par disto, tive
a oportunidade de experimentar diversas ferramentas, de perceber quais as vantagens
de determinadas sobre outras, etc.
Nem todos os objetivos propostos foram atingidos, não existe forma automática e autónoma
de replicar o trabalho desenvolvido, apenas os autocarros STCP entraram no sistema
de dados e não existe uma alternativa local aos dados dos horários das linhas. Apesar
destes pontos negativos estou contente com o trabalho realizado face à complexidade
do projeto. Creio que o projeto ganha muita força devido àquilo que o move na sua
essência. Estando a cidade da Maia localizada num dos dois grandes centros industriais
e comerciais do paı́s, o que faz com que tenha um grande número de pessoas que pre-
cisam de se deslocar diariamente em transportes públicos, creio que é de uma grande
importância as preocupações com a sustentabilidade e com a melhoria da qualidade de
vida dos cidadãos na sua rotina quotidiana. Assim, fico bastante contente por saber
que o meu trabalho pode contribuir para que uma pequena parte do dia-a-dia de uma
cidade, como andar de autocarro por exemplo, se torne mais simples, acessı́vel, e sem
obstáculos.
Pensando ainda numa perspetiva de futuro, caso venha a continuar com este projeto,
creio que o próximo passo será mudar a fonte de dados para uma mais fidedigna, de
modo a não ser preciso corrigir os dados, adicionar outros meios de transporte à base
de dados e expandir a API para que o cliente existente possa comunicar com os dados
apenas por um sitio.
18
Referências
19
Referências 20