Как оптимизировать панорамирование и масштабирование в виде карты с несколькими строками? - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть вид карты, на котором я добавляю несколько оверлеев, каждый с линией рисования между геопунктами.В качестве исходных данных у меня есть объект ArrayList, и для каждых двух следующих местоположений я указываю строку.

Метод с добавлением оверлеев

public void showPath(ArrayList<Location> log) { 
    int count = 0;
    mapView.getOverlays().clear();

    for (int i = 0; i < (log.size() - 1); i++) {
        GeoPoint point = new GeoPoint((int) (log.get(i).getLatitude() * 1E6),(int) (log.get(i).getLongitude() * 1E6));
        GeoPoint point2 = new GeoPoint((int) (log.get(i + 1).getLatitude() * 1E6),(int) (log.get(i + 1).getLongitude() * 1E6));
        MapOverlay mapOvlay = new MapOverlay(point, point2); //vytvori overlay s carou mezi body
        mapView.getOverlays().add(mapOvlay);
        count++;
    }

    app.getToast("mumbers of read / display items: " + Integer.toString(orgSize) + " / " + Integer.toString(count));
    Log.d(TAG, "mumbers of read / display items: " + orgSize + " / " + count);

    mapView.setSatellite(true);
    GeoPoint point0 = new GeoPoint((int) (log.get(0).getLatitude() * 1E6),(int) (log.get(0).getLongitude() * 1E6)); //vycentruje mapu na pocatek zaznamu
    MapController mapController = mapView.getController();
    mapController.setCenter(point0);
    mapView.setEnabled(true);
}

Это метод draw () в MapOverlay, расширяющий оверлей

@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
   super.draw(canvas, mapView, shadow);

   Paint paint;
   paint = new Paint();
   paint.setColor(Color.BLUE);
   paint.setStyle(Style.STROKE);
   paint.setStrokeWidth(6);
   paint.setAntiAlias(true);

   Point pt1 = new Point(); 
   Point pt2 = new Point();

   Projection projection = mapView.getProjection();

   projection.toPixels(Gpt1, pt1);
   projection.toPixels(Gpt2, pt2);

   canvas.drawLine(pt1.x, pt1.y, pt2.x, pt2.y, paint);
   return true;
}

Проблема в том, что я рисую много линий около 500использование карты очень медленное, особенно панорамирование и масштабирование.Я попытался нарисовать линию в одном наложении и добавить ее на карту, но результат был тот же.У кого-нибудь есть идеи, как это оптимизировать или как-то нарисовать линию?Мне не нужно оптимизировать добавление элементов на карту, чтобы сделать перемещение по карте более плавным.Заранее спасибо.

1 Ответ

0 голосов
/ 28 февраля 2012

Попробуйте по-другому, передайте массив в MapOverlay и сделайте цикл for внутри метода draw, в этом случае вы создадите только один MapOverlay вместо 500, и нарисуете 500 линий с одним MapOverlay и вы получите тот же результат.

Если вы все еще не поняли мой ответ, скажите мне, и я продемонстрирую с кодами.

...