我的问题实际上看起来很傻......我正在编写一个使用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;
}
答案 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的元数据。