У меня была точно такая же проблема. Я думаю, что документация по этой теме невелика, поэтому я решил ее в конце, посмотрев на метаданные фотографии, сделанной приложением «Камера», и попытаясь воспроизвести ее.
Вот список свойств, которые сохраняет приложение Camera:
- kCGImagePropertyGPSLatitude
(NSNumber) (Широта в десятичном формате)
- kCGImagePropertyGPSLongitude
(NSNumber) (долгота в десятичном формате)
- kCGImagePropertyGPSLatitudeRef
(строка NSS) (N или S)
- kCGImagePropertyGPSLongitudeRef
(NSString) (E или W)
- kCGImagePropertyGPSTimeStamp
(NSString) (в формате 04: 30: 51.71
(Метка времени UTC))
Если вы будете придерживаться этого, у вас все будет хорошо. Вот пример:
CFDictionaryRef metaDict = CMCopyDictionaryOfAttachments(NULL, imageDataSampleBuffer, kCMAttachmentMode_ShouldPropagate);
CFMutableDictionaryRef mutable = CFDictionaryCreateMutableCopy(NULL, 0, metaDict);
NSDictionary *gpsDict = [NSDictionary
dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat:self.currentLocation.coordinate.latitude], kCGImagePropertyGPSLatitude,
@"N", kCGImagePropertyGPSLatitudeRef,
[NSNumber numberWithFloat:self.currentLocation.coordinate.longitude], kCGImagePropertyGPSLongitude,
@"E", kCGImagePropertyGPSLongitudeRef,
@"04:30:51.71", kCGImagePropertyGPSTimeStamp,
nil];
CFDictionarySetValue(mutable, kCGImagePropertyGPSDictionary, gpsDict);
// Get the image
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
// Get the assets library
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:[image CGImage] metadata:mutable completionBlock:captureComplete];
Это все в завершениеHandler метода captureStillImageAsynchronouslyFromConnection вашего объекта AVCaptureConnection, а self.currentLocation является просто CLLocation. В качестве примера я жестко закодировал временную метку и ссылки на широты и долготы.
Надеюсь, это поможет!