zoukankan      html  css  js  c++  java
  • 根据2点经纬度,计算方位角,以及计算2条线的夹角

      1. 以真北为0度起点,由东向南向西顺时针旋转360度,主要是用于控制象限。
        根据2点经纬度,计算方位角
        [csharp]
                ///
        <summary>
                /// 给定2点,获得经纬度
                /// </summary>
        
                /// <param name="startPoint">起点经纬度,都是以度为单位</param>
                /// <param name="endPoint">终点经纬度,都是以度为单位</param>
                /// <returns></returns>
                private double GetLineAngle(Point2D startPoint, Point2D endPoint)
                {
                    double mathPI = 3.1415926535897931;
                    double tmpValue = 0;
                    double latStart = startPoint.Y * mathPI / 180;
                    double lngStart = startPoint.X * mathPI / 180;
                    double latEnd = endPoint.Y * mathPI / 180;
                    double lngEnd = endPoint.X * mathPI / 180;
                    if (startPoint.X == endPoint.X || startPoint.Y == endPoint.Y)
                    {
                        if (startPoint.X == endPoint.X)
                        {
                            /// 经度相同
                            if (endPoint.Y >= startPoint.Y)
                            {
                                return 0;
                            }
                            else
                            {
                                return 180;
                            }
                        }
                        else
                        {
                            /// 纬度相同
                            if (endPoint.X >= startPoint.X)
                            {
                                return 90;
                            }
                            else
                            {
                                return 270;
                            }
                        }
                    }
        
                    tmpValue = Math.Sin(latStart) * Math.Sin(latEnd) + Math.Cos(latStart) * Math.Cos(latEnd) * Math.Cos(lngEnd - lngStart);
                    tmpValue = Math.Sqrt(1 - tmpValue * tmpValue);
                    tmpValue = Math.Cos(latEnd) * Math.Sin(lngEnd - lngStart) / tmpValue;
                    double resultAngle = Math.Abs(Math.Asin(tmpValue) * 180 / mathPI);
        
                    if (endPoint.X > startPoint.X)
                    {
                        if (endPoint.Y >= startPoint.Y)
                        {
                            /// 第一象限 
                            return resultAngle;
                        }
                        else
                        {
                            /// 第二象限 
                            return 180 - resultAngle;
                        }
                    }
                    else
                    {
                        /// 第四象限
                        if (endPoint.Y >= startPoint.Y)
                        {
                            return 360 - resultAngle;
                        }
                        else
                        {
                            /// 第三象限
                            return 180 + resultAngle;
                        }
                    }
                }
        [/csharp]

      2. 计算线的夹角:
        [csharp]
        double lastAngle = GetLineAngle(tempvPoints[k-1], tempvPoints[k]);
        double thisAngle = GetLineAngle(tempvPoints[k], tempvPoints[k + 1]);
        double angle = Math.Abs(thisAngle - lastAngle);
        if (angle > 180)
        {
           angle = 360 - angle;
        }
        angle = 180 - angle;
        [/csharp]

      3. 参考文档:

        http://linfengsheng.iteye.com/blog/1473037
        http://blog.sina.com.cn/s/blog_658a93570101hynw.html

  • 相关阅读:
    static-keys.txt 翻译
    sqlserver sp_executesql 返回值
    socket上传文件
    threadingSocket 服务器端可以同时接受多个客户端的访问
    python ftp上传
    Python sys模块
    linux系统相关
    下载论文,电子书籍(中英文),专利,数据库和课件
    如何设计一个合理、灵活的深度学习训练框架
    使用小米电视的第一天
  • 原文地址:https://www.cnblogs.com/firesword/p/6093099.html
Copyright © 2011-2022 走看看