• Nenhum resultado encontrado

Integração do Global Name Service a uma aplicação móvel de transporte público

N/A
N/A
Protected

Academic year: 2021

Share "Integração do Global Name Service a uma aplicação móvel de transporte público"

Copied!
42
0
0

Texto

(1)

Universidade Federal Fluminense

Instituto de Computa¸

ao

Departamento de Ciˆ

encia da Computa¸

ao

Juan Lucas do Ros´

ario Vieira

Integra¸c˜

ao do Global Name Service a uma aplica¸c˜

ao

ovel de transporte p´

ublico

Niter´

oi-RJ

2017

(2)

ii Juan Lucas do Ros´ario Vieira

Integra¸c˜ao do Global Name Service a uma aplica¸c˜ao m´ovel de transporte p´ublico

Trabalho submetido ao Curso de

Bacharelado em Ciˆencia da Computa¸c˜ao da Universidade Federal Fluminense como requisito parcial para a obten¸c˜ao de t´ıtulo de Bacharel em Ciˆencia da Computa¸c˜ao.

Orientador: Prof. Dr. Antonio Augusto de Arag˜ao Rocha

Niter´oi-RJ 2017

(3)

Ficha Catalográfica elaborada pela Biblioteca da Escola de Engenharia e Instituto de Computação da UFF

V658 Vieira, Juan Lucas do Rosário

Integração do Global Name Service a uma aplicação móvel de transporte público / Juan Lucas do Rosário Vieira. – Niterói, RJ : [s.n.], 2017.

40 f.

Projeto Final (Bacharelado em Ciência da Computação) – Universidade Federal Fluminense, 2017.

Orientador: Antonio Augusto de Aragão Rocha.

1. Mobilidade urbana. 2. Transporte público. 3. Aplicativo móvel. 4. Dispositivo móvel. I. Título.

(4)

iii Juan Lucas do Ros´ario Vieira

Integra¸c˜ao do Global Name Service a uma aplica¸c˜ao m´ovel de transporte p´ublico

Trabalho submetido ao Curso de

Bacharelado em Ciˆencia da Computa¸c˜ao da Universidade Federal Fluminense como requisito parcial para a obten¸c˜ao de t´ıtulo de Bacharel em Ciˆencia da Computa¸c˜ao.

Aprovado por:

Prof. Dr. Antonio Augusto de Arag˜ao Rocha - Orientador UFF

Prof. Dr. C´elio Vinicius Neves de Albuquerque UFF

Prof. Dr. Marcos de Oliveira Lage Ferreira UFF

Niter´oi-RJ 2017

(5)

iv

Agradecimentos

Agrade¸co a Deus pela perseveran¸ca que me proporcionou durante toda minha jor-nada acadˆemica.

Aos meus pais, Fatima e Antˆonio, e ao meu irm˜ao Jean Felipe, figuras essenciais para que me tornasse quem sou, sempre me apoiando, dando todo o suporte necess´ario em cada fase de minha vida, contribuindo para minha forma¸c˜ao moral, pessoal e profissional, e acreditando sempre que eu poderia chegar cada vez mais longe.

Ao orientador Antonio Augusto por sua disponibilidade e conselhos que viabiliza-ram o desenvolvimento e conclus˜ao desse projeto.

Aos professores Marcos Lage e Celio Albuquerque que participaram da banca exa-minadora, contribuindo para o enriquecimento deste trabalho.

Aos professores que fizeram parte da minha forma¸c˜ao e que tornam a Universidade Federal Fluminense cada vez melhor.

A todos os colegas da UFF que tamb´em contribu´ıram para o meu crescimento pessoal e profissional.

(6)

v

Resumo

O uso de dispositivos m´oveis no cotidiano das pessoas est´a em constante cresci-mento. Cada vez mais, usu´arios deixam de lado seus computadores e realizam suas tarefas com o aux´ılio de smartphones que representam uma alternativa mais conveniente e pr´atica com aplicativos m´oveis como Uber, Lyft e Cabify que ganharam grande importˆancia no cen´ario da mobilidade urbana, apresentando uma forma objetiva de utilizar transportes sem grandes custos.

A medida que o n´umero de usu´arios desses servi¸cos aumenta, os aplicativos respon-s´aveis pelos servi¸cos precisam ser capazes de continuar lidando com o crescente n´umero de requisi¸c˜oes, sem que haja a interrup¸c˜ao do servi¸co. Portanto, ´e necess´ario que esses aplicativos sejam escal´aveis para que dispositivos m´oveis, que possuem um poder de pro-cessamento e mem´oria inferior, sejam capazes de executar o aplicativo de forma flu´ıda e sem travamentos.

O objetivo desse projeto ´e a utiliza¸c˜ao de uma base de dados em nuvem, deno-minada Global Name Service (GNS), a fim de prover escalabilidade a uma aplica¸c˜ao de transporte urbano desenvolvida para dispositivos m´oveis Android. O contexto de mobi-lidade adotado foi o de transporte p´ublico via ˆonibus, mais especificamente o sistema de transporte p´ublico da cidade do Rio de Janeiro, por representar bem o problema abordado e devido `a facilidade de acesso aos dados.

No ˆambito do transporte p´ublico, ˆonibus, pontos, rotas e hor´arios de parada repre-sentam uma grande quantidade de dados. Para proporcionar a escalabilidade, pretende-se retirar a responsabilidade do processamento desses dados da aplica¸c˜ao m´ovel transferindo-a ptransferindo-artransferindo-a transferindo-a btransferindo-ase de dtransferindo-ados em nuvem.

(7)

vi

Abstract

The use of mobile devices in people’s daily lives grows every day. Users frequently put personal computers aside and use their smartphones to get tasks done, as they repre-sent a more convenient and practical alternative in the daily basis. In addition, mobile applications such as Uber, Lyft and Cabify have gained great importance in the urban mobility scenario, presenting a convenient way to move around the city, without great costs.

As the number of users of these services increases, the applications responsible for providing these services must deal with the increasing number of requests without interrupting of service. Therefore, these applications need to be scalable, so that mobile devices that have less processing power and memory can run the application smoothly, without crashing.

The main objective of this project is to use a cloud database, called Global Name Service (GNS), to provide scalability to an urban mobility application, developed for An-droid mobile devices. The context adopted was public transportation via buses, more specifically the public transportation system of the city of Rio de Janeiro, since it repre-sents well the problem addressed and due to the ease of access of this data.

In the field of public transport, buses, points, routes and stop times represent a large amount of data. To provide scalability, it is intended to remove the responsibility of processing of these data from the mobile application by transferring it to the cloud database.

(8)

Sum´

ario

Resumo v Abstract vi Lista de Figuras ix Lista de Tabelas x 1 Introdu¸c˜ao 1 1.1 Motiva¸c˜ao . . . 1 1.2 Objetivo . . . 2 1.3 Organiza¸c˜ao . . . 2

2 Coleta e Armazenagem de Dados 4 2.1 Global Name Service . . . 4

2.1.1 Introdu¸c˜ao . . . 4 2.1.2 Contas . . . 5 2.1.3 Consultas . . . 5 2.2 Dados Utilizados . . . 7 2.2.1 Data.Rio . . . 7 2.2.2 Coleta de Dados . . . 8 2.3 Pr´e-processamento . . . 8 2.4 Estrutura de Dados . . . 9 3 BusFinder 13 3.1 Introdu¸c˜ao . . . 13 3.2 Configura¸c˜ao Inicial . . . 14 vii

(9)

viii

3.3 Tela Principal . . . 15

3.4 Visualiza¸c˜ao das paradas de ˆonibus . . . 16

3.5 Alertas . . . 17

3.6 Linhas de ˆonibus favoritas . . . 18

4 Desenvolvimento 21 4.1 Arquitetura . . . 21

4.2 Tecnologias utilizadas . . . 22

4.2.1 Google Maps Android API . . . 22

4.2.2 Google Play Services Location API . . . 23

4.3 Detalhes de Implementa¸c˜ao . . . 23 4.3.1 Cache . . . 23 4.3.2 Alertas . . . 24 5 Conclus˜ao 27 5.1 Contribui¸c˜oes . . . 27 5.2 Limita¸c˜oes . . . 27 5.3 Trabalhos futuros . . . 28

(10)

ix

Lista de Figuras

2.1 Etapas da requisi¸c˜ao da informa¸c˜ao contida em um documento. . . 6

3.1 Lista de sele¸c˜ao de linhas. . . 14

3.2 Tela principal do BusFinder. . . 15

3.3 Lista de paradas de ˆonibus. . . 16

3.4 Tela de cria¸c˜ao de alertas. . . 17

3.5 Notifica¸c˜ao de proximidade de um ˆonibus em rela¸c˜ao `a uma parada. . . 18

