Obtendo e Apresentando Rotas no Google Maps Android V2

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog. Você receberá um email de confirmação. Somente depois de confirma-lo é que poderei lhe enviar os conteúdos exclusivos.

Email inválido.
Blog /Android /Obtendo e Apresentando Rotas no Google Maps Android V2

Obtendo e Apresentando Rotas no Google Maps Android V2

Vinícius Thiengo
(8809) (42) (1)
Go-ahead
"Sempre procure algo que possa ser aprimorado. Nunca, jamais, conforme-se com o lugar onde está. A maneira como você atinge seus objetivos é sempre experimentar, até que consiga perceber se atingiu um ponto mais alto."
Jeff Sutherland
Kotlin Android
Capa do livro Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia
TítuloDesenvolvedor Kotlin Android - Bibliotecas para o dia a dia
CategoriasAndroid, Kotlin
AutorVinícius Thiengo
Edição
Capítulos19
Páginas1035
Acessar Livro
Treinamento Oficial
Android: Prototipagem Profissional de Aplicativos
CursoAndroid: Prototipagem Profissional de Aplicativos
CategoriaAndroid
InstrutorVinícius Thiengo
NívelTodos os níveis
Vídeo aulas186
PlataformaUdemy
Acessar Curso
Receitas Android
Capa do livro Receitas Para Desenvolvedores Android
TítuloReceitas Para Desenvolvedores Android
CategoriaDesenvolvimento Android
AutorVinícius Thiengo
Edição
Ano2017
Capítulos20
Páginas936
Acessar Livro
Código Limpo
Capa do livro Refatorando Para Programas Limpos
TítuloRefatorando Para Programas Limpos
CategoriaEngenharia de Software
AutorVinícius Thiengo
Edição
Ano2017
Capítulos46
Páginas599
Acessar Livro
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Conteúdo Exclusivo
Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
Email inválido

Opa! Blz?

Nesse vídeo mostro como obter a rota entre dois pontos utilizando o Google Maps V2 Android. A obtenção dos dados de rota é bem tranquila, porém para termos a rota exata, incluindo todos os pontos necessários para desenhar essa de maneira mais detalhada no mapa temos que decodificar os pontos que existem entre o inicio e fim de cada "step" da rota retornada. Essa decodificação é baseada em um método pronto que é utilizado por desenvolvedores que trabalham com o Google Maps. Note que é possível obter mais de uma rota para os pontos de origem e destino definidos, a alteração que deveria ter no código é a passagem em um loop onde apenas acessamos diretamente a posição zero. Note que os dados start_location e end_lcation, tanto contidos no array legs quanto os contidos no array steps não são úteis para obtermos a rota em sua nuance, temos que realmente decodificar a variável points do objeto polyline para obter exatamente por completo os pontos da rota. Note também a grande vantagem na obtenção da rota pelo Google Maps V2, ele nos fornece a distância sem a necessiade de realizarmos calculos para isso e também fornece o tempo aproximado para alcançar o destino.

Fique atento que se for utilizar a busca de rota com textos como conteúdo da busca, você deve utilizar também a classe URLEncoder com o método encode() para transformar o texto obtido do formulário de busca em texto URL GET. Sem mais delongas vou deixar você assistir ao vídeo.

O link para download do projeto se encontra logo abaixo no post.

Segue links dos vídeos anteriores da série sobre o Google Maps Android V2:

Google Maps V2 no Android, Inicio e Configuração

GoogleMap e CameraPosition no Android, Entendendo e Utilizando

Markers e Listeners no Google Maps Android

Polyline, Geocoder e Distância no Google Maps Android

Segue links dos vídeos dos conteúdos que complementam esse vídeo:

Parser JSON no Android, Entendendo e Utilizando

runOnUiThread, Atalho de Acesso a Thread Principal no Android

Simples Formulário na APP Android Comunicando com Servidor Web PHP

Segue link da página apresentada no vídeo:

Página de documentação da requisição de rota ao Google Maps

Vlw

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
Email inválido

Relacionado

Google Maps V2 no Android, Inicio e ConfiguraçãoGoogle Maps V2 no Android, Inicio e ConfiguraçãoAndroid
GoogleMap e CameraPosition no Android, Entendendo e UtilizandoGoogleMap e CameraPosition no Android, Entendendo e UtilizandoAndroid
Markers e Listeners no Google Maps AndroidMarkers e Listeners no Google Maps AndroidAndroid
Polyline, Geocoder e Distância no Google Maps AndroidPolyline, Geocoder e Distância no Google Maps AndroidAndroid

