UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO – BACHARELADO

SISTEMA DE PEDIDOS DE PIZZA PARA OTIMIZAÇÃO DE ROTAS NO GOOGLE MAPS

THOMAS ALEXANDRE SENS

BLUMENAU 2009 2009/2-25

THOMAS ALEXANDRE SENS

SISTEMA DE PEDIDOS DE PIZZA PARA OTIMIZAÇÃO DE ROTAS 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. Francisco Adell Péricas, Mestre - Orientador

BLUMENAU 2009 2009/2-25

SISTEMA DE OTIMIZAÇÃO GEOGRÁFICA PARA UMA REDE DE DISTRIBUIDORAS

Por

THOMAS ALEXANDRE SENS

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. Francisco Adell Péricas, Mestre – Orientador, FURB ______________________________________________________ Paulo César Rodacki Gomes, Doutor – FURB ______________________________________________________ Adilson Vahldick, Mestre – FURB

Membro:

Membro:

Blumenau, 10 de dezembro de 2009

Dedico este trabalho aos meus pais, que sempre me apoiaram nos estudos, a minha namorada, que me apoiou, compreendeu e abdicou minha presença em alguns finais de semana.

AGRADECIMENTOS

À minha família, que sempre me apoiou. Aos meus amigos e namorada, pelos empurrões e cobranças. Ao meu orientador, Francisco Adell Péricas, por ter acreditado na conclusão deste trabalho.

A rota é obtida através da resolução de Problemas de Roteamento de Veículos (PRV). . Problemas de roteamento de veículos. e representá-los graficamente em um mapa. que tem por objetivo encontrar o melhor caminho para cada entregador e passar por diversos pontos de entrega. onde são explanadas diversas técnicas para a resolução do problema de custos de rota. Palavras-chave: Logística de entrega.RESUMO Este trabalho apresenta o desenvolvimento de um sistema web de logística de entrega para uma rede de distribuidoras. sendo usado o Zend Framework e Google Maps API como biblioteca e o MySql como base de dados. Foram utilizadas as técnicas de Model View Controller (MVC) na linguagem Hypertext Preprocessor (PHP).

which aims to find the best way for each delivery and through several points of delivery.ABSTRACT This paper presents the development of a web delivery logistics to a network of distributors. which are explained various techniques to solve the problem of route cost. . Vehicle routing problem. The route is obtained by solving Vehicle Routing Problems (PRV). and represent them graphically on a map. Have used the Model View Controller (MVC) in the Hypertext Preprocessor (PHP) language. and used the Zend Framework and Google Maps API as a library and MySql as database. Keywords: Delivery logistics.

