使用GPS坐标在iOs地图上创建折线

时间:2013-09-04 13:46:27

标签: ios objective-c mkmapview cllocation mkpolyline

在我的应用程序中,我计算了足迹,现在我想知道速度,我想存储GPS坐标以在另一个ViewController中绘制折线。 我以为我可以使用以下代码存储此坐标:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"didUpdateToLocation: %@", newLocation);
    CLLocation *currentLocation = newLocation;

    if (currentLocation != nil) {
        locationArray = [[NSMutableArray alloc]init];
        [locationArray addObject:currentLocation];
        speed = (int) currentLocation.speed * 3.6;
        self.labelSpeed.text = [NSString stringWithFormat:@"%d Km/h",speed];
        NSLog(@"%@", [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude]);
        NSLog(@"%@", [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude]);
    }
}

但它不起作用,因为在我locationArray中它只存储了GPS传感器接收的最后一个坐标。 为了更好地向你解释我正在努力开发的东西,我将在这里写一些非常具体的内容: 在第一个ViewController中,我想显示2个标签,其中我计算了步数和速度。所以在这个ViewController中我要接收坐标数据,我认为这些数据应该插入NSMutableArray。在第二个ViewController中,我展示了一个标签,在其中我将插入总步数(通过使用prepareForSegue方法)并在MapView下面绘制一条折线以显示我所创建的路径。为此我需要在第一个ViewController中收到的坐标,所以我要使用prepareForSegue方法将数据从第一个ViewController传递到第二个ViewController。 我的问题是如何存储所有坐标以使它们在第二个ViewController中绘制折线? Cna有人帮帮我吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您只存储最后一个坐标,因为每次获得新位置时都要初始化数组,将分配线移到另一个方法(如viewDidLoad)并删除didUpdateToLocation中的那一行

- (void)viewDidLoad
{
    [super viewDidLoad];
    locationArray = [[NSMutableArray alloc]init];
    //.... more code
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"didUpdateToLocation: %@", newLocation);
    CLLocation *currentLocation = newLocation;

    if (currentLocation != nil) {
        //locationArray = [[NSMutableArray alloc]init]; //This line doesn't go here
        [locationArray addObject:currentLocation];
        speed = (int) currentLocation.speed * 3.6;
        self.labelSpeed.text = [NSString stringWithFormat:@"%d Km/h",speed];
        NSLog(@"%@", [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude]);
        NSLog(@"%@", [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude]);
    }
}