Google Maps com Win32

Integre seus sistemas com o Google Maps

 

Após a publicação do meu artigo sobre Google Maps na ClubeDelphi 104, recebi muitos e-mails de leitores informando que o código não funcionava, então resolvi investigar o problema para ver onde que ocorreu o erro. Descobri que problema não está no código publicado na revista e sim por um motivo bem simples: a rua é nova e não consta no banco de dados do Google ou simplesmente há algo de errado em um dos endereços digitados. É o que diz a mensagem exibida pelo endereço original de exemplo utilizado na revista como podemos ver na Figura 1.



Figura 1. Erro na página original do Google


Ao traduzirmos a mensagem teremos o texto


"A localização geográfica de um dos endereços não pode ser encontrada. Isso pode ser devido ao fato do endereço ser relativamente novo ou incorreto."


Muitos leitores conseguiram visualizar as respectivas rotas apenas modificando e testando outros endereços no exemplo criado. Em estudo descobri que podem ocorrer outros erros que na verdade são avisos, por exemplo. Quando joguei a rota:


Origem: Rua Dança do Fogo, 91, Sao Paulo, SP
Destino: Rua Direita 100, Centro, Sao Paulo, SP


A mensagem "Essa rota possui muitos vértices" aparece, como na Figura 2. Esse aviso aparece porque o caminho é bastante longo e um alerta é exibido. De qualquer forma a rota é carregada normalmente (Figura 3).



Figura 2. Mensagem de alerta



Figura 3. Mapa carregado



Uma alternativa para esse "erro" é omitir a mensagem apenas retirando-a do código JavaScript como vemos a seguir em um trecho de código:


...

  Add('      function onGDirectionsLoad(){');
  Add('        var poly = gdir.getPolyline();');
//  Add('        if (poly.getVertexCount() > 100) {');
//  Add('          alert("Esta rota possui muitos vértices.");');
//  Add('          return;');
//  Add('        }');

...


Estudando mais ainda a API do Google percebi que houve uma pequena alteração nela. Quando jogamos um endereço que ele possivelmente não reconhece, o Google Maps mostra uma lista de possíveis ruas a esquerda do mapa.


Experimente digitar o endereço: Rua 15 de Novembro, 466, Sao Paulo, SP no link maps.google.com  e veja o que acontece (Figura 4). Uma lista é carregada a esquerda e o mais impressionante, nenhuma das ruas corresponde ao endereço digitado. A rua citada, uma das mais conhecidas de São Paulo, não foi encontrada de forma alguma no Google para frustração do autor. Testei pessoalmente diversas ruas que contém números como Av 23 de Maio, Largo 13 de Maio, Rua 18 de Setembro, e, aparentemente, o Google possui alguma dificuldade em encontrar as ruas ou a mesma está cadastrada de forma diferente, com algarismos romanos, por exemplo.




Figura 4.Sugestão de ruas


Então na realidade, o grande lance do Google Maps é estudar bem seus exemplos e tentar reproduzí-los na aplicação. O segredo do artigo foi transformar todo o conteúdo dos exemplos em uma grande String. As áreas variáveis foram concatenadas a essa grande string, exemplo:







Perceba que concatenamos a string que monta a tag em HTML ao texto que recebemos por parâmetro na função, veja:


procedure TForm1.CriarMapa(AOrigem, ADestino, ALocalidade: string);



Add('' + '''' + AOrigem + '''' + ',' + '''' + ADestino + '''' + ',' + '''' + ALocalidade + '''' + '); return false">');


Azul: é código HTML que foi incluído entre Strings;
Vermelho: As variáveis que recebemos por parâmetro;
Verde: Código Delphi;


No final de tudo inserimos o conteúdo da super-string em uma variável do tipo TStringList e a salvamos no disco rígido como um arquivo HTML:


SaveToFile(ExtractFilePath(Application.ExeName)+'mapa2.html');

E então carregamos o arquivo no TWebBrowser para ser exibido para o usuário final.
Realmente não há nenhum segredo.

WebBrowser1.Navigate(ExtractFilePath(Application.ExeName)+'mapa2.html');

Até mais e um forte abraço.