如何从上传的iPhone照片中获取正确的纬度和经度?

时间:2012-02-16 21:36:34

标签: iphone ios mapkit

我的问题实际上看起来很傻......我正在编写一个使用MKMapKit的iPhone应用程序。该应用程序从提供的地理标记照片中获取EXIF元数据。问题是我检索的纬度和经度坐标,例如:

Lat:34.25733333333334

Lon:118.5373333333333

返回中国的位置。是否存在我缺少的区域设置,或者在使用它们之前是否需要转换纬度/经度坐标?

提前感谢您提供任何帮助。

以下是我用于获取GPS数据的代码。您会注意到我正在将所有内容记录到控制台,因此我可以看到值是什么:

void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *) = ^(ALAsset *asset)
{
    NSDictionary *metadata = asset.defaultRepresentation.metadata;
    NSLog(@"Image Meta Data: %@",metadata);
    NSDictionary *gpsdata = [metadata objectForKey:@"{GPS}"];
    self.lat = [gpsdata valueForKey:@"Latitude"];
    self.lng = [gpsdata valueForKey:@"Longitude"];
    NSLog(@"\nLatitude: %@\nLongitude: %@",self.lat,self.lng);
};

NSURL *assetURL = [mediaInfo objectForKey:UIImagePickerControllerReferenceURL];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:assetURL
         resultBlock:ALAssetsLibraryAssetForURLResultBlock
        failureBlock:^(NSError *error) {
        }];

UIImage *img = [mediaInfo objectForKey:@"UIImagePickerControllerEditedImage"];
previewImage.image = nil;
self.previewImage.image = img;

NSData *imageData = UIImagePNGRepresentation(img);
if ([imageData length] > 0) {
    self._havePictureData = YES;

}

5 个答案:

答案 0 :(得分:14)

我认为你应该使用以下方法获取价值:

 CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation];

答案 1 :(得分:2)

你确定你没错过118的减号吗? 34.257, -118.5373很好地在加利福尼亚州洛杉矶。

答案 2 :(得分:2)

虽然您可以从@Allen的资产中获取位置,但是您最初尝试从GPS元数据中获取该位置也是有效的。我不是100%确定资产库坐标与GPS元数据中的坐标相同,这取决于Apple如何存储此坐标。例如,如果您使用的是时间戳,则资产库时间戳与EXIF创建日期不同(不可否认,这是一个不同的主题)。

在任何情况下,你有coord错误的原因是b / c你还需要获得方向信息如下:

NSDictionary *metadata = asset.defaultRepresentation.metadata;
NSLog(@"Image Meta Data: %@",metadata);
NSDictionary *gpsdata = [metadata objectForKey:@"{GPS}"];
self.lat = [gpsdata valueForKey:@"Latitude"];
self.lng = [gpsdata valueForKey:@"Longitude"];

// lat is negative is direction is south
if ([[gpsdata valueForKey:@"LatitudeRef"] isEqualToString:@"S"]) {
    self.lat = -self.lat;
}

// lng is negative if direction is west
if ([[gpsdata valueForKey:@"LongitudeRef"] isEqualToString:@"W"]) {
    self.lng = -self.lng;
}

NSLog(@"\nLatitude: %@\nLongitude: %@",self.lat,self.lng);

答案 3 :(得分:0)

这也有效,

void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *) = ^(ALAsset *asset)
    {
        ALAssetRepresentation *rep = [asset defaultRepresentation];
        NSDictionary *metadata = rep.metadata;

        NSMutableDictionary *GPSDictionary = [[[metadata objectForKey:(NSString *)kCGImagePropertyGPSDictionary]mutableCopy] autorelease];

    };

答案 4 :(得分:0)

我认为没有负号的原因是因为元数据:exif:GPSLongitudeRef: W(我相信)意味着在经度前面应该有一个负号,因为它引用了西半球。我相信这也适用于纬度,但北半球和南半球exif:GPSLatitudeRef: N。希望这有所帮助。刚刚意识到这正是@XJones所说的。使用ImageMagick的元数据。