..................................................................................................................... 36 Quadro 18 – Código fonte do método imprimirMatrizDeRotas(array....................... 18 Quadro 4 – Requisitos não funcionais ...................01 Visualiza rota dos pedidos ..................................... 30 Quadro 14 – Detalhamento do caso de uso UC03....................................... 34 Quadro 15 – Código fonte do método initialize() ............06 Consultar situação do pedido ............... 23 Figura 1 – Diagrama de casos de uso do administrador .............................................................................................................LISTA DE ILUSTRAÇÕES Quadro 1 – Algoritmo do carteiro chinês ..... 32 Figura 5 – Diagrama de atividades do cálculo de rotas ........................................ 17 Quadro 2 – Problema do caixeiro viajante .................... 35 Quadro 17 – Código fonte do método calcular()....................... 37 ....03 Avaliar pedido ............. 29 Quadro 12 – Detalhamento do caso de uso UC03..09 Cadastrar restaurante ............................................. 17 Quadro 3 – Probabilidades de rotas ................................. 27 Figura 3 – Diagrama de casos de uso do consumidor........................................ 26 Quadro 9 – Detalhamento da manutenção de dados no sistema restrito ........................................................................................04 Cadastra endereços para entrega . 28 Quadro 10 – Detalhamento do caso de uso UC03.............................................................. 29 Quadro 13 – Detalhamento do caso de uso UC03...... 23 Quadro 5 – Requisitos funcionais ........................................array) ..........................................................................int)..................................................................... 25 Quadro 7 – Detalhamento do caso de uso UC02............................................................................................................................ 36 Quadro 19 – Código fonte do método buscaProximaDistancia()............... 33 Figura 6 – Diagrama de classes ......................................................................... 26 Quadro 8 – Detalhamento do caso de uso UC02..................................................01 Efetua login ..02 Cadastrar dados pessoais 28 Quadro 11 – Detalhamento do caso de uso UC03............................ 35 Quadro 16 – Código fonte do método calculaRota(int.........................................................................................................................................................................05 Efetuar pedido de entrega ............método algébrico ....................... 30 Figura 4 – Diagrama de atividades do processo de pedido ........ 24 Quadro 6 – Detalhamento do caso de uso UC01..................... 24 Figura 2 – Diagrama de casos de uso do operador ...............................................

...... 38 Figura 7 – Debug da função calculaMelhorRota(array........Quadro 20 – Código fonte do método calculaMelhorRota(array............................................................................................................ 48 Figura 20 – Tabela de registros da área restrita .. 44 Figura 13 – Escolha do tamanho de pizza ... 51 ................ 47 Figura 19 – Acesso a área restrita ....................................................................................................array) ..................... 46 Figura 17 – Informações adicionais .......boolean................................................................ 43 Figura 12 – Escolha do restaurante .................................................................................... 41 Figura 10 – Diagrama de estados. 42 Figura 11 – Página inicial do aplicativo ............................................... 44 Figura 14 – Seleção de sabores para a pizza ............................................ 46 Figura 18 – Detalhes do pedido ..................................................................................................................... 49 Figura 22 – Representação visual da rota............................................................................................................................................................................................ 39 Quadro 21 – Código fonte do método buscaRotaMaisCurta(debug) ................................... 40 Figura 9 – Diagrama de sequência do cálculo de rotas .......................... 45 Figura 15 – Seleção de adicionais.................................................................................................... 50 Quadro 22 – Comparação entre trabalhos ... 48 Figura 21 – Alteração de situação do pedido .................................boolean......... 50 Figura 23 – Resultado do cálculo de rotas .......... 45 Figura 16 – Informações para entrega...................................................... 39 Figura 8 – Diagrama de sequência do processo de pedido ......................................................................................................................................................................................................................................................................array)....................................................

LISTA DE SIGLAS API – Application Programming Interface CEP – Código de Endereçamento Postal HTML – HiperText Markup Language IBGE – Instituto Brasileiro de Geografia e Estatística IP – Internet Protocol MVC – Model View Control ODBC – Open Database Connectivity PHP – Hypertext Preprocessor PRV – Problemas de Roteamento de Veículos UML – Unified Modeling Language URL – Universal Resource Locator XML – eXtensible Markup Language .

.. 42 3..........1 PROBLEMÁTICA DO CÁLCULO DE CUSTOS DE ROTA.......2......1.......................................................................3... 14 2 FUNDAMENTAÇÃO TEÓRICA................. 31 3..........................3 Problema do Caixeiro Viajante. 21 3 DESENVOLVIMENTO ................................................................6 Cálculo de rotas ................. 12 1..3.............................3 Diagrama de classes ...................................1 Estratégias para resolução do problema de custos de rota ......2 ESTRUTURA DO TRABALHO ...............................................com ............................. 40 3................................................1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO ....................5 Módulo de administração .....2 Dissertação de mestrado de Formigoni (2005) ...................................................................... 49 .....3 FRAMEWORK ZEND ........................1........................... 41 3..SUMÁRIO 1 INTRODUÇÃO ... 23 3...................................................................................................................... 34 3.........................................................1 Projeto do SIG Geo-Rota ............................................................... 20 2.. 15 2........ 16 2................................................................................................3 IMPLEMENTAÇÃO ........................................2 ESPECIFICAÇÃO ..................... 44 3........1.... 47 3....................5 TRABALHOS CORRELATOS ........... 23 3..1 Técnicas e ferramentas utilizadas .................................................................1 Diagrama de casos de uso ............. 23 3................................................................ 43 3.......................................2...........................................................................................1.................................................1 Classe Rota ..................3.........................................5 Diagrama de estados ............................................................................. 17 2.......................................................2..................................................4 WEB SERVICES .............................4 Módulo de pedido .............3......... 33 3.2 GOOGLE MAPS ..1 OBJETIVOS DO TRABALHO.....2........................ 15 2.......................... 42 3................................................ 43 3........................ 19 2...............................................................................................................................................3.............................................3 ValePizza....5......................3........... 18 2..................................2.1....................................5....................................................................................... 24 3..............................................................................2............................................ 16 2........................................2 Problema do Carteiro Chinês ...............................2 Diagrama de atividades .................................................1................................................................................3...................... 20 2................................1........................................1 Algoritmos genéticos .............................................................. 16 2.... 13 1..........................................2 Operacionalidade da implementação ................................................4 Diagrama de seqüência .................. 19 2........... ......................

....... 50 4 CONCLUSÕES .......3...................................................................................... 52 REFERÊNCIAS BIBLIOGRÁFICAS .......................................................................................................................................................1 EXTENSÕES ............................................................................4 RESULTADOS E DISCUSSÃO ..... 54 .. 52 4..................................................

2005).12 1 INTRODUÇÃO Este trabalho teve origem em função da carência de serviços de logística de entrega pela internet para pequenas empresas. pois faz parte do dia-a-dia de milhares de empresas que tem por objetivo a entrega de seus produtos de forma rápida e prática.fornecedor. através de uma requisição utilizando algum meio de comunicação como telefone ou internet pelo cliente ou consumidor. bens. Segundo Kohlrausch (2005 apud SOMENZI. Neste trabalho é feito um estudo de heurísticas para descobrir qual a que melhor se encaixa neste tipo de aplicação. Foi então pensado na possibilidade de ter uma ferramenta para dispor estas informações. e ao mesmo tempo. pouco explorados até hoje. bens. serviços ou produtos a um determinado local. A motivação para o desenvolvimento deste trabalho ocorreu devido à falta de informações na internet sobre restaurantes na região do Vale do Itajaí. a confiança na entrega ao cliente do produto. Este assunto merece ser abordado. 2006). Atualmente. com o intuito de diminuir o prazo de entrega agilizando o processo e tornando a empresa mais competitiva no mercado. já que o aplicativo estará sendo executado em um servidor por diversos distribuidores concorrentemente. tem-se a . Como atualmente a maioria dos restaurantes não utilizam um sistema de otimização geográfico para roteamento de seus veículos de entrega. também conhecida como no inglês delivery. Para atender as necessidades do fornecedor. para aquela à qual o bem se destina (MILLER et al. Delivery é o serviço de entrega de materiais. no prazo contratado. esta logística de entrega disponibiliza aos fornecedores uma forma econômica e rápida de entregar seus materiais. serviços ou produtos para seus clientes ou consumidores. A entrega ao cliente é a transferência da posse de um bem de uma entidade. o fornecedor.. é o principal ponto a ser considerado na relação cliente . Por fim. Tendo a necessidade da elaboração de um algoritmo que chegue ao resultado em um curto espaço de tempo. foi decidido agregar este recurso a ferramenta. A verificação de uma melhor rota para entrega requer um tempo de processamento polinomial em relação ao tamanho da entrada. sem demandar muito processamento. empresas de diversos setores disponibilizam seus produtos através de entregas em domicílio. e foi impulsionado pela grande demanda destes serviços. poder efetuar um pedido diretamente pela internet.

obtidos de um serviço gratuito da Google. Sendo necessário encontrar um caminho que passe em cada um dos pontos de entrega e que tenha um custo menor. 1. Os objetivos específicos do trabalho são: a) desenvolver um aplicativo de interação entre os consumidores e fornecedores escrito em PHP. Parte desta representação é desenvolvida utilizando uma Application Programming Interface (API) de desenvolvimento web criada pela Google. chamado Google Maps.13 necessidade da utilização de um sistema de logística de entrega. que utiliza como linguagem padrão o Java Script. . c) calcular a melhor rota para entrega. Diante desta necessidade. As origens e os destinos são obtidos através de Código de Endereçamento Postal (CEP). que são convertidos em unidades de latitude e longitude. foi desenvolvido um sistema de logística de entrega que detalha as melhores rotas de um ponto a outro da entrega. b) calcular a melhor origem (entre várias de uma distribuidora) que mais se aproxima dos destinos. onde o custo do caminho é a soma dos custos das rotas percorridas. partindo de uma origem para um ou mais destinos. Este serviço oferece uma poderosa tecnologia de mapas incluindo informações sobre percursos entre rotas. d) visualizar as rotas de entrega através de mapas.1 OBJETIVOS DO TRABALHO O objetivo deste trabalho foi o desenvolvimento de um sistema de entrega com otimização geográfica para uma rede de distribuidoras. tendo em vista que um único entregador pode ter mais de uma rota por viagem. para serem representados através de mapas.

14 1. Web Services e os trabalhos correlatos.2 ESTRUTURA DO TRABALHO O trabalho está dividido em quatro capítulos. a especificação e a implementação da ferramenta. . Framework Zend. a especificação dos scripts. São abordados também assuntos referentes a tecnologia empregada no desenvolvimento do trabalho. são apresentados os resultados obtidos. O segundo capítulo contempla a fundamentação teórica. a análise da entrada. onde são apresentados conceitos e características sobre o problema do cálculo de custos de rotas. No último capítulo são apresentadas a conclusão e sugestões para trabalhos futuros. No capítulo 3 são descritos os requisitos. assim como alguns métodos de resolução. Por fim. bem como a funcionalidade da mesma. como Google Maps.

