为什么纬度和经度值要转换为1E6?

3
我正在开发Android应用程序时涉及到经度/纬度。为什么人们要将其转换为1E6? (即 * 1000000)这似乎是一个不必要的步骤,有什么好处吗?这些值不能简单地存储为双精度或浮点数吗?请解释一下。谢谢 -

整数运算比浮点数运算快。 - Geobits
3个回答

12
为什么要将它们转换为1E6? 因为Google Maps附加API需要这样做。
好处是什么? 值不能简单地存储为double或float类型吗? 你可能太年轻了,不记得桌面PC甚至笔记本电脑可能没有浮点协处理器的时代。您可以选择购买带有浮点协处理器的486SX或486DX CPU,SX变体价格更便宜但缺少浮点协处理器。没有浮点协处理器的CPU仍然可以进行浮点计算,但速度非常慢。当英特尔创建Pentium处理器时,他们放弃了整个SX / DX分裂,因此对于大多数传统PC而言,这已经不再是问题。
然而,第一批Android设备核心的ARMv5 CPU也缺乏浮点协处理器。在此类设备上尝试进行Java浮点数学运算过于缓慢,速度太慢了,无法胜任Google Maps的工作。因此,他们从度数单位切换到微度单位,以便可以使用固定点数学进行所有计算,速度足够快。

2

我曾经与GPS设备一起工作,主要出于以下原因进行这种转换:

  1. 除非您拥有最新和最先进的具有极高精度的军用GPS设备,否则大于1E6的值并没有什么意义。
  2. 1E6可以存储在一个int中,而double需要8个字节,因此如果您使用int,可以节省一半的空间。

感谢您的反馈。我已经回去更新了我的源代码,将值存储为(1E6)整数,而不是字符串。 - nesterenes

0

根据Google的API选择,超过1E6的精度不够准确。这为大量地图点的存储节省了空间,例如Google的复杂映射系统所需的那些点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接