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

我的问题其实似乎很傻…我正在写一个使用MKMapKit的iPhone应用程序。 该应用程序抓取提供的地理标记照片的EXIF元数据。 问题是我检索的纬度和经度坐标,例如:

纬度:34.25733333333334

Lon:118.5373333333333

在中国返回一个位置。 是否有一个区域设置,我缺less或使用它们之前,我需要转换经纬度坐标?

预先感谢您提供的任何帮助。

这是我用来获取GPS数据的代码。 你会注意到我将所有东西都logging在控制台上,所以我可以看到这些值是什么:

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; } 

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

  CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation]; 

你确定你没有错过118的负号吗? 34.257,-118.5373在加州洛杉矶很好。

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

无论如何,你有错误的原因是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); 

这也将起作用,

 void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *) = ^(ALAsset *asset) { ALAssetRepresentation *rep = [asset defaultRepresentation]; NSDictionary *metadata = rep.metadata; NSMutableDictionary *GPSDictionary = [[[metadata objectForKey:(NSString *)kCGImagePropertyGPSDictionary]mutableCopy] autorelease]; }; 

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