1

我在 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 破坏我的坐标位?

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

4

1 回答 1

2

最可能的解释是,罪魁祸首是您用来编写Exif 信息的应用程序,而不是您后来用来读取 Exif 信息的应用程序。

Exif v2.3 标准 ( http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf ) 说 GPS 纬度和经度存储为 3 个 RATIONAL 类型的值,一个用于度数,一分钟,一秒。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 度,其中相对于原始坐标的差异意味着分辨率比您使用的应用程序提供的分辨率高约一百万倍。

于 2016-05-13T21:47:11.047 回答