【问题标题】:How convert latitude & longitude to Morton code(z order curve)如何将纬度和经度转换为莫顿码(z 阶曲线)
【发布时间】: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,但我不太明白答案。

【问题讨论】:

标签: latitude-longitude z-order-curve


【解决方案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

转换为整数后,一些将整数转换为位数组并在这些值上构建曲线,而另一些则仅使用整数表示来构建曲线。我猜曲线的空间长度可能太大而无法放入整数,这就是使用数组的原因。不过,我仍在调查。

【讨论】:

    猜你喜欢
    • 2015-07-22
    • 1970-01-01
    • 2021-10-20
    • 2012-04-19
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多