美文网首页
java 经纬度点到直线的距离运算方法

java 经纬度点到直线的距离运算方法

作者: buhanzhe | 来源:发表于2020-04-14 16:36 被阅读0次

    在实际开发过程中我遇到以下问题:
    已知A、B、C经纬度,求点A到直线BC距离的问题,在这里分享下我的解决方案。


    地球坐标系上的三角形.png

    首先我们求出 AB、AC、BC 的距离 c,b,a。

    以下为根据经纬度计算距离的代码

        private final static double EARTH_RADIUS = 6378137.0;
        /**
         * 计算两点距离
         *
         * @param lat_a
         * @param lng_a
         *
         * @param lat_b
         * @param lng_b
         * @return
         */
        public static double getDistance(double lat_a, double lng_a, double lat_b, double lng_b) {
            double radLat1 = (lat_a * Math.PI / 180.0);
            double radLat2 = (lat_b * Math.PI / 180.0);
            double a = radLat1 - radLat2;
            double b = (lng_a - lng_b) * Math.PI / 180.0;
    
            double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
                    + Math.cos(radLat1) * Math.cos(radLat2)
                    * Math.pow(Math.sin(b / 2), 2)));
    
            s = s * EARTH_RADIUS;
            s = Math.round(s * 10000d) / 10000d;
            return s;
        }
    

    第二步我们求出半周长 p =( a + b + c ) / 2。
    第三步我们根据海伦-秦九昭算法求面积S=√p(p - a)(p - b)(p - c)。
    最后A到直线BC距离 = 2 * S / a.

    以下为java代码。

    //求外接圆半周长p
    double p = (a + b + c) / 2;
    //根据海伦-秦九昭算法求面积S
    double S = Math.sqrt(Math.abs(p * (p - a) * (p - b) * (p -c)));
    double distance = S == 0 ? 0d : (2 * S / c);
    

    相关文章

      网友评论

          本文标题:java 经纬度点到直线的距离运算方法

          本文链接:https://www.haomeiwen.com/subject/tbjtvhtx.html