atualmente não existe nenhuma solução exata para o problema de roteamento de veículos em tempo polinomial. Tendo em vista o problema de complexidade computacional. bem como as formas de representar as rotas a serem traçadas no mapa através do Google Maps API.1 PROBLEMÁTICA DO CÁLCULO DE CUSTOS DE ROTA O roteamento de veículos é um problema presente na maioria das empresas de transporte. 35). dentre todas as possíveis rotas alternativas. 2002). 2000. são classificados como sendo NP-Completos (CORMEN et al. isso é perfeitamente viável. a complexidade de tempo é não polinomial. fazendo com que o cálculo possa demorar até vários dias dependendo do número de locais a serem visitados. É abordado também a vantagem do uso de framework para aplicações desenvolvidas em PHP. Seu objetivo é determinar. A resolução para descobrir qual é a melhor rota parece ser simples. não foi possível encontrar nenhuma solução de tempo polinomial para problemas da classe NP-Completo. qual é a que representa o menor custo. p. os Problemas de Roteamento de Veículos (PRV). a solução vai se tornando cada vez mais complexa do ponto de vista computacional.. Por fim. são descritas ferramentas existentes no mercado com funções similares as da ferramenta proposta. .15 2 FUNDAMENTAÇÃO TEÓRICA No presente capítulo são detalhados algoritmos e estratégias para a resolução do problema de custos de rota. logística e distribuição. bastando calcular o custo de todas as possíveis combinações e selecionar a que apresentar o menor custo. Até o momento. Para um pequeno conjunto de locais a serem visitados. ou seja. ou seja. mas à medida que vão sendo adicionados novos locais. e sobre a utilização de Web Services para a funcionalidade de custos de rotas. LUNA. qual é a solução ótima (GOLDBARG. assim sendo. 2. assim como a maioria dos problemas combinatórios. pois o número de combinações possíveis torna-se muito grande.

42). Conforme Herrera. Os parâmetros podem ser conflitantes. 1993.1. 50). abrangendo um grande número de aplicações. Ela fornece uma medida da proximidade da solução em relação a um conjunto de parâmetros. quando um aumenta o outro diminui. p.1. 2.1 Algoritmos genéticos Segundo Araújo (2008. Lozano e Verdegay (1998).1 Estratégias para resolução do problema de custos de rota A seguir são mencionadas algumas estratégias para resolução do problema de custos de rotas.2 Problema do Carteiro Chinês Segundo Rabuske (1993. um grafo euleriano. então o menor caminho pode ser encontrado através do algoritmo de Fleury (RABUSKE. ou seja. De acordo com a classe de problema que se deseja resolver pode-se usar qualquer um dos três tipos.1. 2. A função objetivo de um problema de otimização é construída a partir dos parâmetros envolvidos no problema.1. que envolvem muitas variáveis e um espaço de soluções de dimensão elevada.1. Os algoritmos genéticos são uma família de modelos computacionais inspirados na evolução. que incorporam uma solução potencial para um problema específico numa estrutura semelhante a de um cromossomo.16 2. Como o desenvolvimento deste trabalho não tem restrições quanto ao número de . p. é um grafo onde é possível achar um caminho fechado. 21). Caso o grafo for euleriano. os algoritmos genéticos são os que melhor se enquadraram nos problemas de roteirização clássicos como o do caixeiro-viajante e o de roteirização de veículos. Uma das vantagens de um algoritmo genético é a simplificação que eles permitem na formulação e solução de problemas de otimização. Os algoritmos genéticos são apropriados para problemas complexos de otimização. inteira ou real. p. passando em cada aresta uma única vez. existem três tipos de representações possíveis para os cromossomos: binária. O objetivo é encontrar o ponto ótimo.

descrido no Quadro 1. uma rota que o caixeiro pode considerar seria a saída de A para B. dessa para C. representado no Quadro 2. havendo quatro vértices distintos A. Sendo assim existem seis possibilidades de caminhos diferentes. o qual determina o menor caminho entre dois vértices num grafo não euleriano. sendo sugerido o algoritmo do Carteiro Chines.método algébrico Segundo UFRGS (2000). Elimine da matriz D as linhas e colunas correspondente a e . Construa um caminho artificial de para com o custo encontrado em P3. apresentado por Christofides. C e D. 54). com apenas os vértices de grau ímpar. P1 P2 P3 P4 P5 P6 P7 P8 ALGORITMO: CARTEIRO CHINES Determine os vértices de grau ímpar. o problema do caixeiro viajante também consiste em determinar o menor caminho. . passando por todos os vértices.1. Uma das formas de se resolver este problema é através do método algébrico. Construa a matriz de distância D. O custo será igual a soma dos custos de todas as arestas acrescida dos custos das arestas encontradas em P3.1. Determine através da matriz D o par de vértices e que contém o menor caminho. Quadro 1 – Algoritmo do carteiro chinês 2.3 Problema do Caixeiro Viajante. também apresentado por Christofides. então volte para P3 Oriente o grafo. representados no Quadro 3. Construa a matriz B(nxn) da seguinte forma P3 P4 Faça Faça . B. P1 P2 MÉTODO ALGÉBRICO Construa inicialmente a matriz de adjacência A do grafo. [Este caminho representa as arestas de menor custo que serão repetidas entre e ]. e retornando ao vértice de origem. e daí para D e então voltando a A. que envolve a geração de todos os caminhos simples por multiplicação sucessiva de matriz. De acordo com Rabuske (1993. onde para todo Quadro 2 – Problema do caixeiro viajante .17 passagens pelos caminhos. Se ainda houver linha e coluna. então algumas arestas poderão se repetir. p.

Atualmente. de tal forma que na quarta posição não haverá necessidade de nenhuma escolha. Ele disponibiliza também uma API (Application Programing Interface é um conjunto de rotinas e padrões estabelecidos por um software para utilização de suas funcionalidades por programas aplicativos) (WIKIPEDIA. e uma vez escolhida uma delas. 2. o número de rotas é 3 x 2 x 1 = 6. Google Maps é um serviço de pesquisa e visualização de mapas e imagens de satélite da Terra gratuito na web fornecido pela empresa Google. sendo utilizadas apenas suas funções. é necessário fazer um raciocínio combinatório. já na segunda posição podemos colocar qualquer um dos três vértices restantes B.2 GOOGLE MAPS Segundo Google (2008). C e D. pode-se construir um mapa com informações selecionadas e funções escolhidas para melhor navegação. Desta forma os programadores não se atêm a detalhes de suas implementações. Combinando as diversas funcionalidades disponibilizadas pela API. resultado obtido no Quadro 3 contando diretamente a lista de rotas (UFRGS. No caso de n=4 vértices. . 2000). pode-se facilmente apresentar o conteúdo geo-referenciado em qualquer navegador. 2008) chamada Google Maps API. Com ele. Consequentemente. de modo que elas não afetam o cálculo. compartilhando seu geo-processamento. A API do Google Maps permite criar aplicações inovadoras de mapeamento online e ajuda a integrar mapas e geo-codificações em seus sites. pode-se colocar qualquer uma das duas restantes na terceira posição. pois sobrou apenas um vértice. oferecendo inúmeras possibilidades de união de recursos para o desenvolvimento do mapa. a primeira e última posição são fixas. o serviço disponibiliza mapas e rotas para diversas localizações do globo.18 PROBABILIDADES DE ROTAS ABCDA ABDCA ACBDA ACDBA ADBCA ADCBA Quadro 3 – Probabilidades de rotas Para se achar o número R(n) de rotas para o caso de n vértices. com possibilidade de aproximação das imagens em grandes cidades.

é necessário obter uma chave de validação da Google. Johnson (1992) define um framework como sendo ―um projeto reutilizável de um programa. definida na solicitação de uso do serviço. algumas restrições de uso. Identificado através de uma URI. Uma de suas importantes características é a reutilização de código.4 WEB SERVICES Um Web Service é um sistema de software. mas também aproveita os códigos já escritos da ferramenta. de tal forma que os processamentos de imagens que utilizam os recursos destas APIs estarão limitados por esta tecnologia. que separa a parte lógica da apresentação (ZEND TECNOLOGIES. contudo. ou seja. 2. 2008). habilitando designers e programadores a gastarem mais tempo determinando as exigências do software do que com detalhes de baixo nível do sistema. ou parte de um programa.3 FRAMEWORK ZEND ―Frameworks são projetados com a intenção de facilitar o desenvolvimento de software. 2008). definidas pelo Google Maps. expresso como um conjunto de classes‖. o desenvolvedor utiliza não só o seu próprio código. que são retornados em arquivos HyperText Markup Language (HTML). Para poder ter acesso a estes recursos. que estará amarrada a Universal Resource Locator (URL). impedindo que se criem aplicações que excedam o grau de tecnologia existente nos aplicativos Google Maps.‖ (WIKIPEDIA. Google Maps API torna possível a utilização de ferramentas simples e eficientes. Existem. na qual interfaces públicas e contratos são definidos e descritos em Extensible Markup Language . O Zend Framework é um framework de desenvolvimento de aplicações web em PHP 5 que utiliza o padrão MVC.19 assim como o trajeto das rotas a serem seguidas e seus pontos de entrega. que disponibilizam acesso a conteúdo prático e dinâmico. 2.

Na versão atual. buscou-se uma modelagem mais detalhada dos dados que fazem parte do sistema. Estes sistemas podem então interagir com o Web Service em uma maneira prescrita pela sua definição. Entre as principais vantagens do uso de Web Services. usando mensagens baseadas em XML e transportadas por protocolos da Internet (W3C. baseado em XML.20 (XML). d) segurança: opcionalmente. 43). podem ser citadas: a) interface abstrata: os Web Services fornecem uma interface abstrata para acesso aos métodos disponibilizados.5 TRABALHOS CORRELATOS A seguir são abordados dois trabalhos correlatos.1 Projeto do SIG Geo-Rota O projeto do SIG Geo-Rota foi iniciado em meados de 1999. . que tem por objetivo melhorar os serviços de distribuição ao consumidor.5. p. A versão inicial do sistema manipulava de forma simples os dados necessários para a correta utilização dos algoritmos de otimização aplicados a problemas logísticos de distribuição física de produtos (caminho mais curto. caixeiro viajante e roteamento de veículos). motivado pela elaboração de um sistema computacional capaz de resolver problemas logísticos de distribuição em pequenas e médias empresas (PÓVOA. as informações trafegadas podem ser criptografadas. Estas definições podem ser descobertas por outros sistemas de software. devido ao alto custo de aquisição de dados geográficos. 2000. 2. 2002). garante-se a portabilidade das mensagens mesmo sob diferentes plataformas de operação. c) portabilidade: por se tratar de um padrão aberto. 2. ocultando detalhes de implementação do usuário do serviço. e) utilização de recursos: os Web Services são sistemas não invasivos. pois não consomem recursos de comunicação enquanto em estado de espera. a comunicação entre o servidor e o cliente carrega consigo metadados. b) semântica acompanha dados: ao invés de trafegarem somente os dados.

