Запись движения пользователя с шагом 10 метров и отображение его в виде линии в MKMapView не работает - PullRequest
1 голос
/ 19 мая 2019

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

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

Как мне показать визуальный путь?

Я попытался вычислить маршрут с помощью MKDirectionsRequest и -Response, и он хорошо работал с двумя заданными местоположениями, чего в данном случае у меня нет. Я также попробовал MKMapPoints, но, честно говоря, это не главное в нашей домашней работе, так как это сделает ее излишне сложной.

Вот мое текущее состояние:

- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {

    CLLocation *newLocation;
    newLocation = [[CLLocation alloc] initWithCoordinate:CLLocationCoordinate2DMake(newLocation.coordinate.latitude, newLocation.coordinate.longitude) altitude:kCLLocationAccuracyNearestTenMeters horizontalAccuracy:kCLLocationAccuracyNearestTenMeters verticalAccuracy:newLocation.verticalAccuracy timestamp:newLocation.timestamp];
    newLocation = [locations lastObject];

    if (newLocation.horizontalAccuracy < 0) {
        return;
    }

    NSInteger count = [locations count];

    if (count > 1) {
        CLLocationCoordinate2D coordinates[count];
        for (NSInteger i = 0; i < count; i++) {
            coordinates[i] = [(CLLocation *)locations[i] coordinate];
        }
        MKPolyline *polyline = [MKPolyline polylineWithCoordinates:coordinates count:count];
        [self.mapView addOverlay:polyline level:MKOverlayLevelAboveRoads];
    }

    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.wegAnnotation.coordinate, 200, 200);
    [mapView setRegion:region];

    [manager stopUpdatingLocation];
    self.myLocationManager = nil;

}

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {
    MKPolylineRenderer *renderer = [[MKPolylineRenderer alloc] initWithOverlay:overlay];
    renderer.strokeColor = [UIColor blueColor];
    renderer.lineWidth = 5.0;
    return renderer;
}

1 Ответ

0 голосов
/ 27 мая 2019

Так что мне в итоге удалось отследить текущее местоположение пользователя и визуально отобразить путь между начальной точкой и текущим местоположением.Но путь рисуется точками, а не непрерывной линией.Есть идеи, как сделать эту непрерывную линию?Любая помощь приветствуется.Мое текущее состояние:

- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSMutableArray<CLLocation *> *)locations {
    CLLocation *lastPunkt = [[CLLocation alloc]initWithLatitude:mapView.userLocation.coordinate.latitude longitude:mapView.userLocation.coordinate.longitude];
    lastPunkt = [locations lastObject];
    [locations addObject:lastPunkt];
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(mapView.userLocation.coordinate, 200, 200);
    [self.mapView setRegion:[self.mapView regionThatFits:region] animated:NO];
    [self showRoute:locations];
}


- (void)showRoute:(NSMutableArray *)route {
    if (route.count > 0) {
        NSInteger numberOfSteps = route.count;
        CLLocationCoordinate2D locations[numberOfSteps];

        for (NSInteger i = 0; i < numberOfSteps; i++) {
            CLLocation *lastPunkt = [route objectAtIndex:i];
            CLLocationCoordinate2D coordinate = lastPunkt.coordinate;
            locations[i] = coordinate;
        }
        MKPolyline *polyline = [MKPolyline polylineWithCoordinates:locations count:numberOfSteps];
        [mapView addOverlay:polyline level:MKOverlayLevelAboveRoads];
        [mapView setDelegate:self];
    }
}


- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {
    MKPolylineRenderer *renderer = [[MKPolylineRenderer alloc] initWithOverlay:overlay];
    renderer.strokeColor = [UIColor blueColor];
    renderer.lineWidth = 5.0;
    return renderer;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...