在 iOS4.1 上保存带有照片的地理标签信息

2024-01-20

我在尝试在 iOS 4.1 上将带有地理标记信息的照片保存到相机胶卷时遇到重大问题。我正在使用以下资产库 API:

- (void)writeImageDataToSavedPhotosAlbum:(NSData *)imageData 
                                metadata:(NSDictionary *)metadata 
                         completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock

我有 GPS 坐标,希望将其与照片一起保存作为输入。不幸的是,没有文档或示例代码来描述如何形成封装 GPS 坐标的元数据 NSDictionary。有人可以发布已知有效的示例代码吗?

我还尝试使用 iPhone Exif 库将地理信息保存在 imageData 中,而不是使用元数据,但不幸的是 iPhone Exif 库崩溃了。任何帮助是极大的赞赏。


以下代码用于将 CLLocation 对象中的所有可用信息复制为 GPS 元数据字典的正确格式:

- (NSDictionary *)getGPSDictionaryForLocation:(CLLocation *)location {
    NSMutableDictionary *gps = [NSMutableDictionary dictionary];

    // GPS tag version
    [gps setObject:@"2.2.0.0" forKey:(NSString *)kCGImagePropertyGPSVersion];

    // Time and date must be provided as strings, not as an NSDate object
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"HH:mm:ss.SSSSSS"];
    [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
    [gps setObject:[formatter stringFromDate:location.timestamp] forKey:(NSString *)kCGImagePropertyGPSTimeStamp];
    [formatter setDateFormat:@"yyyy:MM:dd"];
    [gps setObject:[formatter stringFromDate:location.timestamp] forKey:(NSString *)kCGImagePropertyGPSDateStamp];
    [formatter release];

    // Latitude
    CGFloat latitude = location.coordinate.latitude;
    if (latitude < 0) {
        latitude = -latitude;
        [gps setObject:@"S" forKey:(NSString *)kCGImagePropertyGPSLatitudeRef];
    } else {
        [gps setObject:@"N" forKey:(NSString *)kCGImagePropertyGPSLatitudeRef];
    }
    [gps setObject:[NSNumber numberWithFloat:latitude] forKey:(NSString *)kCGImagePropertyGPSLatitude];

    // Longitude
    CGFloat longitude = location.coordinate.longitude;
    if (longitude < 0) {
        longitude = -longitude;
        [gps setObject:@"W" forKey:(NSString *)kCGImagePropertyGPSLongitudeRef];
    } else {
        [gps setObject:@"E" forKey:(NSString *)kCGImagePropertyGPSLongitudeRef];
    }
    [gps setObject:[NSNumber numberWithFloat:longitude] forKey:(NSString *)kCGImagePropertyGPSLongitude];

    // Altitude
    CGFloat altitude = location.altitude;
    if (!isnan(altitude)){
        if (altitude < 0) {
            altitude = -altitude;
            [gps setObject:@"1" forKey:(NSString *)kCGImagePropertyGPSAltitudeRef];
        } else {
            [gps setObject:@"0" forKey:(NSString *)kCGImagePropertyGPSAltitudeRef];
        }
        [gps setObject:[NSNumber numberWithFloat:altitude] forKey:(NSString *)kCGImagePropertyGPSAltitude];
    }

    // Speed, must be converted from m/s to km/h
    if (location.speed >= 0){
        [gps setObject:@"K" forKey:(NSString *)kCGImagePropertyGPSSpeedRef];
        [gps setObject:[NSNumber numberWithFloat:location.speed*3.6] forKey:(NSString *)kCGImagePropertyGPSSpeed];
    }

    // Heading
    if (location.course >= 0){
        [gps setObject:@"T" forKey:(NSString *)kCGImagePropertyGPSTrackRef];
        [gps setObject:[NSNumber numberWithFloat:location.course] forKey:(NSString *)kCGImagePropertyGPSTrack];
    }

    return gps;
}