5. Engloba funções de criação de novos arquivos. ferramentas de zoom. remoção e inserção de novos clientes. gravação e gerenciamento dos arquivos que compõem o mapa. Possibilita a inserção de duas maneiras distintas. via mapa ou via endereçamento GeoCode. geração de toponímia a partir de um atributo não geográfico. 2. . O que se procura é obter uma solução mais apropriada do que aquela utilizada pelas empresas atualmente. i) roteamento: resolve o problema do caminho mais curto entre dois clientes e otimiza a escolha da loja mais próxima do cliente.2 Dissertação de mestrado de Formigoni (2005) A dissertação de mestrado apresentada por Formigoni (2005) aborda como preocupação principal o tratamento de problemas referentes à distribuição de produtos no setor avícola. tendo como objetivo verificar a possibilidade de melhoria em serviços de distribuição ao consumidor. utilizadas para transformar um endereço (Rua y.21 O Geo-Rota na sua versão customizada para problemas de delivery tem as seguintes funções: f) gerenciamento de projetos: responsável pela abertura. representação cartográfica. montagem de o regras de endereçamento automáticas. Seu objetivo é estudar a utilização e o comportamento de alguns métodos matemáticos frente a um determinado problema real. Permite fazer análises utilizando os setores censitários do Instituto Brasileiro de Geografia e Estatística (IBGE). possibilitando o estabelecimento de logradouros em potencial que não estão sendo atendidos. Tem uma função específica para o cadastro de novas lojas. Para atingir este objetivo. g) gerenciamento de mapas: responsável pelo gerenciamento das camadas que compõem o mapa utilizado em cada projeto de roteamento. Engloba funções de adicionar e remover camadas. foram analisadas diversas técnicas de pesquisa operacional. nº x) em uma par de coordenadas geográficas GeoCode e ligação com banco de dados externo via Open Database Connectivity (ODBC) chamado de GeoLink. j) análise de mercado: responsável pela análise espacial dos clientes. h) gerenciamento de clientes: responsável pelo gerenciamento das camadas de clientes a serem roteados. bem como os parâmetros de configuração.

heurísticos e meta-heurísticos. viabilizando assim a implantação nas empresas. utilizando programas prontos para a solução de métodos exatos com a criação de uma interface com o usuário e o desenvolvimento de um programa para a resolução heurística. através de métodos exatos.22 visando à obtenção de uma solução quase ótima. Ele procura através da análise de diversos métodos construir soluções de fácil implementação computacional. .

a especificação e a implementação do sistema de pedidos e seu recurso de otimização geográfica. RNF01 RNF02 RNF03 RNF04 REQUISITOS NÃO FUNCIONAIS Utilizar Web Services para disponibilizar o serviço de rotas Ser implementado utilizando o ambiente Zend Studio com suporte ao Zend Framework O cálculo de uma rota de até 6 pontos distintos não poderá ultrapassar 5 segundos Utilizar a Google Maps API para o desenvolvimento da interface para visualização de rotas Quadro 4 – Req uisitos não funcionais REQUISITOS FUNCIONAIS Disponibilizar interface para emissão de pedidos para consumidores A emissão de pedidos só poderá ser acessada mediante cadastro prévio O pedido só poderá ser efetuado se o fornecedor estiver com a situação ―atendendo‖ na interface de emissão de pedidos O fornecedor muda sua situação para ―atendendo‖ após acessar o gerenciamento de pedidos O consumidor poderá consultar a situação do pedido Disponibilizar interface para gerenciamento de pedidos para fornecedores O gerenciamento de pedidos deverá ser somente acessado pelos fornecedores No gerenciamento de pedidos deverão ser mantidos os dados referentes à elaboração de pedidos e sua manutenção O gerenciador de pedidos deverá informar o fornecedor mediante aviso na tela quando for emitido um novo pedido Calcular a melhor rota entre uma origem e um ou mais pontos de entrega Disponibilizar uma interface para visualização de rotas para fornecedores Quadro 5 – Req uisitos funcionais RF01 RF02 RF03 RF04 RF05 RF06 RF07 RF08 RF09 RF010 RF011 3. 3. . foi utilizada a Unified Modeling Language (UML).1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO No Quadro 4 e 5 são apresentados. serão abordados os requisitos.23 3 DESENVOLVIMENTO Nesta seção.2 ESPECIFICAÇÃO Para a especificação do projeto. respectivamente. os requisitos não funcionais e funcionais da ferramenta.

01 Efetuar login Pré-condições Cenário principal Ter conta cadastrada para acesso ao sistema restrito 01) Usuário acessa a área restrita através do endereço: http://www. assim como cadastrar novos operadores para estes restaurantes. sequência. classes.01 Efetua login Exceção A aceitação do restaurante e o cadastro de operadores pelo administrador demonstrada .1 Diagrama de casos de uso Na Figura 1 são demonstradas as ações realizadas pelo administrador do sistema. Quadro 6 – Detalhamento do caso de uso UC01. é representado o processo de acesso ao sistema restrito. que corresponde ao caso de uso UC01. Figura 1 – Diagrama de casos de uso do administrador No quadro 6. sendo criados os diagramas de casos de uso. 03) Usuário preenche os dados e confirma. UC01. 04) Sistema valida usuário e senha fornecidos. data e Internet Protocol (IP) que o usuário se conectou ao sistema. para que este restaurante passe a atender pedidos pelo portal.01 Efetuar Login. o sistema apresenta uma mensagem mencionando o erro. 3. que tem a função de aceitar um restaurante previamente cadastrado. Se no passo 04. posteriormente é apresentado o diagrama de estados. que terão a função de atender os pedidos e cadastrar os dados do restaurante.valepizza. atividades. o usuário ou a senha não puderem ser validados. 05) Sistema registra hora.24 com auxílio da ferramenta Enterprise Architect.2.com/adm 02) Sistema apresenta página com usuário e senha.

que tem a função de informar todos os dados referentes ao restaurante. Na figura 2. designado Cadastrar restaurante. é o caso que descreve quais são as ações realizadas pelo operador. onde para aceitar um restaurante. o administrador pode editar os dados do restaurante. . Figura 2 – Diagrama de casos de uso do operador O Quadro 7.25 na Figura 1 é representada pelo Quadro 6. informando se o restaurante será aceito ou não. manter os pedidos e visualizar suas rotas. podem-se observar as ações realizadas pelo operador do restaurante. para cadastrar seu restaurante.

