zoukankan      html  css  js  c++  java
  • 通过两个位置的经纬度坐标计算距离(C#版本)

          /// <summary>
        /// 通过地图上的两个坐标计算距离(C#版本)
        /// Add by 成长的小猪(Jason.Song) on 2017/11/01
        /// http://blog.csdn.net/jasonsong2008
        /// </summary>
        public class MapHelper
        {
            /// <summary>
            /// 地球半径
            /// </summary>
            private const double EarthRadius = 6378.137;
    
    
            /// <summary>
            /// 经纬度转化成弧度
            /// Add by 成长的小猪(Jason.Song) on 2017/11/01
            /// http://blog.csdn.net/jasonsong2008
            /// </summary>
            /// <param name="d"></param>
            /// <returns></returns>
            private static double Rad(double d)
            {
                return d * Math.PI / 180d;
            }
    
    
            /// <summary>
            /// 计算两个坐标点之间的距离
            /// Add by 成长的小猪(Jason.Song) on 2017/11/01
            /// http://blog.csdn.net/jasonsong2008
            /// </summary>
            /// <param name="firstLatitude">第一个坐标的纬度</param>
            /// <param name="firstLongitude">第一个坐标的经度</param>
            /// <param name="secondLatitude">第二个坐标的纬度</param>
            /// <param name="secondLongitude">第二个坐标的经度</param>
            /// <returns>返回两点之间的距离,单位:公里/千米</returns>
            public static double GetDistance(double firstLatitude, double firstLongitude, double secondLatitude, double secondLongitude)
            {
                var firstRadLat = Rad(firstLatitude);
                var firstRadLng = Rad(firstLongitude);
                var secondRadLat = Rad(secondLatitude);
                var secondRadLng = Rad(secondLongitude);
    
    
                var a = firstRadLat - secondRadLat;
                var b = firstRadLng - secondRadLng;
                var cal = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(firstRadLat) 
                    * Math.Cos(secondRadLat) * Math.Pow(Math.Sin(b / 2), 2))) * EarthRadius;
                var result = Math.Round(cal * 10000) / 10000;
                return result;
            }
    
    
            /// <summary>
            /// 计算两个坐标点之间的距离
            /// Add by 成长的小猪(Jason.Song) on 2017/11/01
            /// http://blog.csdn.net/jasonsong2008
            /// </summary>
            /// <param name="firstPoint">第一个坐标点的(纬度,经度)</param>
            /// <param name="secondPoint">第二个坐标点的(纬度,经度)</param>
            /// <returns>返回两点之间的距离,单位:公里/千米</returns>
            public static double GetPointDistance(string firstPoint, string secondPoint)
            {
                var firstArray = firstPoint.Split(',');
                var secondArray = secondPoint.Split(',');
                var firstLatitude = Convert.ToDouble(firstArray[0].Trim());
                var firstLongitude = Convert.ToDouble(firstArray[1].Trim());
                var secondLatitude = Convert.ToDouble(secondArray[0].Trim());
                var secondLongitude = Convert.ToDouble(secondArray[1].Trim());
                return GetDistance(firstLatitude, firstLongitude, secondLatitude, secondLongitude);
            }
    
    
        }

    调用方法:

        /// <summary>
            /// 文章来源于成长的小猪
            /// http://blog.csdn.net/jasonsong2008
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)
            {
                //第一种调用方法
                var result = MapHelper.GetDistance(31.2553210000, 121.4620020000, 31.2005470000, 121.3269970000);
    
    
                //第二种调用方法
                result = MapHelper.GetPointDistance("31.2553210000,121.4620020000", "31.2005470000,121.3269970000");
            }
  • 相关阅读:
    jquery开发之第一个程序
    结构体大小求值
    SpringMVC 理论与有用技术(一) 简单、有用、易懂的几个实例
    北极的夜空
    Assignment (HDU 2853 最大权匹配KM)
    让linux history命令显示命令的运行时间、在哪个机器运行的这个命令
    [0day]基础工具学习
    Matlab adaptive quadrature
    计蒜之道 初赛 第三场 题解 Manacher o(n)求最长公共回文串 线段树
    辛星跟您解析在CSS面包屑中三角形的定位问题
  • 原文地址:https://www.cnblogs.com/hugeboke/p/13348034.html
Copyright © 2011-2022 走看看