python计算半身距的总和

时间:2017-01-06 07:04:03

标签: python numpy gis vectorization distance

我有大约200,000,000个坐标序列,其中一个看起来像这样:

[[30.654508, 104.086337], [30.654878999999998, 104.085479], [30.655219, 104.084691], [30.655027, 104.084949], [30.654555, 104.086073], [30.654078000000002, 104.08710500000001], [30.653726000000002, 104.087848], [30.653376, 104.088552], [30.653190000000002, 104.088975]]

现在我想计算一个序列中每个点之间的半径距离之和,这意味着该轨迹的总长度。

我使用此代码计算两点之间的半径距离:

def cal_haversine(point1, point2):
    lat_o,lon_o, lat_d,lon_d = point1[0][0],point1[0][1],point2[0][0],point2[1][1]
    sin = math.sin
    cos = math.cos
    atan2 = math.atan2
    sqrt = math.sqrt

    lon1,lat1 = lon_o,lat_o
    lon2,lat2 = lon_d, lat_d
    R=6371000 #metres
    phi1=lat1 * (3.1415 / 180)
    phi2=lat2 * (3.1415 / 180)
    Dphi= phi2 - phi1
    Dlambda = (lon2 -lon1) *  (3.1415 / 180)

    a = sin(Dphi / 2) ** 2 + cos(phi1)*cos(phi2) *sin(Dlambda/2)**2
    c = 2 * atan2(sqrt(a),sqrt(1-a))
    d = R*c/1000.0 # to kilometer
    return d

由于要计算的序列太多,因此使用循环计算所有序列的距离可能会非常慢。

我猜这种计算可能有更快的方法,比如使用矢量化方法。有没有更好的方法?

0 个答案:

没有答案