UC02.valepizza.26 UC02. Ter no mínimo um pedido em aberto 01) Operador acessa o menu rotas 02) Sistema apresenta página com uma matriz de distâncias entre os pontos de entrega e restaurante.04 Cadastrar ingrediente. UC02.09 Cadastrar restaurante O caso de uso UC02.05 Cadastrar tipo de alimento.com/associe-se 02) Sistema apresenta página de cadastro 03) Operador informa dados do restaurante. favor acessar a administração e efetuar a aceitação. efetua o cadastro e envia um e-mail de aviso para o administrador com o seguinte conteúdo: "Novo restaurante cadastrado no sistema. caso ocorra alguma inconsistência na validação como campo obrigatório.01 Visualiza rota dos pedidos Os demais casos de uso de cadastros como UC02. o sistema apresenta mensagem referente ao problema encontrado.03 Cadastrar sabor.07 Cadastrar complemento e UC02.02 Cadastrar alimento. <<link admin>>". UC02. . formas de pagamento) 04) O sistema valida os dados.08 Cadastrar promoções. aguardando aceitação do administrador Exceção Pós-condições Quadro 7 – Detalhamento do caso de uso UC02.01 Visualiza rota dos pedidos Pré-condições Acessar área restrita com usuário e senha. endereço. Que consistem na edição. 03) O sistema calcula a melhor rota e a mostra visualmente através da API Google Maps.06 Cadastrar tamanho do alimento. Representação da melhor rota através de mapa Cenário principal Pós-condições Quadro 8 – Detalhamento do caso de uso UC02. seguem as mesmas lógicas de cenário representadas pelo Quadro 9.01 Visualiza rota dos pedidos é representado através do Quadro 8.09 Cadastrar restaurante Cenário principal 01) Operador acessa o formulário de cadastro através do endereço http://www. UC02. inserção e exclusão de registros. UC02. O restaurante deve estar registrado. 02) Operador informa que deseja calcular a melhor rota. (nome. UC02. No passo 04.

será abordado o diagrama de casos de uso do consumidor. caso o operador opte por inserir.03) Sistema apresenta formulário com os dados preenchidos 03.05) Sistema remove registro.01) Sistema apresenta formulário. deverá ser criado um novo registro para este recurso. o registro editado. Pós-condições 02 No passo 03. No passo 03. caso o operador opte por editar: 03.27 Manutenção dos dados no sistema restrito Pré-condições Cenário principal Acessar área restrita com usuário e senha 01) Operador acessa o recurso através do menu. o sistema apresenta mensagem referente ao problema encontrado. onde cada pedido terá um endereço com coordenadas de latitude e longitude. Pós-condições 03 No passo 03. Fluxo alternativo 01 Fluxo alternativo 02 Fluxo alternativo 03 Exceção 01 Pós-condições 01 No passo 03. No passo 03. No passo 03. que será utilizado para o cálculo de rotas.02) Operador preenche os dados e confirma. que tem o papel de efetuar pedidos. deverá ser salvo. 02) Sistema apresenta a listagem dos registros já cadastrados. caso o operador opte por excluir um registro: 03.04. Estas coordenadas são obtidas através do Google Maps API. 04) Sistema retorna mensagem referente à ação tomada e retorna ao passo 02.04) Operador altera os dados e confirma. 03) Operador opta por inserir. editar ou excluir um registro. 03. caso o operador opte por editar. . ou dados informados incorretamente. Quadro 9 – Detalhamento da manutenção de dados no sistema restrito Na Figura 3.02 e 03. No passo 03. o registro deve ser removido do recurso. caso o operador opte por excluir um registro. caso ocorra alguma inconsistência na validação como campo obrigatório. caso o operador opte por inserir: 03.

com/cadastre-se 02) Sistema apresenta página de cadastro 03) O consumidor informa seus dados pessoais e dados para acesso a sua conta. O consumidor deve estar registrado Exceção Pós-condições Quadro 10 – Detalhamento do caso de uso UC03. (nome. que para ser feita deve estar com a situação entregue. UC03. é possível visualizar o cadastro de dados pessoais representados na figura 3. No passo 04.28 Figura 3 – Diagrama de casos de uso do consumidor De acordo com o Quadro 10. o sistema apresenta mensagem referente ao problema encontrado.02 Cadastrar dados pessoais No Quadro 11 é detalhada a avaliação de um pedido. e-mail e senha) 04) O sistema valida os dados. endereço. A avaliação é composta por dois campos. um com breve descrição. efetua o cadastro e envia um e-mail de confirmação com os dados do cadastro para o consumidor. . caso ocorra alguma inconsistência na validação como campo obrigatório.valepizza. que posteriormente será visualizado em área pública do portal. e outro com uma nota de um a cinco. data de nascimento.02 Cadastrar dados pessoais Cenário principal 01) O consumidor acessa o formulário de cadastro através do endereço http://www.

caso o consumidor não tenha pedidos entregues 02.04 Cadastra endereços para entrega O Quadro 13 tem o objetivo de explicar o funcionamento do processo de pedido. tendo em vista que será utilizado um sistema de fidelização de consumidores por pontos.03 Avaliar pedido Pré-condições Cenário principal Ter efetuado o login e no mínimo um pedido entregue 01) O consumidor acessa menu ―meus pedidos‖ 02) Sistema apresenta listagem de pedidos efetuados 03) O consumidor informa o comentário. de acordo com o caso de uso UC03. que podem ser trocados por produtos em pedidos futuros. e escolher um deles antes de iniciar o processo de pedido.01) O sistema avisa o consumidor de que não existem pedidos entregues Exceção Quadro 11 – Detalhamento do caso de uso UC03. UC03.03 Avaliar pedido O caso de uso UC03.04 Cadastrar endereços para entrega é representado no Quadro 12. onde um consumidor pode ter diversos endereços para entrega.04 Cadastrar endereços para entrega Pré-condições Cenário principal Ter efetuado o login 01) O consumidor acessa menu ―meus endereços‖ 02) Sistema apresenta página de endereços 03) O consumidor informa que deseja cadastrar um novo endereço 04) Sistema apresenta formulário de cadastro de endereços 05) O consumidor informa os dados do novo endereço e confirma 06) O sistema valida os dados. onde a cada compra o consumidor recebe pontos.05 Efetuar pedido. O novo endereço deve estar registrado Exceção Pós-condições Quadro 12 – Detalhamento do caso de uso UC03. caso ocorra alguma inconsistência na validação como campo obrigatório.29 UC03. o sistema apresenta mensagem referente ao problema encontrado. . e uma nota de 1 a 5 04) Sistema registra avaliação No passo 02. efetua o cadastro do novo endereço No passo 06.

