81
UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO BACHARELADO APLICAÇÃO WEB PARA CONSULTA DE ITINERÁRIOS DE TRANSPORTE PÚBLICO COM VISUALIZAÇÃO NO GOOGLE MAPS KELLY CRISTINA BOECK BLUMENAU 2012 2012/1-18

APLICAÇÃO WEB PARA CONSULTA DE ITINERÁRIOS DE …campeche.inf.furb.br/tccs/2012-I/TCC2012-1-18-VF-KellyCBoeck.pdf · confiáveis e são resultados de ferramentas e sistemas computacionais

  • Upload
    vohanh

  • View
    212

  • Download
    0

Embed Size (px)

Citation preview

UNIVERSIDADE REGIONAL DE BLUMENAU

CENTRO DE CIÊNCIAS EXATAS E NATURAIS

CURSO DE CIÊNCIA DA COMPUTAÇÃO – BACHARELADO

APLICAÇÃO WEB PARA CONSULTA DE ITINERÁRIOS DE

TRANSPORTE PÚBLICO COM VISUALIZAÇÃO NO

GOOGLE MAPS

KELLY CRISTINA BOECK

BLUMENAU

2012

2012/1-18

KELLY CRISTINA BOECK

APLICAÇÃO WEB PARA CONSULTA DE ITINERÁRIOS DE

TRANSPORTE PÚBLICO COM VISUALIZAÇÃO NO

GOOGLE MAPS

Trabalho de Conclusão de Curso submetido à

Universidade Regional de Blumenau para a

obtenção dos créditos na disciplina Trabalho

de Conclusão de Curso II do curso de Ciência

da Computação — Bacharelado.

Prof. Dalton Solano dos Reis, M. Sc. - Orientador

BLUMENAU

2012

2012/1-18

APLICAÇÃO WEB PARA CONSULTA DE ITINERÁRIOS DE

TRANSPORTE PÚBLICO COM VISUALIZAÇÃO NO

GOOGLE MAPS

Por

KELLY CRISTINA BOECK

Trabalho aprovado para obtenção dos créditos

na disciplina de Trabalho de Conclusão de

Curso II, pela banca examinadora formada

por:

______________________________________________________

Presidente: Prof. Dalton Solano dos Reis, M. Sc – Orientador, FURB

______________________________________________________

Membro: Prof. Aurélio Faustino Hoppe, M. Sc – FURB

______________________________________________________

Membro: Prof. Everaldo Artur Grahl, M. Sc – FURB

Blumenau, 24 de julho de 2012.

Dedico este trabalho a Celira, Lauro, Solange,

Moacir e Eliane.

AGRADECIMENTOS

Aos meus amigos!

Eu às vezes acho que sou um Dom Quixote: divagante, entusiasmada e passional. E

entro nas maiores aventuras de carona com o acaso, a oportunidade, e sempre na companhia

de grandes amigos.

Na aventura de agora, na minha batalha contra os moinhos de vento, cheios de braços

carregados de API, classes, métodos, prazos, dúvidas, fundamentações teóricas, me descobri

um Dom Quixote, precisando de amigos Sancho Pança, sensatos, presentes, ponderados e

fiéis. E quero agradecer neste momento para estes grandes amigos, familiares e professores,

amigos que me apoiaram, incentivaram a voltar, a permanecer, a não desistir, a tentar, a

seguir, a sonhar. Agradeço a Deus pela existência de vocês, e presença em minha vida...

Moinhos de vento não me venceram, pois nesta história, eu tinha vocês junto comigo.

E mais um ciclo foi concluído! Obrigada: Solange, Moacir, Eliane, Fernanda, Leandro,

Vinícius, Rebecca, Andreia, Fabrício. E ao Professor Roque, Professor Dalton. Obrigada pelo

apoio, incentivo, ajuda e força. Não tenho palavras que possam representar o apreço e ordem

que os tenho.

E Deus, obrigada! Por ter feito tudo ser do jeito que é!

Um mapa é o maior de todos os poemas

épicos. Suas linhas e cores mostram a

realização de grandes sonhos.

Gilbert H. Grosvenor

RESUMO

Este trabalho apresenta uma aplicação que permite consultar linhas, horários e itinerários de

transporte coletivo urbano. A aplicação permite o cadastro de linhas, horários e ruas, que

armazenados em um banco de dados, farão a composição do itinerário que as linhas atendem.

Este itinerário é representado graficamente utilizando a API (Application Programming

Interface) do Google Maps. Para aplicação utilizou-se o ASP NET, linguagem C#, em

conjunto com .Net Framework 4. Juntamente com HTML, JavaScript para as páginas de

consulta. A aplicação foi desenvolvida em ambiente Visual Studio 2010.

Palavras-chave: Geoprocessamento. Entity Framework. API do Google Maps.

ABSTRACT

This paper presents an application to see lines, schedules and routes of urban public

transportation. The application allows the registration of lines, timetables and streets, stored in

a database, make the composition of the route that the lines meet. This route is plotted using

the API (Application Programming Interface) Google Maps. For implementation we used the

ASP NET, C #, together with .Net Framework 4. Along with HTML, JavaScript for the query

pages. The application was developed in Visual Studio 2010 environment.

Key-words: GIS. Entity Framework. Google Maps API.

LISTA DE ILUSTRAÇÕES

Figura 1 – Bing Maps ............................................................................................................... 23

Figura 2 – Open Street Maps .................................................................................................... 25

Figura 3 – Google Maps ........................................................................................................... 27

Quadro 4 – Google Maps – Exemplo de definição do recipiente do mapa .............................. 29

Quadro 5 – Google Maps – Exemplo da chamada da API do Google Maps ........................... 30

Quadro 6 – Google Maps – Exemplo das definições para construção do mapa ...................... 30

Quadro 7 – Google Maps – Exemplo da classe google.maps.Map .......................................... 31

Quadro 8 – Google Maps – Exemplo Carregamento Initialize() ............................................. 31

Quadro 9 – Google Maps – Resultados do objeto GeocodeRequest ........................................ 35

Figura 10 – TMB Virtual .......................................................................................................... 43

Figura 11 – TRANSPORLIS - Consulta .................................................................................. 44

Figura 12 – TRANSPORLIS – Resultado da consulta ............................................................. 45

Figura 13 – SPTRANS – Consulta e Resultado ....................................................................... 46

Figura 14 – Tabela comparativa entre os trabalhos correlatos ................................................. 47

Figura 15 – Diagrama de casos de uso do cadastro da aplicação ............................................. 50

Quadro 16 – Detalhamento do Cadastro das localizações adjacentes ...................................... 51

Quadro 17 – Detalhamento do Cadastro os pontos de parada .................................................. 52

Quadro 18 – Detalhamento do Cadastro das linhas .................................................................. 52

Figura 19 – Diagrama de casos de uso da consulta .................................................................. 53

Figura 20 – Detalhamento da consulta web.............................................................................. 53

Figura 21 – Diagrama de Classes ............................................................................................. 54

Figura 22 – Diagrama modelo entidade-relacionamento ......................................................... 56

Quadro 23 – Aplicação – chamada API Google Maps ............................................................. 57

Quadro 24 – Aplicação – função de inicialização .................................................................... 58

Quadro 25 – Aplicação – função de marcação no mapa .......................................................... 59

Quadro 26 – Aplicação – função para geocodificação reversa ................................................ 60

Quadro 27 – Aplicação – consultar Pontos .............................................................................. 61

Quadro 28 – Aplicação – obter de linhas que atendem os pontos ............................................ 61

Quadro 29 – Aplicação – obter ordem...................................................................................... 62

Quadro 30 – Aplicação – obter ruas ......................................................................................... 62

Quadro 31 – Aplicação – função AbrirConsulta – resultado da consulta ........................ 63

Figura 32 – Aplicação – apresentação dos cadastros ............................................................... 64

Figura 33 – Aplicação – cadastro de ruas ................................................................................. 65

Figura 34 – Aplicação – alteração de pontos ............................................................................ 65

Figura 35 – Consulta – apresentação ........................................................................................ 66

Figura 36 – Consulta – endereço origem .................................................................................. 67

Figura 37 – Consulta – endereço destino.................................................................................. 67

Figura 38 – Consulta – características do mapa apresentado ................................................... 68

Figura 39 – Consulta – resultado .............................................................................................. 68

Figura 40 – Consulta de testes com dois marcadores de pontos de parada .............................. 69

Quadro 41 – Resultados de testes com doic marcadores de pontos de parada ......................... 70

Figura 42 – Consulta de testes com três marcadores de pontos de parada ............................... 70

Quadro 43 – Resultados de testes com três marcadores de pontos de parada .......................... 71

Figura 44 – Consulta de testes com cinco marcadores de pontos de parada e adjacente ......... 71

Quadro 45 – Resultado de testes com cinco marcadores de pontos de parada e adjacente ...... 72

Quadro 46 – Tabela comparativa deste trabalho e aplicações disponíveis no mercado ........... 73

LISTA DE TABELAS

Tabela 1 – Espaço para armazenamento................................................................................... 72

LISTA DE SIGLAS

API – Application Programming Interface

CSS - Cascading Style Sheets

EDM – Entity Data Model

EF – Entity Framework

GPS - Global Position System

HTML - HyperText Markup Language

LINQ - Language INtegrated Query

MER – Modelo Entidade Relacionamento

MVC – Model View Controller

ORM - Object-Relational Mapping

OSM – Open Street Maps

REST - Representational State Transfe

SIB - Sistema Integrado de Transporte Coletivo Urbano de Blumenau

SIG – Sistemas de Informações Geográficas

SOAP - Simple Object Access Protocol

UML - Unified Modeling Language

URL - Uniform Resource Locator

XML - eXtensible Markup Language

WPF - Windows Presentation Foundation

SUMÁRIO

1 INTRODUÇÃO .................................................................................................................. 13

1.1 OBJETIVOS DO TRABALHO ........................................................................................ 14

1.2 ESTRUTURA DO TRABALHO ...................................................................................... 15

2 FUNDAMENTAÇÃO TEÓRICA .................................................................................... 16

2.1 CARTOGRAFIA ............................................................................................................... 16

2.2 GEOPROCESSAMENTO E GEOTECNOLOGIAS ........................................................ 20

2.3 WEB MAPPING ............................................................................................................... 21

2.3.1 Bing Maps ....................................................................................................................... 23

2.3.2 Open Street Maps ............................................................................................................ 24

2.3.3 Google Maps ................................................................................................................... 26

2.3.3.1 API do Google Maps .................................................................................................... 28

2.3.3.1.1 Objetos de Mapas Básicos ....................................................................................... 29

2.3.3.1.2 Objetos de Eventos de Mapa .................................................................................... 31

2.3.3.1.3 Controles de Mapa ................................................................................................... 32

2.3.3.1.4 Sobreposições de Mapas .......................................................................................... 33

2.3.3.1.5 Serviços de Mapas ................................................................................................... 34

2.4 ENTITY FRAMEWORK .................................................................................................. 39

2.4.1 LINQ ............................................................................................................................... 41

2.4.2 Entity SQL ...................................................................................................................... 42

2.5 TRABALHOS CORRELATOS ........................................................................................ 42

2.5.1 TMB Virtual .................................................................................................................... 42

2.5.2 TransporLis ..................................................................................................................... 43

2.5.3 SPTRANS ....................................................................................................................... 45

3 DESENVOLVIMENTO DA APLICAÇÃO .................................................................... 48

3.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO ....................... 48

3.2 ESPECIFICAÇÃO ............................................................................................................ 49

3.2.1 Diagrama de Casos de Uso ............................................................................................. 49

3.2.2 Casos de Uso ................................................................................................................... 49

3.2.2.1 Cadastrar localizações adjacentes ................................................................................. 50

3.2.2.2 Cadastrar pontos de paradas ......................................................................................... 51

3.2.2.3 Cadastrar linhas ............................................................................................................ 52

3.2.3 Diagrama de Classes ....................................................................................................... 54

3.2.4 Modelo Entidade Relacionamento .................................................................................. 55

3.3 IMPLEMENTAÇÃO ........................................................................................................ 56

3.3.1 Técnicas e ferramentas utilizadas.................................................................................... 57

3.3.2 Operacionalidade da implementação .............................................................................. 64

3.4 RESULTADOS E DISCUSSÃO ...................................................................................... 69

4 CONCLUSÕES .................................................................................................................. 75

4.1 EXTENSÕES .................................................................................................................... 76

REFERÊNCIAS BIBLIOGRÁFICAS ................................................................................. 77

13

1 INTRODUÇÃO

Desde os primórdios da história da existência da humanidade têm-se registros do uso

de mapas pelas sociedades. Eram mapas diferentes do que se conhece atualmente, feitos em

diferentes materiais, mas os objetivos eram basicamente os mesmos de hoje: localização,

orientação e movimentação.

De acordo com Almeida, Guerrero e Fiori (2007, p. 21), o surgimento do mapa

precede a invenção da escrita. Esses eram confeccionados para mostrar as áreas onde havia

caça e pesca ou marcar o caminho para casa. Da antiguidade até os dias de hoje o mapa

sempre esteve presente no cotidiano das pessoas, passando pelos contínuos processos de

transformação que o conhecimento possibilitou à humanidade.

O mapa é uma imagem convencionada, codificada que representa feições e

características da realidade geográfica. O mapa não reproduz fielmente o terreno. Ele é a

construção que seleciona alguns aspectos e os representa, fazendo uso de um sistema de

símbolos. Os elementos espaciais da superfície terrestre escolhidos para serem representados

no mapa (como objetos, fatos e relações) são transformados em símbolos e localizados no

mapa a partir de um sistema de coordenadas que considera distâncias e direções (ALMEIDA;

GUERRERO; FIORI, 2007, p. 20).

Conforme Labtate (2011) todos os mapas possuem características básicas como

escalas, projeções cartográficas, legenda, título, porém podem variar muito na aparência.

Existem tipos de mapas diferentes de acordo com a finalidade de uso. De modo geral, pode-se

agrupá-los em dois grandes conjuntos:

a) mapas de propósitos gerais ou mapas de base: geralmente mostram objetos

naturais ou culturais do meio ambiente, priorizando a localização e mostrando

algumas feições genéricas do mundo ou parte dele como vias de comunicação,

corpos d’água, linhas costeiras e limites políticos-administrativos. Como exemplo

podem ser citados os mapas topográficos, mapas políticos e mapas viários;

b) mapas temáticos: mostram a classificação de fenômenos que interessam a um

determinado ramo específico de estudo ou de atividades humanas.

Conforme Catalogeo (2011), a cartografia é a arte e a ciência de desenho de mapas. Ela

permite a representação geográfica de elementos naturais e artificiais de um território.

Hoje, após várias evoluções tecnológicas a cartografia é precisa e conta com tecnologia

digital através de inúmeros recursos como imagens orbitais, sistema de posicionamento por

14

satélites, programas e computadores que facilitam as atividades cartográficas e também

proporcionam uma rápida divulgação e utilização de informações (LABTATE, 2011).

Assim, as informações cartográficas disponíveis atualmente são mais precisas e

confiáveis e são resultados de ferramentas e sistemas computacionais. Os Sistemas de

Informações Geográficas (SIG) ou as ferramentas computacionais de geoprocessamento

permitem realizar análises complexas ao integrar dados de diversas fontes e ao criar banco de

dados geo-referenciados. Neste contexto, o termo geoprocessamento denota a disciplina do

conhecimento que utiliza técnicas matemáticas e computacionais para o tratamento de

informação geográfica e que vem influenciando de maneira crescente as áreas de análise de

