增加距离位置、一直显示轨迹
This commit is contained in:
		
							parent
							
								
									3068a4cb91
								
							
						
					
					
						commit
						a78106da90
					
				| 
						 | 
				
			
			@ -7,7 +7,7 @@ const allPositionLat = 39.036963; // 全部防区跳转纬度
 | 
			
		|||
const allPositionAlt = 4000; // 全部防区跳转高度
 | 
			
		||||
const allPositionPitch = -90; // 全部防区跳转俯仰角
 | 
			
		||||
 | 
			
		||||
const currTime = 15; // 左侧无人机消失时间
 | 
			
		||||
const currTime = 60; // 左侧无人机消失时间
 | 
			
		||||
 | 
			
		||||
const uavSize = 50; // 无人机大小
 | 
			
		||||
const uaColor = "#ffffff"; // 无人机颜色
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ const getters = {
 | 
			
		|||
  isZoomedIn: (state) => state.chart.isZoomedIn, //音频是否打开
 | 
			
		||||
  SliderValue: (state) => state.chart.SliderValue, //音量值
 | 
			
		||||
  checkFlag: (state) => state.chart.checkFlag, //轨迹查看按钮
 | 
			
		||||
  clearTrajectory: (state) => state.chart.clearTrajectory //清空轨迹
 | 
			
		||||
  clearTrajectory: (state) => state.chart.clearTrajectory, //清空轨迹
 | 
			
		||||
  lonAndLat: (state) => state.map.lonAndLat // 无人机距离我的位置
 | 
			
		||||
};
 | 
			
		||||
export default getters;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,8 @@
 | 
			
		|||