Compartilhar

Comentários Facebook (11)

Comentários Blog (31)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
04/11/2018
Poderia me ajudar??
"W/System.err: org.json.JSONException: Index 2 out of range [0..0)
W/System.err:     at org.json.JSONArray.get(JSONArray.java:293)
                  at org.json.JSONArray.getJSONObject(JSONArray.java:521)
W/System.err:     at com.example.jehqueiroz.coletaseletiva.MapsActivity.buildJSONRoute(MapsActivity.java:288)
                  at com.example.jehqueiroz.coletaseletiva.MapsActivity$5$1.run(MapsActivity.java:263)"
Responder
Vinícius Thiengo (0) (0)
06/11/2018
Jéssica, tudo bem?

Se possível, coloque no PasteBin ( https://pastebin.com/ ) a linha de código que está gerando o erro informado em mensagem.

Coloque também, em outra página do PasteBin, o arquivo JSON que está tendo problemas na leitura.

Jéssica, depois compartilhe aqui as URLs geradas no PasteBin. Assim será mais simples de encontrar uma solução.

Abraço.
Responder
21/03/2017
Olá thiengo tudo bom?
Bem criei um intinerario no Google maps como falado para colocar esse intinerario no meu app?
Estou iniciando agora em programação Android e gostaria de uma ajuda, desde de já agradeço
Responder
Vinícius Thiengo (0) (0)
24/03/2017
Marcos, tudo bem aqui.

Você pode escolher o caminho mais árduo, ou seja, implementar em seu projeto todo o código do Google Directions, para isso recomendo que leia a documentação, que está em português, em: https://developers.google.com/maps/documentation/directions/intro?hl=pt-br

A versão mais árdua terá uma série de regras de negócios, como por exemplo: saber informar ao usuário que não Internet para visualizar a rota ou deixar a rota em cache para apresenta-lo mesmo quando não houver conexão.

Mesmo a implementação árdua sendo problemática em termos de simplicidade, se implementada corretamente, incluindo a isso a qualidade no design, o App fica show de bola com o mapa dentro dele.

A opção mais simples, e que eu utilizaria caso o itinerário não fosse parte importante do domínio do problema de meu aplicativo, é enviando a rota via Intent para que o aplicativo de mapa apresente ao usuário a rota completa, incluindo o tempo com os vários possíveis meios de chegar ao destino.

Esse caso mais simples também é discutido no primeiro link que compartilhei aqui, mas veja essa resposta: http://stackoverflow.com/a/2663565/2578331

Abraço.
Responder
Anderson N. (1) (0)
16/03/2017
Thiengo blz, preciso de uma orientação em um trabalho, quanto vc cobra? aguardo retorno!
Responder
Vinícius Thiengo (0) (0)
16/03/2017
Anderson, tudo bem?

Envie um email para thiengocalopsita@gmail.com informando o que você precisa. Também poderei lhe indicar outros developers Android. Abraço.
Responder
Ruan Alves (1) (0)
11/01/2017
Fala thiengo blz?

Seguinte eu tenho uma rota de uma cidade X e cidade Y, quando eu faço no código ele me da uma rota "mais distante", tem algum parâmetro que delimita isso? E quando faço a rota e tem outros pontos de referência por exemplo: de uma cidade X e cidade Y tem outras cidades de referência no caminho ...

Vlw
Responder
Vinícius Thiengo (0) (0)
11/01/2017
Ruan, tudo bem?

Tem o WayPoints, onde é definido uma série de pontos obrigatórios onde a rota informada pelo Google deve passar.

https://developers.google.com/maps/documentation/directions/intro?hl=pt-br

Dê um Ctrl + F + ?waypoints" na página para ir direto ao conteúdo. Mas recomendo que leia ela por completo, pois as requisições deverão serem feitas por uma API de conexão remota no Android, provavelmente sem interface com o Google Maps.

Abraço.
Responder
Ruan Alves (1) (0)
17/03/2017
Show Thiengo ...

Mais uma dúvida, e no caso eu tiver por exemplo 8 cidades aonde quero passar, e ja tenho os dados necessários, tem como amontar a melhor rota?
Responder
Vinícius Thiengo (0) (0)
20/03/2017
Rua, as rotas serão retornadas pelo Google WayPoints, envie seus 8 pontos na requisição.

A primeira rota tende a ser a melhor, mas esse cálculo de melhor rota é aproximado, isso, pois esse problema é antigo na computação: cálculo da melhor rota. E sem uma solução rápida a partir de XYZ pontos. Abraço.
Responder
Ruan Alves (1) (0)
02/08/2016
Fala thiengo blz?

Seguinte preciso mexer com roteirização, no meu caso é o seguinte vou ter um cliente que vai ter o endereço, no caso vou fazer a roterização dele por ai, sei que a sua aula é show, mais teria bibliotecas de auxilio que vc usa? para ajudar na roterização? ... vlw thiengo, abraço....
Responder
Vinícius Thiengo (0) (0)
07/08/2016
Fala Ruan, blz?
Veja se essa library lhe ajuda com isso: https://android-arsenal.com/details/1/3148

Abraço
Responder
Ruan Alves (1) (0)
07/08/2016
Vlw, mais acho que vou optar pelo seu método, por que preciso que funciona em API 10 (Tinha esquecido desse detalhe)...
Responder
Alysson (0) (0)
27/01/2016
Só está criando as linhas das rotas quando o idioma do android é Inglês. Como resolver isso?
Responder
Vinícius Thiengo (0) (0)
30/01/2016
Alysson, blz?
Isso no device real ou no emulador? Algum warning está sendo printado no LogCat. Pergunto isso, pois esse problema é novo aqui. Abraço
Responder
06/11/2015
Olá Thiengo.
Bom eu implementei o código igualzinho ao seu projeto, e está funcionando normal. Porém estou usando markes em um mapa, quando clico nele, exibe uma rota do usuario ao marker. Só que quando eu clico em outro marker, quero que a rota antiga apague. Tentei implementar o polyline.remove(), mas sem sucesso. Você tem alguma dica que possa me ajudar?
Parabéns pelo site e canal, muito bons.
Responder
Vinícius Thiengo (0) (0)
07/11/2015
Fala Ph, blz?
Tentou invalidando o maps (http://stackoverflow.com/a/10109796/2578331 )? Abraço
Responder
08/11/2015
O .invalidate() foi descontinuado. Não existe na versão que estou usando.
Responder
Vinícius Thiengo (0) (0)
28/11/2015
Tente o clear (http://stackoverflow.com/a/15282833/2578331 ), mas terá de reconstruir logo em seguida... que não deve atrapalhar a performance se não forem mts pontos. Abraço
Responder
Gabriela Peixoto (1) (0)
29/05/2015
Thiengo, fiz tudo direitinho como tem no vídeo, mas das 3 vezes que testei, está dando esses erros relacionados ao JSON:
 org.json.JSONException: Index 0 out of range [0..0)
at org.json.JSONArray.get(JSONArray.java:282)
at org.json.JSONArray.getJSONObject(JSONArray.java:510)
at br.com.dobem.geracao.route.MapActivity.buildJSONRoute(MapActivity.java:375)
at br.com.dobem.geracao.route.MapActivity$8$1.run(MapActivity.java:346)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5593)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method) 
Não sei por que está dando isso.. procurei na internet e pode estar relacionado a que o google não permite que você faça muitas requisições em um curto período de tempo quando em teste, por isso a array estaria vindo vazia.. mas só testei essa parte com o código do vídeo hoje por 3 vezes. Help please D:
Responder
Vinícius Thiengo (0) (0)
30/05/2015
Fala Gabriel, blz?
O que está acontecendo é que vc está tentando acessar uma posição em um JSONArray vazio. Verificou se o json está sendo retornado em parte igual ao do vídeo? Coloque no LogCat assim que o JSON é retornado, ai vc vai ver se está ou não. Uma outra coisa é a busca que vc está realizando realmente não ter uma rota. Fez a busca de uma rota testada no Google Maps antes? Abraço
Responder
Heraldo Gama (1) (0)
05/03/2015
Bom dia,

Eu entendi errado ou o google cobra pelo uso da Google Maps Android API V2 ?
É que eu tô em testes de um exercício que to fazendo, até ontem tudo normal quando mandava mostrar uma rota, com minha localização e um ponto especifico (via latitude e longitude), hoje já não funciona mais quando informo outro ponto especifico, a rota traçada está sendo sempre a mesma, mesmo mudando as coordenadas. E detalhe, não mudei em nada o código.
Atenciosamente,


Heraldo Gama
Desenvolvedor de Software
98 8861-4186 / 98 8137-8819
skype: heraldogama
Responder
Vinícius Thiengo (0) (0)
06/03/2015
Fala Heraldo, blz?
Se não me engano o Google deixa vc utilizar free com até 25k requisições dia (que é bastante coisa, pelo menos para modo desenvolvimento), depois disso vc tem de pagar (se não me engano é coisa de alguns reais, algo como R$ 25,00). Veja no console do Google (onde vc ativou o maps), lá tem essas informações mais detalhadas... porém em seu caso esse problema não tinha visto antes... o que está vindo no LogCat? O maps tendo a printar algo nele informando o pq do problema. Certificou-se de que as rotas são mesmo completamente diferentes? Abraço
Responder
Heraldo Gama (1) (0)
06/03/2015
Sem erros aparentes. Gerei uma nova chave, agora como release, e ta funcionando normalmente. Mas ainda não paguei nenhum valor.
Responder
Heraldo Gama (1) (0)
06/03/2015
Obrigado, pelo apoio !!!!
Grande abraço.
Responder
Elias Martins Ferreira (1) (0)
18/02/2015
Boa tarde Vinícius, tudo bem?
estou tendo problemas com as libs do projeto, estou implementando um mapas, ao rodar o projeto aparece alguns erros: java.lang.NoClassDefFoundError: br.com.example.projeMap.GoogleMaps

qunando desmarco a opção android Dependencies,
e android Private Libraries marcando e desmacando as opções aparece diversos erros, você pode me ajudar ? Pois já tentei de tudo revisei todo o passo a passo da configuração mas sempre da erro
obs: importei o google play serive como projeto mas da erro mesmo assim.
Responder
Vinícius Thiengo (1) (0)
19/02/2015
Fala Elias, blz sim.
Esse vídeo é um pouco antigo ante as atualizações do Google Play Services, então o google_play_services que vc está utilizando deve ser atualizado para a mais nova versão se ainda não o fez. Mas o error mesmo está que vc tem uma classe "br.com.example.projeMap.GoogleMaps" que o Java não está encontrando, ela existe no code? Mesmo assim veja o google_play_services primeiro, pois ele pode ser a causa. Abraço
Responder
Elias Martins (0) (0)
19/02/2015
Bom dia Vinícius, como posso resolver esse erro
Jar mismatch! Fix your dependencies ?
Path:
C:\Users\emf\workspaceMobile\appcompat_v7\libs\android-support-v4.jar

Path: C:\Users\emf\workspaceMobile\ProjetoMap\libs\android-support-v4.jar
se desmarco uma delas não compila, ao colocar a lib "google_play_services " já da esse erro, atualizei e lib, pode ser erro do eclipse esses bugs. pois está dando erro por qualquer coisa, se puder dar uma ajuda te agradeço, abraços.
Responder
Vinícius Thiengo (0) (0)
20/02/2015
Elias, na verdade o problema são as referências a suas libs android-support-v4.jar. O "Jar mismatch! Fix your dependencies" indica que sua referência a essa lib está errada, vc terá de encontrar essa lib em seu pc e então apontar para o local verdadeiro que ela se encontra, se não me engano vc faz isso pelo Clica no batão direito do mouse > Properties > Build Path > Libraries > e então procure por android-support-v4.jar, clica nele e mude a referência para o local verdadeiro. Outro problema que pode ocorrer é quando vc tem mais de uma referência a mesma lib e as libs estão em versões diferentes, nesse caso vc terá de colocar todas na mesma versão ou remover algumas referências. Abraço
Responder
16/10/2014
Cara eu queria saber se eu posso pegar o local atual do cidadão e gravar a longitude e a latitude para mostrar pra outros cidadãos
Responder
Vinícius Thiengo (0) (0)
16/10/2014
Fala Stan, blz?
É possível sim, uma forma de fazer isso é por meio de um servidor Web sendo o background para salvar as coordenadas e então permitir que todos os outros aparelhos acessem essas coordenadas. Abraço
Responder