为什么 EXIF 地理数据需要如此高的精度?
Why does EXIF geodata need so much precision?
根据spec,EXIF以192精度存储纬度和经度。但是一个简单的计算表明,你只需要 32 位就可以将地球的圆周分成 9 毫米的部分:
r = 6378 km = 6.378 × 10^6 m
C = 2πr = 4.007 × 10^6 m
stepSize = C / 2^32 = 0.009 m = 9 mm
这是假设您以相等大小的步长存储数据,因此作为无符号整数。我可以理解这会使处理代码更难编写,所以管他呢:让我们使用双精度。以这种精度,我们可以将地球的周长分成 2 皮米的步长。一个氦原子的直径为 62 皮米。所以在 64 位上,我们有足够的精度在亚原子尺度上划分地球表面。
我们每个角度需要 192 位到底是什么?
该格式将纬度和经度分别存储为 6 个 32 位整数值,加起来为 192 位。这 6 个整数分别将度、分和秒存储为带有分子和分母的有理数。
为什么是这种格式?据推测,它是为非常简单的处理器设计的,这些处理器无法处理浮点数,甚至可能无法进行除法。该格式已有 25 年以上的历史(尽管我不确定何时添加了 GPS 数据),而且当时的相机并不那么智能。相机需要能够存储大量数据(图片很大),但不需要对其进行大量数学运算。所以他们浪费了一些比特来使操作更容易。
根据spec,EXIF以192精度存储纬度和经度。但是一个简单的计算表明,你只需要 32 位就可以将地球的圆周分成 9 毫米的部分:
r = 6378 km = 6.378 × 10^6 m
C = 2πr = 4.007 × 10^6 m
stepSize = C / 2^32 = 0.009 m = 9 mm
这是假设您以相等大小的步长存储数据,因此作为无符号整数。我可以理解这会使处理代码更难编写,所以管他呢:让我们使用双精度。以这种精度,我们可以将地球的周长分成 2 皮米的步长。一个氦原子的直径为 62 皮米。所以在 64 位上,我们有足够的精度在亚原子尺度上划分地球表面。
我们每个角度需要 192 位到底是什么?
该格式将纬度和经度分别存储为 6 个 32 位整数值,加起来为 192 位。这 6 个整数分别将度、分和秒存储为带有分子和分母的有理数。
为什么是这种格式?据推测,它是为非常简单的处理器设计的,这些处理器无法处理浮点数,甚至可能无法进行除法。该格式已有 25 年以上的历史(尽管我不确定何时添加了 GPS 数据),而且当时的相机并不那么智能。相机需要能够存储大量数据(图片很大),但不需要对其进行大量数学运算。所以他们浪费了一些比特来使操作更容易。