在连接两个经度和纬度的直线上的任意位置查找经度和纬度

时间:2019-06-07 15:46:36

标签: python

我遇到了一个大问题,我必须在两个纬度和经度之间找到一定距离而不是在中心的纬度和经度。有很多代码可以找到中点,但是除了中点之外,没有其他公式可以在其他一定的距离比上实现。我通过下面的解释使问题更加清楚。

lat1,long1 ----------------------------- lat2,long2 ------------ ------------------ lat3,lon3

我们可以轻松找到中点和经度,即lat2,long2。 但是,如果我们需要找到

lat1,long1 ------------------------------------------ lat2, long2 ------------------------------ lat3,lon3

lat2,long2,即lat1,long1的l / 3和lat3,long3的(2/3)l,其中l是lat1,long1和lat3,long3之间的总距离。我无法为我的问题找到任何逻辑。请帮忙。

1 个答案:

答案 0 :(得分:0)

Python提供了complex类型,该类型也可以用于处理二维点。您想要的点只是两个端点的加权平均值:

def interpolate(p1, p2, r):
    """Find a point on the line between p1 and p2.

    0 <= r <= 1

    If d is the distance between p1 and p2, then
    p3 = interpolate(p1, p2, r) is a point on the line
    between p1 and p2 such that the distance from p1 to p3
    is r * d.
    """
    return p1 * r + p2 * (1-r)


lat1 = ...
long1 = ...
lat2 = ...
long2 = ...

p1 = complex(lat1, long1)
p2 = complex(lat2, long2)

# Some examples...
p3 = interpolate(p1, p2, 0.33)  # lat3 == p3.real, long3 == p3.imag
p4 = interpolate(p1, p2, 0.67)
p5 = interpolate(p1, p2, 0.5)

这假定这些点之间的距离足够近,您可以假设这些点之间的地球表面近似为一个平面。

要更近一点,请使用spherical linear interpolation,这需要首先计算两点之间的角度。