Mapbox折线不起作用

时间:2016-01-09 00:47:23

标签: android gps mapbox

我正在尝试使用Mapbox的折线绘制路径。但是,似乎没有画线。我决定添加标记,只是为了看它们是否会被添加。添加标记有效。为什么不折线?这是我的代码:

@Override
public void onMyLocationChange(@Nullable Location location) {
    LatLng loc = new LatLng(location.getLatitude(), location.getLongitude());
    Log.e("MAP", location.getLatitude()+", "+location.getLongitude());
    mapView.addPolyline(new PolylineOptions()
            .width(60f)
            .color(Color.GREEN)
            .alpha(1f)
            .add(loc));
    mapView.addMarker(new MarkerOptions()
            .title("HERE")
            .position(loc));
}

2 个答案:

答案 0 :(得分:3)

我还没有尝试过您的代码,但我相信您要完成的是每次用户的位置发生变化时,您希望将折线从前一个坐标扩展到新坐标,从而产生一条折线的折线用户过去的运动。在这种情况下,您有两个问题。

首先,每次用户位置更改时创建新折线,而不是在调用onMyLocationChange()时向折线添加新点。通过最初在onCreate()方法或活动生命周期中的其他位置创建折线来解决此问题。创建折线后,为其指定一个名称并使其成为全局。现在,每次用户位置更改时,只需向折线添加新点。

你的第二个问题,与第一个问题有关,就是你只需要在你的折线上添加一个点,LatLng loc,而不是一个点列表。折线需要至少2个点才能绘制,起点和终点。将LatLng loc更改为列表,并在用户位置更改时向其添加新位置。

希望这有帮助!

答案 1 :(得分:1)

一个标记只需要一个LatLng点信息,因此它可以正常工作。 但是,一条线连接两点或更多点,折线连接两个或多个连续点。在你的代码中,你只放了一个点,这不足以制作一条(多边形)线。 您需要向PolylineOptions添加更多点,如下例所示:

ArrayList<LatLng> points = new ArrayList<>();

// add two or more different LatLng points
points.add(new LatLng(-7.955, 112.613));
points.add(new LatLng(-7.956, 112.616));
points.add(new LatLng(-7.958, 112.619));

// or add from other collections
for(TrackPoint trackPoint: this.trackPoints)
    points.add(new LatLng(trackPoint.latitude, trackPoint.longitude));

// create new PolylineOptions from all points
PolylineOptions polylineOptions = new PolylineOptions()
    .addAll(points)
    .color(Color.RED)
    .width(3f);

// add polyline to MapboxMap object
this.mapboxMap.addPolyline(polylineOptions);

希望这有帮助。