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函数-根据经纬度坐标计算距离
根据经纬度坐标计算实际两点距离C/C++实现。输入: lat1,lng1:第一点纬度、经度 lat2,lng2:第二点纬度、经度 输出: 返回两点距离
最近项目上有这样的需求,需要依据设备的经纬度坐标计算距离及角度。经验证后效果较好,并分享。 1 经纬度转换距离代码 #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'Seven' import math # 计算...
知道经纬度坐标.把纬度坐标写入文本框可以精确算距离
经纬度距离计算+坐标转换!精度和google earth 比较过,相差很小,精度高。
1.main为主程序,输入的信息为A、B两点的经纬度信息,输出为B点相对A点的真北角。 2.输出的距离单位为km。 3.输出的真北角已经归一化至0~360°范围内。
C#经纬度坐标算距离,根据百度地图js方法改成C#版本,计算精确,误差较小
WGS84坐标下根据经纬度计算两点之间的距离 Xian80的需要先转化
计算距离的工具类计算距离的工具类计算距离的工具类计算距离的工具类计算距离的工具类
经过两点之间经纬度计算直线距离,两种方法皆可用
根据网上给出的代码,增加了批量功能。计算一批经纬度的平均经度与平均纬度,然后各经纬度与平均值之间的距离
雷达探测极坐标系(AER)与地球等经纬度坐标系(GEO) 图1中,O为地心,OD为地球半径R, A为雷达架设点,AD为雷达架设高度h,雷达探测水平面为AF,B为雷达探测的任意一点。 雷达探测极坐标系的三个参数为r,θ,δ。 ...
Android中由两点间经纬度坐标,计算两点间距离
新人报道,因为测试的时候拿到数据库的经纬度计算不方便,就自己写了个计算的软件,方便测试人员使用
Android-依据两点间经纬度坐标,计算两点间距离
sqlserver根据经纬度计算两点间距离sqlserver根据经纬度计算两点间距离sqlserver根据经纬度计算两点间距离sqlserver根据经纬度计算两点间距离
利用经纬度信息计算两点相对极坐标关系,获得距离、方位、俯仰
Python pymysql 经纬度坐标位置 计算 kmeans 欧氏距离 曼哈顿距离 计算机课程毕设 numpy pandas sklearn 数据分析 数据挖掘 Manhattan距离的api输出的格式转化# 求平均保存为csv格式数据文件
通过两点经纬度坐标,得到两点的距离和角度。进行高斯转化。
ASP计算二个经纬度这间的距离,在微信平台利用上有用。