已知两个经纬度,求之间的距离 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.cnblogs.com/ycsfwhh/archive/2010/12/20/1911232.html 计算距离的都有偏差,最好是和使用的GIS控件一起用同一个方法,如果你用的是MAPINFO,哪门你就用MAPINFO的计算距离函数。 其实MapInfo的MapX控件计算距离是用三角形的斜边长度得到的。多年前我自己做一个简单的地图控件,实现了计算方法,然后与MapX对照,有小差别,后来摸索,发现了一种方法,与MapX计算的距离几乎一样,就明白了MapX的计算原理,它反而不如我那个计算方法精确。 我的实现方法如下,现在回想起来,MapInfo的MapX是把地球当成一个标准的球体来计算的,这点我通过调整以下函数中用到的常量验证过的./////////////////////////////////////////////////////////////////////function Distance(X1,Y1,X2,Y2:real) : real; //近似计算地球上 两点的距离,参数为经、纬度,结果单位为 米。function TMapX.Distance(X1,Y1,X2,Y2:real) : real;var LongiRate:real; DeltaLongitude,DeltaLatitude:real;begin LongiRate:=Cos((Y1+Y2)/(2*Arc2Degree)); //化成弧度求平均值。 DeltaLongitude:=(X1-X2)* LongiDegree2Length *LongiRate; //=111320.590351; //经度差一度(在赤道上)的长度,米 DeltaLatitude :=(Y1-Y2)* LatiDegree2Length ; //=110947.089891; Result:=Sqrt(Sqr(DeltaLongitude)+Sqr(DeltaLatitude));end; 用到的常量为: myPi=3.1415926535897932385; Arc2Degree=57.295779513082321; LongiDegree2Length=111320.590351; //经度差一度(在赤道上)的长度,米 //Pi* 6,378.2*1000/180 LatiDegree2Length=110947.089891; // 纬度差一度(经线上)的长度,米 //Pi* 6,356.8*1000/180 直线距离 用地球一些常量计算途经路线距离可以用 google maps api来做http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/v2/examples/directions-advanced.html 编写控制台程序时如何返回值? 树形汇总,如何实现? 新手送分关于TComboBox 报告一个关于WideFormat函数的Bug??? 请教怎样用命令行的方式给程序传递参数???谢谢!!! 关于readprocessmemory函数的问题。我已没分了。请帮忙看看。 有这么个事? 怎么定义一个静数组啊??? 关于存储输入记录? dephi中对条形码扫描输入接口的问题。 哪个大侠给个DELPHI 实现的简单文件上传 及下载的源码 关于D7下MSTTS的开发问题
多年前我自己做一个简单的地图控件,实现了计算方法,然后与MapX对照,有小差别,后来摸索,发现了一种方法,与MapX计算的距离几乎一样,就明白了MapX的计算原理,它反而不如我那个计算方法精确。
/////////////////////////////////////////////////////////////////////function Distance(X1,Y1,X2,Y2:real) : real; //近似计算地球上 两点的距离,参数为经、纬度,结果单位为 米。function TMapX.Distance(X1,Y1,X2,Y2:real) : real;
var
LongiRate:real;
DeltaLongitude,DeltaLatitude:real;
begin
LongiRate:=Cos((Y1+Y2)/(2*Arc2Degree)); //化成弧度求平均值。
DeltaLongitude:=(X1-X2)* LongiDegree2Length *LongiRate;
//=111320.590351; //经度差一度(在赤道上)的长度,米
DeltaLatitude :=(Y1-Y2)* LatiDegree2Length ;
//=110947.089891;
Result:=Sqrt(Sqr(DeltaLongitude)+Sqr(DeltaLatitude));
end;
myPi=3.1415926535897932385;
Arc2Degree=57.295779513082321;
LongiDegree2Length=111320.590351; //经度差一度(在赤道上)的长度,米
//Pi* 6,378.2*1000/180
LatiDegree2Length=110947.089891; // 纬度差一度(经线上)的长度,米
//Pi* 6,356.8*1000/180
来做
http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/v2/examples/directions-advanced.html