我正在做一个项目,我需要在地图上随用户位置的每次更新绘制一条线,以显示用户出行的完整路线。
我目前正在为此使用 Mapbox iOS SDK(v4.0.2)。为了实现上述目标,我使用MGLPolyline
在地图上画一条线。
提供以下代码后,我遇到了一个问题,因为某些默认形状会在开始路线之前自动绘制。
以下是我在项目中实现的代码:
@interface ViewController () <MGLMapViewDelegate>
{
MGLPolyline *polyline;
}
@end
- (void)mapView:(MGLMapView *)mapView didUpdateUserLocation:(MGLUserLocation *)userLocation
{
CLLocationCoordinate2D coord[1];
coord[0] = userLocation.coordinate;
if (polyline)
{
[polyline appendCoordinates:coord count:sizeof(coord)];
}
else
{
polyline = [MGLPolyline polylineWithCoordinates:coord count:sizeof(coord)];
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^(void) {
[weakSelf.mapView addAnnotation:polyline];
});
}
}
- (CGFloat)mapView:(MGLMapView *)mapView alphaForShapeAnnotation:(MGLShape *)annotation
{
return 1.0f;
}
- (CGFloat)mapView:(MGLMapView *)mapView lineWidthForPolylineAnnotation:(MGLPolyline *)annotation
{
return 5.0f;
}
- (UIColor *)mapView:(MGLMapView *)mapView strokeColorForShapeAnnotation:(MGLShape *)annotation
{
return [UIColor redColor];
}
答案 0 :(得分:0)
我之前也曾做过类似的项目。
用户在地图上选择起点和终点的两个点,然后使用Google服务,该点需要两个点并给出最佳路线的点列表,而我正在使用此方法绘制多段线
我认为您有两种方法可以做到这一点
1_使用mapkit的didupdate函数保存用户移动的所有点,然后使用下面放置的函数绘制折线
2_获取起点和终点,然后绘制一条折线
func addPolyLineToMap(googlemaplist: [CLLocation?]){
var coordinates = googlemaplist.map({ (location: CLLocation!) -> CLLocationCoordinate2D in
return location.coordinate
})
print("locatios count")
print(googlemaplist.count)
var polyline = MKPolyline(coordinates: &coordinates, count: googlemaplist.count)
DispatchQueue.main.async {
self.MapKit.add(polyline)
}
}