我最近观看了一个YouTube视频,该视频讨论了如何使用空间填充曲线来处理GPS坐标。提供了一个公式来完成此操作,因此我决定尝试并复制它,但是我无法弄清楚如何使用JavaScript获得相同的结果。
公式如下:
缩放纬度和经度以使用16个可用位:
scaled_x = (-122.4012 + 180) / 360 * 2 ^ 16 // result = 10485
scale_y = (37.7839 + 90) / 180 * 2 ^ 16 // result = 46524
我已经尝试了几种写公式的方法,但是根据演示文稿中的显示,我的结果与我应该得到的结果相去甚远。演示文稿不正确,或者我没有找到正确的方法。
这是我的一些尝试,都失败了。
使用战俘
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构造此公式以获得预期结果吗?
答案 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
吗?