在Google Maps for Android上按照您的位置绘制路径

时间:2011-05-06 16:26:11

标签: java android google-maps

我正在制作一个应用程序,我需要在Google地图上绘制路径,因为位置会发生变化,显示用户的位置。我已经尝试使用MyLocationOverlay类,我认为我可以覆盖绘制位置的方法但是我没有成功确定要覆盖的方法。此外,每次绘制位置时,MyLocationOverlay似乎都会绘制一个新地图。我目前正在使用ItemizedOverlay,每次位置更改时都会在列表中添加一个点。这是有效的,当我走路时,我得到一个虚线路径,但我真的想要一条坚固的道路。有什么建议吗?

我也看过这个post,但我无法让它发挥作用。你不需要叠加才能把它拿到地图上吗?

1 个答案:

答案 0 :(得分:3)

我认为最简单的方法是对Overlay类进行子类化,然后重写draw方法。 draw方法非常开放,绘制路径不应该太难。一个例子看起来像这样:

public class PathOverlay extends Overlay{

    private List<GeoPoint> gpoints;

    public PathOverlay(List<GeoPoint> gpoints){
        this.gpoints = gpoints;
    }

    @Override
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) 
    {
        List<Point> mpoints = new ArrayList<Point>();

        // Convert to a point that can be drawn on the map.
        for(GeoPoint g : gpoints){
            Point tpoint = new Point();
            mapView.getProjection().toPixels(g, tpoint);
            mpoints.add(tpoint);
        }

        Path path = new Path();

        // Create a path from the points
        path.moveTo(mpoints.get(0).x, mpoints.get(0).y);
        for(Point p : mpoints){
            path.lineTo(p.x, p.y);
        }

        Paint paint = new Paint();
        paint.setARGB(255, 255, 0, 0);
        paint.setStyle(Style.STROKE);
        // Draw to the map
        canvas.drawPath(path,paint);

        return true;

    }
}

然后可以将此类的对象添加到MapView.getOverlays()返回的列表中,以添加到地图中。