将此方法返回的字典指定为kCGImagePropertyGPSDictionary输入您传递给的元数据字典writeImageDataToSavedPhotosAlbum:metadata:completionBlock: or CGImageDestinationAddImage().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 iOS4.1 上保存带有照片的地理标签信息 的相关文章

  • 使用 iPhone 上传视频

    可以将视频上传到服务器吗 我知道图像是可能的 如果有人能指出我正确的方向 那就太好了 Thanks 2015 年 8 月编辑 这个答案现在已经严重过时了 在撰写本文时 选项并不多 而且视频的大小也相对较小 如果您现在正在考虑这样做 我会使用
  • Instagram直接打开UTI

    我最近偶然发现了以下有趣的功能 Instagram iPhone 挂钩 http instagr am developer iphone hooks 我想知道是否能够立即通过 uidocumentinteractioncontroller
  • 如何更改表格单元格的详细信息披露按钮的颜色

    我想更改表格单元格的详细信息披露按钮的颜色 提前致谢 你必须创建一个自定义的UIButton并将其设置为单元格的附件视图 Your cellForRowAtIndexPath 看起来像下面这样 UITableViewCell tableVi
  • UIView.frame 的核心动画

    我正在尝试制作一个移动两个视图的框架的简单动画 基本上隐藏广告直到加载 然后将框架从底部向上移动 以及从底部开始的视图 然后当广告将其向上推时也会向上移动 开始和结束位置是正确的 但我没有看到它是动画的 它是否正确 谢谢 CAKeyfram
  • iphone / css - 单击时如何防止项目上出现黑色半透明覆盖

    我正在编写一个移动网站 在 iPhone 中 当您触摸 按住可点击项目时 图像顶部会出现明显的半透明黑色覆盖层 有人经历过这个吗 我该如何摆脱它 有没有办法用css 这是我的代码 childLink div class option div
  • 您可以播放 iPod 库中的视频吗?

    iOS4 中是否可以播放 iPod 库中的视频 或者仍然仅限于音频 我找不到任何明确的答案 但 SDK 似乎不允许视频 不 你不能那样做 检查 iPod Library Access 编程指南 它说 iPod 库访问仅适用于基于音频的媒体项
  • 在不使用PrepareForSegue的情况下在segue之间传递数据

    我正在使用情节提要创建一个用户设置帐户 分 5 个步骤 每个步骤都有一个 ViewController 1 输入姓名 联系人等 2 导入照片 3 输入等 4 更多输入 5 确认页面 如果用户单击 确认 gt 获取所有输入并上传到解析 当我在
  • 如何在cocos2d for iphone中获取CCSprite的宽度和高度

    这就是问题xD 给定iphone中cocos2d中的CCSprite实例 我可以使用什么方法来获取图像的宽度和高度 CCSprite 类有一个边界框属性 它是 CGRect CCSprite sprite CCSprite spriteWi
  • iOS 应用程序和.NET 应用程序之间的通信?

    我有 2 个应用程序 一个是 iOS 应用程序 一个是 NET 应用程序 我希望我的 iOS 应用程序发送一条消息 调用 NET 应用程序的方法 将一些字符串发送到 NET 应用程序以保存到数据库 那么 我的 iOS 应用程序如何与 NET
  • 现有 UIPopoverController 中的 UIImagePickerController

    有没有办法将 UIImagePickerController 推送到现有 UIPopoverController 的导航控制器中 我所知道的是 您必须创建一个新的弹出窗口并在其中添加 UIImagePickerController 但我有一
  • 将 UIActivityIndi​​catorView 添加到 UIBarButton

    如何将 UIActivityIndi catorView 微调器圆添加到 UIBarButton 中 以便当用户点击导航栏上的这些按钮之一时 他们会在加载时看到一个微调器 如果您尝试在导航栏按钮中显示活动轮 例如 您的导航栏上可能有一个刷新
  • 带有内容矩形抖动的核心动画

    在我的 益智 游戏中 这些碎片是使用CALayer对于每件作品 有 48 块 在 8x6 网格中 每块为 48x48 像素 我不确定这是否是太多层 但如果这不是最好的解决方案 我不知道什么是 因为使用 Quartz2D 每帧重新绘制整个显示
  • 如果您查看内部,nib 文件到底是什么样子的?

    我刚刚学习 nibs 和 swift 并对某些东西感到好奇 我知道 如果您有一个 main storyboard 文件 则首先加载根视图控制器的笔尖 然后加载该视图控制器下可能分层存在的任何视图 但是 我想知道一些事情 当他们说笔尖已 加载
  • 从 NSString 的第一行删除换行符

    我怎样才能删除第一个 nNSString 中的字符 编辑 只是为了澄清一下 我想做的是 如果字符串的第一行包含 n 字符 请将其删除 否则不执行任何操作 即 如果字符串是这样的 nhello this is the first line n
  • 在 swift 中获取用户可读的类名版本(在 objc NSStringFromClass 中就可以了)

    Swift 中是否有相当于 NSStringFromClass 的类名 可以提供用户可读的版本 我尝试将它与我创建的本机 Swift 类一起使用 但如您所见 结果似乎是编译器对类名的内部表示 println NSStringFromClas
  • 无法下载应用程序 - 此时无法下载“APP”

    我的应用程序有 PLUS 版本和常规版本 我使用不同的目标对它们进行存档 我将 ipa 上传到 TestFlight 也上传到我的曲棍球服务器 PLUS 版本总是下载得很好 但普通版本总是给我 无法下载应用程序 错误 我根本没有更改两个版本
  • 多点触摸检测和区分 - Cocos2d for iPhone

    我想知道如何在多点触摸视图中检测和区分触摸 我读过有关 哈希 代码的内容 但我不明白如何使用它 我想知道我的两个精灵何时被同时触摸 就像在钢琴的两个琴键上按下和弦一样 编辑 以下是我的 TouchesBegan 的示例 void ccTou
  • iPhone PhoneGap 电子邮件编辑器 SECURITY_ERR:DOM 异常 18 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在使用phonegap 中的 i
  • iPhone / iPad IOS 应用程序仪器内存计数与 task_info 内存计数

    我一直在使用 Instruments Leak Tester 它给出了大约 1 3 meg 的应用程序总分配数字 但是 当使用 task info 时 它会报告更大的内存量 例如 10 20 meg 我想我只是想确认task info正在返
  • 如何获取 UITableView 内容视图的大小?

    我想在填充表格时获取 UITableView 内容视图的大小 关于如何执行此操作有什么建议吗 Allows you to perform layout before the drawing cycle happens layoutIfNee

