高分求C#两地经纬度算法问题 x(经度) y(纬度) 108.600815 26.504459 A地108.510556 26.471181 B地在C#中如何计算两地距离? COS(RADIANS(By))*COS(RADIANS(Ay))*COS(RADIANS(Bx-Az))+SIN(RADIANS(By))*SIN(RADIANS(Ay)) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个倒没整过,既然都有公式了,网上找一下,以前记着有看过RADIANS SIN COS的算法,还是找一下先~ 有公式,往里传值就行了吧Ay是A点的Y轴坐标,可以视为纬度,其它同理 private const double EARTH_RADIUS = 6378.137; private static double rad(double d) { return d * Math.PI / 180.0; } public static double GetDistance(double lat1, double lng1, double lat2, double lng2) { double radLat1 = rad(lat1); double radLat2 = rad(lat2); double a = radLat1 - radLat2; double b = rad(lng1) - rad(lng2); 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 * EARTH_RADIUS; s = Math.Round(s * 10000) / 10000; return s; } A到B的距离,采用勾股定律=A点经度-B点的经度的平方值+A点纬度-B点的纬度的平方值开根号 /// <summary> /// 根据经度和纬度求两点之间的距离(单位:米) /// </summary> /// <param name="lng1">经度</param> /// <param name="lat1">纬度</param> /// <param name="lng2">经度</param> /// <param name="lat2">纬度</param> /// <param name="gs"></param> /// <returns>返回距离</returns>public static double DistanceOfTwoPoints(double lng1,double lat1, double lng2, double lat2, GaussSphere gs) { double radLat1 = Rad(lat1); double radLat2 = Rad(lat2); double a = radLat1 - radLat2; double b = Rad(lng1) - Rad(lng2); 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 * (gs == GaussSphere.WGS84 ? 6378137.0 : (gs == GaussSphere.Xian80 ? 6378140.0 : 6378245.0)); s = Math.Round(s * 10000) / 10000; return s; } private static double Rad(double d) { return d * Math.PI / 180.0; } GaussSphere 为自定义枚举类型 /**//// <summary> /// 高斯投影中所选用的参考椭球 /// </summary> public enum GaussSphere { Beijing54, Xian80, WGS84, } GetDistance(90, 0, 91, 0),返回的是111.3195A:90,0 B:91,0 即是赤道上纬度1度距离。根据http://hi.baidu.com/mingyue16/blog/item/be22dc0be1aa801694ca6b62.html纬度1度 = 大约111km 1个经度 = 2 x 3.1415926 x 6371 / 360 x cos a = 111.2 cos a (公里) 其中,a 代表纬度。如在赤道,一个经度就约为111公里。经度相隔一度的长度,随着所在位置的纬度不同而有差异在赤道上,360度的经度跨越40000公里左右,所以1度跨越距离为111.11公里但是在两极的极点上,经度1度所跨越的距离只是为0纬度相隔一度之间的距离倒是差不多恒定的,跨越的距离为一个经线圈的三百六十分之一,约等于111公里1度等于60分,1分等于60秒 OCX配置文件路径的问题 treeview 勾选与反选同步实现gridview 同步更新功能(WINFORM) 关于vs2008中如何测试部分自己写的函数方法 怎样摆脱事务控制提交数据操作? 问题:重定义了DataGridView的DataSource,但是新建的行并没有显示出来 关于字符串的一个简单问题?如何解决 怎样将一张表的内容有选择的填充到另一张表内? 关于VS2010的一个问题 如何获得DATAGRID的行的高度及Header的高度 帮忙 C#中怎么获取鼠标点击控件的次数 为什么值是零?
private static double rad(double d)
{
return d * Math.PI / 180.0;
} public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2); 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 * EARTH_RADIUS;
s = Math.Round(s * 10000) / 10000;
return s;
}
/// 根据经度和纬度求两点之间的距离(单位:米)
/// </summary>
/// <param name="lng1">经度</param>
/// <param name="lat1">纬度</param>
/// <param name="lng2">经度</param>
/// <param name="lat2">纬度</param>
/// <param name="gs"></param>
/// <returns>返回距离</returns>
public static double DistanceOfTwoPoints(double lng1,double lat1, double lng2, double lat2, GaussSphere gs)
{
double radLat1 = Rad(lat1);
double radLat2 = Rad(lat2);
double a = radLat1 - radLat2;
double b = Rad(lng1) - Rad(lng2);
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 * (gs == GaussSphere.WGS84 ? 6378137.0 : (gs == GaussSphere.Xian80 ? 6378140.0 : 6378245.0));
s = Math.Round(s * 10000) / 10000;
return s;
}
private static double Rad(double d)
{
return d * Math.PI / 180.0;
} GaussSphere 为自定义枚举类型
/**//// <summary>
/// 高斯投影中所选用的参考椭球
/// </summary>
public enum GaussSphere
{
Beijing54,
Xian80,
WGS84,
}
A:90,0 B:91,0 即是赤道上纬度1度距离。
根据
http://hi.baidu.com/mingyue16/blog/item/be22dc0be1aa801694ca6b62.html
纬度1度 = 大约111km
= 111.2 cos a (公里)
其中,a 代表纬度。如在赤道,一个经度就约为111公里。
经度相隔一度的长度,随着所在位置的纬度不同而有差异
在赤道上,360度的经度跨越40000公里左右,所以1度跨越距离为111.11公里
但是在两极的极点上,经度1度所跨越的距离只是为0
纬度相隔一度之间的距离倒是差不多恒定的,跨越的距离为一个经线圈的三百六十分之一,约等于111公里
1度等于60分,1分等于60秒