5

我想知道使用 Google Maps API v2 在地图上绘制动态路线的最佳做法是什么。我想要一张能够在用户移动时延长路线的地图。使用折线和折线选项似乎有明显的解决方案。但是在实例化折线后,我找不到一种简单的方法来添加点。绘制折线是这样的:

PolylineOptions polylineOptions = new PolylineOptions();
polylineOptions.add(POINT1, POINT2, POINT3);
Polyline line = googleMap.addPolyline(polylineOptions);

但是在我将这条线传递给 GoogleMap 之后,我无法向它添加任何新点。就像是

polylineOptions.add(POINT1, POINT2, POINT3);

不会向我的路线添加任何内容。

我可以添加完整的新折线。但是没有办法延长现有的吗?我想出了一种方法,获取折线的所有点,添加新点,然后将它们写回线:

List<LatLng> points = line.getPoints();
points.add(POINT4);
line.setPoints(points);

但这对我来说似乎很麻烦。有任何想法吗?

4

2 回答 2

3

mainActivity类中,定义一个名为的私有静态LatLng变量并将prev其初始化为(0,0)first。还要创建一个标志变量并为其分配 0。在 Listener 的OnLocationChanged方法中,创建一个局部变量,LatLng命名为current并在此处获取当前坐标...先检查 flag 的值,如果为 0 则赋值currentprev。然后添加一条折线。

current再次分配prev(这将在第一次之后每次发生,标志将为 1)

例如:

public void onLocationChanged(Location location) 
{

    LatLng current = new LatLng(location.getLatitude(), location.getLongitude());

    if(flag==0)  //when the first update comes, we have no previous points,hence this 
    {
        prev=current;
        flag=1;
    }
    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(current, 16);
    map.animateCamera(update);
    map.addPolyline((new PolylineOptions())
        .add(prev, current).width(6).color(Color.BLUE)
        .visible(true));
    prev=current;
    current = null;                    
}

像这样的东西。当然可以进行性能改进,这只是一个示例代码。但它应该工作。每次折线将只添加前一个点和当前点,从而逐点扩展它。

于 2014-06-17T17:06:16.667 回答
0

查看文档,似乎polylineOptions.add(LatLng)and googleMap.addPolyline(polylineOptions)方法返回了该polylineOptions对象。第一种方法也将返回polylineOptions 添加到末尾的点。

我认为您必须再次添加polylineOptionstogoogleMap.addPolyline(polylineOptions)googleMap.clear()在第二次添加之前使用。像这样的东西:

polylineOptions = googleMap.addPolyline(polylineOptions);
// googleMap.clear();
googleMap.addPolyline(polylineOptions.add(point));
于 2012-12-18T13:07:10.507 回答