国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解js根據百度地圖提供經緯度計算兩點距離

2024-05-06 15:39:35
字體:
來源:轉載
供稿:網友

正常在使用百度地圖時,我們可以通過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)));       }})();            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 绥德县| 象山县| 泸西县| 宁津县| 安吉县| 泰宁县| 明光市| 蒙阴县| 科技| 平顶山市| 青冈县| 丹寨县| 襄垣县| 光山县| 洛扎县| 娱乐| 涞水县| 台安县| 香河县| 珲春市| 湘潭县| 慈利县| 海兴县| 双桥区| 瑞金市| 太仆寺旗| 宕昌县| 固始县| 荔波县| 滕州市| 轮台县| 肥城市| 澄城县| 怀仁县| 南安市| 永丰县| 高平市| 黄浦区| 凌云县| 新干县| 太白县|