Create a circuit route by passing waypoints to GoogleMaps android

半城伤御伤魂 提交于 2019-11-27 07:19:56

问题


I am working on functionality where I send waypoints to Gmapsapp through Intent so that use can navigate to the destination by the custom waypoints that I send

I when I plot this route in my embedded Google Maps , I can see Circuit route , but when I see the same route in Gmapsapp , the Circuit is broken.

My 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);

circuit route

no circuit route


回答1:


I would suggest having a look at Google Maps URLs API that was launched in May 2017. This API provides a universal cross-platform links that you can use in your applications to launch intents for Google Maps. One of the supported modes is directions mode. You can read about it here:

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

As you use Directions API and posted sample coordinates of waypoints, I was able to test the results in web service and in Google Maps URLs.

The web service results are tested in Directions calculator tool:

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

The route that we get via Directions API is the following

The Google Maps URLs link for these waypoints is the following

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

The route that you get using Google Maps URLs is shown in this screenshot

As you can see both routes are the same, so Directions API and Google Maps URLs work as expected. I believe you should change your code for intents to use Google Maps URLs:

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);

In addition, you can use dir_action=navigate parameter in order to open turn-by-turn navigation directly.

I hope this helps!



来源:https://stackoverflow.com/questions/46864455/create-a-circuit-route-by-passing-waypoints-to-googlemaps-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!