如何将纬度和经度转换为莫顿码(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 阶曲线)的主要内容,如果未能解决你的问题,请参考以下文章

经纬度转换成XYZ坐标

将 x,y 转换为纬度和经度

将图块的 xyz 坐标转换为经度/纬度

如何将 CLLocationCoordinate2D 纬度和经度转换为双倍?

如何将极地系统转换为纬度和经度

如何将纬度/经度对转换为 PostGIS 地理类型?