3.6 Tela de gerenciamento de alertas. . . 19

3.7 Tela de gerenciamento de linhas. . . 20

4.1 Vis˜ao geral da arquitetura desenvolvida. . . 22

4.2 Representa¸c˜ao da ´area de busca de um alerta em rela¸c˜ao a uma parada N. 25 4.3 C´alculo de uma caixa delimitadora a partir da localiza¸c˜ao de uma parada de ˆonibus. . . 26

4.4 Notifica¸c˜ao que mostra se o servi¸co de alertas est´a em execu¸c˜ao. . . 26

(11)

x

Lista de Tabelas

2.1 Estrutura de dados GTFS da base 1 . . . 8

2.2 Estrutura de dados da base 2 . . . 8

2.3 Estrutura de dados dos ˆonibus . . . 10

2.4 Estrutura de dados das linhas de ˆonibus . . . 10

2.5 Estrutura de dados das viagens . . . 11

2.6 Estrutura de dados das paradas de ˆonibus . . . 11

2.7 Estrutura de dados dos hor´arios de paradas dos ˆonibus . . . 11

(12)

Cap´ıtulo 1

Introdu¸

ao

1.1

Motiva¸

ao

O uso de aparelhos m´oveis para acesso `a Internet vem crescendo diariamente. Se-gundo uma pesquisa realizada pelo IBGE [1], no Brasil em 2014, computadores perderam o posto de dispositivo mais utilizado para acessar `a web, para telefones celulares que to-maram a primeira posi¸c˜ao. Isso evidencia que os usu´arios est˜ao gradativamente deixando seus computadores de lado e utilizando aparelhos m´oveis para realizarem suas tarefas, sendo esta uma alternativa mais pr´atica.

`

A medida que os aparelhos celulares v˜ao substituindo os computadores no cotidi-ano do brasileiro, smartphones devem ser capazes de realizar tarefas que eram, em sua maioria, realizadas em computadores pessoais. Por isso, aplica¸c˜oes m´oveis devem ser ca-pazes de lidar com tarefas relativamente complexas poupando recursos computacionais, j´a que aparelhos celulares tˆem capacidades de processamento e mem´oria inferiores, quando comparados a computadores.

No ˆambito da mobilidade urbana, empresas como Uber e Cabify tˆem ganhado espa¸co por oferecerem servi¸cos de transporte pessoal, de forma oportuna e pr´atica, a um custo acess´ıvel. Esse tipo de servi¸co concentra uma grande quantidade de dados, onde parte dessas informa¸c˜oes precisam ser acessadas atrav´es de aplicativos m´oveis, sem que haja um comprometimento quanto `a qualidade do servi¸co oferecido. Geralmente, esse tipo de servi¸co n˜ao depende apenas da aplica¸c˜ao m´ovel. Usualmente, as informa¸c˜oes necess´arias para o funcionamento do servi¸co est˜ao armazenadas em uma base de dados em nuvem. Assim, a aplica¸c˜ao m´ovel ´e utilizada somente como uma forma de intera¸c˜ao

(13)

2 e visualiza¸c˜ao dessas informa¸c˜oes, sem que elas estejam necessariamente armazenadas no celular. Aplicativos de transporte p´ublico tamb´em podem se beneficiar da utiliza¸c˜ao de uma base de dados em nuvem, reduzindo o uso de recursos do celular pela aplica¸c˜ao.

Softwares, que auxiliem a implanta¸c˜ao de uma base de dados em nuvem e infor-ma¸c˜oes de mobilidade urbana dispon´ıveis ao p´ublico, tornam poss´ıvel o desenvolvimento de um aplicativo leve, ainda que lide com grandes quantidades de dados.

1.2

Objetivo

O objetivo desse projeto ´e desenvolver uma aplica¸c˜ao para dispositivos m´oveis An-droid que utilize o Global Name Service (GNS) como uma base de dados em nuvem, a fim de prover escalabilidade `a essa aplica¸c˜ao. O GNS foi escolhido por possuir caracter´ısti-cas favor´aveis para o desenvolvimento de aplicativos de mobilidade urbana, que utilizam consultas baseadas em contexto e envolvem uma grande quantidade de dados.

O contexto adotado ao projeto foi o de mobilidade urbana. Dentro desse escopo, foi escolhido o sistema de transporte p´ublico, via ˆonibus da cidade do Rio de Janeiro, de-vido `a facilidade de acesso a essas informa¸c˜oes. Neste ˆambito, ˆonibus, paradas, hor´arios, linhas e viagens, representam uma quantidade significativa de dados. Essas informa¸c˜oes, quando armazenadas em um dispositivo m´ovel, podem causar perdas vis´ıveis de desempe-nho j´a que precisam ser processadas em um ambiente onde os recursos computacionais s˜ao mais escassos. Devido a essa limita¸c˜ao, pretende-se retirar a responsabilidade de armaze-namento e processamento dessas informa¸c˜oes sempre que poss´ıvel, transferindo-a para a base de dados em nuvem, que tem maiores recursos quando comparado a um telefone.

Ainda que o desenvolvimento de um aplicativo para o GNS seja o objetivo prin-cipal deste projeto, pretende-se criar uma aplica¸c˜ao m´ovel de mobilidade urbana que, de fato, apresente funcionalidades ´uteis e simule um servi¸co onde o GNS poderia ser real-mente empregado como uma base de dados. Tais funcionalidades envolver˜ao tarefas mais essenciais em um aplicativo desse tipo, como a visualiza¸c˜ao de linhas e pontos de ˆonibus.

1.3

Organiza¸

ao

Este trabalho est´a dividido em cinco cap´ıtulos, organizados como descrito a seguir. O Cap´ıtulo 2 aborda a fonte dos dados utilizados no projeto, assim como sua coleta e

(14)

3 pr´e-processamento. Este cap´ıtulo tamb´em aborda brevemente o GNS e seus conceitos de armazenagem e consulta de informa¸c˜oes. O Cap´ıtulo 3 apresenta a aplica¸c˜ao m´ovel desen-volvida e suas principais funcionalidades. O Cap´ıtulo 4 aborda quest˜oes de arquitetura e detalha o desenvolvimento do aplicativo criado. Finalmente, o Cap´ıtulo 5 aborda as limita¸c˜oes e contribui¸c˜oes realizadas no desenvolvimento do projeto, assim como solu¸c˜oes futuras que podem ser adotadas para sua melhoria.

(15)

Cap´ıtulo 2

Coleta e Armazenagem de Dados

2.1

Global Name Service

2.1.1

Introdu¸

ao

Pensando em uma alternativa para lidar com os problemas de mobilidade oriundos da arquitetura da Internet atual, pesquisadores da University of Massachussets Amherst desenvolveram um servi¸co de resolu¸c˜ao de nomes intitulado Global Name Service (GNS) [2].

O GNS foi criado para solucionar o problema em traduzir identificadores de redes que est˜ao sob situa¸c˜oes de alta mobilidade. Similarmente ao DNS (Domain Name Service), que traduz endere¸cos da web para endere¸cos IPs, o GNS associa um pseudˆonimo a um GUID (Globally Unique Identifier ). Por´em, ao contr´ario dos endere¸cos IP, nos GUIDs n˜ao h´a um associa¸c˜ao entre o identificador e a localiza¸c˜ao.

