Unverified Commit 334c4643 authored by Sparkf's avatar Sparkf 🏙️
Browse files

RealtimeMap.vue: use turf to calculate heading

	modified:   docs/.vuepress/components/RealtimeMap.vue
	modified:   package.json
	modified:   yarn.lock
parent e61944b5
Loading
Loading
Loading
Loading
+8 −21
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
<script>
import maplibre from 'maplibre-gl';
import axios from "axios";
import * as turf from '@turf/turf';


export default {
@@ -170,28 +171,15 @@ export default {
      this.update_location()
    },
    calculateBusAngle(startLat, startLng, destLat, destLng) {
      // 将度数转换为弧度
      function toRadians(degrees) {
        return degrees * Math.PI / 180;
      };

      // 将弧度转换为度数
      function toDegrees(radians) {
        return radians * 180 / Math.PI;
      }

      // 转换起始点和目标点的经纬度为弧度
      startLat = toRadians(startLat);
      startLng = toRadians(startLng);
      destLat = toRadians(destLat);
      destLng = toRadians(destLng);
      // 创建 Turf.js 的点
      const startPoint = turf.point([startLng, startLat]);
      const endPoint = turf.point([destLng, destLat]);

      // 计算方位角
      const y = Math.sin(destLng - startLng) * Math.cos(destLat);
      const x = Math.cos(startLat) * Math.sin(destLat) - Math.sin(startLat) * Math.cos(destLat) * Math.cos(destLng - startLng);
      let brng = Math.atan2(y, x);
      brng = toDegrees(brng);
      return (brng + 360) % 360;
      const bearing = turf.rhumbBearing(startPoint, endPoint);

      // Turf.js 返回的方位角是从北顺时针的角度
      return bearing;
    },
    findNearestPointOnSegment(point, segmentStart, segmentEnd) {
      const A = point[0] - segmentStart[0];
@@ -256,7 +244,6 @@ export default {
          if (this.bus_location_data_api[i].route_code.slice(-1) === '1') { //XYBS1
            this.bus_location_data_api[i].route_geojson = this.geojson_line_1
            const closestSegment = this.findNearestSegment(busLocation, this.bus_location_data_api[i].route_geojson);
            console.log(closestSegment)
            busHeadingAngle = this.calculateBusAngle(closestSegment[0][1], closestSegment[0][0], closestSegment[1][1], closestSegment[1][0]);
          } else { //XYBS2
            this.bus_location_data_api[i].route_geojson = this.geojson_line_2
+1 −1
+9 −9
Original line number Diff line number Diff line
@@ -153,10 +153,10 @@
  resolved "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a"
  integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==

"@ant-design/icons-vue@^6.1.0":
  version "6.1.0"
  resolved "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz#f9324fdc0eb4cea943cf626d2bf3db9a4ff4c074"
  integrity sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==
"@ant-design/icons-vue@^7.0.0":
  version "7.0.1"
  resolved "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz#83de301771fadd03f3890e627314102405c31c22"
  integrity sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==
  dependencies:
    "@ant-design/colors" "^6.0.0"
    "@ant-design/icons-svg" "^4.2.1"
@@ -3778,13 +3778,13 @@ ansi-styles@^4.1.0:
  dependencies:
    color-convert "^2.0.1"

ant-design-vue@^4.0.0:
  version "4.0.2"
  resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-4.0.2.tgz#83d96dc05d4f9915e479981feb98e4725db444ad"
  integrity sha512-4vD/mVXne1avmYo5j3V9bqAlMfxTu2D+k0j6dTN++OJZOjkuaV3waMLP1EJY0nj1xl0qUV96u7OD5xgTYfdtBQ==
ant-design-vue@^4.0.7:
  version "4.0.7"
  resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-4.0.7.tgz#e4ac41853aac7c5d7cc3e0be884effbd90dd34b3"
  integrity sha512-oHTtc1GZkfENZTkt2aDvjaD4yoRsowYvCOmxA6+5AGqm5uz/datdJOXsq9nokIhC+vrAMhk6JQVFZ2hh7eU6Pw==
  dependencies:
    "@ant-design/colors" "^6.0.0"
    "@ant-design/icons-vue" "^6.1.0"
    "@ant-design/icons-vue" "^7.0.0"
    "@babel/runtime" "^7.10.5"
    "@ctrl/tinycolor" "^3.5.0"
    "@emotion/hash" "^0.9.0"