zoukankan      html  css  js  c++  java
  • 百度地图计算两坐标点之间距离计算

     
     
    public class BaiDuMap {
        static double DEF_PI = 3.14159265359// PI
            static double DEF_2PI= 6.28318530712// 2*PI
            static double DEF_PI180= 0.01745329252// PI/180.0
            static double DEF_R =6370693.5// radius of earth
                    //适用于近距离
            public static double GetShortDistance(double lon1, double lat1, double lon2, double lat2)
            {
                double ew1, ns1, ew2, ns2;
                double dx, dy, dew;
                double distance;
                // 角度转换为弧度
                ew1 = lon1 * DEF_PI180;
                ns1 = lat1 * DEF_PI180;
                ew2 = lon2 * DEF_PI180;
                ns2 = lat2 * DEF_PI180;
                // 经度差
                dew = ew1 - ew2;
                // 若跨东经和西经180 度,进行调整
                if (dew > DEF_PI)
                dew = DEF_2PI - dew;
                else if (dew < -DEF_PI)
                dew = DEF_2PI + dew;
                dx = DEF_R * Math.cos(ns1) * dew; // 东西方向长度(在纬度圈上的投影长度)
                dy = DEF_R * (ns1 - ns2); // 南北方向长度(在经度圈上的投影长度)
                // 勾股定理求斜边长
                distance = Math.sqrt(dx * dx + dy * dy);
                return distance;
            }
                    //适用于远距离
            public static double GetLongDistance(double lon1, double lat1, double lon2, double lat2)
            {
                double ew1, ns1, ew2, ns2;
                double distance;
                // 角度转换为弧度
                ew1 = lon1 * DEF_PI180;
                ns1 = lat1 * DEF_PI180;
                ew2 = lon2 * DEF_PI180;
                ns2 = lat2 * DEF_PI180;
                // 求大圆劣弧与球心所夹的角(弧度)
                distance = Math.sin(ns1) * Math.sin(ns2) + Math.cos(ns1) * Math.cos(ns2) * Math.cos(ew1 - ew2);
                // 调整到[-1..1]范围内,避免溢出
                if (distance > 1.0)
                     distance = 1.0;
                else if (distance < -1.0)
                      distance = -1.0;
                // 求大圆劣弧长度
                distance = DEF_R * Math.acos(distance);
                return distance;
            }
            public static void main(String[] args) {
                double mLat1 = 39.90923// point1纬度
                double mLon1 = 116.357428// point1经度
                double mLat2 = 39.90923;// point2纬度
                double mLon2 = 116.397428;// point2经度
                double distance = BaiDuMap.GetShortDistance(mLon1, mLat1, mLon2, mLat2);
                System.out.println(distance);
            }
             
    }
     
  • 相关阅读:
    Codeforces 1291 Round #616 (Div. 2) B
    总结
    刷新DNS解析缓存+追踪+域名解析命令
    数学--数论--Hdu 5793 A Boring Question (打表+逆元)
    Lucene.net(4.8.0) 学习问题记录六:Lucene 的索引系统和搜索过程分析
    LeetCode 117 Populating Next Right Pointers in Each Node II
    LeetCode 116 Populating Next Right Pointers in Each Node
    test test
    LeetCode 115 Distinct Subsequences
    LeetCode 114. Flatten Binary Tree to Linked List
  • 原文地址:https://www.cnblogs.com/MaxIE/p/3914762.html
Copyright © 2011-2022 走看看