java - 两个纬度和经度之间的中点

标签 java math maps

我正在尝试转换此 http://www.movable-type.co.uk/scripts/latlong.html 中给出的代码片段进入java。但我没有得到与网站相同的结果。这是我的代码,用于查找给定纬度和经度的两点之间的中点

midPoint(12.870672,77.658964,12.974831,77.60935);
    public static void midPoint(double lat1,double lon1,double lat2,double lon2)
    {
   double dLon = Math.toRadians(lon2-lon1);
        double Bx = Math.cos(lat2) * Math.cos(dLon);
        double By = Math.cos(lat2) * Math.sin(dLon);
        double lat3 = Math.atan2(Math.sin(lat1)+Math.sin(lat2),Math.sqrt( (Math.cos(lat1)+Bx)*(Math.cos(lat1)+Bx) + By*By) );
        double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);
        System.out.print(lat3 +" " + lon3 );
    }

我不确定 dLon 是否正确。所以请大家帮我弄清楚。 P.S.我需要找到中点的经纬度

最佳答案

您需要转换为弧度。将其更改为以下内容:

public static void midPoint(double lat1,double lon1,double lat2,double lon2){

    double dLon = Math.toRadians(lon2 - lon1);

    //convert to radians
    lat1 = Math.toRadians(lat1);
    lat2 = Math.toRadians(lat2);
    lon1 = Math.toRadians(lon1);

    double Bx = Math.cos(lat2) * Math.cos(dLon);
    double By = Math.cos(lat2) * Math.sin(dLon);
    double lat3 = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt((Math.cos(lat1) + Bx) * (Math.cos(lat1) + Bx) + By * By));
    double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);

    //print out in degrees
    System.out.println(Math.toDegrees(lat3) + " " + Math.toDegrees(lon3));
}

关于java - 两个纬度和经度之间的中点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4656802/

相关文章:

java - 替换某些字符组合

java - 使用 ArrayWritable 的序列化似乎以一种有趣的方式工作

javascript - 传单:添加指向标记的链接

math - 点近线铺设

c++ - atan(-M_PI_2) 不返回 -90 º

java - 本地图中的键是一个对象时,如何通过该对象的属性进行搜索?

r - 映射澳大利亚城市 - R 空间

Java无线模块开发

java - Spring JMS @JmsListener 一种方法的另一种并发性

python - 使用值接近 0 的 math.isclose 函数