Как отобразить движущуюся дорожку на устройстве Android

Я хочу построить свой трек с помощью GPS на устройстве Android.

у меня нет проблем с отображением завершенного маршрута, но мне трудно показать трек, Когда я двигаюсь.

до сих пор я нашел 2 разных способа сделать это, но ни один из них не является особенно удовлетворительным.

метод 1

PolylineOptions track = new PolylineOptions();
Polyline poly;

while (moving) {
    Latlng coord = new LatLng(lat,lng);    // from LocationListener
    track.add(coord);
    if (poly != null) {
        poly.remove();
    }
    poly = map.addPolyline(track);
}

ie создайте полилинию, удалив ее, прежде чем добавлять новые координаты, а затем добавлять ее обратно.

Это чудовищно медленный.

Метод 2

oldcoord = new LatLng(lat,lng);;

while (moving) {
    PolylineOptions track = new PolylineOptions();
    LatLng coord = new (LatLng(lat,lng);
    track.add(oldcoord);
    track.add(coord);
    map.addPolyline(track);

    oldcoord = coord;
}

ie построить серию одиночных полилиний.

хотя это делает намного быстрее, чем метод 1, он выглядит довольно неровным, особенно на более низких уровнях масштабирования, потому что каждая полилиния в квадрате, и это только углы, которые фактически касаются.

есть ли лучший способ и, если да, то что это?

1 ответов


существует простое решение с использованием 2.0 Maps API. Вы получите хорошую гладкую линию маршрута, используя три шага:

  1. создайте список точек LatLng, таких как:

    List<LatLng> routePoints;
    
  2. добавить точки маршрута в список (может/должно быть сделано в цикле):

    routePoints.add(mapPoint);
    
  3. создайте полилинию и передайте ей список точек LatLng как таковых:

    Polyline route = map.addPolyline(new PolylineOptions()
      .width(_strokeWidth)
      .color(_pathColor)
      .geodesic(true)
      .zIndex(z));
    route.setPoints(routePoints);
    

дайте ему попробовать!