详解js根据百度地图提供经纬度计算两点距离


Posted in Javascript onMay 13, 2019

正常在使用百度地图时,我们可以通过BMap的实例对象提供的方法计算距离:

var map = new BMap.Map('map_canvas');
map.getDistance(point1 ,point2);
//point1、point2 是Point对象

如果在不使用百度地图,但是已知百度地图的经纬度情况下也是可以计算出与上面相同的值的

三方库 此库提供计算两点距离的方法

引用此库使用 返回(米)

BMapLib.GeoUtils.getDistance(point1 ,point2)

当然如果只想计算距离也可以直接用下面的代码:

注:BMap需要导入,使用如下:

BMapLib.GeoUtils.getDistance(lng1,lat1,lng2,lat2)

import BMap from 'BMap'
 
var BMapLib = window.BMapLib = BMapLib || {};
 (function() {
 
     /**
      * 地球半径
      */
     var EARTHRADIUS = 6370996.81;
 
     /**
      * @exports GeoUtils as BMapLib.GeoUtils
      */
     var GeoUtils =
       /**
      * GeoUtils类,静态类,勿需实例化即可使用
      * @class GeoUtils类的<b>入口</b>。
      * 该类提供的都是静态方法,勿需实例化即可使用。
      */
     BMapLib.GeoUtils = function(){
 
       };
 
     /**
      * 将度转化为弧度
      * @param {degree} Number 度
      * @returns {Number} 弧度
      */
     GeoUtils.degreeToRad = function(degree){
         return Math.PI * degree/180;
       }
 
     /**
      * 将v值限定在a,b之间,纬度使用
      */
     function _getRange(v, a, b){
         if(a != null){
            v = Math.max(v, a);
           }
         if(b != null){
            v = Math.min(v, b);
           }
         return v;
       }
 
     /**
     * 将v值限定在a,b之间,经度使用
     */
     function _getLoop(v, a, b){
         while( v > b){
            v -= b - a
           }
         while(v < a){
            v += b - a
           }
         return v;
       }
   /**
    * 计算两点之间的距离,两点坐标必须为经纬度
    * @param {lng1} Number 点对象
    * @param {lat1} Number 点对象
    * @param {lng2} Number 点对象
    * @param {lat2} Number 点对象
    * @returns {Number} 两点之间距离,单位为米
    */
     GeoUtils.getDistance = function(lng1, lat1, lng2 ,lat2){
         let point1 = new BMap.Point(parseFloat(lng1) ,parseFloat(lat1));
         let point2 =new BMap.Point(parseFloat(lng2) ,parseFloat(lat2));
         //判断类型
         if(!(point1 instanceof BMap.Point) ||
             !(point2 instanceof BMap.Point)){
             return 0;
           }
         point1.lng = _getLoop(point1.lng, -180, 180);
         point1.lat = _getRange(point1.lat, -74, 74);
         point2.lng = _getLoop(point2.lng, -180, 180);
         point2.lat = _getRange(point2.lat, -74, 74);
         let x1, x2, y1, y2;
         x1 = GeoUtils.degreeToRad(point1.lng);
         y1 = GeoUtils.degreeToRad(point1.lat);
         x2 = GeoUtils.degreeToRad(point2.lng);
         y2 = GeoUtils.degreeToRad(point2.lat);
         return EARTHRADIUS * Math.acos((Math.sin(y1) * Math.sin(y2) + Math.cos(y1) * Math.cos(y2) * Math.cos(x2 - x1)));
       }
})();

以上所述是小编给大家介绍的js根据百度地图提供经纬度计算两点距离详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
两个select多选模式的选项相互移动(示例代码)
Jan 11 Javascript
用js一次改变多个input的readonly属性值的方法
Jun 11 Javascript
使用javaScript动态加载Js文件和Css文件
Oct 24 Javascript
对js中回调函数的一些看法
Aug 29 Javascript
JS中Array数组学习总结
Jan 18 Javascript
微信小程序的生命周期的详解
Oct 19 Javascript
浅谈vue项目重构技术要点和总结
Jan 23 Javascript
Vue中 key keep-alive的实现原理
Sep 18 Javascript
微信小程序开发注意指南和优化实践(小结)
Jun 21 Javascript
解决layer弹出层自适应页面大小的问题
Sep 16 Javascript
bootstrap-paginator服务器端分页使用方法详解
Feb 13 Javascript
vue-cli3 热更新配置操作
Sep 18 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
May 13 #Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
May 13 #Javascript
详解async/await 异步应用的常用场景
May 13 #Javascript
轻松解决JavaScript定时器越走越快的问题
May 13 #Javascript
JavaScript Math对象和调试程序的方法分析
May 13 #Javascript
jsonp跨域获取百度联想词的方法分析
May 13 #Javascript
基于Fixed定位的框选功能的实现代码
May 13 #Javascript
You might like
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
AngularJS入门之动画
2016/07/27 Javascript
canvas学习之API整理笔记(一)
2016/12/29 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
浅谈python字符串方法的简单使用
2016/07/18 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
python爬取指定微信公众号文章
2018/12/20 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
2020/03/27 Python
python 获取字典键值对的实现
2020/11/12 Python
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
车间组长岗位职责
2013/12/20 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
检察院起诉书
2015/05/20 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang
docker 制作mysql镜像并自动安装
2022/05/20 Servers