根据经纬度计算地球上两点之间的距离js实现代码


Posted in Javascript onMarch 05, 2013

利用JS实现的根据经纬度计算地球上两点之间的距离
最近用到了根据经纬度计算地球表面两点间距离的公式,然后就用JS实现了一下。
计算地球表面两点间的距离大概有两种办法。

第一种是默认地球是一个光滑的球面,然后计算任意两点间的距离,这个距离叫做大圆距离(The Great Circle Distance)。
公式如下:
使用JS来实现为:

var EARTH_RADIUS = 6378137.0; //单位M 
var PI = Math.PI; function getRad(d){ 
return d*PI/180.0; 
} 
/** 
* caculate the great circle distance 
* @param {Object} lat1 
* @param {Object} lng1 
* @param {Object} lat2 
* @param {Object} lng2 
*/ 
function getGreatCircleDistance(lat1,lng1,lat2,lng2){ 
var radLat1 = getRad(lat1); 
var radLat2 = getRad(lat2); 
var a = radLat1 - radLat2; 
var b = getRad(lng1) - getRad(lng2); 
var 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.0; 
return s; 
}

这个公式在大多数情况下比较正确,只有在处理球面上的相对点的时候,会出现问题,有一个修正的公式,因为没有需要,就没有找出来,可以在wiki上查到。
当然,我们都知道,地球其实并不是一个真正的圆球体,而是椭球,所以有了下面的公式:
/** 
* approx distance between two points on earth ellipsoid 
* @param {Object} lat1 
* @param {Object} lng1 
* @param {Object} lat2 
* @param {Object} lng2 
*/ 
function getFlatternDistance(lat1,lng1,lat2,lng2){ 
var f = getRad((lat1 + lat2)/2); 
var g = getRad((lat1 - lat2)/2); 
var l = getRad((lng1 - lng2)/2); var sg = Math.sin(g); 
var sl = Math.sin(l); 
var sf = Math.sin(f); 
var s,c,w,r,d,h1,h2; 
var a = EARTH_RADIUS; 
var fl = 1/298.257; 
sg = sg*sg; 
sl = sl*sl; 
sf = sf*sf; 
s = sg*(1-sl) + (1-sf)*sl; 
c = (1-sg)*(1-sl) + sf*sl; 
w = Math.atan(Math.sqrt(s/c)); 
r = Math.sqrt(s*c)/w; 
d = 2*w*a; 
h1 = (3*r -1)/2/c; 
h2 = (3*r +1)/2/s; 
return d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg)); 
}

这个公式计算出的结果要比第一个好一些,当然,最后结果的经度实际上还取决于传入的坐标的精度。
Javascript 相关文章推荐
JQuery index()方法使用代码
Jun 02 Javascript
javascript的动态加载、缓存、更新以及复用(一)
Jun 09 Javascript
JavaScript通过元素的ID和name设置样式
Jul 08 Javascript
js实现按一下删除键删除整个单词附demo
Sep 05 Javascript
javascript将异步校验表单改写为同步表单
Jan 27 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
Mar 05 Javascript
jQuery聚合函数实例
May 21 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
Aug 01 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
Feb 09 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
Feb 26 Javascript
Vue.js中的extend绑定节点并显示的方法
Jun 20 Javascript
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
May 30 Javascript
js日期时间补零的小例子
Mar 05 #Javascript
6款新颖的jQuery和CSS3进度条插件推荐
Mar 05 #Javascript
html超链接打开窗口大小的方法
Mar 05 #Javascript
js关闭当前页面(窗口)的几种方式总结
Mar 05 #Javascript
jQuery中(function(){})()执行顺序的理解
Mar 05 #Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
Mar 04 #Javascript
js异步加载的三种解决方案
Mar 04 #Javascript
You might like
php获取淘宝分类id示例
2014/01/16 PHP
php和asp语法上的区别总结
2019/05/12 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
js实现多图和单图上传显示
2019/12/18 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
OpenCV实现人脸识别
2017/04/07 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
python3爬虫怎样构建请求header
2018/12/23 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
Python3+Selenium+Chrome实现自动填写WPS表单
2020/02/12 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
百度软件工程师职位
2013/02/14 面试题
大学生个人求职口试自我评价
2014/02/16 职场文书
大三学习计划书范文
2014/05/02 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
承诺函范文
2015/01/21 职场文书
九华山导游词
2015/02/03 职场文书
安全教育主题班会教案
2015/08/12 职场文书