2014-01-21 41 views
1

我有一个应用程序,用户可以拍摄照片或从相机胶卷中选择一张。我需要能够从拍摄图像的位置提取位置(长长)。目前我正在使用位置管理器来获取设备的位置,但这可能会导致位置不准确(即有人可能会拍照但不会发邮件直到他们回家,从而改变位置)提取图像位置数据

我找到这里使用“资产库”的解决方案,但是当我从相机胶卷中选择一张照片时出现SIGBRAT错误。

是否有人可能会告诉我我的代码出错的地方,或者建议一个简单的方法来获取拍摄照片的位置。

下面是我的代码:

- (IBAction)takePhoto 
{ 
    picker1 = [[UIImagePickerController alloc] init]; 
    picker1.delegate = self; 
    [picker1 setSourceType: UIImagePickerControllerSourceTypeCamera]; 
    [self presentViewController:picker1 animated:YES completion:NULL]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

    [locationManager startUpdatingLocation]; 


} 

- (IBAction)chooseExisting 
{ 
    picker2 = [[UIImagePickerController alloc] init]; 
    picker2.delegate = self; 
    [picker2 setSourceType: UIImagePickerControllerSourceTypePhotoLibrary]; 
    [self presentViewController:picker2 animated:YES completion:NULL]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

    [locationManager startUpdatingLocation]; 



} 


#pragma mark - CLLocationManagerDelegate 

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 
{ 
    NSLog(@"didFailWithError: %@", error); 
    UIAlertView *errorAlert = [[UIAlertView alloc] 
           initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [errorAlert show]; 
} 

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

    if (currentLocation != nil) { 
     longditute = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude]; 
     Latitude = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude]; 
    } 
    // Stop Location Manager 
    [locationManager stopUpdatingLocation]; 
} 



- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 

    image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    [imageView setImage:image]; 
    [self dismissViewControllerAnimated:YES completion:NULL]; 

    assetsLibrary = [[ALAssetsLibrary alloc] init]; 
    groups = [NSMutableArray array]; 

    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) 
    { 
     if (group == nil) 
     { 
      return; 
     } 

     [groups addObject:group]; 

    } failureBlock:^(NSError *error) 
    { 
     // Possibly, Location Services are disabled for your application or system-wide. You should notify user to turn Location Services on. With Location Services disabled you can't access media library for security reasons. 

    }]; 
    ALAssetsGroup *group = [groups objectAtIndex:0]; 
    [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) 
    { 
     if (result == nil) 
     { 
      return; 
     } 

     // Trying to retreive location data from image 
     CLLocation *loc = [result valueForProperty:ALAssetPropertyLocation]; 
     NSLog(loc); 
    }]; 

} 

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{ 
    [self dismissViewControllerAnimated:YES completion:NULL]; 
} 
+0

你在哪一行获得'SIGABRT'?日志说什么?堆栈跟踪说什么? – Tommy

回答

0

你说,或者您也可以显示抓取数据的简单方法。

因此,我可以指出你处理这件事的两个帖子。您首先需要确保用户已授予应用权限,以允许位置服务获取应用所需的详细信息。

Nice answer given over here涵盖了包括代码和另一个很好的答案given here更详细的地址 首先检查第一个,然后第二个链接。

+0

我在下面一行出现声明错误:'CGImageDestinationRef dr = CGImageDestinationCreateWithURL((__bridge CFURLRef)fileURL, ' – scb998

+1

我不知道这件事,它最好评论在我给出的链接中发布答案的人你的,我的回答的目的是要把你推向我所做的正确的方向。 – Pavan