recursos naturais, transportes, comunicações, energia e planejamento urbano e regional

(CÂMARA; DAVIS; MONTEIRO, 2001).

Conforme Carvalho (2002), um SIG no segmento dos transportes pode relacionar uma

informação importante de infraestrutura do transporte como condições de estradas, volume de

tráfego, taxa de acidentes e capacidade de uma ponte. Através de mapas digitalizados é

possível identificar a necessidade e a viabilidade de adoção de critérios consistentes para a

subdivisão do espaço urbano, de representar redes de tráfego e de avaliar a condição de

utilização do transporte público.

Pode-se citar como aplicações do geoprocessamento em transporte o planejamento da

capacidade e manutenção de vias, manutenção de sinalização, agrupamentos de pontos de

entrega e coleta para maximização de eficiência de frota de veículos, acompanhamento

estatístico de acidentes de tráfego, acompanhamentos estatísticos de transporte público,

criação de rotas para cargas intermunicipais e interestaduais e acompanhamento por GPS

(Global Position System) (CARVALHO, 2002).

1.1 OBJETIVOS DO TRABALHO

O objetivo principal deste trabalho é a especificação e implementação de um aplicativo

web para a consulta de itinerários e horários de transporte público urbano.

a) os itinerários deverão ser disponibilizados para visualização no Google Maps.

15

1.2 ESTRUTURA DO TRABALHO

Este trabalho está dividido em quatro capítulos, sendo que o segundo apresenta a

fundamentação teórica com conceitos de cartografia, mapas, geoprocessamento e web

mapping, Google Maps API, Entity Framework. Além disso, apresenta trabalhos correlatos

sobre o assunto.

O terceiro capítulo trata das tecnologias utilizadas para o desenvolvimento deste

trabalho, a utilização da API do Google Maps, linguagens, ferramentas e tecnologias. Fazem

parte desta especificação os diagramas de classes, de atividades, modelo entidade-

relacionamento e modelo conceitual. Também são comentados os resultados, problemas e

dificuldades encontrados durante a implementação da aplicação. O quarto capítulo apresenta

conclusões e extensões.

16

2 FUNDAMENTAÇÃO TEÓRICA

Para o entendimento deste trabalho são apresentados aspectos e conceitos da

cartografia e mapas. Em seguida são explicados conceitos de Sistema de Informações

Geográficas e web mapping. Na sequência são apontadas e relacionadas ferramentas

proprietárias disponíveis atualmente na Internet para integração com mapas, e a utilização

destas ferramentas em aplicações para transportes. Posteriormente são apresentadas as

tecnologias utilizadas neste trabalho, incluindo Entity Framework. Ao final são mencionados

os trabalhos correlatos.

2.1 CARTOGRAFIA

A comunicação entre os seres humanos permite o compartilhamento de informações,

ideias, emoções e habilidades. Assim, utilizam palavras, imagens, figuras, gestos, gráficos

dentre outros, para alcançar este propósito (BARBOSA; RABAÇA, 2001).

Conforme Loch (2006) ao estudar o progresso da civilização, o homem se depara com

esforços no sentido de como representar, por gráficos, as coisas importantes do meio ambiente

que permitem sua sobrevivência.

São do tempo das populações nômades das cavernas, os desenhos ou inscrições

rupestres, que lembram animais. Também é da antiguidade a informação dos primeiros mapas

marcando itinerários. Ainda não aparecia a estrutura espacial do ambiente; somente

marcavam uma rota que comunicava um conhecimento essencial à sobrevivência (LOCH

2006).

De acordo com Almeida, Guerrero e Fiori (2007) e Labtate (2011), o surgimento do

mapa precede da invenção da escrita. No tempo das cavernas, os mapas eram utilizados como

registro de deslocamentos, representando pontos importantes (matas, rios, possibilidades de

casa e de pesca, retornos para casa) por meio de imagens desenhadas. Eles apresentavam uma

relação direta entre a realidade e sua respectiva representação. Um dos mapas mais antigos já

encontrados foi confeccionado na Suméria (atual Iraque), em uma pequena tábua de argila

cozida. Data de aproximadamente 2.500 a.C., representa duas cadeias de montanhas, e ao

centro, um rio, provavelmente o Eufrates. Trate-se de um mapa simples, sem título, sem

17

legenda e sem escala, mas de valor histórico inestimável.

Conforme Labtate (2011) com o desenvolvimento de conceitos geométricos, novos

instrumentos de medição da superfície foram desenvolvidos: os egípcios (cerca de 1300 a.C.)

inventaram o côvado, instrumento para demarcar terras; os gregos usaram as teorias da

geometria para inferir a forma da terra, seu tamanho e os conceitos de latitude e longitude.

Apesar de os antigos chineses terem um sistema bem definido para mapeamento, a

Cartografia atual vem das técnicas e conhecimentos estabelecidos pelos gregos, onde a ênfase

eram as relações espaciais. Os romanos herdaram e ampliaram esse conhecimento, aplicando-

os na construção dos seus mapas. Na Idade Média houve um retrocesso científico. Porém, na

Era dos Descobrimentos, com a tecnologia manual associada à tecnologia magnética,

representada pela Bússola, surgiram as Cartas De Marear, que serviam para as navegações

marítimas na época. No mapeamento moderno o foco é o lugar, tratado nos mapas de

referência geral para a localização. As representações dos fenômenos geográficos como clima,

vegetação, uso do solo, densidade populacional, por exemplo, deu origem aos mapas

temáticos no século XVIII.

Atualmente, na era da informação, o desenvolvimento humano requer cada vez mais

exatidão nas medidas, e a teoria de sistemas aparece forte na metade do século XX. O

ambiente precisa ser entendido e administrado como um sistema de processos inter-

relacionados. A complexidade do mundo atual exige mapas especializados e rigorosos, pois a

informação é uma ferramenta poderosa em questões de inventário e manejo do planeta. A

produção de mapas é digital. A partir da década de 1960 o mapeamento por computador passa

a ser operacional tanto na produção de mapas de base quanto na produção de mapas

temáticos, com a análise matemática e a estatística de massa de dados, em programas

computacionais denominados de SIG (Sistemas de Informação Geográfica) (LABTATE,

2011).

Na história da Cartografia e da humanidade, Loch (2006) aponta que os mapas antigos

eram vistos como veículos de orientação no espaço geográfico. A principal característica dos

mapas era a estocagem dos dados geográficos que serviam para análise dos lugares e de como

chegar até eles. Com a evolução humana e também da Cartografia, os mapas passaram a ser

considerados também como uma forma de comunicação de dados e mais recentemente, como

um instrumento de visualização científica. Entretanto a Cartografia pode ligar igualmente a

análise, a visualização e a comunicação de dados.

Para os cartógrafos, os mapas são veículos de transmissão do conhecimento. Eles são

representações gráficas de determinado espaço geográfico, concebidos para transmitir a visão

18

subjetiva ou conhecimento de alguém para alguns ou para muitos. Esse conhecimento pode

ser o mais amplo e variado possível ou o mais restrito e objetivo possível. Assim, cada mapa

tem um autor, uma questão e um tema.

Se os mapas são modelos da realidade (representação gráfica) e a realidade é vista de

maneira individual, então eles são subjetivos e não podem ser considerados como fotografias

da realidade ou a própria realidade reduzida (LOCH 2006).

Ainda conforme Loch (2006), um mapa como modelo da realidade pode tudo:

representar o passado, o futuro desconhecido ou imaginado, considerando o científico e a arte,

os fatos e a ficção.

Um mapa pode ser considerado como um Sistema de Informação Espacial que fornece

respostas para muitas questões referentes à área representada, por exemplo:

a) a distância entre dois pontos, a posição de pontos com relação a outro;

b) o tamanho das áreas;

c) a distribuição de certos padrões.

Essas respostas podem ser retiradas diretamente de um mapa sem necessidade de ajuda

de implementações.

Assim sendo, Loch (2006) afirma que o objetivo da Cartografia, consiste na

representação da superfície terrestre ou parte dela, de forma gráfica e bidimensional, que

recebe o nome genérico de mapa ou carta. Atualmente algumas definições ampliam esse

significado inicial, e incluem aspectos da confecção e uso de mapas e cartas e seus produtos

tais como, maquetes, visualizações 3-D da superfície, etc.

As características básicas dos mapas são:

a) localização e atributos: os mapas são concebidos a partir desses dois elementos da

realidade. Onde localização é dada por suas posições no espaço (coordenadas)

bidimensional e tridimensional. Os atributos são as qualidades e as magnitudes, ou

ainda variáveis temáticas: temperatura, clima, tipo de solo e tipos de religiões;

b) escala: caracteriza-se pela representação dimensional entre a realidade gráfica e a

realidade, a representação reduzida do mundo real;

c) projeção cartográfica: nas plantas, pode-se desconsiderar a curvatura da Terra

porque são representadas pequenas áreas. Nos mapas, a representação da Terra se

restringe a um problema, que é a construção de um mapa com uma figura de

imagem adequada, semelhante ao que se seja representar: uma esfera. Como não há

possibilidade de uma representação absolutamente rigorosa, o homem procurou

soluções cartográficas aproximadas, as quais são conhecidas como projeções

19

cartográficas. Almeida, Guerrero e Fiori (2007) resumem que projeções

cartográficas são operações matemáticas utilizadas para representar a superfície

esférica da Terra em uma superfície plana;

d) abstração: os mapas são abstrações da realidade. Pois é impossível reduzir o mundo

real, tal como ele é representa-lo em um mapa. Ele é tão complexo que o resultado

ficaria elegível, confuso e provavelmente não aproveitável. Portanto, os mapas

mostram somente informações selecionadas do mundo real para serem

representadas. Essa informação é subjetiva e depende de uma variedade de

operações, tais como simplificação e classificação que procuram facilitar o

entendimento;

e) simbolismo: os dados que descrevem um fenômeno de um determinado espaço

geográfico (seja um país, estado, município, bacia hidrográfica ou outro qualquer)

podem ser mostrados com o uso de uma variedade de signos gráficos. As

características gráficas dos traços relacionados aos atributos dos dados conduzem a

uma ideia de signos, os quais são designados os símbolos. Os símbolos dotados de

significado geográfico, quando arranjados num plano formam o que se chama de

Mapa. Todos os mapas usam signos para representar elementos da realidade. O

significado dos signos caracteriza o simbolismo da Cartografia.

De acordo com Loch (2006) a evolução humana na construção de gráficos e mapas

aconteceu paralela à evolução das ideias e da tecnologia. O mapa foi uma maneira que o

homem encontrou para representar o que era importante ou de interesse de um grupo

dominante. Era preciso comunicar o conhecimento existente sobre o mundo e isto envolvia o

espaço e sua percepção e as imagens construídas pela mente humana. Neste processo, o

homem desenvolveu habilidades em descrever um cenário geográfico usando a simbologia

gráfica para construir o que se designa “mapa”. Conforme as necessidades e a tecnologias

disponíveis, os mapas evoluíram de simples representações do meio, para complicadas

representações considerando a esfericidade da Terra.

Onde, após várias evoluções tecnológicas a cartografia é precisa e conta com a

tecnologia digital através de inúmeros recursos, ferramentas e serviços: sistemas de

posicionamento por satélites, programas e computadores que facilitam as atividades

cartográficas e também proporcionam uma rápida divulgação de informação bem como sua

utilização (LABTATE, 2011).

Para Almeida, Guerrero e Fiori (2007) essas ferramentas tecnológicas permitem para a

cartografia sofisticação e precisão de dados até então jamais apresentados nos mapas.

20

2.2 GEOPROCESSAMENTO E GEOTECNOLOGIAS

Conforme Faria (2008) durante toda a história as civilizações se ocuparam em estudar

e registrar através de mapas ou cartas dados sobre o relevo, fauna, flora, rotas comerciais,

limites políticos, clima, entre outros. Com o avanço da tecnologia surgiu a possibilidade de se

integrar vários dados e mapas e analisá-los em conjunto, possibilitando, através de análises

complexas e a criação de bancos de dados georreferenciados (dados ou objetos referenciados

com base em sua localização geográfica), o desenvolvimento de diversas áreas como a

cartografia, o planejamento urbano, comunicações, transportes e até a análise de recursos

naturais.

Nos últimos anos tem-se presenciado a massificação do geoprocessamento. Com o

lançamento de diversas ferramentas, proprietárias ou não. Atualmente, qualquer pessoa

mesmo que não entenda nada de geoprocessamento pode ter acesso a mapas de qualquer

região do mundo que aliam imagens de satélite, GPS e modelos em 3D.

Conceitualmente, geoprocessamento é o tratamento das informações geográficas, ou de

dados georreferenciados, por meio de softwares específicos e cálculos. Ou, ainda, o conjunto

de técnicas relacionadas ao tratamento da informação espacial (FARIA 2008).

Moura (2005) acredita que o termo Geoprocessamento, oriundo do sentido de

processamento de dados georreferenciados, significa implantar um processo que traga um

progresso, um andar avante na grafia ou representação da Terra. Não é somente representar,

mas é associar a esse ato um novo olhar sobre o espaço, um ganho de conhecimento, que é a

informação.

O geoprocessamento engloba processamento digital de imagens, cartografia digital e

os sistemas de informações geográficos, ou sistemas de informação geográfica, ou mesmo

sistema geográfico de informação.

A cartografia digital refere-se à automação de projetos, captação, organização e

desenho de mapas; enquanto o sistema de informações geográficas refere-se à aquisição,

armazenamento, manipulação e apresentação dos dados georreferenciados (MOURA, 2005).

Medeiros (2011) explica geotecnologias, como as tecnologias relacionadas com as

diferentes etapas do Geoprocessamento. Geoprocessamento é o termo usado para definir o

conjunto de tecnologias utilizadas para o tratamento da informação espacial. Sempre que em

um projeto o componente espacial de um dado pode/deve ser considerada, há condições de se

aplicar técnicas de Geoprocessamento.

21

De forma geral, o Geoprocessamento apresenta as etapas descritas a seguir, com os

respectivos conjuntos de técnicas (geotecnologias) relacionadas ao tratamento da informação

espacial:

a) coleta: cartografia, sensoriamento remoto, fotometria, GPS (Global Positioning

System), dados alfanuméricos;

b) armazenamento: banco de dados;

c) tratamento e análise: modelagem de dados, geoestática e análise espacial;

d) uso Integrado: Sistemas de Informações Geográficas (SIG) e WebGis (web

mapping).

Estas tecnologias têm sido aplicadas em estudos ambientais, planejamento urbano,

cadastro multifinalitário, saúde pública, agricultura, entre outras áreas (MEDEIROS, 2011).

2.3 WEB MAPPING

Web mapping, também conhecida como WebGis, está relacionada ao

Geoprocessamento. De forma simplificada, pode-se definir como a publicação na internet de

mapas interativos ou dados espaciais. Diversos softwares, tanto de origem proprietária como

de código aberto podem ser utilizados para o desenvolvimento de uma aplicação web mapping

(MEDEIROS, 2009).

Esta disponibilização de recursos e ferramentas permite facilidades nas construções de

aplicações ou projetos simples e por vezes complexos.

Geralmente através do uso de Application Programming Interface (API), que é

composta por uma série de funções acessíveis por programação, e que permitem utilizar

características do software menos evidentes ao utilizador tradicional (WIKIPEDIA, 2012a),

aplicações web mapping permitem o uso ou criação de mapas, consultas, criação de rotas sem

que essa atividade fique sob a responsabilidade do desenvolvedor. Ao desenvolvedor cabe à

implementação específica do projeto e suas regras de negócio. Além é claro, da escolha de

