MapView - 在他旅行的路上跟踪和绘制路线?

时间:2012-04-04 09:18:48

标签: android

我正在尝试在mapView中从当前位置(从GPS获取)到他旅行的方式绘制路线。

我可以在特定方向移动时获取用户的位置,但我无法绘制路径。

当他从一个地方连续移动到另一个地方时,绘制路径路径的最佳方法是什么?

我希望方法很好(就性能而言)。

2 个答案:

答案 0 :(得分:2)

您必须跟踪当前位置&以前的位置(例如在全局变量中)以绘制路径[除了第一次只有当前位置,所以在下一个点之前什么都不做]。

        int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
        Paint paint = new Paint();
        paint.setColor(Color.rgb(0x7b, 0x7b, 0xff));
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(5);

                Point prevloc = new Point();
                mv.getProjection().toPixels(new GeoPoint((int (prevlocation.getLatitude()*1.0E6),(int) (prevlocation.getLongitude()*1.0E6)), prevloc);
                Point loc = new Point();
                mv.getProjection().toPixels(new GeoPoint((int (location.getLatitude()*1.0E6),(int) (location.getLongitude()*1.0E6)), loc);
                x2 = prevloc.x;
                y2 = prevloc.y;
                if (first)
                {
                    x2 = loc.x;
                    y2 = loc.y;
                }
                if (!first) {
                    canvas.drawLine(x1, y1, x2, y2, paint);
                }
                x1 = x2;
                y1 = y2;

这将在draw()中调用,您可以通过在onLocationChanged()函数中绘制叠加来以某种方式调用此绘制函数。

注意:canvas和mv是传递给draw()函数的参数,首先是一个全局布尔变量,表示这是你得到的第一个点。

答案 1 :(得分:1)

public void draw(Canvas canvas, MapView mapv, boolean shadow){
    super.draw(canvas, mapv, shadow);
    Projection projection = mapv.getProjection();
    Path p = new Path();
    for (int i = 0; i < geoPointsArray.size(); i++) {
        if (i == geoPointsArray.size() - 1) {
            break;
        }
        Point from = new Point();
        Point to = new Point();
        projection.toPixels(geoPointsArray.get(i), from);
        projection.toPixels(geoPointsArray.get(i + 1), to);
        p.moveTo(from.x, from.y);
        p.lineTo(to.x, to.y);
    }
    Paint mPaint = new Paint();
    mPaint.setStyle(Style.STROKE);
    mPaint.setColor(Color.GREEN);
    mPaint.setAntiAlias(true);
    mPaint.setStrokeWidth(5);
    canvas.drawPath(p, mPaint);
    mapv.invalidate();
    super.draw(canvas, mapv, shadow);
}//draw()

当我们从一个地方移动到另一个地方时,我们可以使用上述方法绘制路线。 geoPointsArray是收到位置的数组。