Mapbox iOS-绘图线以及用户位置更新

时间:2018-07-03 12:07:13

标签: ios objective-c mapbox mapbox-gl

我正在做一个项目,我需要在地图上随用户位置的每次更新绘制一条线,以显示用户出行的完整路线。

我目前正在为此使用 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];
}

1 个答案:

答案 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)

    }
}