Scheme 1:
关于用经纬度计算距离:
地球赤道上环绕地球一周走一圈共 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_Da
经纬度的计算函数是这样的:
double D_jw(double wd1,double jd1,double wd2,double
jd2)
{
}
//Not Accurate
Scheme 2:
c# 根据经纬度计算两点之间的距离。项目中实际使用。大家放心使用。
public static double Fun_Rad(double d)
//More Accurate
Scheme 3:
-
C# co
-
// 计算已知经纬度的两点间的距离 // 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); } }