1

我在各种编程语言中看到了许多使用 Douglas-Peucker 折线简化算法来生成 GPolyline 以在 Google 地图上使用的示例。该算法在表示为平面上的折线时,涉及计算点和线之间的距离(通过另外两个点)。

现在,到目前为止,我看到的所有示例都以非常幼稚的方式应用该算法,只需将 x 和 y 替换为纬度和经度。这可能会产生可接受的结果,只要折线非常局部化,不太靠近极点,并且不穿过 180° 子午线,但我想实现更通用的算法版本。

所以,如果我没记错的话,我需要计算球体表面上最短弧的长度,从一个点到穿过球体表面另外两个点的圆,其中心与球心(地球)。

有谁知道计算这个长度的公式?

提前致谢

4

1 回答 1

2

我将尝试用单位向量pqr来表达所有内容,可以将其视为以原点0为中心的单位球体Σ上的点。您可以通过按地球半径放大将其转换为陆地量。这里有一些背景材料

我们想要找到从p到大圆C穿过qr的大圆距离dC是平面P和球体Σ的交点,其中P是通过qr和原点0的平面。 d只是pP之间的角度 θ(以弧度表示) 。P的法线向量是归一化叉积q × r /sinφ,其中 φ 是qr

我们最终得到

θ = arcsin( p ⋅( q × r )/sinφ)

正如我所说,这里的一切都被地球的半径R放大了。所以这三个点是R pR qR r,距离是R θ。

但是,如果您只想找到距离最短的点/线组合,则可以省略乘以R。事实上,你可以省略 arcsin(),只看p ⋅( q × r )/sinφ 的相对大小。

于 2010-09-22T03:59:49.360 回答