如何将纬度和经度转换为莫顿码(z 阶曲线)
Posted
技术标签:
【中文标题】如何将纬度和经度转换为莫顿码(z 阶曲线)【英文标题】:How convert latitude & longitude to Morton code(z order curve) 【发布时间】:2015-07-12 13:49:42 【问题描述】:我在互联网上搜索,但仅找到有关如何将纬度和经度转换为莫顿码(z阶曲线)的一些信息。 从the link 我知道如何将两个 int 转换为 Morton Code。 但是,如果我有纬度或经度等浮点值,我应该如何将浮点值转换为 int?然后我可以将 int 转换为 Morton 代码。 比如c#代码:
float value a=43.2345f;
int aint1=43.2345*10000;
int aint2=(int)BitConverter.DoubleToInt64Bits(43.2345);
在这里,我不知道应该选择哪个。请你帮助我好吗? 我没有找到像“BitConverter.FloatToInt32Bits”这样的方法。到现在,我也不知道是什么原因。
更新1: 我找到了答案here,但我不太明白答案。
【问题讨论】:
这是您要问的吗? ***.com/questions/4181942/convert-double-to-int 我要问的是***.com/questions/11871057/… 【参考方案1】:我花了一些时间寻找这个问题的答案。似乎空间曲线(z 阶曲线、希尔伯特曲线等)需要建立在 正整数 上,这是一个问题,因为 lat/lon 可以是负浮点数。
找到了几个项目,其中的解决方案是转换为正整数,例如:
// lat: -90 .. +90
var iLat = Math.round((lat + 90.0) * 100000); // 5 digits
// lng: -180 .. +180
var iLng = Math.round((lng + 180.0) * 100000); // 6 digits
转换为整数后,一些将整数转换为位数组并在这些值上构建曲线,而另一些则仅使用整数表示来构建曲线。我猜曲线的空间长度可能太大而无法放入整数,这就是使用数组的原因。不过,我仍在调查。
【讨论】:
以上是关于如何将纬度和经度转换为莫顿码(z 阶曲线)的主要内容,如果未能解决你的问题,请参考以下文章