Segundo seus criadores, o GNS pode ser utilizado como uma solu¸c˜ao de mobilidade fim-a-fim completa, permitindo comunica¸c˜ao baseada em contexto, ao inv´es de basear-se em nomes ou endere¸cos, com as vantagens de oferecer baixa latˆencia de resolu¸c˜ao de nomes, baixo custo de atualiza¸c˜ao, alta disponibilidade e escalabilidade.

Devido `as suas caracter´ısticas de busca por contexto, que permitem a requisi¸c˜ao de documentos baseados em suas geolocaliza¸c˜oes, e sua escalabilidade, o GNS se aplica muito bem a aplicativos de mobilidade urbana, onde ´e necess´ario lidar com grandes quantidades de dados e usu´arios, e onde consultas baseadas em geolocaliza¸c˜ao s˜ao realizadas frequen-temente. Por isso, o Global Name Service foi escolhido para a armazenagem e requisi¸c˜ao

(16)

5 das informa¸c˜oes de transporte utilizadas pelo aplicativo de mobilidade desenvolvido.

Nesse projeto, o GNS ser´a usado como uma base de dados em nuvem a ser im-plantada em um servidor. As informa¸c˜oes relacionadas ao transporte p´ublico ser˜ao ar-mazenadas e atualizadas nesta base, para serem, posteriormente, requisitadas atrav´es de consultas realizadas na parte cliente do GNS, que est´a integrada ao aplicativo de mobi-lidade urbana desenvolvido. Embora haja suporte nativo `a cria¸c˜ao de m´ultiplas r´eplicas da base de dados, em um ambiente distribu´ıdo, julgou-se suficiente a utiliza¸c˜ao de uma ´

unica instˆancia do GNS para este projeto.

2.1.2

Contas

Para armazenar informa¸c˜oes no GNS, ´e necess´ario a cria¸c˜ao de uma conta para cada registro a ser guardado. No momento da cria¸c˜ao de conta, ´e preciso informar um pseudˆonimo e um password. A partir da´ı, s˜ao geradas as chaves p´ublicas e privadas res-pons´aveis pela criptografia da comunica¸c˜ao entre servidor e cliente. Nessa etapa, tamb´em ´e gerado um GUID que est´a associado ao pseudˆonimo informado. As informa¸c˜oes de uma conta s˜ao representadas atrav´es de um objeto JSON que, inicialmente, est´a vazio. ´E pos-s´ıvel armazenar informa¸c˜oes na conta a partir da utiliza¸c˜ao de comandos na biblioteca cliente do GNS, que permite a cria¸c˜ao de campos e atualiza¸c˜ao de seus valores. Tamb´em ´e poss´ıvel sobrescrever diretamente as informa¸c˜oes de uma conta, utilizando um comando de substitui¸c˜ao do objeto JSON. Durante o desenvolvimento do projeto, este comando foi preposto em rela¸c˜ao aos anteriores por permitir que todos os campos e valores de uma conta fossem criados ou atualizados com uma ´unica requisi¸c˜ao ao servidor.

No que se refere ao que foi desenvolvido nesse projeto, para cada objeto de trans-porte p´ublico, como um ˆonibus espec´ıfico ou uma parada, foi criada uma conta que o representasse. Um script foi respons´avel pela tarefa de criar uma conta para cada regis-tro da base de dados de transporte utilizada, atualizando as informa¸c˜oes dessa conta de acordo com as informa¸c˜oes do objeto representado.

2.1.3

Consultas

O GNS disponibiliza, em sua biblioteca cliente, comandos [3] para facilitar a in-tera¸c˜ao entre o cliente e o servidor. Como exemplo, temos as fun¸c˜oes de sele¸c˜ao das informa¸c˜oes que est˜ao armazenadas em sua base de dados. Essas fun¸c˜oes envolvem

(17)

retor-6 nar registros que satisfa¸cam uma rela¸c˜ao de campo e valor ou que satisfa¸cam um crit´erio de localiza¸c˜ao (estar pr´oximo a uma coordenada ou sua localiza¸c˜ao estar dentro da ´area de um pol´ıgono especificado). H´a tamb´em uma fun¸c˜ao que permite a cria¸c˜ao de uma consulta de acordo com a sintaxe [4] estabelecida no protocolo do GNS, que ´e baseada nas consultas do MongoDB [5], mas apresenta sutis diferen¸cas. No desenvolvimento do aplicativo, foi usada somente a fun¸c˜ao de cria¸c˜ao de consultas personalizadas para pro-porcionar uma maior flexibilidade quanto ao que pode ser consultado, permitindo, por exemplo, a concatena¸c˜ao de m´ultiplas consultas.

Embora seja vi´avel criar consultas personalizadas, para que seja poss´ıvel fazer requisi¸c˜oes baseadas em geolocaliza¸c˜ao no GNS, a localiza¸c˜ao de um dado deve ser es-pecificada como um campo de nome geoLocationCurrent, cujo valor ´e um ponto de co-ordenada em formato de um objeto GeoJSON [6]. O GeoJSON ´e um formato, definido pela RFC7946, de troca de dados geoespaciais baseado em JSON, usando o sistema de referˆencia de coordenadas geogr´aficas WGS84. Este requerimento foi cumprido por meio do uso de um script de pr´e-processamento dos dados armazenados no GNS.

Figura 2.1: Etapas da requisi¸c˜ao da informa¸c˜ao contida em um documento.

O GNS n˜ao permite que as informa¸c˜oes dos registros que satisfazem os crit´erios de uma consulta sejam retornadas diretamente como resposta da consulta, limitando-se a disponibilizar somente os identificadores (GUIDs) deslimitando-ses registros. Por isso, para acessar as informa¸c˜oes neles contidas, ´e necess´ario seguir algumas etapas. Como descrito

(18)

7 na Figura 2.1, primeiro ´e preciso realizar uma consulta, receber como resposta os GUIDs que satisfazem os crit´erios da requisi¸c˜ao, e em seguida requisitar a leitura das informa¸c˜oes do registro, recebendo as informa¸c˜oes do GUID especificado.

2.2

Dados Utilizados

No projeto, foram utilizados os dados do sistema de transporte p´ublico via ˆonibus da cidade do Rio de Janeiro que foram obtidos por meio do site Data.Rio.

2.2.1

Data.Rio

O Data.Rio [7] ´e um portal criado, em abril de 2014, pela Prefeitura do Rio de Janeiro em parceria com o Instituto Pereira Passos que concentra dados e informa¸c˜oes rela-cionadas `a cidade do Rio de Janeiro. O website disponibiliza informa¸c˜oes sobre transporte p´ublico, habita¸c˜ao e urbanismo, seguran¸ca p´ublica e infraestrutura da cidade, reunidos em mais de 2 mil arquivos atualizados frequentemente. Em outubro de 2017, o website passou por uma reformula¸c˜ao visual e de conte´udo [8].

Dentre o conjunto de dados disponibilizados pelo portal, foram utilizadas no pro-jeto duas bases de dados referentes ao transporte coletivo via ˆonibus: uma contendo informa¸c˜oes acerca dos pontos de ˆonibus, linhas, hor´arios de parada, viagens e trajetos (B1); e a base de dados em rela¸c˜ao `a localiza¸c˜ao dos ˆonibus em tempo real (B2).

A base B11 est´a organizada de acordo com a especifica¸c˜ao GTFS (General Tran-sit Feed Specification) [9], que define um padr˜ao comum para informa¸c˜oes de transporte p´ublico, por meio de arquivos texto, onde cada arquivo representa um conjunto de infor-ma¸c˜oes espec´ıfico, como mostrado na Tabela 2.1.

