已知地球上某两个点的坐标(即经纬度),求两点的实际距离。uniapp实现(实现语法js)
文章目錄
- 前言
- 一、如何用純數學公式求出兩點坐標?
- 二、在uniapp如何實現?
- 1.獲取當前位置的坐標
- 2.計算兩點之間的坐標
- 總結
前言
最近遇到了一個需求,已知兩點之間的地理坐標(經緯度),求兩點之間的實際距離。雖然白天我在網上看到一個計算公式,把所求的值套用公式,已經得到了想要的答案!但晚上出于好奇,還是想知道具體公示的原理。
下面是我實現的代碼,以及邏輯
一、如何用純數學公式求出兩點坐標?
我查詢了相關的公式,以及實現的原理,以下的一個鏈接,大家如果想了解實現原理可以仔細的研究一下。
數學公式求兩點坐標之間的實際距離
數學公式的推導
二、在uniapp如何實現?
1.獲取當前位置的坐標
代碼如下:
//這里我才用的異步的方法獲取當前坐標 async GetLocationInfo() {let that = this;//獲取當前本人位置信息await uni.getLocation({//這里使用的是高德坐標系,大家想使用別的,請移步到uniapp上自己看type: 'gcj02',geocode: 'true',success: function(res) {console.log('當前位置的經度:' + res.longitude);console.log('當前位置的緯度:' + res.latitude);//這里的c、d是我解釋代碼所定義的值,畢竟不能完全把我寫的代碼復制過來,大家見諒that.c= res.latitude;that.d= res.longitude;},2.計算兩點之間的坐標
另外一點的坐標我這里用(a,b)來代替,大家根據實際需求帶入自己的從后端訪問獲取的值,或者實際的值進行計算
//緯度差let Lat1Radom = (a* Math.PI) / 180.0;let Lat2Radom = (c * Math.PI) / 180.0;let lat = Lat1Radom - Lat2Radom;//經度差let Long1Radom = (b * Math.PI) / 180.0;let Long2Radom = (d * Math.PI) / 180.0;let long = Long1Radom - Long2Radom;//計算兩點之間的實際距離(經過我的查詢這個公式叫做:Haversine公式)s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(lat / 2), 2) + Math.cos(Lat1Radom) * Math.cos(Lat2Radom) * Math.pow(Math.sin(long / 2), 2)));s = s * 6378.137;s = Math.round(s * 10000) / 10000;//保留最后兩位小數s = s.toString();s = s.substring(0, s.indexOf('.') + 2);//提醒一下,這里的獲取的距離,也就是s的單位是Km 不得不提醒一下大家, 比如這個(c,d)的坐標是從訪問后端接口所獲得的,首先:1、我建議用異步的方法請求到這個值,也就是用async和await實現。 2、將異步請求定義成一個方法例如async a(){await uni.request....},在調用的時候將這個方法在uni.getlocation 中調用: 例如 uni.getLocation({//這里使用的是高德坐標系,大家想使用別的,請移步到uniapp上自己看type: 'gcj02',geocode: 'true',success: function(res) {console.log('當前位置的經度:' + res.longitude);console.log('當前位置的緯度:' + res.latitude);//這里的c、d是我解釋代碼所定義的值,畢竟不能完全把我寫的代碼復制過來,大家見諒that.c= res.latitude;that.d= res.longitude;//增加了此代碼this.a();},3、至于為什么要這么做,在我的不斷測試下uni.getLocation()請求到的當前坐標值比較慢,具體原因我不清楚,至少我在用的時候就是這樣,所以即使我在執行后端的接口的方法用異步的方法請求,寫在uni.getLocation()之后,但依然會先執行請求后端的方法,時間大概差在0.50秒左右。
總結
在實現的過程中,我想過用調用第三方接口,比如高德的接口來實現,但是由于這樣寫起來感覺代碼邏輯不強,反而會使代碼不易理解,也不易后期的維護。不知道第三方sdk,比如高德地圖或者騰訊地圖,又或是百度地圖的接口中的計算兩點之間的方法是什么,但我覺得代碼邏輯應該和 Haversine公式實現的原理差不多。
在網上搜索計算兩點坐標之間的代碼一搜一大堆,不管是哪種語言的實現,基本上用的都是Haversine公式,亦或是調用封裝好的Haversine公式的第三方庫或者是dll文件…………
總結
以上是生活随笔為你收集整理的已知地球上某两个点的坐标(即经纬度),求两点的实际距离。uniapp实现(实现语法js)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SystemTray.cpp
- 下一篇: 初步使用计算机说课,初步认识计算机说课稿