qual ferramenta disponível melhor se adequa as necessidades do projeto: compatibilidade,

visualização, documentação, etc.

Para Medeiros (2009) destacam-se três tipos de mapas básicos disponibilizados na web

com dados geográficos:

a) mapas estáticos: são mapas na forma de imagem (nos formatos JPEG e PNG, por

22

exemplo) que são inseridas em páginas da internet. Essa é a forma mais básica de

publicar um mapa na internet, e por consequência, este tipo de mapa apresenta

baixa interatividade com o usuário. Assim, o foco principal deste tipo de mapa é

portar a representação de algum tipo de informação espacial para o usuário

possibilitando, exclusivamente, sua visualização. Uma das vantagens deste método

é que havendo grande quantidade desses mapas representando diferentes épocas

pode-se fazer um estudo temporal comparativo;

b) mapas gerados a partir de formulários: consiste em disponibilizar ao usuário um

formulário onde são solicitadas informações quanto à área geográfica de interesse.

Quando o usuário termina de preencher o formulário, as informações são

transmitidas a um servidor, que recupera os dados fornecidos e transforma o mapa

final exibindo-o em um formato de imagem. A escolha por esse tipo de ferramenta

deve levar em consideração certas limitações. Por exemplo, há pouca versatilidade

sobre esse mapa resultante, uma vez que a ação de arrastar o mapa requer a geração

de uma nova imagem;

c) navegação baseada em mapas dinâmicos: neste tipo de web mapping, o usuário

seleciona uma área de seu interesse em um mapa geral, o que resulta na navegação

para outro mapa ou imagem mais específico, ou seja, com informações mais

detalhadas desta região. Em algumas aplicações, existem ícones que ativam funções

mais elaboradas, como cálculo de distâncias na tela, consulta aos atributos de

elementos ou ativação e desativação de camadas de informação.

Conforme Medeiros (2011), a grande popularização no uso de web mapping, devido a

grande quantidade de serviços gratuitos, também apresenta as vantagens:

a) facilidades de manuseio pelo usuário final (aplicações amigáveis);

b) independência de sistema operacional;

c) o usuário só precisa de um computador com navegador e acesso à internet;

d) dependendo da arquitetura da qual se fez uso, não é necessário carregar, instalar ou

manter qualquer software ou dados no cliente;

e) interoperabilidade (podem interagir com sistemas desktop ou outros sistemas da

internet);

f) permite diferentes tipos de acesso aos dados.

Entre as desvantagens, Medeiros (2011) aponta:

a) tempo de carga de dados;

b) limitações das análises espaciais;

23

c) não substitui um programa de SIG por completo.

2.3.1 Bing Maps

Bing Maps, representado na Figura 1, anteriormente conhecido por de Live Search

Maps, Windows Live Maps e Windows Live Local, é um sistema desenvolvido pela

Microsoft para visualização interativa dos mapas e imagens de satélite como parte das

aplicações online (WIKIPEDIA, 2012b).

Fonte: Bing Maps (2012).

Figura 1 – Bing Maps

O Bing é um serviço de mapas online, que permite aos usuários pesquisar, descobrir,

planejar e compartilhar informações sobre locais específicos usando mapas rodoviários

tradicionais, vistas fotográficas áreas de alta resolução, e capacidades de busca por

aproximação (MICROSOFT, 2012).

As principais características da plataforma incluem (MICROSOFT, 2011):

a) imagens fotorrealistas;

b) geocodificação para mais de 70 milhões de endereços;

c) opções de suporte disponíveis;

d) robusto conjunto de APIs, disponível para desenvolvedores, para construção de

novas aplicações.

Entre o conjunto de API’s destacam-se (MICROSOFT, 2012):

24

a) Bing Maps SOAP (Simple Object Access Protocol) Services: é um conjunto de

serviços que permitem integrar mapas e imagens, direções de condução, cálculos de

distâncias, etc;

b) Bing Maps REST (Representational State Transfer) Services: estes serviços

utilizam URLs Rest para executar tarefas de criação de um mapa com picos,

geocodificação de um endereço, e recuperação de metadados de imagens ou

cálculos de percurso;

c) Bing Maps WPF Control: permite ao desenvolvedor integrar o Bing Maps ao WPF.

O Bing Maps WPF controla e recupera as últimas imagens Bing Maps para o

aplicativo desenvolvido usando a arquitetura baseada em nuvem.

2.3.2 Open Street Maps

Open Street Maps, conhecido pela sigla OSM, é um projeto colaborativo para criar um

mapa livre e editável do mundo, representado na Figura 2. De código aberto, os mapas são

criados usando dados de receptores GPS portáteis, fotografias aéreas e outras fontes livres e

são disponibilizados para qualquer uso, incluindo fins comerciais. Tanto as imagens obtidas

por processamento dos dados quanto os dados estão disponíveis sob uma licença Creative

Commons Attribution-ShareAlike 2.0. Utilizadores registrados podem carregar os históricos

dos GPS e editar os dados usando as ferramentas disponíveis (OPEN STREET MAP WIKI,

2012).

25

Fonte: Open Street Map (2012).

Figura 2 – Open Street Maps

No Brasil o projeto apresenta poucas informações, apenas algumas cidades tem um

considerável número de bairros mapeados.

A principal distinção entre Open Street Maps e outros mapas disponíveis, além da

proposta de ser um projeto colaborativo, é que estes outros têm ferramentas que permitem ao

utilizador sobrepor seus próprios dados no mapa, e exibi-los de forma particular. Ao contrário

destes sistemas, a finalidade primária do Open Street Maps, é fornecer ao usuário os dados de

mapas subjacentes. Qualquer pessoa pode utilizar estes dados de diferentes formas em seus

projetos (OPEN STREET MAP WIKI, 2012).

De forma resumida, o modelo de dados do Open Street Maps, apresenta as seguintes

características:

a) tags: são etiquetas, valores chave, ligados a cada elemento geográfico do Open

Street Maps (com um máximo de 255 caracteres, incluindo espaços), a restrição é

que devem ser únicas no interior do elemento. E ainda, se não houver tags

associadas a um recurso, não há como exibir esses dados em renderizadores;

b) nós: pontos na Terra são chamados de nós e são representados por uma latitude,

longitude e quantas marcas podem ser necessárias. São usados para representar

lojas, paradas de ônibus, bancos e caixas de correios. Um nó não etiquetado (sem

tags) será sempre um subelemento de outro elemento;

c) caminhos: uma lista ordenada de nodos é chamada de caminho. Um caminho tem

no máximo 2.000 nós para assegurar que as ferramentas e utilizadores não sejam

26

sobrecarregados com estruturas muito grande e de difícil manipulação. São usados

para representar as características lineares como caminho, estradas, linhas de

transporte ferroviário;

d) relações: são ordenados, listas de nós, formas ou relações. Cada membro de uma

relação tem um papel opcional que dá uma informação adicional sobre esse

subelemento. Esses papéis são sequências de até 225 caracteres, como valores de

marca. Podem representar estradas ou ciclovias, limites administrativos,

dependendo do conjunto de etiquetas associadas;

e) identificadores: qualquer elemento de dados Open Street Map (nós, caminhos,

relações) é identificado por um único identificador numérico, cujo propósito é

permitir a referência de características individuais. Uma relação ou um caminho

usam esses identificadores para fazer referência aos subelementos;

f) formatos de arquivo: arquivos de dados são tradicionalmente distribuídos em um

formato XML (eXtensible Markup Language), que representa o nó, caminhos e

relação de um esquema simples. Porém sem compressão, este formato XML pode

ser extremamente grande, assim sendo geralmente é distribuído usando um

algoritmo de compressão como GZIP ou BZ2. A maioria das ferramentas

desenvolvidas para trabalhar com o formato XML do OSM também pode

manipular o XML compactado. Para resolver o problema do tamanho do XML e

velocidade de análise, um formato separado usando o protocolo do Google Projeto

Buffers foi criado para embalar o máximo possível de dados OSM em um arquivo

binário (OPEN STREET MAP WIKI, 2012).

2.3.3 Google Maps

Google Maps, conforme Figura 3, é um serviço de pesquisa e visualização de mapas e

imagens de satélite da Terra na web fornecido e desenvolvido pela Google (GOOGLE MAPS,

2012).

27

Fonte: Google Maps (2012).

Figura 3 – Google Maps

Atualmente, o serviço disponibiliza mapas e rotas para qualquer ponto nos Estados

Unidos, Canadá, União Europeia, Austrália e Brasil, entre outros. Disponibiliza também

imagens de satélite do mundo todo, e apresenta imagens detalhadas de grandes cidades, como

Nova Iorque, Paris, São Paulo e Rio de Janeiro (GOOGLE MAPS, 2012).

O Google Maps oferece uma grande capacidade de resposta, interface intuitiva,

mapeamento da rua e imagens. O principal motor por trás de sua rápida aceitação para

visualização de mapas na internet é a capacidade de personalizar o mapa para atender às

necessidades específicas da aplicação. A possibilidade de visualização do mapa com a adição

de dados específicos do aplicativo é o verdadeiro motor de sua aceitação como uma

ferramenta de visualização geoespacial (GHELMAN, 2009).

O sistema de transporte coletivo de Blumenau integra suas consultas ao Google Maps.

O sistema objetiva facilitar o deslocamento pela cidade através de transporte coletivo.

Informando o ponto de saída, o destino e o horário da saída, o mapa traça as opções de pontos

de ônibus, de linha do transporte urbano e do trajeto a ser feito a pé até o ponto e deste para o

destino. O tempo total é calculado de acordo com as informações repassadas pelo Consórcio

Siga (FRESARD, 2011).

O Sistema Integrado de Transporte Coletivo Urbano de Blumenau (SIB) oferece

noventa e sete linhas com integração em seis terminais urbanos, que permitem o

deslocamento da população para os mais diversos locais pagando uma tarifa única.

Diariamente duzentos e sessenta e sete ônibus do sistema circulam por duzentas e setenta e

28

sete ruas, oferecendo cinco mil, quatrocentos e trinta e sete viagens e percorrendo cerca de

cinquenta e cinco mil quilômetros. Atendendo assim, uma população usuária deste transporte

de cento e vinte cinco mil passageiros (SETERB, 2012).

O Google Maps apresenta uma série de APIs que são apresentadas na seção a seguir,

bem como um maior detalhamento deste serviço.

2.3.3.1 API do Google Maps

Conforme Google Developers (2012a), a Google Maps API é um serviço gratuito,

disponível para qualquer site que o público possa usar gratuitamente.

Existe uma restrição de uso para empresas que cobram taxas pelo acesso, rastreiam

recursos ou constroem aplicativos internos, estas são orientadas a usar a Google Maps API

Premier, que fornece suporte técnico, recursos avançados e um acordo de nível de serviço.

A Google Maps possui várias APIs que permitem que seja incorporada a

funcionalidade do Google Maps nos aplicativos e ainda adicionar dados da própria aplicação

desenvolvida sobre os mapas:

a) Google Maps Java Script API: Permite a incorporação de um mapa na página web

desenvolvida usando Java Script. Disponibilizada na Versão 3. Ainda conforme

Google Developers (2012a), a Versão 2 foi oficialmente removida e continuará a

funcionar de acordo com a política de remoção da Google, orientando que as

aplicações sejam migradas para a Versão 3;

b) Google Maps API for flash: Permite a incorporação de um mapa na página web

baseada em Flash,

c) Google Earth API: Permite a incorporação de mapas em 3D;

d) Serviços da web: Permite o uso de solicitações de URL para acessar informações

de geocodificação, rotas, elevação e lugares dos aplicativos cliente e manipule os

resultados em JSON (JavaScript Object Notation) ou XML;

e) Google Maps Data API: Permite a visualização, armazenagem e atualização de

dados do mapa por meio de feeds da Google Data API, usando um modelo de

elementos (marcadores, linhas e formas) e coleção de elementos (GOOGLE 2012).

Conforme Google Developers (2012b), a versão 3 da API do Google Maps é

implementada usando uma estrutura modificada de MVC (Model-view-controller).

Todas as alterações de um estado de um objeto MVC são manipuladas por meio das

29

funções set e get de um formato específico. Todos os estados dos objetos MVC são

armazenados como propriedades deste objeto, e todas as observações sobre as alterações de

estado feitas por meio de manipuladores de eventos também são em um formato específico.

Ainda conforme Google 2012 B, esta versão da API Java Script do Google Maps não

faz uso de chaves de API.

Conceitualmente, na API há uma divisão em áreas, as quais são:

a) objetos de mapas básicos;

b) objetos eventos de mapa;

c) controles de mapa;

d) sobreposições de mapa;

e) serviços de mapa.

2.3.3.1.1 Objetos de Mapas Básicos

Conforme Google Developers (2012c) o elemento fundamental da API do Google

Maps V3 é o próprio mapa. O objeto fundamental é google.maps.Map.

Na aplicação web deve ser declarado um verdadeiro DOCTYPE. Alguns CSS que

funcionam no modo quirks não são válidos no modo padrão. Especificamente, todos os

tamanhos baseados em porcentagem devem ser herdados de elementos de bloco pai. Se algum

dos ancestrais não especificar um tamanho, eles são atribuídos o tamanho de 0 x 0 pixels. Por

esse motivo, inclui-se a declaração <style> conforme Quadro 4.

<style type="text/css">

html { height: 100% }

body { height: 100%; margin: 0px; padding: 0px }

#map_canvas { height: 100% }

</style>

Fonte: Google Developers (2012c).

Quadro 4 – Google Maps – Exemplo de definição do recipiente do mapa

A declaração CSS indica que o recipiente do mapa <div> (denominado map_canvas)

deverá ocupar 100% da altura do corpo HTML. Observe que é necessário declarar

especificamente essas percentagens tanto para <body>quanto para <html> conforme

representação do Quadro 4.

<html>

<head>

<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />

30

<script type="text/javascript"

src="https://maps.google.com/maps/api/js?sensor=set_to_true_or_false">

</script>

Fonte: Google Developers (2012c).

Quadro 5 – Google Maps – Exemplo da chamada da API do Google Maps

O URL http://maps.google.com/maps/api/js aponta para o local de um arquivo

JavaScript que carrega todos os símbolos e as definições necessárias ao uso da API do Google

Maps V3. A página deve conter uma tag script que aponte para esse URL.

Também deve-se definir um parâmetro sensor para indicar se esse aplicativo usa um

sensor para determinar a localização do usuário. No Quadro 5, verifica-se uma variável

set_to_true_or_false, que deve ser explicita true ou false.

Precisa-se reservar um lugar para que o mapa seja exibido em uma página da web,

normalmente é feito criando-se um elemento chamado <div> e obtendo uma referência a ele

no DOM (Modelo de Objeto do Documento) do navegador.

Para inicializar um mapa, cria-se um objeto Map options para conter as variáveis de

inicialização do mapa. Esse objeto não é construído; em vez disso, ele é criado como um

literal de objeto. Para centralizar o mapa em um ponto específico, cria-se o valor latlng para

conter esse local e o passar nas opções do mapa.

var myLatlng = new google.maps.LatLng(-34.397, 150.644);

var myOptions = {

zoom: 8,

center: myLatlng,

mapTypeId: google.maps.MapTypeId.ROADMAP

};

Fonte: Google Developers (2012c).

Quadro 6 – Google Maps – Exemplo das definições para construção do mapa

Também se define nas opções de mapa o nível de zoom inicial e mapTypeId para

indicar o tipo de mapa. No exemplo do Quadro 6, acima, optou-se por

google.maps.MapTypeId.ROADMAP.

