求一个通过经纬度来计算2点之间的距离的算法 求一个相对来说比较准确的,知道2点的经纬度(度,分,秒)来求2点之间的距离!!!的c#代码。最好是一个函数。嘎嘎。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 关于用经纬度计算距离: 地球赤道上环绕地球一周走一圈共 40075.04公里, 而@一圈分成360°,而每1°(度)有60', 每一度一秒在赤道上的长度计算如下: 40075.04km/360°=111.31955km 111.31955km/60'=1.8553258km=1855.3m 而每一分又有60秒, 每一秒就代表 1855.3m/60=30.92m 任意两点距离计算公式为 d=111.12cos{1/[sinΦAsinΦB十 cosΦAcosΦBcos(λB—λA)]} 其中A点经度,纬度分别为λA和ΦA,B点的经度、纬度分别为λB和ΦB,d为距离。 表 Select NLat As 纬度,NLon As 经度 From t_Data_G0001 Where STID='' And DStampTime=''; Select LLat As 纬度2,LLon As 经度2 From o_GISLabel Where SID =@SID; 时间为基准/**** 根据两站点的经纬度求两站点间的距离 ****/经纬度的计算函数是这样的:double D_jw(double wd1,double jd1,double wd2,double jd2){ double x,y,out; double PI=3.14159265; double R=6.371229*1e6; x=(jd2-jd1)*PI*R*cos( ((wd1+wd2)/2) *PI/180)/180; y=(wd2-wd1)*PI*R/180; out=hypot(x,y); return out/1000;} // 计算已知经纬度的两点间的距离 // Thu 2005.08.04 using System; struct JWD { double JD, JF, JM; double WD, WF, WM; public double Jd, Wd, J, W; public const double Ea = 6378137; // 赤道半径 public const double Eb = 6356725; // 极半径 public readonly double Ec; public readonly double Ed; // 构造函数, 经度: a 度, b 分, c 秒; 纬度: d 度, e 分, f 秒 public JWD(double a, double b, double c, double d, double e, double f) { JD=a; JF=b; JM=c; WD=d; WF=e; WM=f; Jd = JD + JF / 60 + JM / 3600; Wd = WD + WF / 60 + WM / 3600; J = Jd * Math.PI / 180; W = Wd * Math.PI / 180; Ec = Eb + (Ea - Eb) * (90-Wd) / 90; Ed = Ec * Math.Cos(W); } } class Test { static void Main() { JWD A0 = new JWD(120, 36, 0, 28, 0, 0); JWD A1 = new JWD(130, 0, 0, 30, 0, 0); Calc(A0, A1); } static void Calc(JWD A, JWD B) { double dx = (B.J - A.J) * A.Ed; double dy = (B.W - A.W) * A.Ec; double d = Math.Sqrt(dx * dx + dy * dy); Console.WriteLine("{0:N1}M", d); } } /* 程序输出: 949,373.0M */ 呵呵,LZ是想用50分叫人幫忙baidu呢?這純粹就一數學公式,重賞之下,并有勇夫。 CSDN里原来也有关于这个问题的帖子http://topic.csdn.net/t/20040317/08/2851332.html using System;using System.Collections.Generic;using System.Text;namespace GISDispatcher{ public class CalculateHelper { private const double EARTH_RADIUS = 6378.137; public CalculateHelper() { } private static double rad(double d) { return d * Math.PI / 180.0; } public static double GetDistanceInGE(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; } }} c#根据两点经纬度,求两点之间的举例,项目中使用。非常准确。http://www.ithaiyang.com.cn/html/DOTNET/CSharp/5989.html VCpp实现GPS全球定位系统定位数据的提取http://www.vscodes.com/article/1/1897.html .net datagridview如何设置标头宽跟据内容宽度调整? 绑定数据有什么用处呢 .NET应用程序如何升级?(小弟求助,在线等) 求采集网页的正则表达式 问c# io复用 蓝牙连接程序问题 求教高手,在UDP通讯中,如何绑定本机的发送端口号? gridview中的列能像下拉框那样,显示的是某值,存的是另外一个值吗 这个问题比较棘手,不知道这里有没有人能解决 C#windows服务运行一段时间后失效 问个简单,俺不会的问题,别笑话噢====== C++ 不允许在一个构造函数中调用另外一个构造函数,而 C# 则允许 这是为什么?
表 Select NLat As 纬度,NLon As 经度 From t_Data_G0001 Where STID='' And DStampTime='';
Select LLat As 纬度2,LLon As 经度2 From o_GISLabel Where SID =@SID;
时间为基准
/**** 根据两站点的经纬度求两站点间的距离 ****/
经纬度的计算函数是这样的:
double D_jw(double wd1,double jd1,double wd2,double jd2)
{
double x,y,out;
double PI=3.14159265;
double R=6.371229*1e6; x=(jd2-jd1)*PI*R*cos( ((wd1+wd2)/2) *PI/180)/180;
y=(wd2-wd1)*PI*R/180;
out=hypot(x,y);
return out/1000;
}
// Thu 2005.08.04
using System;
struct JWD
{
double JD, JF, JM;
double WD, WF, WM;
public double Jd, Wd, J, W;
public const double Ea = 6378137; // 赤道半径
public const double Eb = 6356725; // 极半径
public readonly double Ec;
public readonly double Ed;
// 构造函数, 经度: a 度, b 分, c 秒; 纬度: d 度, e 分, f 秒
public JWD(double a, double b, double c, double d, double e, double f)
{
JD=a; JF=b; JM=c; WD=d; WF=e; WM=f;
Jd = JD + JF / 60 + JM / 3600;
Wd = WD + WF / 60 + WM / 3600;
J = Jd * Math.PI / 180;
W = Wd * Math.PI / 180;
Ec = Eb + (Ea - Eb) * (90-Wd) / 90;
Ed = Ec * Math.Cos(W);
}
}
class Test
{
static void Main()
{
JWD A0 = new JWD(120, 36, 0, 28, 0, 0);
JWD A1 = new JWD(130, 0, 0, 30, 0, 0);
Calc(A0, A1);
}
static void Calc(JWD A, JWD B)
{
double dx = (B.J - A.J) * A.Ed;
double dy = (B.W - A.W) * A.Ec;
double d = Math.Sqrt(dx * dx + dy * dy);
Console.WriteLine("{0:N1}M", d);
}
}
/* 程序输出:
949,373.0M
*/
這純粹就一數學公式,重賞之下,并有勇夫。
using System.Collections.Generic;
using System.Text;
namespace GISDispatcher
{
public class CalculateHelper
{
private const double EARTH_RADIUS = 6378.137; public CalculateHelper()
{
} private static double rad(double d)
{
return d * Math.PI / 180.0;
} public static double GetDistanceInGE(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;
}
}
}
c#根据两点经纬度,求两点之间的举例,项目中使用。非常准确。http://www.ithaiyang.com.cn/html/DOTNET/CSharp/5989.html
http://www.vscodes.com/article/1/1897.html