`
tianyelina
  • 浏览: 85149 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过经纬度坐标计算距离的方法

阅读更多
2种方法都是在网上搜索来的,一种原来是java写的,一种是.net写的,java的那个我翻译成.net的了.
1:原JAVA
double distanceByLnglat(double _Longitude1,
   double _Latidute1,
   double _Longitude2,
   double _Latidute2)
  {
  
   double radLat1 = _Latidute1 * Math.PI / 180;
   double radLat2 = _Latidute2 * Math.PI / 180;
   double a = radLat1 - radLat2;
   double b = _Longitude1 * Math.PI / 180 - _Longitude2 * Math.PI / 180;
   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 * 6378137.0;// 取WGS84标准参考椭球中的地球长半径(单位:m)
   s = Math.Round(s * 10000) / 10000;
   return s;
  }


2:原.Net
public struct EarthPoint
  {
   public const double Ea = 6378137; // 赤道半径 WGS84标准参考椭球中的地球长半径(单位:m)
   public const double Eb = 6356725; // 极半径 
   public readonly double Longitude,Latidute;
   public readonly double Jd;
   public readonly double Wd;
   public readonly double Ec;
   public readonly double Ed;
   public EarthPoint(double _Longitude,double _Latidute)
   {
    Longitude = _Longitude;
    Latidute = _Latidute;
    Jd = Longitude * Math.PI / 180; //转换成角度
    Wd = Latidute * Math.PI /180; //转换成角度
    Ec = Eb + (Ea - Eb) * (90 - Latidute) / 90;
    Ed = Ec * Math.Cos(Wd);
   }
   public double Distance(EarthPoint _Point)
   {
    double dx = (_Point.Jd - Jd) * Ed;
    double dy = (_Point.Wd - Wd) * Ec;
    return Math.Sqrt(dx * dx + dy *dy);
   }
  }

public static Double GetDistance(double _Longitude1,
   double _Latidute1,
   double _Longitude2,
   double _Latidute2)
  {
   EarthPoint p1 = new EarthPoint(_Longitude1,_Latidute1);
   EarthPoint p2 = new EarthPoint(_Longitude2,_Latidute2);
   return p1.Distance(p2);
  
  }

测试代码:
DateTime   dt1=DateTime.Now;
   DateTime dt2 = DateTime.Now;
   TimeSpan ts1;
  
   dt1 = DateTime.Now;
   for(int i=0;i<sumCount;i++)
    ss = distanceByLnglat(jd1,wd1,jd2,wd2);
   dt2 = DateTime.Now;
   ts1 = dt2- dt1;
   this.label4.Text =  String.Format("Java:{0:N3}米 计算次数: {1:N:0} 用时: {2:N1} 毫妙",ss,sumCount,ts1.TotalMilliseconds);
  
   dt1=DateTime.Now;
   for(int i=0;i<sumCount;i++)
    ss = GetDistance(jd1,wd1,jd2,wd2);
   dt2 = DateTime.Now;
   ts1 = dt2- dt1;
   this.label3.Text =  String.Format("Net:{0:N3}米 计算次数: {1:N:0} 用时: {2:N1} 毫妙",ss,sumCount,ts1.TotalMilliseconds);


第一种方法用时基本上是第二种方法的用时的2倍!
此处没有比较2种语言的意思,因为根本没有在2种环境下运行,这里只比较了算法的执行效率而已!
分享到:
评论

相关推荐

    mysql函数-根据经纬度坐标计算距离

    本篇文章将详细介绍如何利用MySQL的内置函数和数学公式来计算两个经纬度坐标点之间的距离。 首先,我们需要了解地球上两点之间的距离计算方法。在地球表面上,两点间的最短距离是大圆航线(Great Circle Distance)...

    根据经纬度坐标计算实际两点距离

    通过以上分析可以看出,根据经纬度坐标计算两点间距离是一种实用且重要的计算方法。在现代地理信息系统、导航服务等领域有着广泛的应用。该算法简单易懂,通过简单的数学运算即可完成复杂的地理计算任务,具有较高的...

    经纬度计算距离经纬度计算距离工具

    总结起来,这个压缩包提供的工具和资源主要用于经纬度坐标间的距离计算,结合了GIS技术,涵盖了坐标转换、磁偏角修正等功能。使用者可以通过这些工具获取精确的地理位置信息,为导航、规划路线或者分析地理数据提供...

    已知一点坐标和经纬度求其它经纬度坐标或相应坐标经纬度

    在主函数 `main` 中,通过调用 `xyToLngLat` 方法,可以将数据库中存储的点的相对坐标转换为其实际的经纬度坐标。这样的应用场景通常出现在需要处理大量地理数据的情况下,例如地图应用程序、物流规划等。 综上所述...

    通过两点的经纬度信息计算距离及相对方位角(正北角)

    经纬度坐标系统用于确定地球上任何位置的精确位置。 计算两点之间的距离,可以使用球面距离公式,也就是著名的“大圆距离”算法,基于地球是一个近似的球体。在MATLAB中,我们可以利用Haversine公式,它考虑了地球...

    Python经纬度坐标转换为距离及角度的实现

    最近项目上有这样的需求,需要依据设备的经纬度坐标计算距离及角度。经验证后效果较好,并分享。 1 经纬度转换距离代码 #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'Seven' import math # 计算...

    根据经纬度坐标算距离

    知道经纬度坐标.把纬度坐标写入文本框可以精确算距离

    经纬度距离计算+坐标转换

    在IT领域,经纬度距离计算和坐标转换是地理信息系统(GIS)和导航系统中的核心概念。经纬度是用来确定地球上任意位置的坐标系统,而距离计算则涉及到地理空间数据的处理,这对于地图应用、定位服务以及物流规划等...

    经纬度坐标算距离.rar

    在"CalculationOfDistance"文件中,C#代码可能会封装成一个方法,接受两个经纬度对作为参数,然后应用Haversine公式计算距离。这个方法可能还考虑了地球半径的微小变化以及将弧度转换为公里或英里等单位。 使用这样...

    批量根据经纬度计算距离

    这个“批量根据经纬度计算距离”的项目就是这样一个实例,它涉及到地理坐标系统、经纬度的转换以及地球表面的距离计算。以下是对这个主题的详细说明: 1. **地理坐标系统**:地球被划分为一个网格系统,称为地理...

    java根据两点经纬度计算距离

    这通常涉及调用地图API的地理编码服务,将街道地址解析为对应的经纬度坐标。 总之,从给定的标题和描述中,我们可以了解到这个主题涉及到的主要内容是使用Java进行经纬度距离计算,以及如何利用各种地图API获取更...

    全国2160个气象台站的经纬度坐标计算

    标题 "全国2160个气象台站的经纬度坐标计算" 暗示了这是一个与地理信息系统(GIS)和气象数据处理相关的项目。在这个项目中,数据包含了中国境内2160个气象观测站点的位置信息,具体表现为经纬度坐标。这些坐标数据...

    经纬度计算距离,经纬度计算距离公式,matlab

    在IT领域,尤其是在地理信息系统(GIS)和导航应用中,经纬度计算距离是一个常见的需求。经纬度是地球坐标系统中的两个参数,分别表示地球表面某点的经度和纬度,用于精确定位地理位置。本篇文章将深入探讨如何利用...

    WGS84坐标下根据经纬度计算两点之间的距离

    - `p1` 和 `p2` 分别表示两个点的经纬度坐标,其中 `x` 表示经度,`y` 表示纬度。 - `Ri` 定义了地球的平均半径,这里取值为6371千米,即6,371,000米。 2. **核心算法**: - 使用`Math.acos()`函数来计算余弦值...

    经纬度坐标下的球面多边形面积计算公式

    在IT领域,尤其是在地理信息系统(GIS)和地图学中,经纬度坐标下的球面多边形面积计算是一项关键技能。这种计算方式对于处理地球表面的大范围数据尤其重要,因为地球并非一个完美的平面,而是一个略扁的球体,即椭...

    中国省份地图边界经纬度坐标点集合.zip

    中国省份地图边界经纬度坐标点集合是一个非常实用的数据资源,主要包含了中国所有省份的地理边界信息,以经纬度坐标的形式呈现。这些数据在各种地图应用、地理信息系统(GIS)、数据分析和可视化项目中都有着广泛的...

    大地坐标与经纬度坐标转换

    经纬度坐标系是一种球面坐标系统,其中经度(longitude)代表从本初子午线向东或向西的角度距离,纬度(latitude)则表示从赤道向北或向南的角度距离。经纬度坐标直观且易于理解,但在进行几何运算时会变得复杂,...

    C#经纬度坐标与大地坐标相互转换工具

    通过这个工具,手持设备获取的经纬度坐标可以被准确地转换为大地坐标,使得在GIS应用中能够进行更精确的定位和计算。在实际应用中,这样的工具对于导航、测绘、地理数据分析等领域有着广泛的应用价值。 总之,“C#...

    三维坐标与经纬度坐标的转换

    这通常需要通过反解球面三角方程来完成,考虑到地球的曲率,并可能使用一些近似方法来简化计算。例如,可以使用Haversine公式来估算两点之间的大圆距离,或者使用反余弦定律来计算角度。 在实际应用中,这些转换...

    计算距离的工具类

    计算距离的工具类计算距离的工具类计算距离的工具类计算距离的工具类计算距离的工具类

Global site tag (gtag.js) - Google Analytics