我正在尝试使用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));
}
答案 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);
希望这有帮助。