详解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 相关文章推荐
jquery 简短几句代码实现给元素动态添加及获取提示信息
Sep 01 Javascript
Mac/Windows下如何安装Node.js
Nov 22 Javascript
JS计算网页停留时间代码
Apr 28 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
Feb 02 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
Jul 27 Javascript
jQuery+json实现动态创建复杂表格table的方法
Oct 25 Javascript
微信小程序之数据双向绑定与数据操作
May 12 Javascript
利用纯JS实现像素逐渐显示的方法示例
Aug 14 Javascript
Bootstrap Table 搜索框和查询功能
Nov 30 Javascript
JS使用new操作符创建对象的方法分析
May 30 Javascript
小程序实现录音上传功能
Nov 22 Javascript
vue 动态创建组件的两种方法
Dec 31 Vue.js
解决前后端分离 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
php 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
javascript中的window.location.search方法简介
2013/09/02 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
中专毕业生自荐信范文
2013/11/28 职场文书
《菜园里》教学反思
2014/04/17 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
政风行风建设整改方案
2014/10/27 职场文书
幼师大班个人总结
2015/02/13 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
2015年外联部工作总结
2015/04/03 职场文书
降价通知函
2015/04/23 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
2016年公务员六五普法心得体会
2016/01/21 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
Golang解析JSON对象
2022/04/30 Golang