Увеличение на Android Dev - Google Maps становится медленнее - PullRequest
0 голосов
/ 15 февраля 2010

Я разработал приложение GPS, в котором я записываю маршруты пользователя и показываю его на карте. Но панорамирование на карте при просмотре моего маршрута мучительно медленное, карте требуется не менее 4–5 секунд, чтобы карта ответила пальцами.

Я переопределил метод onDraw () и рисовал линии для отображения маршрутов при каждом увеличении масштаба карты. Лат-лонг снова рисуется путем вызова метода onDraw () (Overridden), который имеет геоинты с лат -лон значения, и, следовательно, отображение карты будет очень медленным. Есть ли лучший способ сделать это так, чтобы панорамирование стало быстрее, чем в приложении «MyTracks»?

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

class PathOverlay extends Overlay{
  public PathOverlay() {
        // TODO Auto-generated constructor stub
        geopoints=new ArrayList<GeoPoint>();
        c.moveToFirst();
        for (int i = 0; i <c.getCount() ; i++){

            if(c.getDouble(c.getColumnIndex("latitude")) != 0.0 ||
                    c.getDouble(c.getColumnIndex("longitude"))!=0.0) {

                geopoints.add(getPoint(c.getDouble(c.getColumnIndex("latitude"))
                        , c.getDouble(c.getColumnIndex("longitude"))));
                gps_status.add(Boolean.parseBoolean(c.getString(c.getColumnIndex("gps") )));
                avgeSpeed_points.add(c.getFloat(9));
            }
            c.moveToNext();


        }

    }
    private GeoPoint getPoint(double lat, double lon) {
        return(new GeoPoint((int)(lat*1000000.0),(int)(lon*1000000.0)));
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {

    //  super.draw(canvas, mapView, shadow);
        mapView.getDrawingCache();

        Paint paint_Line=new Paint();
        //paint_Line.setColor(Color.RED);
        paint_Line.setARGB(255, 255, 0, 0);
        paint_Line.setStrokeWidth(3);
        paint_Line.setDither(true);
        paint_Line.setStyle(Style.FILL);
        paint_Line.setAntiAlias(true);
        paint_Line.setStrokeJoin(Paint.Join.ROUND);
        paint_Line.setStrokeCap(Paint.Cap.ROUND);



        mapView.postInvalidateDelayed(6000);


        for(int i=0;i<geopoints.size()-1;i++) {

            Point p1=new Point();
            Point p2=new Point();

            if((geopoints.get(i).getLatitudeE6()!=geopoints.get(i+1).getLatitudeE6())
                    && (geopoints.get(i).getLongitudeE6()!=geopoints.get(i+1).getLongitudeE6())
                    && gps_status.get(i+1)){
            paint_Line.setColor(Color.BLUE);
            mapView.getProjection().toPixels(geopoints.get(i), p1);
            mapView.getProjection().toPixels(geopoints.get(i+1),p2);
            canvas.drawLine(p1.x,p1.y,p2.x,p2.y,paint_Line);
           }    

            mapView.getProjection().toPixels(geopoints.get(i),p1);
            if(i==0){
                canvas.drawBitmap(start, p1.x-2, p1.y-start.getHeight()+2, null);
            }
            if (i+1==geopoints.size()-1) {
                canvas.drawBitmap(finish, p1.x-2, p1.y-finish.getHeight()+2, null);
            }   
        }






    }

}

1 Ответ

0 голосов
/ 16 февраля 2010

Можете ли вы сохранить точки в файл KML на вашем сервере? Попробуйте создать готовый файл KML с теми же точками и добавить его на карту, используя:

Intent mapIntent = new Intent(Intent.ACTION_VIEW, uri);
Uri uri1 = Uri.parse("geo:0,0?q=http://code.google.com/apis/kml/documentation/KML_Samples.kml");
mapIntent.setData(uri1);
startActivity(Intent.createChooser(mapIntent, "Sample Map ")); 

Если скорости намного выше, вам следует взглянуть на этот подход, а не писать собственный метод рисования. KML - это форма XML, поэтому вы можете создать его таким же образом. не забудьте добавить стиль (цвета и т. д.) в файл KML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...