J´a a base B22 ´e estruturada como um conjunto de dados JSON [10]. Cada campo representa uma informa¸c˜ao acerca de um ˆonibus, em um determinado instante, como pode ser visto na Tabela 2.2, retirada da documenta¸c˜ao3 dessa base dispon´ıvel no Data.Rio.

1http://www.data.rio/dataset/onibus-gtfs. Acesso em: 7 jul 2017

2http://dadosabertos.rio.rj.gov.br/apiTransporte/apresentacao/rest/index.cfm/obterTodasPosicoes 3http://dadosabertos.rio.rj.gov.br/apitransporte/apresentacao/pdf/documentacao gps.pdf

(19)

8

Arquivo Descri¸c˜ao

routes.txt Conjunto de linhas de ˆonibus

trips.txt Conjunto de viagens para cada linha

stops.txt Conjunto de paradas de ˆonibus

stop times.txt Hor´arios de parada de cada viagem

shapes.txt Conjunto de pontos que representam o trajeto de cada viagem Tabela 2.1: Estrutura de dados GTFS da base 1

Campo Descri¸c˜ao

DataHora Data e hora da coleta do dado

Ordem Identifica¸c˜ao alfanum´erica encontrada na lateral dos ˆonibus

Linha Linha do ˆonibus

Latitude Latitude do ˆonibus na coleta (GPS, WGS84) Longitude Longitude do ˆonibus na coleta (GPS, WGS84) Velocidade Velocidade do ˆonibus na hora da coleta do dado

Tabela 2.2: Estrutura de dados da base 2

2.2.2

Coleta de Dados

Como os dados da base B1 representam informa¸c˜oes que n˜ao s˜ao atualizadas com frequˆencia, a obten¸c˜ao desses dados ocorreu pelo download de uma pasta compactada contendo os arquivos da Tabela 2.1, sendo, posteriormente processados por um script e transferidos para o sistema de arquivos do servidor da base de dados. Contudo, o mesmo n˜ao poderia ser feito com dados em tempo real, como os da base B2. Por isso, um outro script foi desenvolvido para obter esse tipo de dado atrav´es de uma requisi¸c˜ao HTTP ao Data.Rio, cuja resposta ´e estruturada como um objeto JSON contendo as informa¸c˜oes da Tabela 2.2. Ap´os a obten¸c˜ao da resposta, esses dados s˜ao pr´e-processados e cadastrados ou atualizados no GNS.

2.3

Pr´

e-processamento

A fim de eliminar inconsistˆencias, campos vazios e dados n˜ao utilizados, al´em de organizar as informa¸c˜oes de maneira a cumprir os requisitos das consultas baseadas

(20)

9 em localiza¸c˜ao, estipulados pelo GNS, foram criados dois scripts para realizar o pr´ e-processamento dos dados de transporte utilizados no desenvolvimento do aplicativo. Esses scripts foram respons´aveis pelas seguintes fun¸c˜oes:

a) eliminar campos opcionais dos arquivos GTFS que n˜ao foram preenchidos; b) representar latitude e longitude dos dados no formato requerido pelo GNS;

c) eliminar registros que n˜ao s˜ao referenciados em outras tabelas; d) eliminar registros que continham redundˆancias;

e) estruturar as informa¸c˜oes como objetos JSON;

f) adicionar campo que explicita o tipo de dado representado;

g) adicionar campo que representa a data e hora de coleta do dado em formato EPOCH.

O primeiro script foi respons´avel por pr´e-processar os dados da base B1, que re-presenta as informa¸c˜oes geogr´aficas associadas ao transporte p´ublico. O segundo script foi respons´avel por pr´e-processar os dados da base B2, que representa as informa¸c˜oes de geolocaliza¸c˜ao dos ˆonibus em tempo real. Essa separa¸c˜ao em dois scripts foi necess´aria, pois, na base B1, os dados n˜ao mudam com frequˆencia e, portanto, n˜ao precisam ser processados em tempo real. J´a a base B2 requer que os dados sejam processados imedia-tamente antes de serem enviados `a base de dados em nuvem. O segundo script tamb´em ´e respons´avel pela requisi¸c˜ao dos dados de GPS dos ˆonibus ao website do Data.Rio e pela transferˆencia de todos os dados necess´arios para a base de dados.

2.4

Estrutura de Dados

Ap´os o pr´e-processamento dos dados, as informa¸c˜oes de mobilidade urbana cole-tadas apresentam uma estrutura ideal para o uso no projeto. Os dados relacionados `as localiza¸c˜oes em tempo real dos ˆonibus possuem a estrutura indicada na Tabela 2.3.

O campo EPOCH foi adicionado para facilitar consultas de data e hora de coleta do dado com operadores l´ogicos no GNS. Ele representa a data e a hora em que o dado foi coletado no formato Unix Time. Esse formato ´e definido como o n´umero de segundos que

(21)

10

Campo Descri¸c˜ao

Data Data de coleta do dado

Hora Hora de coleta do dado

Ordem Identifica¸c˜ao alfanum´erica encontrada na lateral dos ˆonibus

Linha Linha do ˆonibus

geoLocationCurrent Localiza¸c˜ao do ˆonibus em formato GeoJSON Velocidade Velocidade do ˆonibus na hora da coleta do dado

EPOCH Data e hora da coleta do dado em formato EPOCH

data type Tipo de dado

Tabela 2.3: Estrutura de dados dos ˆonibus

