2017-10-21 3 views
0

Je travaille sur la fonctionnalité où j'envoie waypoints à Gmaps application par Intent afin que l'utilisation peut naviguer vers la destination par la coutume waypoints que j'envoieCréez un itinéraire de circuit par points de passage passant à GoogleMaps android

I quand je intrigue cette route dans mon Google Maps intégré, je peux voir Circuit route, mais quand je vois la même route dans l'application Gmaps, le Circuit est cassé.

Mon code:

String srcAdd = "saddr="+latLngArrayList.get(0).latitude+","+latLngArrayList.get(0).longitude; 
     String desAdd = "&daddr="+latLngArrayList.get(latLngArrayList.size() - 1).latitude+","+latLngArrayList.get(latLngArrayList.size() - 1).longitude; 
     String wayPoints = ""; 

     for (int j = 1; j < latLngArrayList.size() - 1; ++j) { 

      wayPoints =wayPoints+"+to:"+latLngArrayList.get(j).latitude+","+latLngArrayList.get(j).longitude; 
     } 

     String link="https://maps.google.com/maps?"+srcAdd+desAdd+wayPoints; 
     final Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(link)); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"); 
     startActivity(intent); 

route circuit enter image description here

pas d'itinéraire circuit enter image description here

+0

Comment construisez-vous une route dans l'activité de votre application? Exécutez-vous la requête de l'API Directions pour obtenir la polyligne? Pouvez-vous fournir des valeurs exactes d'origine, de destination et de waypoints pour reproduire le problème dans l'application Google Maps? – xomena

+0

Oui, j'utilise Direction API. –

+0

Qu'en est-il des valeurs d'origine, de destination et de waypoint?J'ai besoin d'eux pour reproduire le problème, sinon je ne peux pas aider. – xomena

Répondre

1

je suggère d'avoir un regard à Google Maps URLs API qui a été launc hed en mai 2017. Cette API fournit des liens multiplateformes universels que vous pouvez utiliser dans vos applications pour lancer des intentions pour Google Maps. L'un des modes pris en charge est le mode de directions. Vous pouvez lire à ce sujet ici:

https://developers.google.com/maps/documentation/urls/guide#directions-action

Lorsque vous utilisez l'API Directions et coordonnées échantillons de courant waypoints, j'ai pu tester les résultats dans le service Web et dans les URL Google Maps.

Les résultats du service Web sont testés dans l'outil de calcul d'itinéraire:

https://directionsdebug.firebaseapp.com/?origin=19.07598304748535%2C72.87765502929688&destination=19.07598304748535%2C72.87765502929688&waypoints=18.7284%2C73.4815%7C18.6876%2C73.4827%7C18.5839587%2C73.5125092%7C18.5369444%2C73.4861111%7C18.480567%2C73.491658

L'itinéraire que nous obtenons via l'API Directions est le suivant

enter image description here

Le lien URL Google Maps pour ces points de passage sont les suivants:

https://www.google.com/maps/dir/?api=1&origin=19.07598304748535,72.87765502929688&destination=19.07598304748535,72.87765502929688&waypoints=18.7284,73.4815%7C18.6876,73.4827%7C18.5839587,73.5125092%7C18.5369444,73.4861111%7C18.480567,73.491658&travelmode=driving

L'itinéraire que vous obtenez en utilisant des URL Google Maps est montré dans cette capture d'écran

enter image description here

Comme vous pouvez voir les deux itinéraires sont les mêmes, API Directions et les URL Google Maps fonctionnent comme prévu. Je crois que vous devriez changer votre code pour utiliser les URL intentions de Google Maps:

String srcAdd = "&origin=" + latLngArrayList.get(0).latitude + "," + latLngArrayList.get(0).longitude; 
String desAdd = "&destination=" + latLngArrayList.get(latLngArrayList.size() - 1).latitude + "," + latLngArrayList.get(latLngArrayList.size() - 1).longitude; 
String wayPoints = ""; 

for (int j = 1; j < latLngArrayList.size() - 1; j++) { 
    wayPoints = wayPoints + (wayPoints.equals("") ? "" : "%7C") + latLngArrayList.get(j).latitude + "," + latLngArrayList.get(j).longitude; 
} 
wayPoints = "&waypoints=" + wayPoints; 

String link="https://www.google.com/maps/dir/?api=1&travelmode=driving"+srcAdd+desAdd+wayPoints; 
final Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(link)); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"); 
startActivity(intent); 

En outre, vous pouvez utiliser le paramètre dir_action=navigate afin d'ouvrir leur tour par tour de navigation directement.

J'espère que cela aide!

+0

Merci Monsieur pour votre réponse. La route qui est liée (circuit formé) est différente de celle que j'attends. Je ne comprends toujours pas que c'est arrivé? S'il vous plaît voir mon image de route de circuit dans la poste. –

+0

Cela est en effet différent, mais la route suggérée dans l'API Directions peut varier d'un jour à l'autre. Google prend en compte les conditions de circulation et renvoie l'itinéraire le plus rapide plutôt que le plus court, de sorte que vous pouvez voir différentes routes au fil du temps. C'est prévu. Si vous avez exactement besoin du même itinéraire, ajoutez d'autres waypoints pour mieux contrôler la sortie. Vous avez une calculatrice de directions pour jouer avec les routes et les points de cheminement. – xomena

+0

Monsieur, j'ai essayé un petit hack de générer des waypoints supplémentaires pour créer un circuit désiré et cela a fonctionné. Votre réponse m'a aidé monsieur. Merci :) :) –