Os seguintes tipos são suportados:

a) ROADMAP exibe as blocos 2D normais, padrão, do Google Maps;

b) SATELLITE exibe blocos fotográficos;

c) HYBRID exibe uma mistura entre blocos fotográficos e uma camada de blocos com

recursos importantes (estradas, nomes de cidade);

d) TERRAIN exibe blocos de relevo físico para exibição de recursos de elevação e água

(montanhas, rios etc).

Anteriormente, na API do Google Maps V2, existia um tipo de mapa padrão. Na

versão V3 deve-se definir um tipo de mapa inicial específico para ver os blocos apropriados.

31

A classe JavaScript que representa um mapa é a classe Map, conforme exemplo no

Quadro 7.

var map = new google.maps.Map(document.getElementById("map_canvas"),

myOptions);

Fonte: Google Developers (2012c).

Quadro 7 – Google Maps – Exemplo da classe google.maps.Map

Ao criar uma nova instância do mapa, deve-se especificar um elemento HTML <div>

na página como um recipiente para o mapa. Os nós HTML são filhos do objeto JavaScript

document e obtém-se uma referência a esse elemento pelo método

document.getElementById().

Ainda conforme Google Developers (2012c), este código define uma variável

(chamada map) e a atribui a um novo objeto Map, além de passar as opções definidas no literal

de objeto myOptions. Essas opções serão usadas para inicializar as propriedades do mapa. A

função Map() é conhecida como construtor.

Para o carregamento, usa-se uma função, como exemplo no Quadro 8.

<body onload="initialize()">

Fonte: Google Developers (2012c).

Quadro 8 – Google Maps – Exemplo Carregamento Initialize()

Durante a renderização de uma página HTML, o DOM é criado e todas as imagens e

scripts externos são recebidos e incorporados ao objeto document. Para garantir que o mapa

seja colocado na página após ela ter sido totalmente carregada, só executa-se a função que

cria o objeto Map depois que o elemento <body> da página HTML recebe um evento onload.

Isso evita um comportamento imprevisível e dá mais controle sobre como e quando o mapa é

desenhado.

O atributo onload da tag body é um exemplo de um manipulador de evento. A API

Javascript do Google Maps fornece um conjunto de eventos que podem ser manipulados para

determinar alterações de estado.

2.3.3.1.2 Objetos de Eventos de Mapa

De acordo com Google Developers (2012d), o JavaScript no navegador é orientado por

eventos, ou seja, o JavaScript responde a interações gerando eventos e espera que um

programa responda aos eventos relevantes. O modelo de evento da API do Google Maps V3

32

há dois tipos de eventos:

a) eventos da interface de usuário: Alguns objetos na API do Google Maps são

desenvolvidos para responder aos eventos de usuário, como eventos do mouse ou

do teclado. Um objeto google.maps.Marker pode escutar os seguintes eventos de

usuário, por exemplo: 'click', 'dblclick', 'mouseup', 'mousedown',

'mouseover', 'mouseout'.

b) eventos de mapa: Para receber notificações de evento usa-se o manipulador de

evento addListener(). Esse método usa um objeto, um evento a ser ouvido e uma

função a ser chamada quando ocorre o evento especificado. Um exemplo onde há

uma mistura eventos de usuário com eventos de alteração de estado, seria anexar

um manipulador de evento a um marcador que amplia o mapa quando clicado.

2.3.3.1.3 Controles de Mapa

Conforme Google Developers (2012e) os mapas do Google Maps contêm elementos de

interface do usuário que possibilitam a interação do usuário em todo o mapa. Estes elementos

são conhecidos como controles e pode-se incluir variações desses controles no aplicativo da

API do Google Maps. A API do Google Maps é fornecida com vários controles incorporados

que podem ser usados nos mapas.

Os controles não podem ser acessados ou modificados diretamente. Em vez disso,

precisa–se modificar os campos MapOptions do mapa que afetam a visibilidade e a

apresentação dos controles. Pode-se ajustar a apresentação do controle ao instanciar o seu

mapa (com MapOptions apropriados) ou modificar um mapa de forma dinâmica chamando

setOptions() para alterar as opções do mapa. Nem todos esses controles estão ativados por

padrão.

Em vez de especificar e configurar controles individuais pode-se simplesmente

especificar que o mapa tenha a aparência da interface do Google Maps (incluindo todos os

novos recursos ou controles que venham a ser adicionados no futuro). O mapa será exibido

com os controles padrão.

Alguns controles aparecem no mapa por padrão, enquanto outros só aparecerão se

forem especificamente solicitados. A adição ou remoção de controles do mapa é especificada

nos campos do objeto Map options, definidos como true para ficarem visíveis ou como

false para ficarem ocultos.

33

2.3.3.1.4 Sobreposições de Mapas

Conforme Google Developers (2012f), superposições são objetos no mapa ligados a

coordenadas de latitude/longitude, portanto elas se movimentam quando se arrasta ou se

amplia o mapa. As superposições refletem os objetos que o implementador adiciona ao mapa

para designar pontos, linhas, áreas ou coleções de objetos.

A Google Maps API tem vários tipos de superposições:

a) locais individuais no mapa são exibidos por meio de marcadores. Algumas vezes,

os marcadores podem exibir imagens personalizadas de ícones e, nesse caso, são

chamados de ícones. Marcadores e ícones são objetos do tipo Marker;

b) as linhas no mapa são exibidas por meio de polilinhas (que representam uma

sequência ordenada de locais). As linhas são objetos do tipo Polyline;

c) as áreas com forma aleatória no mapa são exibidas por meio de polígonos, que são

parecidos com as polilinhas. Assim como as polilinhas, os polígonos são uma

sequência ordenada de locais; ao contrário das polilinhas, os polígonos definem

uma região delimitada por eles;

d) as camadas do mapa podem ser exibidas usando tipos de mapa de superposição.

Pode-se criar o próprio conjunto de blocos criando tipos de mapa personalizados

que substituem ou são exibidos por cima de conjuntos de blocos de mapas base na

forma de superposições;

e) a janela de informações também é um tipo especial de superposição para exibição

de conteúdo (normalmente texto ou imagens) dentro de um balão pop-up por cima

de um mapa em um determinado local;

f) também é possível implementar as próprias superposições personalizadas. Essas

superposições personalizadas implementam a interface OverlayView.

As superposições são normalmente adicionadas ao mapa quando são criadas; todas as

superposições definem um objeto Options para ser usado durante a criação, permitindo que

se especifique o mapa no qual elas deverão aparecer. Também é possível adicionar

diretamente uma superposição ao mapa usando o método setMap() da superposição,

passando o mapa ao qual a superposição deverá ser adicionada.

Para remover uma superposição de um mapa, deve-se usar o método setMap() da

superposição, passando null. A chamada desse método não exclui a superposição; isso

simplesmente remove a superposição do mapa. Para excluir a superposição, será necessário

34

removê-la do mapa e definir a própria superposição como null.

2.3.3.1.5 Serviços de Mapas

Conforme Google Developers (2012g), geocodificação é o processo de conversão de

endereços (como "Rua Antônio da Veiga, 416 – Itoupava Seca, Blumenau, SC, Brasil") em

coordenadas geográficas (como latitude -26.907207 e longitude -49.079702), e pode-se incluir

marcadores ou posicionar o mapa.

A API do Google Maps fornece uma classe de geocodificador para geocodificar

endereços dinamicamente a partir da entrada do usuário. Estas solicitações têm taxas de

limitação para desencorajar o abuso do serviço.

2.3.3.1.5.1 Solicitações de Geocodificação

O acesso ao serviço de geocodificação é assíncrono, uma vez que a API do Google

Maps precisa fazer uma chamada para um servidor externo. Assim, precisa-se passar um

método de retorno de chamada a ser executado após a conclusão da solicitação. Esse método

de retorno de chamada processa os resultados. O geocodificador pode retornar mais de um

resultado.

Pode-se acessar o serviço de geocodificação da API do Google Maps dentro do código

por meio do objetogoogle.maps.Geocoder. O método Geocoder.geocode() inicia uma

solicitação para o serviço de geocodificação, passando um literal de objeto GeocodeRequest,

que contém os termos de entrada e um método de retorno de chamada a ser executado ao

receber a resposta.

O serviço de geocodificação exige um método de retorno de chamada a ser executado

após a recuperação dos resultados do geocodificador. Esse retorno de chamada deve passar

dois parâmetros para conter results e um código status, nessa ordem. Como Geocoder

pode retornar mais de uma entrada, o literal do objeto GeocoderResults é uma matriz.

O literal do objeto GeocoderResults representa um resultado individual de

geocodificação e é um objeto com o formato, conforme Quadro 9.

results[]: {

types[]: string,

formatted_address: string,

address_components[]: {

short_name: string,

35

long_name: string,

types[]: string

},

geometry: {

location: LatLng,

location_type: GeocoderLocationType

viewport: LatLngBounds,

bounds: LatLngBounds

}

}

Fonte: Google Developers (2012c).

Quadro 9 – Google Maps – Resultados do objeto GeocodeRequest

Esses campos são explicados a seguir:

a) types[] é uma matriz que indica o tipo do resultado retornado. Essa matriz contém

um conjunto de uma ou mais tags que identificam o tipo de recurso retornado no

resultado;

b) formatted_address é uma string que contém o endereço legível para humano

deste local. Normalmente, esse endereço é equivalente ao "endereço postal", que

pode variar entre os países;

c) address_component[] é uma matriz que contém os componentes de endereço

separados, conforme explicado acima;

d) geometry contém as seguintes informações: o location contém o valor de

latitude, longitude geocodificado. Retorno desse local como um objeto LatLng, não

como uma string formatada. O location_type armazena dados adicionais sobre o

local especificado.

2.3.3.1.5.2 Geocodificação reversa

O termo geocodificação normalmente se refere à tradução de um endereço legível para

humanos em uma localização no mapa. O processo de conversão, ou seja, tradução de uma

localização no mapa em um endereço legível para humanos é conhecida como geocodificação

reversa.

O Geocoder suporta a geocodificação reversa diretamente. Em vez de fornecer um

endereço textual, basta fornecer um par de latitude e longitude separado por vírgula no

parâmetro latLng.

O geocodificador reverso normalmente retorna mais de um resultado. Os endereços da

geocodificação não são apenas endereços postais, mas qualquer forma de nomear

geograficamente uma localização. O geocodificador reverso retorna todos os resultados.

O geocodificador reverso tenta encontrar resultados correspondentes para entidades

36

políticas (países, províncias, cidades e bairros), endereços e códigos postais.

Os endereços são retornados na ordem de melhor a pior correspondência.

Normalmente, o endereço mais exato é o resultado mais destacado.

A geocodificação reversa não é uma ciência exata. O geocodificador tentará encontrar

o local endereçável mais próximo dentro de uma certa tolerância.

2.3.3.1.5.3 Rotas

Pode-se calcular rotas (com diferentes meios de transporte) usando o objeto

DirectionsService. Esse objeto se comunica com o Serviço de rotas da Google Maps API

que recebe solicitações de rota e retorna resultados calculados. Pode-se manipular esses

resultados de rota manualmente ou usar o objeto DirectionsRenderer para renderizar esses

resultados.

Para usar rotas em V3, deve-se criar um objeto do tipo DirectionsService e chamar

o DirectionsService.route() para iniciar uma solicitação ao serviço de rotas, passando-a

como um literal do objeto DirectionsRequest contendo os termos de entrada e um método

de retorno de chamada a ser executado no recebimento da resposta.

Alguns destes campos são:

a) origin (obrigatório): especifica o local inicial a partir do qual a rota deve ser

calculada. Este valor pode ser especificado como uma String ou como um valor de

LatLng;

b) destination (obrigatório): especifica o local final para o qual a rota deve ser

calculada. Este valor pode ser especificado como uma String ou como um valor de

LatLng;

c) travelMode (obrigatório): especifica qual modo de transporte usar ao calcular a

rota;

d) unitSystem (opcional): especifica qual sistema de medidas usar ao exibir

resultados;

e) waypoints[] (opcional): especifica uma matriz de DirectionsWaypoints. Os

pontos de referência alteram um trajeto traçando-o pelos locais especificados. Um

ponto de referência é especificado como um literal de objeto com os campos

mostrados a seguir: location especifica o local do ponto de referência, como um

valor de LatLng ou como uma String que será geocodificada e o stopover é

um valor booleano que indica que o ponto de referência é uma parada no trajeto, o

37

que resulta na divisão do trajeto em dois;

f) optimizeWaypoints (opcional): especifica que o trajeto que está usando os

waypoints fornecidos pode ser otimizado para oferecer o trajeto mais curto

possível. Se este campo for definido como true, o serviço de rotas retornará os

waypoints reordenados em um campo waypoint_order.

Iniciar uma solicitação de rota para o DirectionsService com o método route()

requer a passagem de um retorno de chamada que será executado na conclusão da solicitação

de serviço. Esse retorno de chamada retornará um código de DirectionsResult e de

DirectionsStatus na resposta.

O DirectionsStatus pode retornar valores, ao qual destacam-se:

a) OK: indica que a resposta contém um DirectionsResult válido;

b) NOT_FOUND: indica que pelo menos um dos locais especificados na origem, destino

ou nos pontos de referência da solicitação não pôde ser geocodificado;

c) ZERO_RESULTS: indica que não foi possível encontrar nenhum trajeto entre a

origem e o destino;

d) MAX_WAYPOINTS_EXCEEDED: indica que muitos DirectionsWaypoints foram

fornecidos no DirectionsRequest. O máximo permitido de pontos de referência é

8, mais a origem e o destino. Para clientes da Google Maps API Premier, são

permitidos 23 pontos de referência, mais a origem e o destino;

Deve-se garantir que a consulta de rota retorne resultados válidos verificando esse

valor antes de processar o resultado.

2.3.3.1.5.4 Modos de transporte

Ao calcular rotas, precisa-se especificar o modo de transporte a ser usado. Atualmente,

os seguintes modos de transporte são suportados:

a) travelMode.DRIVING: indica as rotas de carro padrão usando a malha de

transporte rodoviário;

b) travelMode.WALKING: solicita rotas a pé por faixas de pedestre e calçadas;

c) travelMode.BICYCLING: solicita rotas por ciclovias e ruas para ciclistas.

2.3.3.1.5.5 Sistemas de medidas

Por padrão, as rotas são calculadas e exibidas usando o sistema de medidas do país ou

região de origem. Pode-se substituir esse sistema de medidas configurando explicitamente um

38

sistema de medidas dentro da solicitação usando um dos valores de UnitSystem

(unitSystem.METRIC, unitSystem.IMPERIAL).

2.3.3.1.5.6 DirectionsResult

O DirectionsResult contém o resultado da consulta de rota, que pode ser

manipulado manualmente ou passar para um objeto DirectionsRenderer, que pode

manipulá-lo automaticamente exibindo o resultado em um mapa.

Para exibir um DirectionsResult usando um DirectionsRenderer:

a) criar um objeto DirectionsRenderer;

b) chamar setMap() no renderizador para vinculá-lo ao mapa passado;

c) chamar setDirections() no renderizador, passando a ele o DirectionsResult,

como indicado acima. Como o renderizador é um MVCObject, ele detectará

automaticamente quaisquer alterações em suas propriedades e atualizará o mapa

quando suas rotas associadas forem alteradas.

Um DirectionsRenderer não somente manipula a exibição da polilinha e dos

marcadores associados, como também pode manipular a exibição textual de rotas na forma de

uma série de etapas. Para isso, chama-se o setPanel() no seu DirectionsRenderer,