se passaram desde `as 0h00 de 1 de janeiro de 1970 do UTC (Universal Time Coordinated ). Dessa maneira, pode-se facilmente comparar se um timestamp ´e mais recente, verificando se o n´umero de segundos ´e maior que o outro. O campo geoLocationCurrent foi adicionado para cumprir um requisito do GNS, como explicado na Se¸c˜ao 2.1.3 e o campo data type foi criado para diferenciar os diferentes tipos de dados de transporte existentes na base. As estruturas dos dados que representam as informa¸c˜oes das linhas de ˆonibus, viagens e paradas de ˆonibus podem ser observadas nas Tabelas 2.4, 2.5 e 2.6 respectivamente.

Campo Descri¸c˜ao

route id Identificador de rota route short name N´umero da linha

route long name Nome da linha

data type Tipo de dado

Tabela 2.4: Estrutura de dados das linhas de ˆonibus

O conjunto de dados que representa os hor´arios das paradas de cada viagem foi modificado, eliminando as informa¸c˜oes de hor´arios que n˜ao seriam utilizadas no projeto. Para esse conjunto, foram mantidos somente os campos que relacionavam as viagens e a sequˆencia das paradas de ˆonibus. Essa nova estrutura pode ser observada na Tabela 2.7. Finalmente, as informa¸c˜oes acerca dos pontos de um trajeto est˜ao estruturadas de acordo com a Tabela 2.8.

(22)

11

Campo Descri¸c˜ao

trip id Identificador de viagem

route id Identificador de rota

trip headsign Descri¸c˜ao da viagem

direction id Identificador de dire¸c˜ao (0 - Ida / 1 - Volta)

shape id Identificador de forma

data type Tipo de dado

Tabela 2.5: Estrutura de dados das viagens

Campo Descri¸c˜ao

stop id Identificador de parada de ˆonibus

stop code C´odigo de parada de ˆonibus

stop name Nome da parada de ˆonibus

stop desc Descri¸c˜ao da parada de ˆonibus

geoLocationCurrent Localiza¸c˜ao da parada de ˆonibus em formato GeoJSON

location type Tipo da parada de ˆonibus

data type Tipo de dado

Tabela 2.6: Estrutura de dados das paradas de ˆonibus

Campo Descri¸c˜ao

trip id Identificador de viagem

stop id Identificador de parada de ˆonibus stop sequence N´umero de sequˆencia da parada de ˆonibus

data type Tipo de dado

(23)

12

Campo Descri¸c˜ao

shape id Identificador da forma de um trajeto shape pt sequence N´umero de sequˆencia do ponto de um trajeto geoLocationCurrent Localiza¸c˜ao do ponto em formato GeoJSON

data type Tipo de dado

(24)

Cap´ıtulo 3

BusFinder

3.1

Introdu¸

ao

Como discutido anteriormente, o prop´osito do projeto ´e a elabora¸c˜ao de uma apli-ca¸c˜ao m´ovel integrada ao GNS como prova de conceito. A disponibilidade de dados de transporte p´ublico via ˆonibus tornou poss´ıvel a cria¸c˜ao de um aplicativo que permitisse a visualiza¸c˜ao e intera¸c˜ao com essas informa¸c˜oes, denominado BusFinder.

O requisito de funcionalidades do BusFinder foi baseado em um projeto desenvol-vido por estudantes da Universidade Federal Fluminense: o TrackBus [11]. Nesse projeto, foi realizada uma an´alise de quais funcionalidades seriam as mais desejadas pelos usu´arios de um aplicativo de transporte p´ublico. Usando essa an´alise, chegou-se a um conjunto de funcionalidades que seriam oferecidas pelo BusFinder. Embora o requisito das fun¸c˜oes do aplicativo desenvolvido tenha sido baseado em outro projeto, a implementa¸c˜ao dessas funcionalidades foi feita de forma totalmente independente, pensando na integra¸c˜ao com o GNS.

O BusFinder possui uma identidade visual que se assemelha a outros aplicativos de transporte p´ublico dispon´ıveis na loja de aplicativos da Google, como o ”V´a de ˆOnibus”, desenvolvido pela Fetranspor. Essa semelhan¸ca foi adotada a fim de proporcionar uma familiaridade dos usu´arios de aplicativos de mobilidade urbana com o aplicativo criado nesse projeto.

Este cap´ıtulo tem como objetivo apresentar as principais funcionalidades e telas do aplicativo desenvolvido. Detalhes sobre a implementa¸c˜ao e arquitetura do BusFinder podem ser encontradas no Cap´ıtulo 4.

(25)

14

3.2

Configura¸

ao Inicial

Quando o BusFinder ´e aberto pela primeira vez, ´e necess´aria uma breve configu-ra¸c˜ao inicial para que o aplicativo funcione corretamente.

Como medida de seguran¸ca, aplicativos desenvolvidos para dispositivos Android precisam de permiss˜ao para realizar algumas fun¸c˜oes. Por isso, na tela de abertura, ´e preciso que o usu´ario autorize o acesso da aplica¸c˜ao a informa¸c˜oes de localiza¸c˜ao e ao sistema de arquivos do dispositivo. Em seguida, o aplicativo tentar´a se conectar com o servidor GNS e, caso obtenha sucesso, criar´a uma conta para o dispositivo m´ovel, usando como pseudˆonimo um identificador ´unico gerado.

Ap´os a cria¸c˜ao da conta, ´e exibido uma tela introdut´oria que apresenta as principais funcionalidades do aplicativo, como cria¸c˜ao de alertas e visualiza¸c˜ao de paradas de ˆonibus. Depois da tela de introdu¸c˜ao, o aplicativo mostra uma lista de linhas de ˆonibus, como mostrado na Figura 3.1. Nesta tela, o usu´ario dever´a selecionar suas linhas de interesse, a fim de personalizar a experiˆencia de uso do aplicativo de acordo com suas necessidades, como explicado na Se¸c˜ao 3.6.

(26)

15 Ao t´ermino dessas etapas, o aplicativo estar´a pronto para uso. A configura¸c˜ao da aplica¸c˜ao s´o precisa ser realizada uma vez, j´a que as escolhas feitas pelo usu´ario s˜ao armazenadas para a pr´oxima vez que ele for aberto.

3.3

Tela Principal

Ap´os a configura¸c˜ao inicial, o aplicativo exibe a sua tela principal, que disp˜oe de um mapa, onde ´e poss´ıvel visualizar as informa¸c˜oes de transporte p´ublico, e um menu lateral, que pode ser acessado ao deslizar o dedo da esquerda para a direita.

No mapa, s˜ao exibidos as posi¸c˜oes dos ˆonibus em tempo real, sendo atualizadas a cada 30 segundos. Para cada ˆonibus, ´e atribu´ıdo um marcador cuja cor representa a linha a qual ele pertence. Quando um ˆonibus ´e selecionado, ´e exibido na parte inferior da tela um painel que cont´em o c´odigo encontrado na lateral do ˆonibus, o n´umero e nome da sua linha e as op¸c˜oes dispon´ıveis para o marcador selecionado, como pode ser visto na Figura 3.2.

(27)

16

3.4

Visualiza¸

ao das paradas de ˆ

onibus

Uma das informa¸c˜oes mais importantes no ˆambito do transporte p´ublico ´e saber em quais pontos da cidade um usu´ario pode embarcar ou desembarcar. Al´em de exibir informa¸c˜oes dos ˆonibus em tempo real, o BusFinder tamb´em permite a visualiza¸c˜ao das paradas de ˆonibus de uma linha, no mapa.

Ao selecionar um ˆonibus, ´e poss´ıvel visualizar as paradas por onde esse ˆonibus trafega ao clicar na op¸c˜ao ”Show Stops”. Ap´os o carregamento das paradas, elas ser˜ao exibidas em uma lista, ordenadas de acordo com o in´ıcio e o fim do trajeto da linha a qual o ˆonibus selecionado pertence, assim como suas respectivas localiza¸c˜oes, representadas atrav´es de ´ıcones no mapa, como pode ser visto na Figura 3.3.

Figura 3.3: Lista de paradas de ˆonibus.

O modo de intera¸c˜ao com as paradas foi pensado de forma a facilitar sua descoberta, tanto pelo nome quanto pela sua localiza¸c˜ao, visto que ao selecionar uma parada da lista, far´a com que o mapa seja direcionado ao ´ıcone que a representa e vice-versa.

(28)

17

3.5

Alertas

Uma das funcionalidades presentes em aplicativos de mobilidade urbana, como o Uber, ´e informar ao usu´ario quando seu transporte est´a chegando. Seria igualmente ´

util, em um aplicativo de transporte p´ublico, que houvesse uma notifica¸c˜ao de quando um ˆonibus estivesse pr´oximo a uma determinada parada. Dessa maneira, ele poderia se planejar para ir em dire¸c˜ao ao ponto assim que o transporte se aproximasse, reduzindo o risco de ter que aguardar indefinidamente a chegada do ˆonibus.

O BusFinder oferece essa funcionalidade de criar alertas que notifiquem ao usu´ario quando um ˆonibus est´a pr´oximo. Para criar um alerta, basta selecionar um coletivo no mapa e clicar no bot˜ao ”Create Alert”. Em seguida, o usu´ario tem a op¸c˜ao de escolher ser alertado quando o ˆonibus selecionado se aproximar, ou outro da mesma linha, como mostrado na Figura 3.4. O segundo caso foi pensado para cobrir a situa¸c˜ao em que o usu´ario deseje pegar o primeiro ˆonibus da linha que se aproximar, j´a a primeira op¸c˜ao permite uma escolha mais espec´ıfica.

(29)

18 A segunda escolha a ser feita ´e se a notifica¸c˜ao deve ser gerada quando o ˆonibus se aproximar da localiza¸c˜ao atual do usu´ario ou de uma parada de ˆonibus espec´ıfica. Caso a segunda op¸c˜ao seja selecionada, uma lista de paradas de ˆonibus aparecer´a, similarmente `

a apresentada na Se¸c˜ao 3.4, onde o usu´ario dever´a selecionar a parada pretendida. O aplicativo ir´a gerar a notifica¸c˜ao quando o ˆonibus selecionado estiver at´e 3 paradas de distˆancia, em rela¸c˜ao `a parada selecionada. Um exemplo de notifica¸c˜ao pode ser visto na Figura 3.5.

Figura 3.5: Notifica¸c˜ao de proximidade de um ˆonibus em rela¸c˜ao `a uma parada.

