Uber H3 地理空间索引系统中的 _geoToHex2d 函数中的 r 参数代表什么?

问题描述 投票:0回答:1

我正在尝试了解 uber 的 H3 地理索引系统。我理解 _geoToVec3d() 函数,但我坚持使用 _geoToHex2d() 函数。

有谁知道等式在哪里 uber的H3源码中的函数_geoToHex2d()中的

cos(r) = 1 - 2 * sin^2(r/2) = 1 - 2 * (sqd / 4) = 1 - sqd/2
来自于?它描述了什么? 或者也许有人理解方程中的参数r代表什么? 我知道 sqd 是从二十面体面中心到要编码的点的平方距离。在代码的接下来几行中,如果 r 小于 epsilon,则包含该点的单元格的 2D 十六进制坐标将设置为 (0,0)。我推测 r 一定是距面中心的距离,但可能已经在日射投影平面中了?

geospatial geo h3
1个回答
0
投票

我不得不承认这是我最不熟悉的H3库的领域,所以对以下解释持保留态度:

我相信,在这个函数的开头,

r
是从被索引的点到最近的二十面体面的中心的弧度距离。线

// cos(r) = 1 - 2 * sin^2(r/2) = 1 - 2 * (sqd / 4) = 1 - sqd/2
double r = acos(1 - sqd / 2);

将单位球面上两点之间的 3d 距离的平方转换为以弧度为单位的距离。该评论使用 双角恒等式

cos(2𝛼) = 1 − 2sin^2(𝛼)
cos(r)
表述为
sqd

解释

在上图中,单位球体的横截面,到

F->C
的距离是
1
,到
C->E
的平方距离是
sqd
。我们正在尝试找到角度
CFE

  • sin^2(r/2)
    的值与
    sin^2(CFd)
    相同。由于
    sin(CFd) = C->d / 1 = C->d
    sin^2(CFd)
    是距离
    C->d
    的平方。
  • C->d
    的距离平方为
    (sqrt(sqd) / 2)^2 = sqd / 4
  • 使用双角恒等式,我们可以计算
    cos(r) = 1 - 2 * sin^2(r/2)
    。代入平方距离
    C->d
    得到
    cos(r) = 1 - 2 * (sqd / 4)
    ,简化为
    1 - sqd / 2
  • 我们可以使用反三角函数 arccosine
    r
    求解为
    acos(1 - sqd / 2)

对这个有点折磨人的解释表示歉意,因为我不是数学家。如您所见,

r
现在是角度
CFE
,即
C
E
之间的弧度距离。稍后在函数中,使用心射投影将其投影到二十面体面的平面空间中,然后使用二维六角坐标定位在该面上的平面六角网格中。

© www.soinside.com 2019 - 2024. All rights reserved.