Подтвердить что ты не робот

Как получить правильную широту и долготу с загруженной фотографии iPhone?

Моя проблема на самом деле выглядит довольно глупо... Я пишу приложение iPhone, которое использует MKMapKit. Приложение захватывает метаданные EXIF ​​из предоставленной геотегированной фотографии. Проблема в том, что координаты широты и долготы, которые я извлекаю, например:

Lat: 34.25733333333334

Lon: 118.5373333333333

возвращает местоположение в Китае. Есть ли региональные настройки, которые мне не хватает, или мне нужно преобразовать координаты lat/long перед их использованием?

Благодарим вас за любую помощь, которую вы можете предоставить.

Вот код, который я использую, чтобы захватить данные 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;

}
4b9b3361

Ответ 1

Я думаю, вы должны захватить значение, используя следующее:

 CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation];

Ответ 2

Вы уверены, что у вас нет знака минус 118? 34.257, -118.5373 прекрасно находится в Лос-Анджелесе, Калифорния.

Ответ 3

Пока вы можете получить местоположение из актива на @Allen, также можно получить его из метаданных GPS, как вы пытались сделать вначале. Я не уверен на 100%, что координаты библиотеки ресурсов будут такими же, как координаты в метаданных GPS, это зависит от того, как Apple хранит эту координацию. Например, если вы используете временную метку, временная метка библиотеки активов отличается от даты создания EXIF ​​(по общему признаку).

В любом случае причина, по которой вы ошибаетесь, - это 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);

Ответ 4

Это также будет работать,

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

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

    };

Ответ 5

Я считаю, что причина, по которой нет отрицательного знака, связана с метаданными: exif:GPSLongitudeRef: W, который (я считаю) означает, что перед долготой должен быть отрицательный знак, поскольку он ссылается на западное полушарие, Я считаю, что это также относится к широте, но с exif:GPSLatitudeRef: N для Северного и Южного полушарий. Надеюсь, что это помогло. Просто понял, что это именно то, что сказал @XJones. Метаданные с использованием ImageMagick.