Ap´os a cria¸c˜ao dos alertas, ´e poss´ıvel verific´a-los acessando a op¸c˜ao Alerts do menu, como mostra a Figura 3.6. Nessa tela, tamb´em ´e poss´ıvel ativar, desativar ou excluir alertas. Quando um ˆonibus se aproxima e uma notifica¸c˜ao ´e gerada, o alerta referente ´e desativado. Caso um usu´ario necessite reutilizar um alerta, ´e poss´ıvel simplesmente reativ´a-lo em vez de passar pelos procedimentos da cria¸c˜ao novamente. Se o alerta se tornar irrelevante, ´e poss´ıvel delet´a-lo.

Embora notifique o usu´ario corretamente na maioria das vezes, a funcionalidade de alertas apresenta algumas limita¸c˜oes, abordadas na Se¸c˜ao 5.2.

3.6

Linhas de ˆ

onibus favoritas

O BusFinder possibilita escolher de quais linhas de ˆonibus um usu´ario deseja re-ceber informa¸c˜oes. Essa funcionalidade foi desenvolvida com base na premissa de que seria irrelevante exibir dados sobre ˆonibus e paradas de linhas que o usu´ario n˜ao possui interesse.

Quando o usu´ario escolhe suas linhas favoritas, o aplicativo deixa de requisitar ao servidor informa¸c˜oes sobre outras linhas. Por isso, somente os ˆonibus das linhas selecio-nadas ser˜ao mostradas no mapa, reduzindo um poss´ıvel excesso de dados a serem exibidos que poderia causar confus˜ao.

(30)

19

Figura 3.6: Tela de gerenciamento de alertas.

na Figura 3.7. ´E poss´ıvel a personaliza¸c˜ao da cor de uma linha ou fazer com que o mapa exiba somente ˆonibus da linha selecionada, omitindo coletivos de outras linhas. Ambas op¸c˜oes foram implementadas com a finalidade de facilitar a visualiza¸c˜ao dos transportes no mapa.

Apesar de restringir a exibi¸c˜ao de informa¸c˜oes de linhas que n˜ao foram escolhidas pelo usu´ario, o aplicativo permite que linhas favoritas sejam adicionadas ou removidas a qualquer momento. Nessa tela de modifica¸c˜ao, cuja aparˆencia ´e similar a tela mostrada na Figura 3.1, todas as linhas armazenadas na base de dados s˜ao exibidas.

(31)

20

(32)

Cap´ıtulo 4

Desenvolvimento

4.1

Arquitetura

A arquitetura do projeto desenvolvido ´e constitu´ıda pelo aplicativo de mobilidade urbana para dispositivos m´oveis e uma base de dados em nuvem.

O aplicativo BusFinder foi desenvolvido de forma nativa para dispositivos m´oveis com o sistema operacional Android e ´e compat´ıvel com a vers˜ao 4.1 Lollipop ou superior. O desenvolvimento h´ıbrido foi descartado para evitar eventuais problemas de compatibi-lidade entre as bibliotecas do GNS e os frameworks de desenvolvimento multiplataforma, e pelo fato de o desenvolvimento nativo ser suficiente para a prova de conceito abordada. Devido `a incompatibilidade entre o desenvolvimento Android e a vers˜ao 8 da lin-guagem Java, que ´e a linguagem a qual o GNS ´e desenvolvido, a vers˜ao do cliente GNS escolhida para ser integrada ao aplicativo foi a 1.19.11. Essa vers˜ao ´e a mais recente dispon´ıvel portada para vers˜ao 7 do Java.

Durante a cria¸c˜ao do aplicativo, al´em do GNS, foram utilizadas bibliotecas para possibilitar a visualiza¸c˜ao em mapa, c´alculos de distˆancia entre pontos e facilitar o acesso a geolocaliza¸c˜ao do dispositivo m´ovel.

A base de dados em nuvem consiste em uma instˆancia do servi¸co AWS EC21 executando o sistema operacional Ubuntu Server, a aplica¸c˜ao servidor do GNS e os scripts de coleta, pr´e-processamento e armazenagem de dados. Uma vis˜ao geral da arquitetura pode ser visualizada na Figura 4.1.

1Amazon Web Service Elastic Compute Cloud

(33)

22

Figura 4.1: Vis˜ao geral da arquitetura desenvolvida.

4.2

Tecnologias utilizadas

Al´em da biblioteca cliente do GNS, foram utilizadas outras tecnologias para desem-penhar algumas das tarefas necess´arias para o desenvolvimento do aplicativo BusFinder.

4.2.1

Google Maps Android API

O Google Maps Android API foi a interface utilizada no desenvolvimento do Bus-Finder para a visualiza¸c˜ao e intera¸c˜ao do mapa e de seus respectivos marcadores, al´em de apresentar um suporte nativo para a exibi¸c˜ao da localiza¸c˜ao do dispositivo em tempo real. Essa biblioteca foi escolhida por apresentar uma melhor integra¸c˜ao com o Android e pela similaridade que traria entre o aplicativo do Google Mapas e o aplicativo desenvolvido, proporcionando uma experiˆencia de uso mais amig´avel `a usu´arios que j´a utilizaram o Go-ogle Mapas em seus celulares. Essa API de mapas do GoGo-ogle ´e de uso gratuito e ilimitado para aplicativos Android disponibilizados gratuitamente. ´E necess´ario apenas a obten¸c˜ao e configura¸c˜ao de uma chave para o uso atrav´es do aplicativo. A biblioteca de utilit´arios dessa API tamb´em foi utilizada no projeto para o c´alculo de caixas delimitadoras.

(34)

23

4.2.2

Google Play Services Location API

Embora seja poss´ıvel utilizar a API do framework de localiza¸c˜ao do Android para requisitar as leituras do GPS de um dispositivo, foi preferido o uso da Google Play Services Location API pela maior facilidade de manter a geolocaliza¸c˜ao do usu´ario atualizada no aplicativo. Essa interface necessita que a biblioteca do Google Play Services esteja presente no dispositivo, o que normalmente acontece, pois ela geralmente vem instalada por padr˜ao nos smartphones Android que possuem a loja de aplicativos do Google.

4.3

Detalhes de Implementa¸

ao

4.3.1

Cache

