Ios 我是斯威夫特。如何仅从UIImage(NSURL)获取GPS元数据?

Ios 我是斯威夫特。如何仅从UIImage(NSURL)获取GPS元数据?,ios,swift,gps,uiimage,nsurl,Ios,Swift,Gps,Uiimage,Nsurl,对仅具有NSURL的图像进行引用。 如何从中获取GPS元数据? 当然,我可以从NSURL加载UIImage,但那又怎么样 我在这里找到的大多数答案都是关于UIImagePicker的,然后使用ALAssets,但我没有这样的选择。回答我自己的问题。获取GPS元数据的有效且快速的方法是 let options = [kCGImageSourceShouldCache as String: kCFBooleanFalse] if let data = NSData(contentsOfURL: ur

对仅具有NSURL的图像进行引用。 如何从中获取GPS元数据? 当然,我可以从NSURL加载UIImage,但那又怎么样


我在这里找到的大多数答案都是关于UIImagePicker的,然后使用ALAssets,但我没有这样的选择。

回答我自己的问题。获取GPS元数据的有效且快速的方法是

let options = [kCGImageSourceShouldCache as String: kCFBooleanFalse]
if let data = NSData(contentsOfURL: url), imgSrc = CGImageSourceCreateWithData(data, options) {
    let metadata = CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, options) as Dictionary
    let gpsData = metadata[kCGImagePropertyGPSDictionary] as? [String : AnyObject]
}
第二种选择是

if let img = CIImage(contentsOfURL: url), metadata = img.properties(), 
gpsData = metadata[kCGImagePropertyGPSDictionary] as? [String : AnyObject] { … }

它在Swift中看起来更好,但使用了更多内存(通过探查器测试)。

Swift 3的更新版本:

let options = [kCGImageSourceShouldCache as String: kCFBooleanFalse]
if let data = NSData(contentsOfURL: url), let imgSrc = CGImageSourceCreateWithData(data, options as CFDictionary) {
    let metadata = CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, options as CFDictionary) as? [String : AnyObject]
    if let gpsData = metadata?[kCGImagePropertyGPSDictionary as String] {
        //do interesting stuff here
    }
}