01) O sistema avisa o consumidor de que não existem pedidos Exceção Quadro 14 – Detalhamento do caso de uso UC03. o consumidor pode visualizar informações sobre a data e hora em que o pedido foi aberto. caso o consumidor não tenha pontos suficientes: 12. e clica em avançar 10) O sistema lista os adicionais do restaurante 11) O consumidor seleciona os adicionais desejados. assim como seus itens. e clica em finalizar pedido 16) O sistema finaliza o pedido. onde além da situação. e emite comunicado para o restaurante Cenário alternativo No passo 09. UC03.05 Efetuar pedido Pré-condições Cenário principal Ter efetuado o login 01) O consumidor acessa menu ―novo pedido‖ 02) Sistema apresenta listagem para seleção do endereço de entrega 03) O consumidor seleciona um endereço 04) Sistema apresenta listagem dos restaurantes que atendem a este endereço 05) O consumidor seleciona a qual restaurante deseja efetuar o pedido 06) O sistema apresenta os tamanhos de pizza deste restaurante 07) O consumidor seleciona um tamanho de pizza 08) O sistema lista os sabores do restaurante para este tamanho de pizza 09) O consumidor seleciona os sabores desejados.01) O sistema avisa o consumidor de que seus pontos são insuficientes Pós-condições Pedido efetuado Quadro 13 – Detalhamento do caso de uso UC03.05 Efetuar pedido de entrega A consulta da situação do pedido é demonstrada no Quadro 14.02) Sistema encaminha o consumidor para o passo 06 Exceção No passo 12. e clica em avançar 12) O sistema lista os produtos que podem ser trocados por pontos 13) O consumidor troca os itens que desejar. No passo 02.30 UC03.06 Consultar situação do pedido Pré-condições Cenário principal Ter efetuado o login e no mínimo um pedido 01) O consumidor acessa menu ―meus pedidos‖ 02) Sistema apresenta listagem de pedidos efetuados 03) O consumidor informa qual pedido deseja visualizar 04) Sistema apresenta a situação do pedido juntamente com o resumo do pedido.01) O consumidor clica em ―quero mais uma pizza‖ 09. e clica em avançar 14) O sistema lista opções de entrega 15) O consumidor informa suas preferências. valores e taxas. caso o consumidor queira adicionar outro tamanho de pizza: 09. local de entrega.06 Consultar situação do pedido . caso o consumidor não tenha efetuado pedido 02.

2 Diagrama de atividades O diagrama de atividades apresentado na Figura 4 ilustra o processo de pedido do consumidor. O pedido só pode ser feito para um restaurante.31 3. é dado início ao processo de pedido. O pedido pode ser efetuado de duas maneiras: k) com um pré-cadastro. l) o pedido pode ser elaborado para mais tarde serem informados os dados do cadastro e conta. onde são cadastrados os dados do usuário e de sua conta. ou cria um novo endereço para serem contabilizadas as taxas de entrega. . de tal forma que não será possível emitir um pedido com itens de dois ou mais restaurantes distintos. tendo as taxas de entrega referentes ao bairro de entrega selecionado no início do processo. onde o consumidor seleciona o endereço do cadastro. sendo que após seu cadastro.2.

32 Figura 4 – Diagrama de atividades do processo de pedido .

02 Cadastra dados pessoais.2. Após acessar a tela de cálculo de rotas. o sistema busca as coordenadas de latitude e longitude. solicitando a distância entre todos os pontos. .33 O diagrama de atividades representado na Figura 5 demonstra como é feito o processo de cálculo de rotas. descritos no Quadro 9. não comprometendo o entendimento do mesmo. Algumas classes e métodos foram abstraídos para uma melhor visualização do diagrama. que são cadastradas durante o caso de uso UC03. de acordo com o endereço do Consumidor. Figura 5 – Diagrama de atividades do cálculo de rotas 3.3 Diagrama de classes O diagrama de classes representado na Figura 6 exibe as principais classes encontradas no sistema com seus devidos atributos. São feitas requisições para o Google Maps API destas coordenadas. que são carregadas em uma matriz pelo sistema para dar início ao cálculo da melhor rota entre estes pontos.

O método initialize(). para um melhor entendimento. Os dados contidos nesta classe são gerados dinamicamente pelo PHP para serem executados diretamente pelo navegador do operador através de scripts Java. representado no Quadro 15.3.1 Classe Rota Esta classe é responsável pelo cálculo de rotas e representação geográfica através do mapa.2. Nos quadros a seguir são detalhados seus métodos já gerados dinamicamente pelo PHP.34 Figura 6 – Diagrama de classes 3. para serem instanciadas pelo . longitude e nome do ponto de entrega. tem o objetivo de buscar as coordenadas de latitude.

