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

时间:2012-07-03 19:04:50

标签: java android geolocation

我在Android应用中使用纬度/经度。为什么人们将它们转换为1E6? (即* 1000000)这似乎是一个不必要的步骤。有什么好处?这些值不能简单地存储为double或float吗?请解释。谢谢 -

3 个答案:

答案 0 :(得分:12)

  

为什么人们将它们转换为1E6?

因为Google Maps附加API需要它。

  

有什么好处?这些值不能简单地存储为double或float吗?

当桌面电脑 - 更不用说笔记本电脑 - 可能没有浮点协处理器时,你可能还太小了。您可以选择购买486SX或486DX CPU,SX变体更便宜但缺少浮点协处理器。没有浮点协处理器的CPU仍然可以进行浮点计算,但非常慢。英特尔在创建奔腾处理器时抛弃了整个SX / DX拆分,因此对于大多数传统PC来说,这已经有一段时间不存在问题了。

然而,在前几代Android设备的核心ARMv5 CPU也缺少浮点协处理器。尝试在这样的设备上进行Java浮点数学运算对于Google Maps来说速度慢,速度太慢。因此,他们将单位从度数转换为微度,以便他们可以在定点数学中进行所有计算,这是可以接受的快速。

答案 1 :(得分:1)

前段时间我曾使用过GPS设备,而我以前做过那种转换主要是出于以下原因:

  1. 除非你拥有最新且最好的军用GPS设备,否则拥有大于1E6的值并没有多大意义
  2. 1E6可以容纳4个字节的int,如果您使用的是double
  3. ,可以节省一半的空间

答案 2 :(得分:0)

根据Google的API选择,超过1E6的精度不够准确。它为大量的地图点节省了空间,就像谷歌这样的复杂地图系统所需要的那样。