次の手順に従って、GPS 座標をメタデータに追加することができました。
- UIImagePickerControllerSourceTypeCamera から UIIMage を取得します
writeImageToSavedPhotosAlbum
ジオローカライズされたメタデータとともにディスク ( ) に保存- でディスクから読み取り、
ALAsset
jpegに変換しますNSData
ディスクへの保存/読み取りの手間をかけずに同じことを行うことはできますか?
次の手順に従って、GPS 座標をメタデータに追加することができました。
writeImageToSavedPhotosAlbum
ジオローカライズされたメタデータとともにディスク ( ) に保存ALAsset
jpegに変換しますNSData
ディスクへの保存/読み取りの手間をかけずに同じことを行うことはできますか?
でUIImagePickerControllerDelegate
:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self dismissModalViewControllerAnimated:YES];
[Utils ifLocationEnabledDo:^{
switch (picker.sourceType) {
case UIImagePickerControllerSourceTypeCamera:
{
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
NSMutableDictionary *metadata = [[NSMutableDictionary alloc] initWithDictionary:[info objectForKey:UIImagePickerControllerMediaMetadata]];
[Utils setLocation:metadata location:[SharedAppDelegate getCurrentLocation]];
[[Utils getAssetsLibrary] writeImageDataToSavedPhotosAlbum:image metadata:metadata completionBlock:nil];
}
break;
default:
break;
}
}];
}
そして私のUtils
クラスでは:
+ (void)setLocation:(NSMutableDictionary *)metadata location:(CLLocation *)location
{
if (location) {
CLLocationDegrees exifLatitude = location.coordinate.latitude;
CLLocationDegrees exifLongitude = location.coordinate.longitude;
NSString *latRef;
NSString *lngRef;
if (exifLatitude < 0.0) {
exifLatitude = exifLatitude * -1.0f;
latRef = @"S";
} else {
latRef = @"N";
}
if (exifLongitude < 0.0) {
exifLongitude = exifLongitude * -1.0f;
lngRef = @"W";
} else {
lngRef = @"E";
}
NSMutableDictionary *locDict = [[NSMutableDictionary alloc] init];
if ([metadata objectForKey:(NSString*)kCGImagePropertyGPSDictionary]) {
[locDict addEntriesFromDictionary:[metadata objectForKey:(NSString*)kCGImagePropertyGPSDictionary]];
}
[locDict setObject:[self getUTCFormattedDate:location.timestamp] forKey:(NSString*)kCGImagePropertyGPSTimeStamp];
[locDict setObject:latRef forKey:(NSString*)kCGImagePropertyGPSLatitudeRef];
[locDict setObject:[NSNumber numberWithFloat:exifLatitude] forKey:(NSString*)kCGImagePropertyGPSLatitude];
[locDict setObject:lngRef forKey:(NSString*)kCGImagePropertyGPSLongitudeRef];
[locDict setObject:[NSNumber numberWithFloat:exifLongitude] forKey:(NSString*)kCGImagePropertyGPSLongitude];
[locDict setObject:[NSNumber numberWithFloat:location.horizontalAccuracy] forKey:(NSString*)kCGImagePropertyGPSDOP];
[locDict setObject:[NSNumber numberWithFloat:location.altitude] forKey:(NSString*)kCGImagePropertyGPSAltitude];
[metadata setObject:locDict forKey:(NSString*)kCGImagePropertyGPSDictionary];
}
}