passando o <div> no qual essas informações devem ser exibidas. Isso também garante a

exibição das respectivas informações de direitos autorais e de quaisquer avisos que possam

estar associados ao resultado.

2.3.3.1.5.7 Matriz de distância

A Google Distance Matrix API fornece um serviço para a computação da distância e a

duração da viagem entre várias origens e destinos usando um determinado modo de viagem.

Este serviço não retorna informações detalhadas sobre o trajeto. As informações de

rota, inclusive rotas textuais e polilinhas, podem ser obtidas passando-se a origem e o destino

desejados para o Serviço de rotas.

2.3.3.1.5.8 Elevação

O serviço de elevação fornece dados de elevação para locais na superfície da Terra,

incluindo locais em solos oceânicos (que retornam valores negativos). Em casos como esse,

para os quais o Google não possui medidas de elevação precisas para o local exato da sua

solicitação, o serviço intervirá e retornará um valor aproximado usando os quatro locais mais

39

próximos.

2.3.3.1.5.9 Street view

De acordo com Google Developers (2012g), o Street View do Google proporciona

visualizações panorâmicas de 360 graus de ruas designadas em toda sua área de cobertura. A

cobertura da Street View API é a mesma do aplicativo Google Maps.

A Google Maps JavaScript API agora fornece o serviço Street View para obtenção e

manipulação de imagens usadas no recurso Street View do Google Maps. Na Google Maps

JavaScript API V3 é suportado de modo nativo dentro do navegador.

2.4 ENTITY FRAMEWORK

Conforme Macoratti 2011, o Entity Framework 4 é o framework ORM (Mapeamento

objeto-relacional) da Microsoft que transforma objetos de negócio em dados relacionais e

vice-versa. O foco do Entity Framework não é o banco de dados, mas o modelo de negócios e

desta forma uma de suas tarefas é gerar o modelo conceitual a partir do modelo do banco de

dados, sendo que desta atividade o desenvolvedor não tem que trabalhar diretamente com o

banco de dados mas com o modelo conceitual e o modelo de entidades.

Conforme Macoratti 2009 o Entity Framework – EF, é um conjunto de tecnologias

ADO.NET que suporta o desenvolvimento a aplicações orientados a dados.

O Entity Framework – EF permite trabalhar com dados na forma de propriedades e

objetos específicos do domínio, sem ter que relacioná-los com as tabelas no banco de dados e

as colunas onde os dados estão armazenados. Isto é viável pela elevação do nível de abstração

na qual se pode trabalhar quando se tratam de dados e pela redução do código que é

necessário para manter as aplicações orientadas a dados. Ou seja, conforme Microsoft 2012b,

o Entity Framework permite desenvolver com dados relacionais como objetos específicos do

domínio, eliminando a maior parte do código de ligação e acesso a dados.

Conforme Macoratti 2009, o Entity Framework renova o modelo conceitual permitindo

que sejam acessados entidades e relacionamentos neste modelo contando com o suporte da

Entity Framework para traduzir estas operações para comandos específicos da fonte de dados

consultem liberando as aplicações das dependências de código específicas de uma fonte de

dados particular.

40

Um padrão comumente usado para modelagem de dados divide o modelo de dados em

3 partes:

a) o Modelo Conceitual: define as entidades e relacionamentos do sistema modelado;

b) o Modelo Lógico: Normaliza as entidades relacionamentos entre as tabelas com

chaves primárias e constraints para os bancos de dados relacionais;

c) o modelo Físico: Análise e aplicação das capacidades de um sistema de

armazenamento específico definindo detalhes de armazenamento como

particionamento e indexação.

O modelo conceitual, o modelo de armazenamento e o mapeamento entre os dois são

expressos em uma especificação externa chamada de EDM (Entity Data Model).

O Entity Data Model é um modelo de dados Entidade-Relacionamento cujo conceito

central são as entidades e os relacionamentos, onde Entidades são instâncias de Tipos de

entidades as quais são estruturas de registros com uma chave. Uma Chave de Entidade é

formada a partir de um subconjunto de propriedades do Tipo da entidade. A chave é um

conceito fundamental para identificar de forma única, atualizar instâncias e permitir que as

instâncias de entidades participem nos relacionamentos.

Além do Entity Data Model, o Entity Framework inclui serviços que incrementam o

modelo incluindo o provedor gerenciado EntityClient, ObjectServices e LINQ to Entities.

Object Services é um componente do Entity Framework que permite que se realizem

consultas, inclusões, atualizações e exclusões de dados.

O Object Services também materializam os dados retornados como objetos e propagam

as alterações dos objetos de volta a fonte de dados, além de fornecer facilidades para tratar

alterações, vinculação de controles a objetos e efetuar o tratamento da concorrência. Um

Entity Data Model – EDM.

O Entity Framework utiliza modelos baseados em XML e arquivos de mapeamento

para transformar operações de criar, ler, atualizar, e deletar contra entidades e

relacionamentos no modelo conceitual para operações equivalentes na fonte de dados.

O Entity Framework está fundamentado na capacidade de permitir que aplicações

acessem e alterem dados que estão representados como entidades e relacionamentos no

modelo conceitual. O Entity Data Model é então usado para traduzir consultas de objetos

contra tipos de entidades que são representados no modelo conceitual em consultas

específicas da fonte de dados. O EF fornece as algumas formas de consultar um EDM e

retornar objetos, LINQ, Entity SQL e Métodos Query Builder, que são detalhados nas

próximas seções.

41

O Entity Framework também inclui um provedor de dados EntityClient que gerencia

conexões, traduz consultas de entidades em consultas específicas da fonte de dados e retorna

um leitor de dados que os Serviços de Objeto usam para materializar os dados de entidades

em objetos. Quando a materialização em objetos não é necessária o provedor EntityClient

também pode ser usado como um provedor de dados ADO .NET padrão permitindo que

aplicações executem consultas Entity SQL e consumam os dados retornados como um leitor

somente-leitura.

A Entity SQL é uma variação da SQL e foi criada com objetivo de escrever consultas

declarativas e atualizações sobre entidades e relacionamentos de entidades no nível

conceitual.

A partir do Entity Framework pode-se fazer mapeamento para bases de dados como

SQLServer, Oracle, DB2, MySql, PostgreSQL, SQLite, VistaDB, Informix, Sybase, entre

outros, bem como para outras fontes como XML, texto e outros serviços.

2.4.1 LINQ

De acordo com Macoratti (2009), LINQ to Entities, fornece suporte as consultas LINQ

para consultar tipos de entidades que são definidos no modelo.

Conforme Wikipédia 2012c, LINQ (Language Integrated Query ou Linguagem

Integrada de Consulta), define um conjunto de nomes de métodos, chamados operadores de

consulta padrão, ou operadores de sequência padrão, juntamente com regras de tradução de

expressões ditas consulta a expressões usando estes nomes de métodos, expressões lambda e

tipos anônimos. Estes podem, por exemplo, ser usados para projeto e filtrar dados em

matrizes, enumeráveis e XML (LINQ to XML), bancos de dados relacionais e fontes de dados

de terceiros.

Ainda, conforme Microsoft 2012c, uma query (consulta) é uma expressão que recupera

dados de uma fonte de dados. As consultas normalmente são expressas em uma linguagem

especializada de consulta. Diferentes linguagens foram desenvolvidas ao longo do tempo para

os diversos tipos de fontes de dados, como por exemplo, SQL para bancos de dados

relacionais e XQuery para XML. Portanto, sempre havia a necessidade de aprender uma nova

linguagem de consulta para cada tipo de fonte de dados ou formato de dados que eles devem

oferecer suporte. LINQ simplifica esta situação, oferecendo um modelo consistente para

42

trabalhar com dados em vários tipos de fontes de dados e formatos. Em uma consulta LINQ,

sempre está se trabalhando com objetos. Usa-se a mesma codificação de padrões básicos para

a query e transformar dados em documentos XML, bases de dados SQL, ADO.NET Datasets,

coleções .NET, e qualquer outro formato para o qual um provedor LINQ esteja disponível.

2.4.2 Entity SQL

Para Macoratti 2009, o Entity SQL, é um dialeto SQL independente que trabalha

diretamente com as entidades no modelo conceitual que suporta as características EDM como

herança e relacionamento.

Conforme Wikipédia 2012d, DO.NET Entity Framework utiliza uma variante da

linguagem de consulta estruturada, chamado Entity SQL, que se destina a escrever consultas

declarativas e atualizações sobre entidades e relacionamentos entidade - no nível conceitual

de tipos que são definidos em um EDM.

De acordo com Macoratti (2009), métodos Query Builder, permitem a construção de

consultas Entity SQL usando o estilo de métodos de consulta LINQ.

2.5 TRABALHOS CORRELATOS

Alguns trabalhos acadêmicos foram desenvolvidos com o objeto de pesquisa similar

ao trabalho apresentado, bem como algumas ferramentas disponíveis no mercado também

possuem funcionalidades similares. Entre estes trabalhos e ferramentas, citam-se TMB Virtual

(TMB, 2011), TransporLis (TRANSPORLIS, 2009) e SPTrans (SPTRANS, 2011).

2.5.1 TMB Virtual

Em Barcelona, um serviço implementado pela empresa de Transportes Metropolitanos

de Barcelona oferece aos turistas e habitantes da cidade o TMB Virtual. Representada na

Figura 10, a ferramenta para Android que permite que o usuário obtenha informações em

tempo real sobre o transporte público. Além de informações de como chegar a um

43

determinado destino, o programa ainda informa quais as linhas operam o trajeto, quanto leva

aproximadamente o percurso e qual o horário que o ônibus ou do metrô passa em cada ponto.

Com a câmera do smartphone o programa identifica onde a pessoa está e relaciona os dados

do transporte público disponível nas proximidades da localização identificada. A ferramenta

faz uso de geolocalização (TMB, 2011).

Fonte: TMB VIRTUAL (2011). Figura 10 – TMB Virtual

2.5.2 TransporLis

Em Lisboa, existe um serviço disponibilizado na web que permite a consulta do

percurso, os valores tarifários e os horários dos serviços de transporte público disponíveis. É o

TransporLis, um sistema de informação multimodal da área Metropolitana de Lisboa,

desenvolvido em parceria pela ANA, Carris, CP, Câmara do Barreiro, Câmara de Loures,

Câmara de Odivelas, Fertagus, Metropolitano de Lisboa, PT Comunicações, Rodoviária de

Lisboa, Scotturb, Transportes Sul do Tejo, Transtejo e Vimeca. A plataforma de mapas e a

informação cartográfica são fornecidas pelo SAPO. Os dados disponibilizados são fornecidos

44

pelas operadoras de transportes coletivos.

A opção de pesquisa pode ser informada escolhendo o ponto de partida e ponto de

chegada diretamente no mapa ou com digitação do ponto de partida e ponto de chegada,

conforme Figura 11. Onde caso na digitação a informação possa ser referência para mais de

um lugar, é listado uma lista de opções para ser selecionado o real ponto de interesse.

Fonte: TRANSPORLIS (2009).

Figura 11 – TRANSPORLIS - Consulta

Posteriormente a indicação de origem e destino para consulta, é exibido um mapa, com

o trajeto do ponto de origem ao de destino. Na lateral é informada textualmente uma lista com

horários de saídas, tempos de espera, e indicações sobre linhas, valores monetários dos

bilhetes de passagem, e etapas da viagem, representado na Figura 12.

45

Fonte: TRANSPORLIS (2009).

Figura 12 – TRANSPORLIS – Resultado da consulta

2.5.3 SPTRANS

Em São Paulo, é disponibilizado um completo serviço informações sobre transporte

coletivo urbano.

Conforme Figura 13, é possível fazer consultas por trajeto, linha de ônibus ou local de

referência, é possível incluir na pesquisa outros modais de transporte público urbano, como

metrô e trem. O resultado indica o percurso que deve ser feito, até o ponto mais próximo,

detalhes e horários da linha, valor total da tarifa, e a opção de fazer o percurso de volta. A

visualização no mapa é feita usando o Google Maps.

46

Fonte: SPTRANS, (2011).

Figura 13 – SPTRANS – Consulta e Resultado O Quadro14 apresenta um comparativo entre as funcionalidades e características

apresentadas pelas três aplicações:

TMB Virtual TRANSLIS SPTRANS

Localização por endereço (digitação do

endereço)

Sim Sim Sim

Localização por visualização no mapa

(clicando no mapa para selecionar o

endereço)

Não informado Sim Não

Mostra os horários que as linhas atendem Sim Sim Sim

Mostra a descrição das linhas que

operam

Sim Sim Sim

Mostra o tempo de percurso entre os

pontos de origem e

Sim Sim Sim

Mostra o custo/valor monetário do

percurso

Não informado Sim Sim

Disponibilização visualização do

itinerário em mapa

Não informado Sim Sim

Permite geolocalização para identificar o Sim Não Não

47

endereço de origem

Descrição do percurso, com

disponibilização de nomes de ruas,

trajetos feitos a pé, etc...

Sim Sim Sim

Disponibiliza consulta que atende sistema

multimodal (com intersecções, ônibus,

trens e metrôs)

Sim Sim Sim

Figura 14 – Tabela comparativa entre os trabalhos correlatos

48

3 DESENVOLVIMENTO DA APLICAÇÃO

Este capítulo demonstra o desenvolvimento da aplicação. São apresentados os

principais requisitos, especificação, implementação da aplicação, e ao final são listados os

resultados.

3.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO

Foi desenvolvido um protótipo de uma aplicação web para consulta dos horários de

ônibus, itinerários e visualização do mapa no Google Maps através do uso de API. O Google

Maps disponibiliza um web mapping do tipo dinâmico, onde pode-se criar o mapa, incluir

marcadores, caminhos, sobreposições, além de navegações, alterações de zoom e relevo. As

regras de negócio e administração da aplicação foram feitas em ASP NET, linguagem C#,

usando o modelo conceitual. Assim, a construção é a partir dos seguintes requisitos:

a) permitir ao usuário administrador informar ruas (RF01);

b) permitir ao usuário administrador informar locais de saída – pontos iniciais (RF02);

c) permitir ao usuário administrador informar locais de chegada – pontos finais

(RF03);

d) permitir ao usuário administrador informar localizações adjacentes (RF04);

e) permitir ao usuário administrador informar pontos de paradas (RF05);

f) permitir ao usuário administrador informar linhas de ônibus (RF06);

g) permitir ao usuário administrador informar horários de saída (RF07);

h) permitir ao usuário administrador informar localizações adjacentes aos pontos de

paradas (RF08);

i) permitir ao usuário web consultar horários (RF09);

j) permitir ao usuário web consultar itinerários (RF10);

k) permitir ao usuário visualizar mapa com marcações (RF11);

l) o protótipo da aplicação (regras de negócio) deve ser desenvolvido em C#

(RNF01);

m) a persistência será feita com banco de dados SQL Server Express 2008 R2 Edition

Free (RNF02);

49

n) o protótipo da aplicação (consultas) deve estar disponibilizado para web (RNF03);

o) o protótipo da aplicação deve consumir a API do Google Maps (RNF04).

3.2 ESPECIFICAÇÃO

A especificação foi realizada a partir da ferramenta Enterprise Architect, utilizando a

linguagem de modelagem Unified Modeling Language (UML). Para modelagem foram

utilizados os diagramas de casos de uso, de classes e modelo entidade e relacionamento.

3.2.1 Diagrama de Casos de Uso

Os diagramas de caso de uso estão divididos em: administração e consulta web. Os

casos de uso são apresentados através de diagrama de casos de uso, seguidos da descrição do

cenário de cada caso de uso.