随机推荐

  • 如何使用正则表达式提取PHP中的文本[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的文字 12a49803 713c 4204 a8e6 248e554a352d Content Type text plain c
  • MaterialDatePicker 不适用于 Android

    我想将项目的日期选择器更改为 Android 的 Material Components 提供的日期选择器 但它不起作用 这是我尝试过的代码 MaterialDatePicker Builder
  • 使用 RWeka 2-gram 和 3-gram 而不是 1-gram

    我正在尝试使用 RWeka NGramTokenizer 函数从训练语料库中提取 1 gram 2 gram 和 3 gram 不幸的是 只得到1克 有我的代码 train corpus clean up cleanset1 lt tm m
  • 为什么 virtualenv 环境包含 argparse、distribute 和 wsgiref? [复制]

    这个问题在这里已经有答案了 我在用virtualenv版本 1 7 1 2python2 7 3 创建虚拟python环境 但是当我创建这样的环境并激活它时 我可以看到安装了以下软件包 使用pip freeze argparse 1 2 1
  • 无法使用 Rails 2.3.4 发送电子邮件(我可以使用 2.3.2)

    我正在使用 ruby on Rails 2 3 4 昨天我发现我无法再发送电子邮件了 与电子邮件相关的凭据没问题 因为我可以发送电子邮件 直到大约两周前升级我的 Rails 版本 我收到的错误消息如下 ArgumentError in Us
  • GetAllNetworkInterfaces() 抛出异常

    在 Android 的 Mono 中 我试图获取本地网络中我的设备的所有 IP 地址 我不介意环回 但我对调用 DNS 不感兴趣 最好的办法似乎是打电话 using System Net NetworkInformation Network
  • 部署到 Azure 时找不到 ConnectionString configSource

    我通过将连接字符串从 web config 移到外部文件中来保护我的 MVC5 项目 而不是将其签入源代码管理 也不将其添加到项目中 我的 web config 看起来像
  • ServiceStack路由设计

    这3条路线一样吗 通常首选哪一种 Route todo id DELETE Route todo delete POST Route todo delete id GET public class DeleteTodo IReturnVoi
  • 如何为同一发行版中的多个 Perl 模块设计单元测试?

    我一直在开发一个内部框架 它是用一堆 Perl 模块设计的 所有这些模块都依赖于公开一些 Win32 功能的单个模块 例如A B C D 等模块都依赖于单个模块 Z 因此所有这些模块都将通过 use MyFramework Z 导入 所有这
  • Moshi 适配器跳过 List 中的坏对象

    我使用 Moshi 我需要用有问题的后端来解决我的问题 有时 当我请求对象列表时 其中一些不包含必填字段 当然 我可以捕获并处理JsonDataException 但我想跳过这些对象 我怎样才能用莫西做到这一点 Update 我有几个模型可
  • Python scipy/numpy 中相关性的层次聚类?

    如何在相关矩阵上运行层次聚类scipy numpy 我有一个 100 行 x 9 列的矩阵 我想根据 9 个条件中每个条目的相关性进行分层聚类 我想使用 1 pearson 相关性作为聚类距离 假设我有一个numpy array X包含 1
  • 如何解决“构建:未知编译器选项‘listemitedfiles’。”在 Visual Studio 2015 更新 3 上?

    更新 NuGet 类型脚本包后 我遇到了一个常见的构建错误问题 tsc exe 退出 代码为 1 经过搜索 我找到了解决方法 按照建议 我安装了另外两个名为 Microsoft TypeScript Compiler 和 Microsoft
  • Shell执行多个文件

    我想知道是否可以通过某种方式使用 ShellExecute 使用默认动词处理程序一次打开多个文件 例如 如果一个文件夹中有多个 mp3 文件 我可以选择所有文件 然后右键单击并选择 播放 这将打开一个 WMP 实例 这是我的默认 mp3 播
  • 扭曲的 HTTPS 客户端

    我目前在使用扭曲的 python 库访问通过 https 托管的内容时遇到一些问题 我是这个库的新手 并且假设我缺少一些导致问题的概念 但可能不是基于示例 这是我收集示例的页面的链接 https twistedmatrix com docu
  • 如何创建比 Core Plot 生成的图表更好看的图表? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找适合 iPhone 绘制图表 饼图 条形图 的好库 我测试过很多人推荐的Coreplot 但我认为生成的图表看起来很差 I sa
  • 我如何确定哪些是 Facebook 应用程序用户最好的朋友?

    我目前正在尝试使用 Facebook PHP SDK 创建 Facebook 应用程序 我想检索用户的哪些朋友是他最好的朋友 或者是他最常交谈的朋友 您知道获取它们的算法或技巧吗 简单地说 寻找友谊的标记 给每项活动一个权重 合计 朋友分数
  • 将 GET 参数添加到 URL 的语法是什么?

    我在用Python https www python org and 谷歌应用引擎 https cloud google com appengine 我需要通过向网址添加一些元素来访问某些网页 将 GET 参数添加到 URL 的语法是什么
  • 双锚定正则表达式

    我想接受用户的任意正则表达式并将其锚定在两侧以强制完全匹配
  • Maven2 Eclipse 集成

    似乎有两个竞争对手的 Eclipse 插件可以与 Maven 集成 m2Eclipse http m2eclipse codehaus org and q4e http code google com p q4e 最近有人评估或使用过这些插
  • 在 iOS4.1 上保存带有照片的地理标签信息

    我在尝试在 iOS 4 1 上将带有地理标记信息的照片保存到相机胶卷时遇到重大问题 我正在使用以下资产库 API void writeImageDataToSavedPhotosAlbum NSData imageData metadata