O aplicativo desenvolvido faz uso de diversas consultas e leituras de GUIDs junto ao servidor GNS em nuvem. Essas consultas `a base de dados podem levar v´arios se-gundos. Com a finalidade de agilizar ou eliminar o tempo de espera de uma resposta para a requisi¸c˜ao das informa¸c˜oes necess´arias, foram implementados dois tipos de cache no projeto, eles evitam que novas consultas sejam realizadas ao servidor para dados que j´a foram consultados previamente. O primeiro leva em considera¸c˜ao os identificadores ´

unicos dos dados de transporte. J´a o segundo est´a relacionado aos GUIDs associados a essas informa¸c˜oes, que s˜ao gerados pelo GNS no momento de cria¸c˜ao das contas.

4.3.1.1 Cache de identificadores

O cache de identificadores guarda, em um arquivo tempor´ario, as informa¸c˜oes de um dado previamente consultadas associando-as com seus respectivos identificadores.

Quando um dado de transporte ´e necess´ario, como informa¸c˜oes sobre uma parada de ˆonibus espec´ıfica, antes que esse dado seja requisitado, ´e verificado se ele existe nos arquivos tempor´arios, fazendo uma correspondˆencia entre os identificadores. Caso o dado seja encontrado, nenhuma consulta ´e realizada ao servidor e as informa¸c˜oes s˜ao recupera-das diretamente do arquivo.

O objetivo desse cache ´e evitar que m´ultiplas requisi¸c˜oes sejam feitas ao servidor, pois, para cada dado, seria necess´ario recuperar seu GUID e, em seguida, requisitar a leitura das informa¸c˜oes contidas no objeto JSON daquele dado, como explicado na Se¸c˜ao

(35)

24 2.1.3.

4.3.1.2 Cache de GUIDs

O cache de identificadores criados pelo GNS (GUIDs) foi desenvolvido para agilizar consultas cujos dados de transporte n˜ao possuem um identificador, como as informa¸c˜oes de hor´arios de parada, e consultas que n˜ao envolvem a requisi¸c˜ao de um dado a partir de seu identificador, mas sim a partir de uma informa¸c˜ao secund´aria. No cache de GUIDs, as informa¸c˜oes de um registro s˜ao associadas ao GUID do pr´oprio registro. Ao fazer uma requisi¸c˜ao ao servidor, os respectivos GUIDs dos registros que satisfazem aos crit´erios da consulta s˜ao retornados. Em seguida, ´e verificado se os dados desses GUIDs est˜ao armazenados em cache. Caso estejam, as informa¸c˜oes desses registros s˜ao recuperadas diretamente do arquivo. Isso evita que seja necess´ario a requisi¸c˜ao de leitura dos objetos JSON contidos nos dados.

Dados de geolocaliza¸c˜ao dos ˆonibus n˜ao s˜ao armazenados em cache, j´a que s˜ao informa¸c˜oes que s˜ao frequentemente atualizadas no servidor. Por isso, as informa¸c˜oes re-lacionadas aos ˆonibus sempre ser˜ao consultadas diretamente ao servidor. Para os demais dados que representam informa¸c˜oes que n˜ao s˜ao atualizadas com tanta frequˆencia, o cache apropriado ´e ativado, dependendo do tipo de consulta. Arquivos de cache s˜ao eliminados um mˆes ap´os sua data de cria¸c˜ao, para evitar que dados j´a n˜ao existentes, ou que foram modificados no servidor, continuem sendo utilizados pelo aplicativo. Esses arquivos tam-b´em podem ser apagados por gerenciadores de mem´oria do Android quando o sistema detectar que a mem´oria dispon´ıvel do dispositivo est´a acabando. Por´em, a elimina¸c˜ao desses arquivos n˜ao causar´a nenhum problema ao aplicativo, pois este far´a uma consulta ao servidor para qualquer dado que n˜ao esteja presente em cache.

4.3.2

Alertas

Como especificado no Cap´ıtulo 3, o BusFinder disp˜oe de uma funcionalidade que notifica ao usu´ario quando um ˆonibus est´a perto dele ou se aproxima de uma parada. Essas duas situa¸c˜oes de uso da funcionalidade apresentam referenciais distintos, portanto, mostrou-se necess´ario o uso de duas abordagens diferentes.

(36)

25 4.3.2.1 Alerta de proximidade em rela¸c˜ao ao usu´ario

Na primeira abordagem, ´e verificado se um determinado ˆonibus, ou uma linha espec´ıfica, est´a pr´oximo `a localiza¸c˜ao do dispositivo. Essa verifica¸c˜ao se d´a por meio de uma consulta de geolocaliza¸c˜ao do GNS, que retorna o ˆonibus, ou linha, especificado, cuja localiza¸c˜ao est´a pr´oximo ao usu´ario.

4.3.2.2 Alerta de proximidade em rela¸c˜ao `a uma parada de ˆonibus

Na segunda abordagem, quando um alerta em rela¸c˜ao a uma parada de ˆonibus ´e criado, al´em das informa¸c˜oes da parada especificada, s˜ao salvas as localiza¸c˜oes de trˆes paradas anteriores a ela, caso existam. Essa abordagem foi criada para reduzir o problema de o usu´ario n˜ao ser notificado caso o ˆonibus passe pela parada, durante as atualiza¸c˜oes do mapa. Ao aumentar a ´area de busca, reduz-se a possibilidade desse problema acontecer, portanto, ´e verificado se o ˆonibus em quest˜ao est´a pr´oximo `a parada espec´ıfica ou `as trˆes anteriores. O usu´ario ser´a notificado assim que o ˆonibus for detectado e a quantos pontos ele est´a em rela¸c˜ao a parada selecionada, durante a cria¸c˜ao do alerta.

A detec¸c˜ao do ˆonibus se d´a por meio de uma requisi¸c˜ao ao GNS que busca por coletivos com c´odigo ou linha especificados, cuja localiza¸c˜ao est´a dentro da ´area de uma das caixas delimitadoras que s˜ao geradas a partir das latitudes e longitudes das paradas salvas na cria¸c˜ao do alarme, como mostrado na Figura 4.2. Caso um ˆonibus seja detectado, s˜ao calculadas as distˆancias em linha reta entre o ˆonibus e as paradas envolvidas para determinar qual a parada mais pr´oxima do ˆonibus.

Figura 4.2: Representa¸c˜ao da ´area de busca de um alerta em rela¸c˜ao a uma parada N.

Usando uma fun¸c˜ao da biblioteca de utilit´arios da Google Maps Android API que calcula uma latitude e longitude a partir de um centro, uma distˆancia e um ˆangulo em rela¸c˜ao ao norte, a caixa delimitadora foi gerada a partir do c´alculo dos quatro cantos da

(37)

26 caixa em rela¸c˜ao ao centro, que ´e a geolocaliza¸c˜ao de uma parada.

Como pode ser visto na Figura 4.3, a caixa delimitadora ´e calculada usando-se como parˆametro uma parada de ˆonibus P e uma distˆancia r entre a parada e os lados da caixa. Aplicando conceitos de trigonometria, calcula-se a distˆancia d entre a parada P e o v´ertice V1 da caixa. Com essas informa¸c˜oes, ´e poss´ıvel calcular a latitude e longitude do v´ertice V1 a partir do ˆangulo formado entre a reta, que compreende a parada P e o v´ertice V1, e o Norte, utilizando a fun¸c˜ao computeOffset. As mesmas etapas s˜ao feitas com os v´ertices V2, V3 e V4, a fim de obter o pol´ıgono que define a caixa delimitadora.

Figura 4.3: C´alculo de uma caixa delimitadora a partir da localiza¸c˜ao de uma parada de ˆ

onibus.

Para que n˜ao seja necess´ario que o aplicativo continue aberto a fim de checar os alertas ativos, a verifica¸c˜ao de proximidade dos ˆonibus foi implementada como um servi¸co em segundo plano, sendo uma parte da aplica¸c˜ao que continua em execu¸c˜ao mesmo com o encerramento do aplicativo. A execu¸c˜ao do servi¸co ´e evidenciada atrav´es de uma notifica¸c˜ao persistente, como pode ser visto na Figura 4.4.

Figura 4.4: Notifica¸c˜ao que mostra se o servi¸co de alertas est´a em execu¸c˜ao.

Com a finalidade de poupar recursos do dispositivo m´ovel, o servi¸co ´e interrompido sempre que detecte que n˜ao existem alarmes ativos. Caso um novo alarme seja criado ou ativado, o servi¸co volta a executar as verifica¸c˜oes dos alertas.

(38)

Cap´ıtulo 5

Conclus˜

ao

5.1

Contribui¸

oes

A principal contribui¸c˜ao do projeto ´e o uso do Global Name Service como uma base de dados, para prover escalabilidade ao BusFinder, que auxiliar´a a descoberta de poss´ıveis melhorias e funcionalidades a serem implementadas nas vers˜oes futuras do GNS, que est´a em desenvolvimento.

Al´em disso, a utiliza¸c˜ao dos dados do portal Data.Rio para a cria¸c˜ao de aplicativos voltados `a popula¸c˜ao, contribui para o desenvolvimento da plataforma. `A medida em que ´e percebido que essas informa¸c˜oes vˆem sendo utilizadas em pesquisas pela comunidade acadˆemica, estimula-se a cria¸c˜ao e manuten¸c˜ao de iniciativas de transparˆencia e acesso `a informa¸c˜ao da cidade do Rio de Janeiro.

5.2

Limita¸

oes