3.2.2 Casos de Uso

Como este trabalho permite consultas públicas de informações relacionadas ao

transporte coletivo urbano, é necessário que o administrador destas informações seja

considerado como o Usuário. Na Figura 15 são demonstradas as ações realizadas pelo

Usuário, que tem a função de administrar as regras e informações relacionadas com os

itinerários, horários, pontos de paradas e linhas de ônibus.

50

Figura 15 – Diagrama de casos de uso do cadastro da aplicação

A seguir serão detalhados os principais casos de uso que correspondem à aplicação que

permite a administração da aplicação.

3.2.2.1 Cadastrar localizações adjacentes

Caso de uso Cadastrar localizações adjacentes, permite que sejam cadastradas

localizações (ruas) adjacentes aos pontos de ônibus. O propósito de uma localização adjacente

é permitir que ruas que não tenham itinerários de linhas de ônibus, possam ser associadas a os

pontos de ônibus nas proximidades, e assim estas localizações adjacentes possam ser

consideradas nas consultas. Mais detalhes descritos no Quadro 16.

Cadastrar localizações adjacentes

Descrição Permite cadastrar localizações adjacentes aos pontos de

ônibus

Caso de Uso UC – 04

51

Pré-condições Ruas previamente cadastradas na aplicação

Pontos previamente cadastrados na aplicação

Cenário principal 01) Administrador acessa o recurso através do menu

02) Sistema apresenta funcionalidade sem informações

novas na área de inclusão e uma grid com os dados já

existentes na base.

03) Administrador por optar por inserir novo. Alterar ou

excluir algum registro existem no grid.

Fluxo alternativo No passo 3, caso o administrador opte por inserir novo:

03.01)Sistema apresenta formulário

03.02) Administrador preenche os dados Id, Descrição,

03.03) Administrador seleciona o ponto que vai informar

uma adjacência

03.04) Administrador seleciona a rua que é adjacente

03.05) Administrador Insere o registro

Exceção No passo 03, caso ocorra alguma inconsistência na

validação como campo obrigatório, ou dados informados

incorretamente o sistema apresenta mensagem referente

ao problema encontrado.

Pós-condições No passo 03, caso o operador opte por inserir, deverá ser

criado um novo registro.

Quadro 16 – Detalhamento do Cadastro das localizações adjacentes

3.2.2.2 Cadastrar pontos de paradas

Caso de uso Cadastrar pontos de paradas, permite que sejam cadastrados os pontos de

paradas, que posteriormente serão utilizados para compor o itinerário das linhas de ônibus.

Mais detalhes descritos no Quadro 17.

Cadastrar pontos de paradas

Descrição Permite cadastrar pontos de paradas

Caso de Uso UC – 05

Pré-condições Ruas previamente cadastradas na aplicação

Pontos previamente cadastrados na aplicação

Cenário principal 01) Administrador acessa o recurso através do menu

02) Sistema apresenta funcionalidade sem informações

novas na área de inclusão e uma grid com os dados já

existentes na base.

03) Administrador por optar por inserir novo. Alterar ou

excluir algum registro existem no grid.

Fluxo alternativo No passo 3, caso o administrador opte por inserir novo:

03.01)Sistema apresenta formulário

03.02) Administrador preenche os dados Id, Número

Localização, Descrição

03.03) Administrador seleciona a rua que é adjacente

03.04) Administrador Insere o registro

52

Exceção No passo 03, caso ocorra alguma inconsistência na

validação como campo obrigatório, ou dados informados

incorretamente o sistema apresenta mensagem referente

ao problema encontrado.

Pós-condições No passo 03, caso o operador opte por inserir, deverá ser

criado um novo registro.

Quadro 17 – Detalhamento do Cadastro os pontos de parada

3.2.2.3 Cadastrar linhas

Caso de uso Cadastrar linhas, permite que sejam cadastrados linhas de ônibus, com

seus respectivos itinerários (composição de pontos atendidos para cada linha de ônibus),

locais de saída e chegada. Mais detalhes descritos no Quadro 18.

Cadastrar linhas

Descrição Permite cadastrar as linhas de ônibus, locais de saída,

locais de chegada e pontos que compõem a linha

Caso de Uso UC – 06

Pré-condições Locais de saída (terminador) previamente cadastrados na

aplicação

Locais de chegada (terminador) previamente cadastrados

na aplicação

Cenário principal 01) Administrador acessa o recurso através do menu

02) Sistema apresenta funcionalidade sem informações

novas na área de inclusão e uma grid com os dados já

existentes na base.

03) Administrador por optar por inserir novo. Alterar ou

excluir algum registro existem no grid.

Fluxo alternativo No passo 3, caso o administrador opte por inserir novo:

03.01)Sistema apresenta formulário

03.02) Administrador preenche os dados Id, Número

Linha, Descrição

03.03) Administrador seleciona Local de Saída

03.04) Administrador seleciona Local de Chegada

03.04) Administrador Insere o registro

Exceção No passo 03, caso ocorra alguma inconsistência na

validação como campo obrigatório, ou dados informados

incorretamente o sistema apresenta mensagem referente

ao problema encontrado.

Pós-condições No passo 03, caso o operador opte por inserir, deverá ser

criado um novo registro.

Quadro 18 – Detalhamento do Cadastro das linhas

53

Na Figura 19 podem-se observar as ações realizadas pelo usuário que efetuará

consultas na aplicação web.

Figura 19 – Diagrama de casos de uso da consulta

No Quadro 20, são representados os casos de uso UC – 10 Consultar itinerários,

onde qualquer usuário do transporte coletivo urbano poderá consultar o atendimento de linhas,

horários, e quais os itinerários dessas linhas.

Consulta pela web

Descrição Consulta pela web – permite ao usuário consultar

horários, itinerários e linhas.

Caso de Uso UC – 10

Pré-condições Acessar o sistema pela web

Cenário principal 01) Usuário acessa página através de um navegador.

02) Usuário informa ponto de origem e ponto de destino

03) Sistema busca as linhas de ônibus que passam pelos

pontos informados e atualiza o mapa.

Fluxo alternativo 01 No passo 3, caso não existam linhas de ônibus passando

por nenhum dos pontos informados:

03.01) Sistema informa que não há linhas atendendo aos

pontos de origem e destino selecionados e sugere nova

consulta.

Pós-condições 01 No passo 03, caso exista uma linha de ônibus cujo

itinerário atenda os dois pontos (de origem e de destino):

03.01) Sistema disponibiliza visualização do mapa

colorindo as ruas com os itinerários das linhas, marca os

pontos de parada entre o segmento informado, listas os

próximos horários disponíveis e lista os endereços com os

pontos de paradas.

Figura 20 – Detalhamento da consulta web

54

3.2.3 Diagrama de Classes

O diagrama de classes representado na Figura 21 exibe as principais classes da

aplicação com seus devidos atributos. Algumas classes e métodos foram abstraídos para uma

melhor visualização do diagrama, não comprometendo o entendimento do mesmo.

Figura 21 – Diagrama de Classes

55

Na classe Rua estão os métodos relacionados com a entidade Rua, como os métodos

que permitem associar as referências ou adjacências aos pontos:

vincularReferenciaAdjacente() e vincularRuaAdjacente().

Na classe Ponto, estão os métodos relacionados com a entidade Ponto como os

métodos que permitem consultar as linhas de transporte que estão relacionadas com o ponto

consultarLinhas().

Na Classe Terminal, estão os métodos relacionados com a entidade Terminal, os

métodos que permitem consultar as linhas de saída e as linhas de entrada, utilizadas na busca

de linhas que os pontos que não estão diretamente no mesmo itinerário:

consultarLinhasEntrada() e consultarLinhasSaida(). Quando os dois pontos não estão

na mesma linha, mas a viagem pode ser contemplada por uma interseção em um terminador, a

localização deste terminador, e a composição do array é feita nesta classe.

Já na classe Linha, a principal da aplicação, estão os métodos relacionados com a

entidade linha, métodos de consultar pontos consultarPontos(), consultar horários

consultarHorarios(), carregar a ordem da linha carregaOrdemLinha()onde tem-se o

array de pontos e consultar os itinerários consultarItinerarios()onde tem-se o array

de ruas.

Na classe Adjacencia, estão os métodos relacionados com a entidade

Referência/adjacênciar. Um método desta classe é o consultarAdjacencia() que permite

localizar as adjacências dos pontos. Uma adjacência consiste em uma rua próxima à uma rua

que tem pontos de ônibus, mas a adjacência não é uma rua atendida por linhas de ônibus. Esta

adjacência, é associada à um ponto. Quando na consulta uma adjacência for informada, a

aplicação procura por pontos, quando estes não são atendidos procura por adjacências. Os

métodos desta procura de adjacências estão nesta classe

Na classe Horário, estão os métodos relacionados com horários, consultarHorario().

3.2.4 Modelo Entidade Relacionamento

Na Figura 22 é representado o Modelo Entidade Relacionamento, com a estrutura das

tabelas do banco de dados que mantem os dados da aplicação, tais como: ruas, pontos,

terminais, linhas e horários.

56

Figura 22 – Diagrama modelo entidade-relacionamento

3.3 IMPLEMENTAÇÃO

A seguir são descritas as técnicas e ferramentas utilizadas na implementação, bem

como detalhes das rotinhas implementadas durante o desenvolvimento da aplicação.

57

3.3.1 Técnicas e ferramentas utilizadas

O desenvolvimento da aplicação foi executado utilizando ASP NET, linguagem de

programação C#, em conjunto com o .Net Framework 4, JavaScript, HTML e Google Maps

Java Script API V3. Quanto ao ambiente de desenvolvimento, foi escolhido o Visual Studio

2010.

Para persistência dos dados foi utilizado o Entity Framework que a partir de uma base

de dados relacionais (descrito na seção 3.2.5) cria um conjunto de classes, gerando um

modelo conceitual sobre o modelo relacional existente na base de dados. A base de dados da

aplicação foi construída em SQL Server Express 2008 R2 (Edition Free).

Na tela de consulta, os pontos de origem e destino, podem ser informados como

endereços em campos específicos ou pelo ‘clique’ no mapa. Este mapa é criado com a Google

Maps Java Script API V3, onde conforme seção 2.3.3.1.1, é feita a chamada da API (com seus

métodos, através do endereço http://maps.google.com/maps/api/js?sensor=false e

sem chave de ativação), representada no quadro 23.

<title>Itinerários de ônibus entre dois pontos clicados no mapa ou entre

dois endereços informados</title>

<script type="text/javascript"

src="http://maps.google.com/maps/api/js?sensor=false"></script>

<script type="text/javascript">

Quadro 23 – Aplicação – chamada API Google Maps

No Quadro 24, estão declarações de variáveis e a função de inicialização do mapa

Inicialize(), onde conforme a seção 2.3.3.1.1 centraliza-se o mapa (CentroMapa) através

das coordenadas geográficas (latitude e longitude), indicando o endereço da Universidade

Regional de Blumenau – FURB, Rua Antônio da Veiga, nº 140 – Itoupava Seca, Blumenau –

SC. E conforme seções e seção 2.3.3.1.4 e 2.3.3.1.5, também são criadas várias de marcação

do mapa (marker0 e marker1), variáveis para receber a informação de endereço desses

marcadores (Coord1 e Coord2), bem como variáveis para receber infowindow do

google.maps.InfoWindow() e directionsService

google.maps.DirectionsService(). Além da criação de arrays que são alimentados com

as informações que vem das funções com dados que estão na base de dados (feitas em C#) e

que são manipulados na página, para criar as linhas de rota e marcadores de pontos de parada.

58

var geocoder;

var map;

var time = 0;

var CentroMapa = new google.maps.LatLng(-26.907549, -49.079821);

var directionsService = new google.maps.DirectionsService();

var infowindow = new google.maps.InfoWindow();

var marker0;

var marker1;

var Coord1 = string;

var Coord2 = string;

var novoArrayPontos = [];

var markersArray = [];

function initialize() {

geocoder = new google.maps.Geocoder();

directionsDisplay = new google.maps.DirectionsRenderer();

var myOptions = {

zoom: 15,

center: CentroMapa,

mapTypeId: google.maps.MapTypeId.ROADMAP

};

map = new

google.maps.Map(document.getElementById("map_canvas"), myOptions);

google.maps.event.addListener(map, "click", function (pt) {

createMarker(pt);

});

directionsDisplay.setMap(map);

directionsDisplay.setPanel(document.getElementById("directionsPanel"));

}

Quadro 24 – Aplicação – função de inicialização

A função CreateMarker(), representada no Quadro 25 cria os marcadores de origem

e destino no mapa. Isso é possível através dos Eventos de Usuário, descritos na seção

2.3.3.1.2. (Objetos de Eventos de Mapa), onde os cliques do mouse, são adicionados em

google.maps.event.addListener e no google.maps.Marker é possível receber as

coordenadas geográficas do mapa (latitude e longitude). Também, com o

google.maps.MarkerImage cria-se um marcador personalizado.

59

function createMarker(pt) {

var image2 = new google.maps.MarkerImage('imagens/bus2.png',

new google.maps.Size(32, 32),

new google.maps.Point(0, 0),

new google.maps.Point(0, 32));

if (marker0 != null && marker1 != null) {

nullMap();

}

eval(" infowindow" + time + " = new google.maps.InfoWindow({

content: pt.latLng.toString() });");

eval(" marker" + time + " = new google.maps.Marker({ position:

pt.latLng, map: map, icon: image2 });");

eval(" google.maps.event.addListener(marker" + time + ",

\"click\", function() { infowindow" + time +

".open(map, marker" + time + "); });");

time++;

if (time == 1) {

Coord1 = marker0.getPosition();

FindAdress(Coord1, 1);

}

if (time == 2) {

start = marker0.getPosition();

end = marker1.getPosition();

Coord2 = marker1.getPosition();

FindAdress(Coord2, 2);

time = 0;

}

}

Quadro 25 – Aplicação – função de marcação no mapa

Como a aplicação deverá apresentar resultados válidos para o usuário que faz as

consultas, essas coordenadas devem ser convertidas em endereço, em uma geocodificação

reversa, que é feita na função FindAdress(), representada no Quadro 26 e descrita na seção

2.3.3.1.5.2.

Optou-se por utilizar o primeiro resultado (results[0].formatted_address) pois

conforme descrito na seção 2.3.3.1.5.2, os resultados são mostrados do melhor para o pior,

assim este será o melhor resultado de endereço. Além de utilizar o formatted_address,

pois o objetivo de resultado é um endereço legível.

60

function FindAdress(CoordX, tipo) {

geocoder.geocode({ 'latLng': CoordX }, function (results,

status) {

if (status == google.maps.GeocoderStatus.OK) {

if (tipo == 1) {

document.getElementById("HiddenFieldOrigem").value

= results[0].formatted_address;

} else {

document.getElementById("HiddenFieldDestino").value =

results[0].formatted_address;

}

if (results[1]) {

infowindow.setContent(results[0].formatted_address);

infowindow.open(map, marker);

}

} else {

alert("Geocoder failed due to: " + status);

}

});

}

Quadro 26 – Aplicação – função para geocodificação reversa

Para a consulta, caso o usuário opte por selecionar os pontos de origem e destino no

mapa, a aplicação captura a coordenada geográfica destes dois pontos, e envia estas

coordenadas para a API do Google Maps, para buscar o endereço legível e enviar para os

métodos feitos em C#. Em C#, usando LINQ estes endereços são localizados na base de

dados.

Após, são verificados a existência de pontos de parada de ônibus cadastradas na base,

ou algum ponto adjacente, bem como são criados os arrays de endereços de ruas que

