xiongzhu před 5 roky
rodič
revize
b01f08ef82
1 změnil soubory, kde provedl 36 přidání a 33 odebrání
  1. 36 33
      src/pages/dealer.vue

+ 36 - 33
src/pages/dealer.vue

@@ -61,37 +61,46 @@
 <script>
 var QQMapWX = require('../qqmap-wx-jssdk.js');
 let qqmapsdk;
-function rad(d) {
-    return (d * Math.PI) / 180.0;
-}
-
-function getDistance(lat1, lng1, lat2, lng2) {
-    var radLat1 = rad(lat1);
-    var radLat2 = rad(lat2);
-    var a = radLat1 - radLat2;
-    var b = rad(lng1) - rad(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 * 6378.137; // EARTH_RADIUS;
-    s = Math.round(s * 10000) / 10000; //输出为公里
-
-    var distance = s;
-    var distance_str = '';
+//This function takes in latitude and longitude of two location and returns the distance between them as the crow flies (in km)
+function getDistance(lat1, lon1, lat2, lon2) {
+    var R = 6371; // km
+    var dLat = toRad(lat2 - lat1);
+    var dLon = toRad(lon2 - lon1);
+    var dlat1 = toRad(lat1);
+    var dlat2 = toRad(lat2);
 
-    if (parseInt(distance) >= 1) {
-        distance_str = distance.toFixed(1) + 'km';
-    } else {
-        distance_str = distance * 1000 + 'm';
+    var a =
+        Math.sin(dLat / 2) * Math.sin(dLat / 2) +
+        Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(dlat1) * Math.cos(dlat2);
+    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+    var d = R * c;
+    if (d < 1) {
+        return parseInt(d * 1000) + 'm';
     }
-    return s;
+    return d.toFixed(1).replace(/\.0$/, '') + 'km';
 }
+
+// Converts numeric degrees to radians
+function toRad(Value) {
+    return (Value * Math.PI) / 180;
+}
+
 export default {
     created() {
+        // wx.getLocation({
+        //     type: 'wgs84',
+        //     success: res => {
+        //         this.location = {
+        //             lat: res.latitude,
+        //             lng: res.longitude
+        //         };
+        //         console.log({
+        //             lat: res.latitude,
+        //             lng: res.longitude
+        //         });
+        //     }
+        // });
+
         qqmapsdk = new QQMapWX({
             key: 'MC4BZ-4QDWP-B5ZDD-VS3HX-NHBAO-CRBOQ'
         });
@@ -262,13 +271,7 @@ export default {
                                 if (arr.length === 2) {
                                     i.lat = arr[1];
                                     i.lng = arr[0];
-                                    let distance = getDistance(this.location.lat, i.lat, this.location.lng, i.lng);
-                                    if (distance > 1000) {
-                                        distance = (distance / 1000).toFixed(1) + 'km';
-                                    } else {
-                                        distance = parseInt(distance) + 'm';
-                                    }
-                                    i.distance = distance;
+                                    i.distance = getDistance(this.location.lat, this.location.lng, i.lat, i.lng);
                                 }
                             }
                         });