为什么EXIF GPS坐标在iOS上被截断?

时间:2012-11-02 02:06:16

标签: ios gps exif

我在JPG的EXIF标题中添加了GPS坐标,并将它们保存到相机胶卷中。由于一些奇怪的原因,当我使用第三方应用程序查看JPG EXIF信息后,十进制纬度/经度坐标被截断,我的位置准确度会下降。

示例:

[GPSDictionary setObject:[NSNumber numberWithDouble:12.34567890]
                      forKey:(NSString*)kCGImagePropertyGPSLatitude];

结果:

"{GPS}" = {
     Latitude = "12.3456789";
};

但这就是 实际上在JPG文件的EXIF标题 中结束的内容:

Latitude = "12.34566667";

其他时候情况更糟。

iPhone GPS: Longitude = 79.78598345
EXIF   GPS: Longitude = 79.786

如何防止iOS破坏我的坐标位?

因为这会影响以后计算的准确性。

1 个答案:

答案 0 :(得分:1)

最可能的解释是,罪魁祸首是您以前用于编写 Exif信息的应用程序,而不是您稍后用于阅读Exif信息的应用程序。

Exif v2.3标准(http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf)表示GPS纬度和经度存储为RATIONAL类型的3个值,一个用于度,一个用于分钟,一个用于秒。 RATIONAL类型的值表示两个无符号32位整数的比率。因此,必须将小数纬度或经度转换为度,分和秒,并且每个必须表示为比率,这意味着必须为它们选择特定的分母。最小使用单位的分母决定了分辨率,由编写Exif标题的应用程序的设计者选择。

您提到的经度和纬度截断与以弧分的1/100为单位表示坐标的选择是一致的。您的纬度为12.3456789度,相当于12度和20.740734弧分,分为12度和2074/100弧分,相当于您获得的12.3456666度。你的经度为79.78598345度,相当于79度和47.159007弧分,分为79度和4716/100弧分,相当于你得到的79.786度。

如果您需要更高的分辨率,那么您应该看看您用于编写Exif标头的应用程序是否可以配置为使用更高的分辨率,或者使用其他应用程序来编写使用的Exif信息更高的分辨率例如,如果我使用exiftool(http://owl.phy.queensu.ca/~phil/exiftool/)将原始GPS经度和纬度写入图像的Exif标题,然后再次使用exiftool提取并打印坐标,那么我得到12.3456789000111和79.7859834499989度,分别相对于原始坐标的差异意味着分辨率比您使用的应用程序提供的分辨率高出一百万倍。