compõem o segmento informado da linha, o array de pontos de paradas e os horários de saída

dos ônibus da linha localizada. Com estes arrays, o mapa é renderizado novamente, com as

informações de endereço localizadas na base de dados da aplicação.

Desenvolvido em C#, na classe Ponto.cs, o método consultarPonto, permite a

localização do Ponto, e está representa na Figura 27, onde é verificado se há na base de dados

algum ponto cadastrado no endereço informando. Nesta função não são verificadas

adjacências.

61

public static Ponto consultarPonto(string nomeRua, int numLocalizacao,

TccEntities entidades)

{

var pontos = from ponto in entidades.Pontos

where ponto.Rua.Nome.Contains(nomeRua)

&& ponto.NumeroLocalizacao == numLocalizacao

select ponto;

if (pontos.ToString() == "")

{

return null;

}

if (pontos.Count() == 0)

return null;

return pontos.ToArray()[0];

}

Quadro 27 – Aplicação – consultar Pontos

Na classe Linha.cs, o método que verifica quais linhas atendem os dois pontos

informados é linhasQueAtendemOsPontos, representada na Figura 28.

public static List<Linha> linhasQueAtendemOsPontosLista(Ponto

pontoInicial, Ponto pontoFinal, TccEntities entidades)

{

return (from linha in entidades.Linhas

where

(from linhaPonto in entidades.LinhaPontos where

linhaPonto.Ponto.Id == pontoInicial.Id select

linhaPonto.Linha).Contains(linha)

&&

(from linhaPonto in entidades.LinhaPontos where

linhaPonto.Ponto.Id == pontoFinal.Id select

linhaPonto.Linha).Contains(linha)

select linha).ToList();

}

Quadro 28 – Aplicação – obter de linhas que atendem os pontos

Também nesta classe, está o método que verifica a ordem do ponto na linha localizada,

localizarOrdem, representada na Figura 29.

62

public static LinhaPonto localizarOrdem(int pontoOrdem, int

linhaLocalizada, TccEntities entidades)

{

var linhasponto = from linhaponto in entidades.LinhaPontos

where linhaponto.Ponto.Id.Equals(pontoOrdem)

&&

linhaponto.Linha.Id.Equals(linhaLocalizada)

select linhaponto;

if (linhasponto.Count() == 0)

return null;

return linhasponto.ToArray()[0];

}

Quadro 29 – Aplicação – obter ordem

Na Figura 30, está representado o método que carrega a ordem de ruas da linha

localizada e que atende o segmento informado pelos endereços de origem e destino.

public static List<LinhaPonto> carregarOrdemRuas(int pontoOrdemI, int

pontoOrdemF, int linhaLocalizada, TccEntities entidades)

{

var linhasOrdemRuas = from linhaponto in entidades.LinhaPontos

where linhaponto.Ordem >= pontoOrdemI

&& linhaponto.Ordem <= pontoOrdemF

&&

linhaponto.Linha.Id.Equals(linhaLocalizada)

select linhaponto;

if (linhasOrdemRuas.Count() == 0)

return null;

return linhasOrdemRuas.ToList();

}

Quadro 30 – Aplicação – obter ruas

A função AbrirConsulta() cria o novo mapa com os dados localizados na base de

dados está representada na Figura 31.

function AbrirConsulta() {

var image = new

google.maps.MarkerImage('imagens/Stop_sign.png',

new google.maps.Size(32, 32),

new google.maps.Point(0, 0),

new google.maps.Point(0, 32));

var image2 = new google.maps.MarkerImage('imagens/bus2.png',

new google.maps.Size(32, 32),

new google.maps.Point(0, 0),

new google.maps.Point(0, 32));

geocoder = new google.maps.Geocoder();

var listaRuas = '<%= Session["ListaCompletadeRuas"].ToString()

%>';

var listaPontos = '<%=

63

Session["ListaCompletadePontos"].ToString() %>';

var adjacenciaOrigem = '<%=

Session["AdjacenciaOrigem"].ToString() %>';

var adjacenciaDestino = '<%=

Session["AdjacenciaDestino"].ToString() %>';

var strlistaRuas = new String(listaRuas);

var strlistaPontos = new String(listaPontos);

strlistaRuas = listaRuas.substring(0, (listaRuas.length - 1));

strlistaPontos = listaPontos.substring(0, (listaPontos.length

- 1));

var novoArray = strlistaRuas.split('|');

var enderDe = (novoArray[0]);

var enderAte = (novoArray[novoArray.length - 1]);

novoArrayPontos = strlistaPontos.split('|');

var request = {

origin: enderDe,

destination: enderAte,

travelMode: google.maps.DirectionsTravelMode.DRIVING,

waypoints: new Array()

};

for (i = 1; i < novoArray.length - 1; i++) {

var localX= { location: novoArray[i], stopover:false };

request.waypoints.push(localX);

}

for (ii = 0; ii < novoArrayPontos.length; ii++) {

geocoder.geocode({ 'address': novoArrayPontos[ii] },

function (results, status) {

if (status == google.maps.GeocoderStatus.OK) {

map.setCenter(results[0].geometry.location);

var markerk = new google.maps.Marker({

map: map,

position: results[0].geometry.location,

icon: image2

});

} else {

alert("Sem successo: " + status);

}

});

directionsService.route(request, function (response, status) {

if (status == google.maps.DirectionsStatus.OK) {

directionsDisplay.setDirections(response);

}

});

}

Quadro 31 – Aplicação – função AbrirConsulta – resultado da consulta

Esta função, com os arrays de ruas e pontos carregados, as ruas são coloridas no mapa

e os pontos de ônibus são marcados. Com o request.waypoints.push(localX), pode-se indicar

o itinerário que se deseja, sem que o google devolva a rota otimizada e gerada

automaticamente pela API da Google Maps. Cada rua é um waypoint. Porém a versão

gratuita limita há 8 waypoints conforme descrito na seção 2.3.3.1.5.3, para serviços

64

gratuitos e 23 waypoints para Premier. Esta limitação fez com que fosse necessário dois

arrays diferentes para montar o itinerário e a marcação dos pontos no mapa.

O array de ruas retorna a sequencia de ruas da linha localizada, mas somente uma

ocorrência por rua; se existem n pontos de parada na mesma rua, neste array, existe uma

ocorrência por rua. Para que o itinerário não tenha incoerência de ruas, usa-se a numeração de

localização do primeiro ponto da rua para criar endereço do itinerário.

O array de pontos de parada, carrega todos os endereços de ponto de parada para a

linha encontrada dentro do segmento encontrado. Cada endereço é passado para a função

geocoder.geocode da API Google Maps, que devolve as coordenadas geográficas, e o mapa

recebe uma marcação personalizada.

3.3.2 Operacionalidade da implementação

A operacionalidade da aplicação é apresenta na forma de funcionalidades, sendo

representados através de imagens. Primeiramente são apresentadas algumas imagens da

aplicação com as funcionalidades de cadastro.

Conforme Figura 32, são disponibilizadas funcionalidades de cadastros de Ruas,

Pontos, Adjacências, Terminadores, Linhas, Horários e Associar Pontos.

Figura 32 – Aplicação – apresentação dos cadastros

A Figura 33 mostra a funcionalidade de cadastro de Ruas.

65

Figura 33 – Aplicação – cadastro de ruas

A Figura 34 mostra a funcionalidade de cadastro de Pontos em edição.

Figura 34 – Aplicação – alteração de pontos

A página de consulta pública de horários, conforme Figura 35, permite que seja feita

uma consulta por endereços de origem e destino informados no campo que permite que os

endereços sejam digitados ou através do mapa, clicando em dois pontos distintos.

66

Figura 35 – Consulta – apresentação

Quando é clicado um ponto no mapa, o que é feito é uma geocodificação reversa, pois

o clique no mapa, usando a API do Google Maps retorna a coordenada (latitude e longitude).

Essa coordenada é enviada para o serviço da Google, que devolve o endereço legível do local

localizado. Este endereço legível é o que é tratado para localizar os pontos nas proximidades.

Primeiro é verificado se há um ponto dentro do intervalo de numeração informado, depois é

verificado os pontos anteriores a numeração de rua localizada, ou os pontos posteriores a

numeração de rua localizada.

Conforme Figura 36 assim que selecionado um ponto no mapa uma mensagem é

exibida com o endereço exato, para verificação deste endereço. São permitidos sempre dois

cliques no mapa, sendo que o primeiro será considerado origem, e o segundo destino. Se o

usuário verificar que o clique no mapa não traz o endereço que satisfaça sua necessidade de

consulta, poderá efetuar novos cliques, sendo que o terceiro clique limpa o mapa e cria um

novo marcador inicial de consulta.

67

Figura 36 – Consulta – endereço origem

Assim que os dois pontos no mapa contiverem informações que satisfaçam a

necessidade de consulta, conforme exemplificado na Figura 37, deve-se clicar no botão

Consultar. O botão Limpar recarrega a página.

Figura 37 – Consulta – endereço destino

As funcionalidades do Google Maps, descritas na seção 2.3.3.1.4, que permitem balões

de informação, zoom e mudança do tipo do mapa podem ser visualizadas nas Figuras 38.

68

Figura 38 – Consulta – características do mapa apresentado

Na Figura 39 pode ser observado o resultado da consulta, onde é informada a linha de

ônibus localizada na base de dados e que atende os dois pontos informados. E no mapa são

pintadas as ruas que compreendem a rota da linha de ônibus localizada pela consulta, além de

serem marcadas todas as paradas de ônibus do segmento informado. Ao lado do mapa são

informados os três próximos horários e listados os endereços de cada ponto de ônibus.

Figura 39 – Consulta – resultado

69

3.4 RESULTADOS E DISCUSSÃO

O presente trabalho apresentou o desenvolvimento de uma aplicação web para

consultas de transportes coletivos urbanos. O tipo de mapa que utilizado neste trabalho é de

navegação baseada em mapas dinâmicos.

Alguns testes foram feitos na aplicação para verificação de performance. Foram

criados três cenários de linhas hipotéticas com ruas reais, onde no primeiro cenário são apenas

dois pontos de parada (Figura 40). No segundo cenário são três pontos de parada. No terceiro

cenário são apresentados cinco pontos de paradas mais uma localização adjacente.

Figura 40 – Consulta de testes com dois marcadores de pontos de parada

Neste caso, em milissegundos segue o Quadro 41 de resultados com os tempos de 10

consultas feitas em horários aleatórios.

70

Consulta Tempo Média por parada

milissegundos

01 00:00:00:16 00:00:00:08

02 00:00:00:15 00:00:00:08

03 00:00:00:15 00:00:00:08

04 00:00:00:26 00:00:00:13

05 00:00:00:23 00:00:00:12

06 00:00:00:24 00:00:00:12

07 00:00:00:16 00:00:00:08

08 00:00:00:17 00:00:00:09

09 00:00:00:10 00:00:00:05

10 00:00:00:25 00:00:00:13

Quadro 41 – Resultados de testes com doic marcadores de pontos de parada

Sendo que o maior tempo identificado, por parada nos testes é 00:00:00:13

milissegundos, e o menor como 00:00:00:05 milissegundos, criando uma média de tempo por

ponto, neste cenário de consulta de 00:00:00:09 milissegundos.

Para o cenário com três pontos de parada, conforme Figura 42, há o ponto de origem, o

ponto de destino e um ponto de parada intermediário E neste caso, segue o Quadro 43 de

resultados com os tempos de 10 consultas feitas em horários aleatórios.

Figura 42 – Consulta de testes com três marcadores de pontos de parada

71

Consulta Tempo Média por parada

milissegundos

01 00:00:00:16 00:00:00:05

02 00:00:00:23 00:00:00:08

03 00:00:00:24 00:00:00:08

04 00:00:00:23 00:00:00:07

05 00:00:00:24 00:00:00:08

06 00:00:00:16 00:00:00:05

07 00:00:00:26 00:00:00:08

08 00:00:00:26 00:00:00:08

09 00:00:00:25 00:00:00:08

10 00:00:00:16 00:00:00:05

Quadro 43 – Resultados de testes com três marcadores de pontos de parada

Neste caso, verifica-se um tempo de consulta maior (com resultados de até

00:00:00:26) , porém um tempo médio considerando as três paradas menor de 00:00:00:07

milissegundos por marcador.

No ultimo cenário, representado na Figura 44, um cenário com cinco paradas, mais

uma localização adjacente.

Figura 44 – Consulta de testes com cinco marcadores de pontos de parada e adjacente

72

Os resultados apresentados encontram-se no Quadro 45, e observa-se que este

resultado se repete, mostrando um tempo maior de consulta, porém considerando a quantidade

de paradas/ marcadores, apresenta uma média menor, de 00:00:00:05 milissegundos.

Consulta Tempo Média por parada

milissegundos

01 00:00:00:33 00:00:00:05

02 00:00:00:23 00:00:00:04

03 00:00:00:33 00:00:00:05

04 00:00:00:32 00:00:00:05

05 00:00:00:33 00:00:00:05

06 00:00:00:36 00:00:00:06

07 00:00:00:22 00:00:00:03

08 00:00:00:26 00:00:00:06

09 00:00:00:33 00:00:00:05

10 00:00:00:34 00:00:00:05

Quadro 45 – Resultado de testes com cinco marcadores de pontos de parada e adjacente

O espaço necessário para armazenamento do banco de dados foi calculado de acordo

com orientações da Microsoft 2012d, e está apresentado na Tabela 1.

Os valores considerados para quantidade de registros são hipotéticos e baseados em

alguns resultados das pesquisas e levantamentos para este trabalho. Um exemplo a citar é que

os percursos de ônibus atendem 277 ruas Seção (2.3.3), onde os cálculos foram feitos

estimando 300 ruas.

Tabela 1 – Espaço para armazenamento Variável a considerar Tabela LINHA Tabela

PONTO

Tabela

LINHAHORARIOS

Tabela

RUA

Número de linhas da tabela 100 1.000 10.000 300

Número de colunas 5 4 4 3

Total em bytes das colunas com

dados fixos (a)

16 12 16 8

Número de colunas com dados

variáveis

1 1 - -

Tamanho máximo de colunas de

comprimento variável

50 50 - 50

Null Bitmap – fórmula:

2 + (( Número de colunas + 7) /

8) (b)

2+((5+7)/8)= 3,5 3,375 3,375 3

Colunas de tamanho variável:

2 + (Número de colunas com

dados variáveis * 2) + Tamanho

máximo de colunas de

comprimento variável (c)

2 +(1*2)+50 =

54

54 0 54

Tamanho da linha: (a) + (b) +

(c) + 4

77 73 23 71

Linhas por página: 8096 /

Tamanho da linha

8.096/77 = 105 8.096/73=

110

8.096/23 =

352

8.096/71 =

114

Número de páginas 500/105=

4,76

1000/110=

9,09

10.000/352=

28,40

300/114=

2,63

Tamanho da pilha 38.993 74.465 232.652 21.544

Para estas quatro principais tabelas, considerando uma quantidade hipotética de

73

registros, a necessidade de espaço para armazenamento em bytes seria 367.654 bytes, que é

uma quantidade relativamente pequena, considerando a robustez das aplicações que utilizam

estes bancos de dados.

O cálculo foi feito considerando as quantidades de linhas da tabela, o número de

colunas com dados fixos e o número de dados variáveis. Também é incluído o null bitmap

(com fórmula fixa). As colunas com tamanhos variáveis também tem uma fórmula onde é

incluída a soma de dois, mais o número de colunas com dados variáveis, multiplicado por

dois, somado o tamanho máximo de colunas com comprimento variável. Ao final, são

incluídas nos cálculos a quantidade de linhas por página dividida pelo tamanho da linha. Para

o número de páginas, são as quantidades de registros por tabela, dividido pelo resultado da

quantidade de linhas por página.

Ainda, comparando a aplicação deste trabalho com as ferramentas disponibilizadas no

mercado, e descritas na seção 2.5, obtém-se a tabela comparativa representada no Quadro 46.

Este trabalho TMB Virtual TRANSLIS SPTRANS

Localização por

endereço

Sim Sim Sim Sim

Localização por

visualização no mapa

Sim Não informado Sim Não

Horários que

atendem

Sim Sim Sim Sim

Linhas que operam Sim Sim Sim Sim

Tempo de Percurso Não Sim Sim Sim

Valor monetário do

percurso

Não Não informado Sim Sim

Visualização do

itinerário em mapa

Sim Não informado Sim Sim

Geolocalização Não Sim Não Não

Descrição do

percurso

Sim Sim Sim Sim

Multimodal Não Sim Sim Sim

Quadro 46 – Tabela comparativa deste trabalho e aplicações disponíveis no mercado

Em relação às dificuldades encontradas durante o desenvolvimento do trabalho,

tratando-se da API do Google Maps, encontra-se a limitação da API da Google Maps para

apenas oito pontos de caminho (mais origem e destino), e a estrutura das funções de desenho

das polilinhas serem possíveis apenas por coordenadas geográficas.

Para solucionar esse problema optou-se por criar dois arrays de resultados. Onde, para

montar o percurso é utilizado um array apenas com os endereços sem repetição de ruas. E

para compor este endereço, utiliza-se o número de localização na rua do ponto, do primeiro

ponto identificado na rua. Por exemplo, caso uma rua tenha um ponto localizado na

numeração cem, outro ponto na numeração quinhentos e sessenta, e ainda outro ponto na

numeração mil, para o itinerário será enviado para a API do Google neste caso apenas a rua

74

com a numeração cem, os demais serão desconsiderados.

Para a marcação dos pontos, como não há limitação de marcadores, assim utiliza-se

outro array, com todos os pontos de parada do itinerário dentro do intervalo informado como

ponto inicial e ponto final.

Estas regras apenas não se aplicam para situações em que existem intersecções de

linhas, ou seja, quando uma única linha de ônibus não contempla os dois endereços indicados

diretamente, e duas linhas são necessárias para compor este itinerário. Nesta situação, e diante

da limitação de waypoints, não seria viável montar duas listas de itinerários, pois a

quantidade de ruas seria maior que oito waypoints.

Esta limitação ocorre no trabalho porque utilizou-se a versão gratuita. A versão paga,

com 23 waypoints, contempla um número maior de ‘pontos de caminhos’.

Durante o desenvolvimento, verificou-se a possibilidade de persistir todos os pontos de

parada com coordenadas geográficas utilizando campos do tipo geography. Estes campos

permitem um tipo de consulta própria, de localização por coordenada geográfica mais

próxima. A versão mais atual do Entity Framework 4.2 permite o uso destes campos no

modelo conceitual, e esta versão de Framework é compatível o ambiente Visual Studio 2010.

Porém o Visual Studio 2010 não dá o suporte a estes campos; apenas a versão Visual Studio

2012 que permite o suporte a estes campos usando o modelo conceitual.

Com relação ao LINQ, utilizado nas classes de consulta, em alguns métodos (equals,

contains), a consulta não trazia o resultado esperado, sendo necessário usar os operadores

de comparação do próprio C#. Esta situação foi verificada para campos do tipo int.

75

4 CONCLUSÕES

Este trabalho apresentou a especificação e implementação de uma aplicação para

consultas de horários de ônibus e itinerários das linhas com visualização em mapa dinâmico.

Desenvolveu-se uma solução genérica, que permite configurar ruas, pontos de parada,

terminadores e linhas de ônibus de qualquer cidade, disponibilizando os horários e itinerários

para consulta.

Desde o princípio o objetivo era estudar, implementar e testar uma aplicação com a

API do Google Maps. Objetivava-se verificar as funcionalidades, facilidades, dificuldades e

limitações da tecnologia. A API que é gratuita (com exceção em algumas situações), mostrou-

se robusta, a documentação complementa e bem didática. As funções disponibilizadas, apesar

de algumas restrições na versão gratuita, foram suficientes para contemplar as necessidades

do trabalho. Uma dúvida era o comportamento e funcionalidade usando ASP NET, C#, mas a

aplicação mostrou-se viável e não apresentou incompatibilidades ou problemas maiores.

Justamente por usar páginas HTML e JavaScript para a interface, que é comumente usado em

aplicações web e sites. As regras do sistema desenvolvidas em ASP NET, C# permitiram

alcançar os objetivos esperados, pois estas ferramentas mostraram-se viáveis para uso

concomitante, e o proposto inicial foi alcançado.

Durante as pesquisas, constatou-se outros serviços similares no mercado, alguns

gratuitos também. Entre eles o Bing Maps (não gratuito) e Open Street Maps (mapa

colaborativo).

Ainda sobre a API, tecnologias proprietárias que disponibilizam recursos e funções

para mapas gratuitamente, resolvem questões de custo para aplicações. A problemática da

dependência em atualizações de sentidos de ruas não se aplica, considerando que a entrada de

dados é em um sistema de banco de dados, e os itinerários são previstos de acordo com os

dados que estão no banco de dados. Assim, dependências de atualizações de direções não são

verificadas. O que apresenta uma limitação quando novas ruas são criadas, estas dependem da

atualização do mapa. Outra limitação, verificada no uso da API do Google Maps, é não poder

alterar o tipo da representação gráfica da cor do itinerário, essa alteração permitiria uma

representação diferenciada para situações de pontos de origem e destino informados que

tenham mais de uma linha de ônibus em comum.

Durante o desenvolvimento, optou-se por usar o Entity Framework, por ser uma

ferramenta que poderia ser útil considerando a capacidade produtiva que ela permite depois

76

do modelo criado. O uso desta tecnologia agregou agilidade e também clareza inclusive para o

código fonte.

4.1 EXTENSÕES

Como sugestões de extensões para a continuidade do presente trabalho, tem-se:

a) otimizar a busca, utilizando busca por profundidade, para atender algumas

