H3 库使用 Dymaxion 方向,这意味着六边形网格相对于赤道/子午线旋转到一个不寻常的角度。这在对地球建模时是有道理的,因为十二个五边形都位于水中,但在使用库绘制其他球体(如天空或其他行星)时则没有必要。在这种情况下,将二十面体对齐以在两极和子午线上放置一个五边形会更直观和美观。我只是想弄清楚我需要在库中进行哪些更改才能实现这一目标?看起来我需要重新计算faceCenterGeo
和中的faceCenterPoint
表faceijk.c
,但我是否也需要重新计算faceAxesAzRadsCII
?我真的不明白后一张桌子是什么......
问问题
48 次
1 回答
3
根据这个相关的答案,您需要对其他行星进行的主要更改是更改球体的半径(仅当您想计算距离或面积时才需要)以及二十面体的方向。对于后者:
faceCenterGeo
以 lat/lng 点定义二十面体方向faceCenterPoint
是一个表格faceCenterGeo
,将每个面的中心定义为单位球面上的 3d 坐标。您可以使用generateFaceCenterPoint.c创建自己的派生faceAxesAzRadsCII
是一个表,faceCenterGeo
它定义了从每个面中心到其三个顶点中的每一个的角度。这个没有生成脚本,TBH我也不知道它最初是怎么生成的。但是,它用于在网格坐标和地理坐标之间进行转换的核心算法中,因此您肯定需要对其进行更新。
我强烈建议采用这种方法是一个坏主意:
- 这是相当多的工作——不仅仅是(只是)计算,而是重新编译代码、维护一个分支、可能为你的分支编写其他语言的绑定等。
- 你会破坏大多数涉及地理输入或输出的测试,所以你会盲目地知道你更新的代码是否按预期工作。
- 您将无法利用基于 H3 构建的其他项目,例如其他语言和数据库的绑定。
如果您想重新定位 H3 的几何图形,我建议您完全这样做 - 对发送到 H3的输入地理坐标应用变换,对从 H3 获得的输出地理坐标应用反向变换。与修改库代码相比,这有很多优点:
- 容易多了
- 您可以继续使用维护的库
- 您可以在绑定之外以您选择的语言应用这些转换
- 您自己的代码与第 3 方库代码完全分离
这种方法的性能损失可能非常小,但在几乎所有情况下,与您避免的困难相比,这是一个很小的代价。
于 2021-08-05T21:43:57.907 回答