1

我在互联网上搜索,但仅找到有关如何将纬度和经度转换为莫顿码(z 阶曲线)的一些信息。从链接中,我知道如何将两个 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”这样的方法。到目前为止,我不知道原因。

Upate 1:我在这里找到了答案,但我不太明白答案。

4

1 回答 1

2

我花了一些时间寻找这个问题的答案。似乎空间曲线(z 阶曲线、希尔伯特曲线等)需要建立在正整数上,这是一个问题,因为纬度/经度可以是负浮点数。

发现几个项目的解决方案是转换为正整数,例如:

  // 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

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

于 2017-06-29T18:45:00.943 回答