отчаянно пытается нарисовать линию на карте - PullRequest
0 голосов
/ 10 мая 2011

Я читаю некоторые данные GPS (долгота, широта) из класса ServerManager, в котором они хранятся.

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

Вот часть моего кода:

GeoPoint p;

protected Void doInBackground(Void... voids) {

    try {

        while (true) {
            longitude = Integer.parseInt(ServerManager.getInstance()
                    .getLastLongitude());
            latitude = Integer.parseInt(ServerManager.getInstance()
                    .getLastLatitude());
            Log.d("Date citite de threadul AsyncTask", " ");
            System.out.println(longitude);
            System.out.println(latitude);
            p = new GeoPoint(longitude, latitude);
            publishProgress(p);
            Thread.sleep(500);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

protected void onProgressUpdate(GeoPoint... progress1) {

    theRouteDraw(progress1[0]);
  geoPointsArray.add(progress1[0]);

  if (geoPointsArray.size() > 2) {
            int length = geoPointsArray.size();

            mapView.getOverlays().add(
                    new myOverlay(geoPointsArray.get(length - 1),
                            progress1[0]));
        }

}

}

для отображения точек на карте я использую:

public void theRouteDraw (GeoPoint p1) {

mc.animateTo(p1);

mc.setZoom(17);

mapView.invalidate();

mapView.setSatellite(true);

}


А для получения оверлея я использую:

класс myOverlay расширяет оверлей {

    GeoPoint gp1;

    GeoPoint gp2;

    public myOverlay(GeoPoint gp1, GeoPoint gp2) {

        this.gp1 = gp1;

        this.gp2 = gp2;
    }

    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        super.draw(canvas, mapView, shadow);

        Paint mPaint = new Paint();
        mPaint.setStyle(Style.STROKE);
        mPaint.setColor(Color.GREEN);
        mPaint.setAntiAlias(true);
        mPaint.setStrokeWidth(4);
        Projection projection = mapView.getProjection();

        Point from = new Point();

        projection.toPixels(gp1, from);

        Point to = new Point();

        projection.toPixels(gp2, to);

        canvas.drawLine(from.x, from.y, to.x, to.y, mPaint);


    }

}

Мой вопрос:

Кто-нибудь знает, почему на моей карте не нарисована линия? Спасибо тебе:)

1 Ответ

1 голос
/ 10 мая 2011

попробуйте это:

class myLocOverlay extends Overlay { public myLocOverlay(GeoPoint gp1,GeoPoint gp2) {
   this.gp1 = gp1;
this.gp2 = gp2;
}

и обновите свою функцию onDraw с помощью этого

Paint paint = new Paint(); Point point = new Point();
        projection.toPixels(gp1, point); Point point2 = new Point();
            projection.toPixels(gp2, point2); canvas.drawLine(point.x, point.y, point2.x,point2.y, paint);

, который вы можете добавить геопоинт из вашего класса активности

mMapView01.getOverlays().add(new MyOverLay(startGP,endGP));
...