全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2081 0
2016-02-04
有朋友去了斯里兰卡,然后说可以去马尔代夫,很近。由于这两个国家对我来说只是一个名词,于是产生了好奇,斯里兰卡和马尔代夫到底距离多远?
通过经纬度计算,这个距离大约是779公里(百度知道:700公里左右)
网上查到的斯里兰卡(E 79.87, N 6.92 为简便,已经全部转化成弧度),马尔代夫(E 73.47,N 4.02)。
以下是代码(r是地球半径,我用了6378.137公里计算):

/*斯里兰卡到马尔代夫*/

%let pi=arcos(-1);

/*%letr=6371.004;*/

%let r=6378.137;

/*%letr=6371.393;*/

data a;

lat1=(6.92/180)*π;

lat2=(4.02/180)*π

log1=(79.87/180)*π

log2=(73.47/180)*π

thita=arcos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(log1-log2));

dis=thita*&r;

run;

proc print data=a;

run;




由于差别比较大,相差了100公里左右(相当于维度相差1度),于是我做了一些校验:
1、公式有问题吗?
从网上找了个excel算距离的例子,里面(E 116.5, N 39.8)和(E 116.6, 39.9)的计算结果为14.034公里,我计算的结果是14.0342公里,应该是对的
2、如果一个在北半球,一个在南半球,还适用吗?
这个问题我没有再细检查公式,但想来南纬取负,西经取负就好了。我用上海和墨尔本的距离做了测试。
上海(E 121.78,N 31.15) 墨尔本(E 144.97,S 37.82),我计算的结果是8047.05公里
然后也蛮有意思的,我在蚂蜂窝上查到的距离是8065公里(http://z.mafengwo.cn/line/10099-10856.html),考虑到飞机一般是在10km高空飞行,所以我把地球半径增加10公里后,结果是8059.66,应当和蚂蜂窝的计算参数是一致的。
但是在显眼的地方我查到的距离都是8250~8350公里,和我的结果差距200~300公里(2~3个纬度)


综上:
1、一般城市的经纬度(互联网上能查到的)会做少量偏移(估计是正负0.5度,重点城市会偏移正负1.5度),而且很可能偏移规则是不冲突的(同样的),所以累加的误差只会越来越大
2、不管是600还是700公里,斯里兰卡飞马尔代夫只要1个小时多一点就够了,是蛮近的 : )。
题外话:
之所以这篇帖子放在矩阵思维下面,是因为在计算球面距离的时候,本质上是用了两个平面作为辅助面,判断了大圆劣弧最短以及长度问题,本质上还是用二维的理解去模拟三维。


Brief一下推导的内容:
第一部分,推导出大圆劣弧为最短路径。
第二部分:计算出弦AB,获得开角弧度,由地球半径和开角弧度计算距离。
有兴趣的可以看下面的具体推导和证明,有些很基本的东西真的以前学岔了,比如弧度和角度的关系。
*************************************************************************************************

球面距离的计算及其计算公式


参考:http://wenku.baidu.com/link?url= ... 51t-V548wnMu9syqbOO
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群