Mapbox iOS - Рисование линии вместе с обновлением местоположения пользователя - PullRequest
0 голосов
/ 03 июля 2018

Я работаю над проектом, в котором мне нужно рисовать линию на карте при каждом обновлении местоположения пользователя, чтобы показать полный маршрут, по которому прошел пользователь.

В настоящее время я использую 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];
}

image

1 Ответ

0 голосов
/ 03 июля 2018

я уже делал похожий проект с помощью swift.

пользователь выбирает две точки на карте для начала и назначения, затем мы используем сервис Google, который берет две точки и выдает список точек для лучшего маршрута, и я использовал этот метод для рисования polyLine

Я думаю, у вас есть два способа сделать это

1_using didupdate func mapkit для сохранения всей точки, которую перемещает пользователь, затем используйте функцию, которую я поставил ниже для рисования линии poly

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)

    }
}
...