已知两地的经纬度,求两地间的距离!

nlibo 2007-10-16 08:47:13
已知两地的经纬度,求两地间的距离~~


我在做网页的时候需要计算地球表面两个地点的距离,找到一些算法,但是结果都不对的,晕~~~

谁帮我写一个vbscript 函数,经核实正确的话100分。

...全文
1092 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nlibo 2007-10-19
  • 打赏
  • 举报
回复
我找到了java函数,但是变为vbscript的时候总是出错,帮我看看好吗?

====================================
LatLon.distHaversine = function(lat1, lon1, lat2, lon2) {
var R = 6371; // earth's mean radius in km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
lat1 = lat1.toRad(), lat2 = lat2.toRad();

var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1) * Math.cos(lat2) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d;
}


Number.prototype.toRad = function() { // convert degrees to radians
return this * Math.PI / 180;
}
=======================================

转化为:

=======================================
function countlength(lat1, lon1, lat2, lon2)

dim R
dim dLat
dim dLon
R = 6371
dLat = (lat2-lat1)*3.14159265/180
dLon = (lon2-lon1)*3.14159265/180
lat1 = lat1*3.14159265/180
lat2 = lat2*3.14159265/180

a = sin(dLat/2) * sin(dLat/2) + cos(lat1) * cos(lat2) * sin(dLon/2) * sin(dLon/2)
c = 2 * tan(sqr(a)/sqr(1-a)) '是不是这个地方有问题?如何修改?
d = R * c

countlength=d
end function
=======================================
kkjjww 2007-10-19
  • 打赏
  • 举报
回复
关注
qq_165596777 2007-10-19
  • 打赏
  • 举报
回复
Math.atan2是求反正切函数,对应c函数是atn;
而tan是求正切函数;你把函数换换再试试;
qq_165596777 2007-10-17
  • 打赏
  • 举报
回复
http://www.movable-type.co.uk/scripts/latlong.html
上面有你想要的东东
qq_165596777 2007-10-17
  • 打赏
  • 举报
回复
nlibo,上面的那个公式,我是在别人帖子上摘抄的,具体实现我也没验证过,我当时是做墨卡托投影计算时看见的那个公式,我给你贴段墨卡托投影计算的C函数,希望对你有所帮助
//投影计算2
double MercatorComputer2(double ftSrc)
{
const double pi = 3.14159265358979;

double ftRet = ftSrc;
ftRet = ftRet / 180*pi;
ftRet = log((1+sin(ftRet))/(1-sin(ftRet)))/2;
ftRet = ftRet / pi*180;
return ftRet;
}

//投影计算
double MercatorComputer(double ftSrc)
{
const double pi = 3.14159265358979;

double ftRet = ftSrc;
ftRet = ftRet / 180*pi;
ftRet = log(tan(pi / 4 + ftRet/ 2));
ftRet = ftRet / pi*180;

return ftRet;
}

//投影逆运算
double Mercator_Reverse(double ftSrc)
{
const double pi = 3.14159265358979;

double ftRet = ftSrc;
ftRet = ftRet/180*pi;
ftRet = 2*(atan(exp(ftRet)) - pi/4);
ftRet = ftRet/pi*180;

return ftRet;
}
jspadmin 2007-10-17
  • 打赏
  • 举报
回复
如果要这么精确,恐怕很困难的!
因为地球并不是真正的球体,很多地方,你还要考虑海拔和曲率变化。

既然你已经得到坐标了,为什么不直接获取GPS定位计算出的位置差别呢?
nlibo 2007-10-17
  • 打赏
  • 举报
回复
daocaoren9152,能不能帮我写个函数出来?你发的那些我在其他地方找到,做了个函数,但是计算结果不对的。我想是不是我函数写错了。


tanyx,要精确度比较高的,主要用于计算同一个城市两点的距离。
tanyx 2007-10-16
  • 打赏
  • 举报
回复
严格说来,应该是用积分计算,不过都记不得了,呵呵。
你要是想粗率的计算,就用4万公里做周长(坐地日行八万里),除以360°,在用平面三角计算距离,也可以得到近似的值,哈哈。
qq_165596777 2007-10-16
  • 打赏
  • 举报
回复
a.在不同经线上,每纬度1°的距离d相对固定:d=(pi*R)/180
b.在同一纬线上,每经度1°的距离d相对固定:d=(pi*R*cosW)/180 其中W为该纬度。
c.地面上任意两点距离d的计算公式为:d=111.12cos{1/[sinΦAsinΦB + cosΦAcosΦBcos(λB-λA)]}
其中A点经度、纬度分别为λA和ΦA, B点的经度、纬度分别为λB和ΦB。
look4sword 2007-10-16
  • 打赏
  • 举报
回复
这个貌似不是程序问题。

地理学的不好,帮你顶下。
pzhuyy 2007-10-16
  • 打赏
  • 举报
回复
同意楼上意见:)

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