根据百分比(球形)计算两个坐标之间的点

时间:2018-09-14 00:16:41

标签: javascript coordinates geocoding latitude-longitude

我在Stackoverflow上发现了以下answer

据我了解,这不是正确的方法。数学是线性的,但是坐标映射到球面。那么正确的方法是什么?

我有一个计算中点的函数,如何更改它以接受百分比作为参数。换句话说,找到一个介于1点和2点之间且与1点相距一个百分比的中点...

middle_point(lat1, long1, lat2, long2) {

    // Longitude difference.
    var d_long = (long2 - long1) * Math.PI / 180;

    // Convert to radians.
    lat1 = lat1 * Math.PI / 180;
    lat2 = lat2 * Math.PI / 180;
    long1 = long1 * Math.PI / 180;

    var b_x = Math.cos(lat2) * Math.cos(d_long);
    var b_y = Math.cos(lat2) * Math.sin(d_long);

    var lat3 = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt((Math.cos(lat1) + b_x) * (Math.cos(lat1) + b_x) + b_y * b_y)); 
    var long3 = long1 + Math.atan2(b_y, Math.cos(lat1) + b_x);

    // Return result.
    return [long3 * 180/Math.PI, lat3 * 180/Math.PI];

}

1 个答案:

答案 0 :(得分:1)

答案在这里:http://www.movable-type.co.uk/scripts/latlong.html和这里:http://www.edwilliams.org/avform.htm#Intermediate

这是您需要的功能,“ perc”在0到100之间:

%%timeit
generate_insert_values_series(df)
100 loops, best of 3: 2.69 ms per loop