A utiliza¸c˜ao uma base de dados para a armazenagem das informa¸c˜oes utilizadas pelo aplicativo, reduz a dependˆencia da disponibilidade dos dados de transporte, consi-derando dados est´aticos de trˆansito fornecidos pelo Data.Rio, por´em o BusFinder ainda depender´a da disponibilidade das informa¸c˜oes de ˆonibus em tempo real providos pelo Data.Rio. Devido `a essa dependˆencia, caso o portal restrinja o acesso a essas informa¸c˜oes, o aplicativo desenvolvido deixar´a de desempenhar suas fun¸c˜oes corretamente.

Al´em da dependˆencia da disponibilidade, dados do Data.Rio est˜ao sujeitos a in-consistˆencias. Durante o desenvolvimento do projeto, notou-se um n´umero significativo

(39)

28 de ˆonibus que n˜ao possu´ıam informa¸c˜oes sobre sua linha. A fim de evitar problemas decorrentes da falta desses dados, ˆonibus que n˜ao continham suas informa¸c˜oes de linha foram ignorados durante a etapa de pr´e-processamento dos dados. Como consequˆencia, alguns ˆonibus existentes n˜ao ser˜ao mostrados pelo aplicativo. Por´em, ´e poss´ıvel minimizar este problema aplicando um algoritmo que deduza a linha de um ˆonibus baseado no seu hist´orico de localiza¸c˜ao que poderia ser aplicado durante o pr´e-processamento.

No que concerne `as funcionalidades implementadas no BusFinder, o servi¸co de alertas possui uma limita¸c˜ao que pode acarretar em falsos positivos. Considerando a situa¸c˜ao mostrada na Figura 5.1, em que um alerta tenha sido configurado para notificar ao usu´ario quando um ˆonibus chegar `a parada N, caso dois trajetos, de dia e volta, estejam muito pr´oximos um do outro e caso um ˆonibus estiver passando pelo trajeto contr´ario, mas sua localiza¸c˜ao est´a dentro da ´area de busca da parada N, o aplicativo ir´a notificar a proximidade erroneamente, j´a que o ˆonibus, apesar de pr´oximo `a parada em quest˜ao, est´a em dire¸c˜ao oposta ao trajeto ao qual a parada pertence.

Figura 5.1: Situa¸c˜ao de falso positivo do servi¸co de alertas.

Este problema poderia ser resolvido caso a informa¸c˜ao da dire¸c˜ao do ˆonibus es-tivesse dispon´ıvel ou fosse descoberta atrav´es de um algoritmo que deduza a dire¸c˜ao a partir do hist´orico de localiza¸c˜ao do ˆonibus. Sabendo a dire¸c˜ao do ˆonibus, seria poss´ıvel ignorar aqueles cuja dire¸c˜ao fosse diferente do trajeto da parada, durante a verifica¸c˜ao do alerta.

5.3

Trabalhos futuros

Considerando as capacidades do GNS no que concerne consultas de geolocaliza¸c˜ao e baseadas em contexto, e as informa¸c˜oes dispon´ıveis no Data.Rio, o BusFinder poderia

(40)

29 ser facilmente expandido para englobar outros tipos de transporte terrestre da cidade do Rio de Janeiro, como BRTs e VLTs.

Ainda que seja poss´ıvel saber a pr´oxima parada de um ˆonibus atrav´es da visuali-za¸c˜ao em mapa do aplicativo desenvolvido, seria interessante a inclus˜ao de uma funcio-nalidade que exibisse essa informa¸c˜ao de maneira autom´atica. Apesar de alguns ˆonibus possu´ırem letreiros ou avisos sonoros que fornecem essa informa¸c˜ao ao usu´ario, a maioria deles n˜ao possui tal recurso, devido a isso, muitos usu´arios de transporte p´ublico acabam por recorrer `a ajuda do motorista, expondo os viajantes a risco de acidentes causados por distra¸c˜oes ao volante. Considerando que as paradas de ˆonibus de uma linha e as localiza¸c˜oes dos coletivos j´a s˜ao informa¸c˜oes conhecidas, o ´unico empecilho para o desen-volvimento dessa funcionalidade seria detectar em qual dire¸c˜ao o ˆonibus est´a viajando.

(41)

Referˆ

encias Bibliogr´

aficas

[1] IBGE, Acesso `a internet e `a televis˜ao e posse de telefone m´ovel celular para uso pessoal : 2015. Coordena¸c˜ao de Trabalho e Rendimento, 2016.

[2] A. Sharma, X. Tie, H. Uppal, A. Venkataramani, D. Westbrook, and A. Yadav, “A global name service for a highly mobile internetwork,” SIGCOMM Comput. Commun. Rev., vol. 44, pp. 247–258, agosto 2014.

[3] D. Westbrook, “GNS Client Commands.” https://gns.name/wiki/index.php? title=GNS_Client_Commands, 2016. ´Ultimo acesso em 15/11/2017.

[4] D. Westbrook, “Query syntax.” https://gns.name/wiki/index.php?title=Query_ Syntax. ´Ultimo acesso em 15/11/2017.

[5] Mongo DB, “Query and projection operators.” https://docs.mongodb.com/manual/ reference/operator/query. ´Ultimo acesso em 15/11/2017.

[6] H. Butler, S. Gillies, and T. Schaub, “The GeoJSON Format.” https://tools.ietf. org/html/rfc7946, 2016. ´Ultimo acesso em 15/11/2017.

[7] R. Albuquerque, “Prefeitura lan¸ca portal de servi¸cos personalizado e abre base de dados do munic´ıpio para o cidad˜ao.” http://www.rio.rj.gov.br/web/guest/ exibeconteudo?id=4669376. ´Ultimo acesso em 15/11/2017.

[8] Prefeitura do Rio, “Rio de Janeiro ganha novo portal de informa¸c˜oes.” http: //www.rio.rj.gov.br/web/ipp/exibeconteudo?id=7437398. Ultimo acesso em´ 15/11/2017.

[9] Google, “O que ´e GTFS.” https://developers.google.com/transit/gtfs/?hl= pt-br. ´Ultimo acesso em 15/11/2017.

(42)

31 [10] JSON, “Introducing JSON.” https://www.json.org. ´Ultimo acesso em 15/11/2017. [11] M. C. da Rocha Vaz and R. P. Amaral, “Trackbus: um aplicativo de apoio aos usu´arios de ˆonibus na cidade do Rio de Janeiro,” Trabalho de Conclus˜ao de Curso, Universidade Federal Fluminense, Niter´oi, 2017.

Referências

Documentos relacionados

As contribui¸ c˜ oes pioneiras para a ´ area de Redes Neurais (RN) (tamb´ em denominadas redes neuronais, de neurˆ onio), foram as de McCulloch e Pitts (1943), que introduziram a

Inferˆ encia Frequentista, Inferˆ encia Bayesiana Data Mining, Neural Networks, Data Science Statistical Learning, Machine Learning... Aprendizado

O m´ etodo do fator principal est´ a intimamente relacionado com a t´ ecnica utilizada na an´ alise de componentes principais.. Na pr´ atica, as comunalidades e as variˆ

Mais comumente, os dados envolvem valores de v´ arias vari´ aveis, obtidos da observa¸ c˜ ao de unidades de investiga¸ c˜ ao que constituem uma amostra de uma popula¸ c˜ ao. A

Para cada vari´ avel preditora cont´ınua n˜ ao suavizada, perde-se um grau de liberdade; para as vari´ aveis suavizadas a atribui¸ c˜ ao de graus de liberdade ´ e mais complexa

A an´ alise de dados amostrais possibilita que se fa¸ ca inferˆ encia sobre a distribui¸ c˜ ao de probabilidades das vari´ aveis de interesse, definidas sobre a popula¸ c˜ ao da

magn´ etica por aquele baseado na medida da distˆ ancia aberta por meio de ultrassonografia, podemos estimar as probabilidades de sucesso para todas as articula¸ c˜ oes e identificar

Em geral, cada linha da matriz de dados corresponde a uma unidade de investiga¸c˜ ao (e.g. uni- dade amostral) e cada coluna, a uma vari´ avel. Uma planilha bem elaborada