zhongrj
2025-02-18 c93d095895a7aa6b2781ae30f1a485d4b451b077
Merge branch 'master' of http://139.196.74.78:10010/r/drone/pilot-h5
2 files modified
103 ■■■■■ changed files
src/views/DronePilotDetails.vue 13 ●●●●● patch | view | raw | blame | history
src/views/hooks/droneFly.ts 90 ●●●●● patch | view | raw | blame | history
src/views/DronePilotDetails.vue
@@ -14,7 +14,7 @@
        </div>
        <div class="l-zoom" id="lZoom">
          <div class="zoom">
            <img src="@/assets/images/me.png" @touchstart="getPhoneLocation(true)" />
            <img src="@/assets/images/me.png" @touchstart="clickPhoneLocation" />
          </div>
          <div class="zoom" @touchstart="onChangeD">
            <img v-if="is2d" src="@/assets/images/stand.png" />
@@ -65,7 +65,7 @@
import flvjs from 'flv.js';
const { pointWayline } = initPointWayLine()
const { planarWayline } = initPlanarWayline()
const { initDock, getPhoneLocation } = droneFly()
const { initDock, getPhoneLocation, clickPhoneLocation } = droneFly()
const {
  removeAllPoint,
@@ -517,10 +517,11 @@
  // 判断是遥控器还是机场
  let domain = sessionStorage.getItem('domain')
  if (domain !== '0') {
    await getPhoneLocation(false,workspaceId.value)
    await getPhoneLocation(workspaceId.value)
    clickPhoneLocation()
  // // // 设置定时器,每隔 5 秒刷新一次数据
    intervalId = setInterval(()=> {
      getPhoneLocation(false,workspaceId.value)
      getPhoneLocation(workspaceId.value)
    }, 5000);
  }
});
@@ -548,6 +549,8 @@
    // position: relative;
    // display: flex;
    .l-map {
      position: absolute;
      right: 36%;
      .l-zp {
        position: fixed;
        right: 16%;
@@ -594,7 +597,7 @@
  #cesiumContainerBigMap {
    width: 100%;
    height: 100%;
    margin: 0;
    margin-right: 0;
    padding: 0;
    overflow: hidden;
src/views/hooks/droneFly.ts
@@ -40,9 +40,9 @@
  let me_longitude = 0;
  let me_altitude = 0;
  // 扫射定位
  let measure_target_longitude = 0;
  let measure_target_latitude = 0;
  let measure_target_altitude = 0;
  let measure_target_longitude = 115.85635872364763;
  let measure_target_latitude = 28.624648387113627;
  let measure_target_altitude = 63.5;
  async function initDock(data:any, sn:any, dockSn:any, workspaceId:any, ssLinePath:any, viewDroneInfo:any) {
@@ -567,10 +567,10 @@
  // 获取手机定位和激光发射定位的高度和距离
  function getTwoHeightWidth(workspaceId:String) {
    // 国内地图不会为0或者小于0
    console.log('自身定位经纬度1', me_latitude)
    console.log('自身定位经纬度2', me_longitude)
    console.log('激光扫过定位1', measure_target_latitude)
    console.log('激光扫过定位2', measure_target_longitude)
    // console.log('自身定位经纬度1', me_latitude)
    // console.log('自身定位经纬度2', me_longitude)
    // console.log('激光扫过定位1', measure_target_latitude)
    // console.log('激光扫过定位2', measure_target_longitude)
    if (me_latitude <= 0 || me_longitude <= 0 || measure_target_latitude <= 0 || measure_target_longitude <= 0) return
    getTwoPointInfo(workspaceId,me_latitude,me_longitude,measure_target_latitude,measure_target_longitude).then((res:any) => {
      const heightDifference = res.data.heightDifference
@@ -593,59 +593,26 @@
  const meMapSrc = new URL('@/assets/images/me.png', import.meta.url).href
  // 获取手机设备定位
  function getPhoneLocation(value:Boolean, workspaceId:String) {
  function getPhoneLocation(workspaceId:String) {
    if (window.cesiumViewer == null) return
    // 创建一个箭头实体
    removeById('me_dw')
    myAppEntity = window.cesiumViewer.entities.add({
      id: 'me_dw',
      position: globalCesium.Cartesian3.fromDegrees(0, 0, 0), // 初始位置
      billboard: {
        image: meMapSrc, // 箭头图片路径
        width: 30,
        height: 30,
        alignedAxis: globalCesium.Cartesian3.UNIT_Z, // 对齐轴
      },
      // orientation: new globalCesium.CallbackProperty(() => {
      //   return globalCesium.Transforms.headingPitchRollQuaternion(
      //     myAppEntity.position.getValue(window.cesiumViewer.clock.currentTime),
      //     new globalCesium.HeadingPitchRoll(heading, 0, 0) // 设置朝向
      //   );
      // }, false),
    });
    let heading = 0; // 初始朝向
    // 获取设备朝向
    // if (window.DeviceOrientationEvent) {
    //   window.addEventListener('deviceorientation', (event) => {
    //     if (event.alpha !== null) {
    //       heading = globalCesium.Math.toRadians(event.alpha); // 将 alpha 转换为弧度
    //     }
    //   });
    // } else {
    //   console.log('手机不支持.');
    // }
    // 获取设备位置
    if (navigator.geolocation) {
      navigator.geolocation.watchPosition((position) => {
        if (me_longitude > 0 && me_longitude == position.coords.longitude && me_latitude > 0 && me_latitude == position.coords.latitude) return
        me_longitude = position.coords.longitude;
        me_latitude = position.coords.latitude;
        me_altitude = position.coords.altitude || 0;
        // 更新箭头实体的位置
        myAppEntity.position = globalCesium.Cartesian3.fromDegrees(me_longitude, me_latitude, me_altitude);
        if (value) {
          // 将相机定位到设备位置 只有点击图标才可以执行这里
          window.cesiumViewer.camera.setView({
            destination: globalCesium.Cartesian3.fromDegrees(me_longitude, me_latitude, me_altitude + 1000), // 相机高度
            // orientation: {
            //   heading: heading, // 相机朝向
            //   pitch: globalCesium.Math.toRadians(-90), // 俯视角度
            //   roll: 0,
            // },
          });
        }
        // 创建一个箭头实体
        removeById('me_dw')
        myAppEntity = window.cesiumViewer.entities.add({
          id: 'me_dw',
          position: globalCesium.Cartesian3.fromDegrees(me_longitude, me_latitude, me_altitude),
          billboard: {
            image: meMapSrc, // 箭头图片路径
            width: 30,
            height: 30,
            scale: 1.0,
          }
        });
        // 查看两条线直接距离和高度
        getTwoHeightWidth(workspaceId)
      }, (error) => {
@@ -656,9 +623,24 @@
    }
  }
  // 点击右边定自身定位
  function clickPhoneLocation() {
    if (myAppEntity && myAppEntity != null) {
      // 将相机定位到设备位置 只有点击图标才可以执行这里
      window.cesiumViewer.camera.setView({
        destination: globalCesium.Cartesian3.fromDegrees(
          Number(me_longitude),
          Number(me_latitude),
          10000.0,
        ), // 相机高度
      });
    }
  }
  return {
    initDock,
    getPhoneLocation,
    clickPhoneLocation
  }
}