situações onde há uma quebra maior de terminadores de linhas;

b) utilizar outro serviço de mapa disponível no mercado, para avaliar as

funcionalidades existentes;

c) criar webservice para consumo e atualização da base de dados, como por exemplo

ruas, pontos e horários;

d) criar coordenadas cartográficas para todo o mapeamento, para traçar todo o

caminho por polilinhas;

e) disponibilizar mais informações na consulta: custo monetário da viagem (quando

há intersecções, ou sistema de transporte multimodal) e temporização (tempo da

viagem);

f) customizar a interface para a consulta em versão mobile;

g) conceber uma solução de consulta para deficientes visuais.

77

REFERÊNCIAS BIBLIOGRÁFICAS

ADO.NET entity framework. In: WIKIPEDIA, a enciclopédia livre.[S.l.]: Wikimedia

Foundation, 2012d. Disponível em:

<http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework#Entities>. Acesso em: 02 jul.

2012.

API. In: WIKIPEDIA, a enciclopédia livre. [S.l.]: Wikimedia Foundation, 2012a. Disponível

em: <http://pt.wikipedia.org/wiki/Api>. Acesso em: 02 jul. 2012.

ALMEIDA, Regina A. de; GUERRERO, Ana L.; FIORI, Sérgio R. Geografia e cartografia

para o turismo. São Paulo: IPSIS, 2007.

BARBOSA, G.; RABAÇA, C.A. Dicionário de comunicação. Rio de Janeiro: Campus 2001.

BING maps. In: WIKIPEDIA, a enciclopédia livre. [S.l.]: Wikimedia Foundation, 2012b.

Disponível em: <http://pt.wikipedia.org/wiki/Bing_Maps>. Acesso em: 02 jul. 2012.

BING MAPS. Bing Maps. [S.l.], 2012. Disponível em: < http://br.bing.com/maps/ >. Acesso

em: 23 jun. 2012.

CÂMARA Gilberto; DAVIS Clodoveu; MONTEIRO, Vieira M. A. Introdução à ciência da

geoinformação. São José dos Campos, 2001. Disponível em:

<http://www.geolab.faed.udesc.br/paginaweb/Pagina%20da%20disciplina%20geop_files/into

ducao.pdf>. Acesso em: 16 mar. 2012.

GHELMAN, Marcelo. Monitoramento Geoespacial de Queimadas para Prevenção de

Desligamento de Linhas de Transmissão. 2009. Monografia – Departamento de Eletrônica e

de Computação, Universidade Federal do Rio de Janeiro, Rio de Janeiro. Disponível em:

<http://monografias.poli.ufrj.br/monografias/monopoli10001929.pdf>. Acesso em: 25 jul.

2012.

CARVALHO, Alexandre. O geoprocessamento como recurso para análise das

ocorrências em linhas de ônibus urbano em Belo Horizonte – um estudo de caso. 2002. 55

f. Monografia (Especialização) – Departamento de Cartografia, Universidade Federal de

78

Minas Gerais, Belo Horizonte. Disponível em:

<http://www.csr.ufmg.br/geoprocessamento/publicacoes/ALEXANDRE%20DE%20CARVA

LHO.PDF>. Acesso em: 16 mar. 2012.

CATALOGEO. [S.l.], [2011?]. Disponível em:

<http://www.catalogeo.com.br/index.php?option=com_content&view=article&id=104:acarto

grafia&catid=47:noticias&Itemid=89>. Acesso em: 16 mar. 2012.

FARIA, Carolina. Geoprocessamento. Jornal Livre. [S.l.], 2008. Disponível em:

<http://www.jornallivre.com.br/200043/tecnologia-geoprocessamento.html>. Acesso em: 02

jul. 2012.

GOOGLE MAPS. Google Maps. [S.l.], 2012. Disponível em:

<http://maps.google.com.br/maps?hl=pt-BR&tab=wl>. Acesso em: 23 jun. 2012.

GOOGLE DEVELOPERS. Google Maps API. [S.l.], 2012a. Disponível em:

<https://developers.google.com/maps/?hl=pt-BR>. Acesso em: 23 jun. 2012.

______. Google Maps API – princípios básicos da Google Maps Javascript API V3. [S.l.],

2012b. Disponível em:

<https://developers.google.com/maps/documentation/javascript/basics?hl=pt-BR#Welcome>.

Acesso em: 23 jun. 2012.

______. Google Maps API – tutorial Google Maps Javascript API V3. [S.l.], 2012c.

Disponível em:

<https://developers.google.com/maps/documentation/javascript/tutorial?hl=pt-BR>. Acesso

em: 23 jun. 2012.

______. Google Maps API – eventos Google Maps Javascript API V3. [S.l.], 2012d.

Disponível em: <https://developers.google.com/maps/documentation/javascript/events?hl=pt-

BR>. Acesso em: 23 jun. 2012.

______. Google Maps API – controles Google Maps Javascript API V3. [S.l.], 2012e.

Disponível em:

<https://developers.google.com/maps/documentation/javascript/controls?hl=pt-BR>. Acesso

em: 23 jun. 2012.

79

______. Google Maps API – superposições Google Maps Javascript API V3. [S.l.], 2012f.

Disponível em:

<https://developers.google.com/maps/documentation/javascript/overlays?hl=pt-BR>. Acesso

em: 23 jun. 2012.

______. Google Maps API – serviços Google Maps Javascript API V3. [S.l.], 2012g.

Disponível em:

<https://developers.google.com/maps/documentation/javascript/services?hl=pt-BR>. Acesso

em: 23 jun. 2012.

FRESARD, Francisco. Ônibus de Blumenau no Google Maps. Jornal de Santa Catarina,

Blumenau, 2011. Disponível em <http://wp.clicrbs.com.br/pancho/2011/11/15/onibus-de-

blumenau-no-google-maps-2/?topo=52,2,18,,159,e159>. Acesso em: 23 jun. 2012.

LABTATE. Laboratório de cartografia tátil e escola. Florianópolis, 2011. Disponível em:

<http://www.labtate.ufsc.br/>. Acesso em: 16 mar. 2012.

LINQ. In: WIKIPEDIA, a enciclopédia livre. [S.l.]: Wikimedia Foundation, 2012c.

Disponível em: <http://en.wikipedia.org/wiki/LINQ >. Acesso em: 02 jul. 2012.

LOCH, Ruth E. N. Cartografia – representação, comunicação e visualização de dados

espaciais. Florianopólis: Editora da UFSC, 2006.

MACORATTI, José C. Introdução ao Entity Framework. Macoratti. [S.l.], 2009. Disponível

em: <http://www.macoratti.net/09/06/vb_iaef.htm>. Acesso em: 23 jun. 2012.

MACORATTI, José C. SilverLight 4 - usando o entity framework 4. [S.l.], 2011. Disponível

em: <http://www.macoratti.net/11/01/svl4_ef4.htm>. Acesso em: 23 jun. 2012.

MEDEIROS, Anderson M. L. Norteando seu conhecimento em geotecnologias. [S. l.],

2009. Disponível em < http://www.clickgeo.com.br/> . Acesso em 02 jul. 2012.

MEDEIROS, Anderson Maciel Lima. Desenvolvimento de uma aplicação Web Mapping

direcionada à pesquisas educacionais. [S.l.], 2011. Disponível em:

<http://blog.geoprocessamento.net/2010/03/monografia-anderson-medeiros/>. Acesso em: 02

jul. 2012.

80

MICROSOFT. Bing Maps. [S.l.], 2012. Disponível em: <http://msdn.microsoft.com/en-

us/library/dd877180>. Acesso em: 02 jul. 2012.

______, Bing Maps developer resources: map SDKs, APIs, tips, traning. [S.l.], 2011.

Disponível em: <http://www.microsoft.com/maps/developers/mapapps.aspx>. Acesso em: 02

jul. 2012.

______, ADO.NET Entity Framework At-a-Glance. [S.l.], 2012b. Disponível em:

<http://msdn.microsoft.com/en-us/data/aa937709>. Acesso em: 02 jul. 2012.

______, Introdução às consultas do LINQ (C#). [S.l.], 2012c. Disponível em:

<http://msdn.microsoft.com/pt-br/library/bb397906.aspx>. Acesso em: 02 jul. 2012.

______, Estimative the size of a heap. [S.l.], 2012d. Disponível em:

<http://msdn.microsoft.com/en-us/library/ms189124.aspx>. Acesso em: 11 jul. 2012.

MOURA, Ana C. M. Geoprocessamento na gestão e planejamento urbano. Belo

Horizonte: Ed. da autora, 2005.

OPEN STREET MAP. Open street map. [S.l.], 2012. Disponível em:

<http://www.openstreetmap.org/>. Acesso em: 02 jul. 2012.

OPEN STREET MAP WIKI. Open street map wiki. [S.l.], 2012. Disponível em:

<http://www.openstreetmap.org/>. Acesso em: 02 jul. 2012.

SETERB, Seterb. Blumenau, 2012. Disponível em: <http://www.seterb.sc.gov.br/>. Acesso

em: 23 jun. 2012.

TRANSPORLIS. Transporte Lisboa. Lisboa, 2009. Disponível em:

<http://www.transporlis.sapo.pt>. Acesso em: 23. jun 2012.

TMB VIRTUAL, Transportes metropolitanos de Barcelona. Barcelona, 2011. Disponível

em: <http://www.tmb.cat/en/tmb-virtual>. Acesso em: 15 mar. 2012