Java语言中的16个可用位

时间:2018-06-19 17:50:27

标签: javascript

我最近观看了一个YouTube视频,该视频讨论了如何使用空间填充曲线来处理GPS坐标。提供了一个公式来完成此操作,因此我决定尝试并复制它,但是我无法弄清楚如何使用JavaScript获得相同的结果。

公式如下:

  

缩放纬度和经度以使用16个可用位:

scaled_x = (-122.4012 + 180) / 360 * 2 ^ 16   // result = 10485
scale_y = (37.7839 + 90) / 180 * 2 ^ 16       // result = 46524

Video Reference


我已经尝试了几种写公式的方法,但是根据演示文稿中的显示,我的结果与我应该得到的结果相去甚远。演示文稿不正确,或者我没有找到正确的方法。

这是我的一些尝试,都失败了。

使用战俘

base = Math.round((lat + 180) / 360);
scale = Math.pow(base * 2, 16); // Result = 0

精确公式

base = Math.round((lat + 180) / 360 * 2 ^ 16); // Result = 16

在线电源

base = Math.round((lat + 180) / 360 * Math.pow(2, 16)); // Result = -22282

有人知道如何用JavaScript构造此公式以获得预期结果吗?

1 个答案:

答案 0 :(得分:1)

base = Math.round((lat + 180) / 360);
scale = Math.pow(base * 2, 16)

这不起作用,因为您在将值乘以2 16 之前将其舍入了-因此它将舍入为0或1。这不是您想要的。

base = Math.round((lat + 180) / 360 * 2 ^ 16); 

在Javascript和其他许多语言中,^用于按位XOR,而不是求幂。 2 ^ 16是18,而不是65536。

base = Math.round((lat + 180) / 360 * Math.pow(2, 16));

这看起来是正确的。不过,您引用的结果不适用于lat = -122.4012 -也许您忽略了+ 180吗?