Для нескольких пунктов вы можете попробовать это.
private String getDirectionsUrlForAllPoints(String travelMode, ArrayList<LatLng> points)
{
//int source, dest = 0;
StringBuilder polyLineUrl = new StringBuilder("http://maps.googleapis.com/maps/api/directions/");
// Output format
polyLineUrl.append("json?");
StringBuilder wayPointUrl = new StringBuilder();
for (int i = 0; i < points.size(); i++) {
if (i == 0) {
// Origin of route
polyLineUrl.append("origin=");
polyLineUrl.append(points.get(i).latitude);
polyLineUrl.append(",");
polyLineUrl.append(points.get(i).longitude);
continue;
}
// For poly line between last points
if (i == points.size() - 1) {
//dest = i;
// Destination of route
polyLineUrl.append("&destination=");
polyLineUrl.append(points.get(i).latitude);
polyLineUrl.append(",");
polyLineUrl.append(points.get(i).longitude);
continue;
}
wayPointUrl.append("|");
wayPointUrl.append(points.get(i).latitude);
wayPointUrl.append(",");
wayPointUrl.append(points.get(i).longitude);
/*https://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true
|-34.901374,138.737500|-34.918335,138.720412|-34.919335,138.750412|-34.928335,138.790412|-34.938335,138.800412
* */
}
// Sensor enabled
// Building the parameters to the web service
polyLineUrl.append("&sensor=false&optimize=true&mode="); //String parameters = str_origin+"&"+str_dest+"&"+sensor + ;
polyLineUrl.append(travelMode);
if (wayPointUrl.toString().length() > 0) {
wayPointUrl.insert(0, "&waypoints=");
}
// Building the url to the web service
String url = polyLineUrl.toString() + wayPointUrl.toString();
Log.d(TAG, "Url: " + url);
return url;
}
/**
* Receives a JSONObject and returns a list of lists containing latitude and longitude
*/
public List<List<HashMap<String, String>>> parseForAllPoints(JsonObject jObject) {
List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String, String>>>();
JsonArray jRoutes = null;
JsonArray jLegs = null;
JsonArray jSteps = null;
JsonObject jDistance = null;
JsonObject jDuration = null;
try {
jRoutes = jObject.getAsJsonArray("routes");
if (jRoutes != null) {
/** Traversing all routes */
for (int i = 0; i < jRoutes.size(); i++) {
jLegs = ((JsonObject) jRoutes.get(i)).getAsJsonArray("legs");
List<HashMap<String, String>> path = new ArrayList<HashMap<String, String>>();
/** Traversing all legs */
for (int j = 0; j < jLegs.size(); j++) {
/** Getting distance from the json data */
jDistance = ((JsonObject) jLegs.get(j)).getAsJsonObject("distance");
HashMap<String, String> hmDistance = new HashMap<String, String>();
hmDistance.put("distance", jDistance.get("text").getAsString());
/** Getting duration from the json data */
jDuration = ((JsonObject) jLegs.get(j)).getAsJsonObject("duration");
HashMap<String, String> hmDuration = new HashMap<String, String>();
hmDuration.put("duration", jDuration.get("text").getAsString());
/** Adding distance object to the path */
path.add(hmDistance);
/** Adding duration object to the path */
path.add(hmDuration);
jSteps = ((JsonObject) jLegs.get(j)).getAsJsonArray("steps");
/** Traversing all steps */
for (int k = 0; k < jSteps.size(); k++) {
String polyline = "";
polyline = ((JsonObject) ((JsonObject) jSteps.get(k)).get("polyline")).get("points").getAsString();
//Log.d(TAG, "parse: " + polyline);
List<LatLng> list = decodePoly(polyline);
/** Traversing all points */
for (int l = 0; l < list.size(); l++) {
HashMap<String, String> hm = new HashMap<String, String>();
if (list.get(l) != null) {
hm.put("lat", Double.toString(((LatLng) list.get(l)).latitude));
hm.put("lng", Double.toString(((LatLng) list.get(l)).longitude));
path.add(hm);
}
}
}
}
routes.add(path);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return routes;
}
/**
* Method to decode polyline points
* Courtesy : jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java
*/
private List<LatLng> decodePoly(String encoded) {
List<LatLng> poly = new ArrayList<LatLng>();
int index = 0, len = encoded.length();
int lat = 0, lng = 0;
while (index < len) {
int b, shift = 0, result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;
LatLng p = new LatLng((((double) lat/1E5)),
(((double) lng/1E5)));
poly.add(p);
}
return poly;
}
Вы получите URL-адрес от getDirectionsUrlForAllPoints(). сделать запрос webservice (get), а затем проанализировать этот ответ с помощью метода parseForAllPoints(). затем, наконец, добавьте arraylist latlng в полилинию. он будет рисовать полилинию со всеми точками. Я сделал это в разных классах, но я не могу вставить полный код здесь. надеюсь, вы поймете.
Взгляните на http://stackoverflow.com/questions/38629519/calculation-for-latitude-and-longitude-from-start-to-destination-point/38629834 – antonio
@antonio Спасибо! ... это помогло me abit :) –