const user = {
 | 
			
		||||
  state: {
 | 
			
		||||
    map: null,
 | 
			
		||||
    adsbisFlag: false
 | 
			
		||||
    adsbisFlag: false,
 | 
			
		||||
    lonAndLat: []
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  mutations: {
 | 
			
		||||
| 
						 | 
				
			
			@ -10,6 +11,9 @@ const user = {
 | 
			
		|||
    },
 | 
			
		||||
    SET_ADSBIS_FLAG: (state, value) => {
 | 
			
		||||
      state.adsbisFlag = value;
 | 
			
		||||
    },
 | 
			
		||||
    SET_LONANDLAT: (state, value) => {
 | 
			
		||||
      state.lonAndLat = value;
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -110,8 +110,8 @@
 | 
			
		|||
                  </div>
 | 
			
		||||
                  <div class="content-potions-bottom">
 | 
			
		||||
                    <div class="content-text content-potions-lat">
 | 
			
		||||
                      <p class="text">高度:</p>
 | 
			
		||||
                      <p class="characters">{{ drone.height || 0 }}M</p>
 | 
			
		||||
                      <p class="text">距离:</p>
 | 
			
		||||
                      <p class="characters">{{ drone.distanceMeters }}M</p>
 | 
			
		||||
                    </div>
 | 
			
		||||
                  </div>
 | 
			
		||||
                  <div class="content-potions-lon">
 | 
			
		||||
| 
						 | 
				
			
			@ -276,7 +276,7 @@ export default {
 | 
			
		|||
    };
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapGetters(["isZoomedIn", "SliderValue"])
 | 
			
		||||
    ...mapGetters(["isZoomedIn", "SliderValue", "lonAndLat"])
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.endTime = moment.utc().format("YYYY-MM-DD HH:mm:ss");
 | 
			
		||||
| 
						 | 
				
			
			@ -356,13 +356,24 @@ export default {
 | 
			
		|||
                  newItem.app_lon !== 0 &&
 | 
			
		||||
                  newItem.app_lat !== 0
 | 
			
		||||
                ) {
 | 
			
		||||
                  if (this.lonAndLat && this.lonAndLat.length === 2) {
 | 
			
		||||
                    const [userLon, userLat] = this.lonAndLat;
 | 
			
		||||
                    newItem.distanceMeters = this.calculateDistance(
 | 
			
		||||
                      userLon,
 | 
			
		||||
                      userLat,
 | 
			
		||||
                      newItem.drone_lon,
 | 
			
		||||
                      newItem.drone_lat
 | 
			
		||||
                    ).toFixed(0);
 | 
			
		||||
                  } else {
 | 
			
		||||
                    newItem.distanceMeters = newItem.distanceMeters || 0;
 | 
			
		||||
                  }
 | 
			
		||||
                  // 如果已经存在相同BatchId的数据,重置计时器
 | 
			
		||||
                  if (newItem.BatchId) {
 | 
			
		||||
                    const existingTimer = this.droneTimers.get(newItem.BatchId);
 | 
			
		||||
                    if (existingTimer) {
 | 
			
		||||
                      clearInterval(existingTimer); // 清除旧计时器
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    console.log(this.lonAndLat, "this.lonAndLat");
 | 
			
		||||
                    // 设置15秒初始时间
 | 
			
		||||
                    newItem.currTime = window.mapConfig.currTime;
 | 
			
		||||
                    // 创建新计时器
 | 
			
		||||
| 
						 | 
				
			
			@ -487,6 +498,20 @@ export default {
 | 
			
		|||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    calculateDistance(lon1, lat1, lon2, lat2) {
 | 
			
		||||
      const R = 6371e3; // 地球半径(米)
 | 
			
		||||
      const a1 = (lat1 * Math.PI) / 180; // 将纬度转换为弧度
 | 
			
		||||
      const a2 = (lat2 * Math.PI) / 180;
 | 
			
		||||
      const ab = ((lat2 - lat1) * Math.PI) / 180;
 | 
			
		||||
      const ac = ((lon2 - lon1) * Math.PI) / 180;
 | 
			
		||||
 | 
			
		||||
      const a =
 | 
			
		||||
        Math.sin(ab / 2) * Math.sin(ab / 2) +
 | 
			
		||||
        Math.cos(a1) * Math.cos(a2) * Math.sin(ac / 2) * Math.sin(ac / 2);
 | 
			
		||||
      const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
 | 
			
		||||
 | 
			
		||||
      return R * c; // 距离(米)
 | 
			
		||||
    },
 | 
			
		||||
    enableTouchScroll() {
 | 
			
		||||
      const ulElement = this.$el.querySelector(".drone-list ul");
 | 
			
		||||
      if (ulElement) {
 | 
			
		||||
| 
						 | 
				
			
			@ -742,25 +767,25 @@ export default {
 | 
			
		|||
      const isVisible = this.droneStates[drone.BatchId];
 | 
			
		||||
 | 
			
		||||
      // 无人机轨迹线
 | 
			
		||||
      let graphicLayerGJ = window.olMap
 | 
			
		||||
        .getLayers()
 | 
			
		||||
        .getArray()
 | 
			
		||||
        .find((layer) => layer.get("id") === "guiji");
 | 
			
		||||
      let graphic = graphicLayerGJ
 | 
			
		||||
        .getSource()
 | 
			
		||||
        .getFeatureById(drone.BatchId + "_track");
 | 
			
		||||
      const trackStyle = new Style({
 | 
			
		||||
        stroke: new Stroke({
 | 
			
		||||
          color: this.getRandomColor(),
 | 
			
		||||
          width: 0,
 | 
			
		||||
          zIndex: 1
 | 
			
		||||
        })
 | 
			
		||||
      });
 | 
			
		||||
      if (!isVisible) {
 | 
			
		||||
        graphic.setStyle(trackStyle);
 | 
			
		||||
      } else {
 | 
			
		||||
        graphic.setStyle(null);
 | 
			
		||||
      }
 | 
			
		||||
      // let graphicLayerGJ = window.olMap
 | 
			
		||||
      //   .getLayers()
 | 
			
		||||
      //   .getArray()
 | 
			
		||||
      //   .find((layer) => layer.get("id") === "guiji");
 | 
			
		||||
      // let graphic = graphicLayerGJ
 | 
			
		||||
      //   .getSource()
 | 
			
		||||
      //   .getFeatureById(drone.BatchId + "_track");
 | 
			
		||||
      // const trackStyle = new Style({
 | 
			
		||||
      //   stroke: new Stroke({
 | 
			
		||||
      //     color: this.getRandomColor(),
 | 
			
		||||
      //     width: 0,
 | 
			
		||||
      //     zIndex: 1
 | 
			
		||||
      //   })
 | 
			
		||||
      // });
 | 
			
		||||
      // if (!isVisible) {
 | 
			
		||||
      //   graphic.setStyle(trackStyle);
 | 
			
		||||
      // } else {
 | 
			
		||||
      //   graphic.setStyle(null);
 | 
			
		||||
      // }
 | 
			
		||||
 | 
			
		||||
      // 飞手无人机连接线
 | 
			
		||||
      let graphicLayerFSGJX = window.olMap
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,6 +77,7 @@ export default {
 | 
			
		|||
              "EPSG:3857"
 | 
			
		||||
            );
 | 
			
		||||
            this.$message.success("定位成功");
 | 
			
		||||
            this.$store.commit("SET_LONANDLAT", newLocation);
 | 
			
		||||
            this.updateMapPosition(this.longitude, this.latitude);
 | 
			
		||||
            window.olMap.getView().animate({
 | 
			
		||||
              center: newLocation,
 | 
			
		||||
| 
						 | 
				
			
			@ -214,7 +215,8 @@ export default {
 | 
			
		|||
        lon: this.longitude,
 | 
			
		||||
        userId: localStorage.getItem("userId")
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      let newLocation = [this.longitude, this.latitude];
 | 
			
		||||
      this.$store.commit("SET_LONANDLAT", newLocation);
 | 
			
		||||
      HomeSyncLocation(params)
 | 
			
		||||
        .then((res) => {
 | 
			
		||||
          if (res.code === 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -437,7 +437,7 @@ export function mapUavFiex(options, map) {
 | 
			
		|||
 | 
			
		||||
          graphicLayer.getSource().addFeature(graphic);
 | 
			
		||||
          graphicLayerGJ.getSource().addFeature(track);
 | 
			
		||||
          graphicLayerGJ.setStyle(null);
 | 
			
		||||
          // graphicLayerGJ.setStyle(null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 更新无人机属性和位置
 | 
			
		||||
| 
						 | 
				
			
			@ -451,7 +451,7 @@ export function mapUavFiex(options, map) {
 | 
			
		|||
            .getSource()
 | 
			
		||||
            .getFeatureById(item.BatchId + "_track");
 | 
			
		||||
          track.getGeometry().appendCoordinate(point);
 | 
			
		||||
          graphicLayerGJ.setStyle(null);
 | 
			
		||||
          // graphicLayerGJ.setStyle(null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 绑定弹窗
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,8 +41,8 @@ export default {
 | 
			
		|||
    //     device_type_8: 91088,
 | 
			
		||||
    //     app_lat: 39.055,
 | 
			
		||||
    //     app_lon: 117.303466,
 | 
			
		||||
    //     drone_lat: 39.040924,
 | 
			
		||||
    //     drone_lon: 117.337103,
 | 
			
		||||
    //     drone_lat: 39.05389348519259,
 | 
			
		||||
    //     drone_lon: 117.3121088583338,
 | 
			
		||||
    //     height: 0.0,
 | 
			
		||||
    //     altitude: 0.0,
 | 
			
		||||
    //     home_lat: 0.0,
 | 
			
		||||
| 
						 | 
				
			
			@ -55,7 +55,7 @@ export default {
 | 
			
		|||
    //     speed_N: 0.0,
 | 
			
		||||
    //     speed_U: 0.0,
 | 
			
		||||
    //     RSSI: 0.0,
 | 
			
		||||
    //     positionId: "1937905595101351936",
 | 
			
		||||
    //     positionId: "1937905447877087232",
 | 
			
		||||
    //     PostionName: "6号",
 | 
			
		||||
    //     DeviceId: "1937909591555837952",
 | 
			
		||||
    //     DeviceName: "JF0102501007",
 | 
			
		||||
| 
						 | 
				
			
			@ -66,9 +66,45 @@ export default {
 | 
			
		|||
    //     Id: "1938433406669033472"
 | 
			
		||||
    //   }
 | 
			
		||||
    // ];
 | 
			
		||||
    // let time = setInterval(() => {
 | 
			
		||||
    // let arr1 = [
 | 
			
		||||
    //   {
 | 
			
		||||
    //     BatchId: "1938433406643867648",
 | 
			
		||||
    //     serial_number: "JF0102501009",
 | 
			
		||||
    //     device_type: "8",
 | 
			
		||||
    //     device_type_8: 91088,
 | 
			
		||||
    //     app_lat: 39.055,
 | 
			
		||||
    //     app_lon: 117.303466,
 | 
			
		||||
    //     drone_lat: 39.06341517352996,
 | 
			
		||||
    //     drone_lon: 117.31456131738705,
 | 
			
		||||
    //     height: 0.0,
 | 
			
		||||
    //     altitude: 0.0,
 | 
			
		||||
    //     home_lat: 0.0,
 | 
			
		||||
    //     home_lon: 0.0,
 | 
			
		||||
    //     distance: 3299.608332218683,
 | 
			
		||||
    //     centerdistance: 198311.46836461234,
 | 
			
		||||
    //     IsWhitelist: false,
 | 
			
		||||
    //     WhiteListId: "0",
 | 
			
		||||
    //     speed_E: 0.0,
 | 
			
		||||
    //     speed_N: 0.0,
 | 
			
		||||
    //     speed_U: 0.0,
 | 
			
		||||
    //     RSSI: 0.0,
 | 
			
		||||
    //     positionId: "1937905447877087232",
 | 
			
		||||
    //     PostionName: "6号",
 | 
			
		||||
    //     DeviceId: "1937909591555837952",
 | 
			
		||||
    //     DeviceName: "JF0102501007",
 | 
			
		||||
    //     freq: 0.0,
 | 
			
		||||
    //     alarmLevel: 0,
 | 
			
		||||
    //     Time: 1744872277,
 | 
			
		||||
    //     CreateTime: "2025-06-27T11:05:13.1524513+08:00",
 | 
			
		||||
    //     Id: "1938433406669033472"
 | 
			
		||||
    //   }
 | 
			
		||||
    // ];
 | 
			
		||||
    // setInterval(() => {
 | 
			
		||||
    //   this.signaData = arr;
 | 
			
		||||
    // }, 1000);
 | 
			
		||||
    // setInterval(() => {
 | 
			
		||||
    //   this.signaData = arr1;
 | 
			
		||||
    // }, 2000);
 | 
			
		||||
    // setTimeout(() => {
 | 
			
		||||
    //   clearInterval(time);
 | 
			
		||||
    // }, 10000);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue