Прежде всего, вы должны использовать Google Maps API V2 вместо старого устаревшего API V1
В упражнении создайте ссылки Google Map и Polyline:
public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback{
private GoogleMap mMap;
Polyline line;
//......
Сначалаопределите свой список путевых точек:
List<LatLng> latLngWaypointList = new ArrayList<>();
Получите свой маршрут, нарисуйте полилинию для маршрута, а затем нарисуйте маркеры путевых точек:
class GetDirectionsAsync extends AsyncTask<LatLng, Void, List<LatLng>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected List<LatLng> doInBackground(LatLng... params) {
List<LatLng> route = new ArrayList<>();
//populate route......
return route;
}
@Override
protected void onPostExecute(List<LatLng> route) {
if (route == null) return;
if (line != null){
line.remove();
}
PolylineOptions options = new PolylineOptions().width(5).color(Color.MAGENTA).geodesic(true);
for (int i = 0; i < pointsList.size(); i++) {
LatLng point = route.get(i);
//If this point is a waypoint, add it to the list
if (isWaypoint(i)) {
latLngWaypointList.add(point);
}
options.add(point);
}
//draw the route:
line = mMap.addPolyline(options);
//draw waypoint markers:
for (LatLng waypoint : latLngWaypointList) {
mMap.addMarker(new MarkerOptions().position(new LatLng(waypoint.latitude, waypoint.longitude))
.title("Waypoint").icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_VIOLET)));
}
}
}
Вот лишь реализация заполнителя isWaypoint):
public boolean isWaypoint(int i) {
//replace with your implementation
if (i % 17 == 0) {
return true;
}
return false;
}
Результат для маршрута от западного до восточного побережья, около 2500 миль:
Результатменьшего маршрута:
Обратите внимание, что в этом примере я также использую API-интерфейсы Google для того, чтобы привязать маршрут к дорогам,Полный пример использования API Google Directions приведен здесь: https://stackoverflow.com/a/32940175/4409409