getStatus().2).getDistance().923398. latLng2 = new GLatLng(-26.GEvent. representado no Quadro 16. } } Quadro 15 – Código fonte do método initialize() O método calculaRota(int. local1 = "Eduardo Yago Blankenburg". disponibiliza na interface o botão para efetuar o cálculo de rotas.-49.084554). buscaProximaDistancia().35 navegador do operador. }). eval('aresta'+j+'[k] = rota[1]'). local0 = "Juliana Baesso de Alcantara".seconds/60. getSteps:false}).-49.-49. }). tempo de percurso entre outros. GEvent.913154.093995). latLng3 = new GLatLng(-26.addListener(dir. latLng1 = new GLatLng(-26. . O serviço para obter estas distâncias é disponibilizado pela API do Google Maps. function() { alert("Erro ao calcular rota.code). Ele é exibido somente após o sistema já ter carregado a matriz de rotas. Os nomes das variáveis funcionam como índices. function calculaRota(j. os índices das variáveis instanciadas durante o método initialize(). {locale:"pt-br".098249).067514). local5 = "Restaurante". representado no Quadro 17.getDuration().int).k) { var pointsArray = [ eval('latLng'+j). latLng5 = new GLatLng(-26.loadFromWaypoints(pointsArray. através de variáveis da linguajem Java script. a função deste método é buscar a distância entre os dois pontos da entrada de parâmetros. local3 = "Solange Mari Sens". local2 = "Daniel Arnon Silva".meters/1000. local4 = "Antonio João Mandel Junio".893243."load". onde é informado um array de pontos e retornando informações como distância.eval('latLng'+k)]." + "\nNúmero: " + dir.-49. rota[1] = roundNumber(dir. var dir = new GDirections(map). buscaProximaDistancia(). rota[2] = roundNumber(dir.95456.915527. "error". function() { var rota = new Array(2).-49.addListener(dir. tem como parâmetros.091964). dir. latLng4 = new GLatLng(-26. } Quadro 16 – Código fonte do método calculaRota(int.929022.3).int) O método calcular(). function initialize() { if (GBrowserIsCompatible()) { latLng0 = new GLatLng(-26.-49.132899).

destinos[1] = aresta1.j++){ html += "<td><b>"+ind[j]+"-"+ eval('local'+ind[j]) + "</b></td>". disponibiliza na interface via HTML uma matriz com as distâncias entre todos os pontos informados no array do parâmetro de entrada.j<arrDest[i]. representado no Quadro 18. representado no Quadro 19. for (j=0.i<arrDest. ordenados pelo parâmetro índice. } var html = "". html += "<td><b>"+indice[i]+"-" + eval('local'+indice[i]) + "</b></td>".length.getElementById('calculo'). } Quadro 18 – Código fonte do método imprimirMatrizDeRotas(array. e faz com que sejam calculadas as rotas de todos os pontos .innerHTML = html+imprimiMatrizDeRotas(destinos).length. document.array).indice) { var ind = new Array(). destinos[2] = aresta2. } html += "</tr>".array) O método buscaProximaDistancia().j++){ ind. for (j=0. } html += "</table>". é chamado pelo método initialize(). return html.length. function imprimirMatrizDeRotas(arrDest. var html = "<input type='button' onclick='resultado()' value='calcular'>debug:<input type='checkbox' id='debug'>". } if (!indice) { indice = ind.j<arrDest.j++){ html += "<td align=right>" + arrDest[i][j] + "</td>".length. destinos[3] = aresta3. for (i=0. que é um array de posições. html += "<table border=1 cellpadding=1 cellspacing=1>". destinos[5] = aresta5. for (j=0.push(j).j<arrDest. } Quadro 17 – Código fonte do método calcular() O método imprimirMatrizDeRotas(array. html += "<tr><td></td>". } html += "</tr>". destinos[4] = aresta4.36 function calcular() { destinos[0] = aresta0.i++){ html += "<tr>".

. map. representado no Quadro 20. function buscaProximaDistancia() { if (destinos) { if (jx == destinos.getElementById("mapa")). conforme Figura 7.13). e tem o parâmetro de entrada debug. é o método que varre todos os pontos de entrega atrás de uma melhor rota. que se estiver como true serve para visualizar detalhadamente todas as ações tomadas pelo método. map. jx = 0. calcular(). } } } Quadro 19 – Código fonte do método buscaProximaDistancia() O método calculaMelhorRota(array. valork = kx calculaRota(valorj.addControl(new GLargeMapControl()). } else { map = new GMap2(document. } if (kx < destinos.array). jx++.valork). calcular().37 disponíveis recursivamente.setCenter(latLng5.length) { valorj = jx.boolean.length) { kx++.

} if (melhor==null) { rota[i] = null. } } retorno['rota'] = rota. } if (arrayDestinos[i][indices[j]] < custo && arrayDestinos[i][indices[j]] != 0 && !visitado[indices[j]]) { custo = arrayDestinos[i][indices[j]]. melhor = indices[j]. } for (var i in indices){ custo = 999999999. for (i=0. var custo. Este processo é repetido até serem feitas todas as transposições dos índices. } visitado[melhor] = true. . totalCusto += 99999999. totalCusto += arrayDestinos[i][melhor]. Pode-se verificar que as linhas das duas matrizes de distância explanadas são transpostas de acordo com a numeração dos índices de pontos de entregas informados no parâmetro de entrada.boolean.debug.length-1).array) Na Figura 7 é possível visualizar um trecho da execução do método calculaMelhorRota().indices) { var rota = new Array(arrayDestinos. if (i==arrayDestinos. for (var j in indices){ if (debug) { msg('('+i+'. var melhor. } } if (debug) { msg('(Linha:'+i+') Melhor custo:<b>'+arrayDestinos[i][melhor]+'</b>. var retorno = [].i<arrayDestinos.length. Melhor rota:(de:'+indices[i]+' para:<b>'+melhor+'</b> )<br>'). melhor = null.length). visitado[indices[i]] = true. retorno['custo'] = totalCusto. var totalCusto = 0. } else { rota[i] = melhor. var visitado = new Array(arrayDestinos.38 function calculaMelhorRota(arrayDestinos.i++){ visitado[i]=false. return retorno.length-1) { break. } Quadro 20 – Código fonte do método calculaMelhorRota(array.'+indices[j]+') valor:'+arrayDestinos[i][indices[j]]+' menor custo:'+custo+' vizitado:'+visitado[indices[j]]+'<br>').

melhor = null. function buscaRotaMaisCurta(debug) { var custo = 999999999.debug. var retornoRota = []. //if (debug) { msg(' --> destino ['+pd+'] Custo:<b>'+retornoRota['custo']+'</b> Rota:<b>'+retornoRota['rota']+'</b><br>').length+'.pd<permutaDestinos['resultado'].permutaDestinos['i ndices'][pd]).39 Figura 7 – Debug da função calculaMelhorRota(array. for (pd=0.length.array) O método buscaRotaMaisCurta(boolean). //} if (retornoRota['custo'] < custo) { custo = retornoRota['custo'].permu taDestinos['indices'][pd])+'<br>'). verifica quais dos destinos tem a rota mais curta. } Quadro 21 – Código fonte do método buscaRotaMaisCurta(debug) . melhor= '+melhor+'<br>'+imprimiMatrizDeRotas(permutaDestinos['resultado'][pd]. } } return melhor.pd++){ if (debug) { msg('<br>verificando destino ['+pd+'] de '+permutaDestinos['resultado'].boolean. representado no Quadro 21. } retornoRota = calculaMelhorRota(permutaDestinos['resultado'][pd]. melhor = pd.

.40 3.4 Diagrama de seqüência O diagrama de sequência representado na Figura 8 demonstra o processo de pedido até sua finalização.2. Figura 8 – Diagrama de sequência do processo de pedido O diagrama de sequência representado na Figura 9 demonstra o processo de roteamento.

2. estão representados os estados do pedido. os estados andamento e entregue são cadastrados pelo operador do restaurante. já o estado cancelado pode ser atribuído por ambas as partes.5 Diagrama de estados Na Figura 10. .41 Figura 9 – Diagrama de sequência do cálculo de rotas 3. sendo que o estado aberto e avaliado é dado pelo consumidor.

0. juntamente com a biblioteca de classes Zend Framework 1. que utiliza o padrão de desenvolvimento MVC.9.3 IMPLEMENTAÇÃO A seguir são mostradas as técnicas e ferramentas utilizadas e a operacionalidade da implementação.1 Técnicas e ferramentas utilizadas O desenvolvimento do projeto foi elaborado utilizando a linguagem PHP5 no lado do servidor e JavaScript no lado do cliente.3. Foi utilizada a ferramenta Zend Studio 7. 3. .42 Figura 10 – Diagrama de estados 3.

A Figura 11 ilustra a página inicial do aplicativo.3 ValePizza. como se fosse pedir ao balcão. como mapa de pizzarias. que será o ponto de partida para o consumidor. 3.2 Operacionalidade da implementação Este tópico aborda o teste de operacionalidade da implementação. selecionando a cidade e posteriormente o bairro a que deseja que seja feita a entrega. ele pode navegar por outros recursos disponíveis. através de um estudo de caso que compreende a utilização do ponto de vista do usuário.43 3.3. onde o consumidor pode iniciar o processo de pedido.3.valepizza. Se o visitante não desejar fazer um pedido.com A usabilidade do sistema foi uma das prioridades do projeto: fazer com que o usuário faça o pedido de forma simples e completa.com. e perfis de pizzarias com informações. Figura 11 – Página inicial do aplicativo . sendo acessado através do endereço http://www.

são listados os tamanhos de pizza. Figura 12 – Escolha do restaurante Após a escolha do restaurante.3. o consumidor monta a pizza de acordo com os sabores disponíveis para o restaurante em questão.44 3.4 Módulo de pedido O processo de pedido é feito de acordo com o restaurante selecionado na Figura 12. Figura 13 – Escolha do tamanho de pizza Sendo selecionado um tamanho de pizza. conforme Figura 13. conforme Figura 14. .

é apresentado um formulário para informar os dados para entrega e acesso à conta do usuário. onde é possível notar que os itens dos pedidos se encontram no extrato localizado ao lado esquerdo da Figura 15. . Figura 15 – Seleção de adicionais Após a edição do pedido. como mostrado na Figura 16.45 Figura 14 – Seleção de sabores para a pizza Os adicionais para o pedido são apresentados no passo seguinte.

Figura 17 – Informações adicionais Na Figura 18. .46 Figura 16 – Informações para entrega O próximo passo consiste em informações adicionais sobre o pedido. mostradas na Figura 17. após a finalização do pedido são detalhadas informações sobre o pedido. sendo possível acompanhar seu andamento.

conforme Figura 19.valepizza. . encontrado no endereço http://www. cálculo de rotas.5 Módulo de administração Neste módulo são encontrados todos os cadastros referentes ao restaurante.com/adm. onde o operador acessa através de seu usuário e senha.47 Figura 18 – Detalhes do pedido 3. manutenção dos pedidos e usuários. O módulo de administração é acessado através de uma área restrita.3.

48 Figura 19 – Acesso a área restrita A Figura 20 demonstra como é feita a manutenção dos dados do restaurante na área restrita. representando a manutenção de pedidos. remoção e adição de novo registro. com opções de edição. Figura 20 – Tabela de registros da área restrita . Os registros são dispostos em uma tabela.

Figura 21 – Alteração de situação do pedido 3. conforme sua situação real. .49 Após selecionar um registro da tabela de pedidos. previamente calculadas pelo sistema. onde é passado um array com os pontos e suas devidas direções. O operador modifica a situação do pedido nesta tela. entre quatro pontos distintos. é exemplificada na Figura 21 sua visualização e edição.3. O mapa mostrado na Figura 22 retrata um caminho gerado pelo sistema.6 Cálculo de rotas A representação visual da rota é feita através de serviços disponibilizados pelo Google Maps API.

é mostrado o resultado conforme Figura 23. sendo que na primeira tabela. portanto foram utilizadas as .4 RESULTADOS E DISCUSSÃO O sistema desenvolvido neste trabalho atendeu as expectativas propostas. Atualmente existem dois restaurantes disponibilizando o serviço de entrega pela internet e utilizando este sistema de roteamento. Figura 23 – Resultado do cálculo de rotas 3. existe a matriz de distâncias entre todos os pontos. e na segunda tabela.50 Figura 22 – Representação visual da rota Após executar o cálculo de rotas. possibilitando aos restaurantes receberem pedidos pela internet visualizando suas rotas de entrega. as direções tomadas através do cálculo. Este projeto foi desenvolvido em um ambiente web. que já calculou a rota para mais de vinte pedidos efetuados pelo portal.

que utiliza uma tecnologia própria para representações de rotas. maximizando a carga de cada entregador. é possível a correção dos mesmos. pois caso sejam detectados problemas. mas dependendo da expansão do software para outras regiões. COMPARACAO ENTRE TRABALHOS Este trabalho Formigoni (2005) Otimização de rotas X X Disposição das rotas através de mapa X X Maximização de carga por entrega X Quadro 22 – Comparação entre trabalhos . explorando as características de cada técnica utilizada. havendo um lado positivo na representação de rotas utilizando um serviço já disponível. como o Google Maps API. A dissertação de mestrado de Formigoni (2005) conseguiu explanar os princípios básicos de métodos de solução via métodos heurísticos capazes de resolver o problema de roteirização. Foram utilizados também princípios de métodos de solução via formulação inteira.51 tecnologias disponíveis para a representação de rotas. elaborando métodos para resolução de um problema real. como mostra o Quadro 3. Por um lado é vantajoso ter sua própria forma de representação de rotas. podendo ser considerado também o custo de transporte por quilômetro rodado para cada entregador. acaba sendo trabalhosa a manutenção de todas estas regiões. que procura minimizar a distância total percorrida. diferentemente do projeto SIG Geo-rota.

4. um sistema operacional. Pelos testes feitos durante o desenvolvimento. foi escolhido o Zend. A maioria dos erros são referentes a direções. A escolha do melhor framework muitas vezes é difícil e pessoal. . Descartando todo o processo de entrada de dados geográficos ao sistema. que serve para facilitar o trabalho e poupar tempo. implicando no retorno incorreto de distâncias entre pontos. juntando este recurso com a praticidade e solidez do Zend Framework. havendo em certos momentos passagens contra-mão durante a trajetória da rota. integração com diversas tecnologias. por ser um framework que reúne uma ótima documentação. a qualidade no desenvolvimento é um ponto forte na execução deste trabalho. por ter empresas grandes apoiando a ferramenta e por não necessitar de arquivos de configuração para sua publicação e utilização. O uso do Google Maps API está virando uma tendência nos serviços que necessitam de representação visual através de mapas na web. uma boa curva de aprendizado. tornou-se possível à análise de diversas propostas para trabalhos futuros. assim como a escolha de uma linguagem de desenvolvimento. tendo algumas divergências como novas ruas e suas direções. esta escolha acaba resultando certas questões como a devida atualização geográfica do mapa.52 4 CONCLUSÕES Tendo em vista o problema da falta de um software de otimização geográfica com custo acessível e de fácil acesso. foram verificados poucos erros referentes aos caminhos encontrados pelo Google Maps API. optou-se por recorrer a uma API gratuita com todos os recursos necessários para obtenção de distância e representações gráficas.1 EXTENSÕES Conforme a evolução do desenvolvimento do trabalho. como é feito pelo projeto SIG GeoRota. Dentre os frameworks pesquisados. pois fica sob cuidados de terceiros. sendo elas: m) modificar algoritmo para encontrar a melhor rota para restaurantes com filiais. ou um Sistema de Gerenciamento de Banco de Dados (SGBD). de tal forma que o pedido seja entregue pela filial mais próxima. De certa forma.

. o) calcular o tempo de entrega para cada pedido decorrente da rota.53 n) modificar o algoritmo para poder utilizar mais de um veículo para as entregas.

1992. 2. Resolução de problemas de roteamento de veículos na entrega de produtos da indústria avícola. Acesso em: 14 set. 2000. 89 f. 2008. 1993. Dissertação (Mestrado em Ciências de Engenharia) . GOOGLE. A enciclopédia livre.org/wiki/API> Acesso em: 20 set. VERDEGAY. E. A enciclopédia livre.l. São Paulo. v. In: WIKIPÉDIA. A. H. T.l. Disponível em: <http://pt. Curitiba.ist.jsessionid=B3B26E0F912C941F3ADEBF41 B51A38C6?doi=10. 2002. 2006.edu/perl/webwn?s=delivery>. G. J. 2008. Rio de Janeiro: Campus.1. 2008. Rio de Janeiro: Campus. Introdução à teoria dos grafos.. C.princeton. GOLDBARG. 82 f. 127 f. FORMIGONI. Algoritmos genéticos híbridos sem delimitadores de rotas para problemas de roteirização de veículos. 2008.l.. ARAÙJO. 2005.com/more/#products-geo-maps>.psu. JOHNSON. Dissertação (Mestrado em Engenharia de Sistemas Logísticos) – Escola Politécnica da Universidade de São Paulo.. Princeton. Disponível em: <http://wordnet. WordNet. 1998. et al.54 REFERÊNCIAS BIBLIOGRÁFICAS API. RABUSKE. LOZANO. [2000]. 173 f. [S.6077&rep=rep1&type=pdf>. Vancouver.wikipedia. E. L. Geo-rota: sistema de informação geográfica aplicado à distribuição física de produtos em pequenas e médias empresas. P. [S. Campos dos Goytacazes. Artificial Intelligence Review. A.wikipedia. In: WIKIPÉDIA. Documenting frameworks using patterns. M. . Florianópolis. C. E. 2008. 2008.Universidade Estadual do Norte Fluminense. 2008. HERRERA. et al. Google Maps API. Algoritmos teoria e prática. M.1. Disponível em: <http://citeseerx. Dissertação (Mestrado em Ciências Exatas) – Universidade Federal do Paraná. C.org/wiki/API> Acesso em: 20 set. Acesso em: 20 set. E. Disponível em: <http://pt. ed.]. 2008. MILLER. FRAMEWORK. H.edu/viewdoc/download. L. M. G. CORMEN.google. Otimização combinatória e programação linear: modelos e algoritmos. [S. PÓVOA. LUNA. Universidade Federal de Santa Catarina. F. 2008.]: Wikimedia Foundation.46. 12. Acesso em: 21 set. R. Disponível em: <http://code. Tackling real-coded genetic algorithms: operators and tools for behavioural analysis.]: Wikimedia Foundation.

html>. UFRGS.ufrgs. .com.baguete. Acesso em: 14 set. Web Services architecture. Qual o principal ponto a ser considerado na relação cliente . 2008.]. S.com/about/overview>. Acesso em: 20 jan. Disponível em: <http://framework. [S. About Zend framework.zend.br/colunasDetalhes. [S. 2008.55 SOMENZI. Porto Alegre. 2008. W3C.mat. ZEND TECNOLOGIES.]. 2005. Disponível em: <http://www. Disponível em: <http://www. O problema do caixeiro viajante.fornecedor? Baguete.php?id=1654>. 2010. 2002. 2008. Acesso em: 14 set.br/~portosil/caixeiro. Acesso em: 14 set.w3.l.org/TR/2002/WD-ws-arch-20021114/>. Disponível em: <http://www.l. 2000.