use*_*298 3 algorithm geometry gps intersection latitude-longitude
我需要一些简单的东西
但这适用于Lon/Lat.
我们将从一些假设开始:
所以,改写你的问题:
给定三个地球表面点 - p0,p1和p2,在由p1和p2定义的大圆的小弧上找到一个地表点,它最接近p0.
作为解决方案的基础架构,我们需要:
我建议分别使用GeographicLib的Direct和Inverse功能,这是我所知道的最准确的实现.
由于扁球体计算中涉及的数学是高度非线性的,我们将构建一个迭代解决方案.
作为第一步,我们将尝试理解一个图表,其中X轴是由p1和p2定义的大圆的次弧上的点,而Y轴是从p0到该点的距离 - 可能看起来喜欢:
这种图形如何看起来有几种选择:函数可以单调递增或单调递减.它也可能包含单个点,其一阶导数可能为0.它可能是最小值(非常微不足道),但也可能是最大值(例如 - 如果Lat(p0)= 0,则Lat(p1)= 100和Lat(p2)= - 100).但是,在所有情况下,导数变化符号都有0或1个点.
理解这一点,我们现在可以构建一个迭代算法.在每次迭代中:
我们将计算dist(p0,p1),dist(p0,p2)以及dist(p0,pM),其中M是由p1和p2定义的大圆的小弧上的p1和p2之间的中点.现在.我们会检查:
否则,我们无法确定最小值是否接近p1或p2,因此我们将再使用两个点进行检查:我们将pL定义为p1和pM之间的中点,并将pN定义为pM和p2之间的点.现在,
否则 - p0在pL和pN之间.
因此,在每次迭代中,我们将弧长减半,我们正在寻找解决方案.
使用这种方法,我们可以在不到30次迭代中获得1 cm的精度.