cesium 加载管道数据

发布于:2023-09-14 ⋅ 阅读:(131) ⋅ 点赞:(0)

/*

 * @Date: 2023-09-14 13:34:16

 * @LastEditors: gaoxd

 * @LastEditTime: 2023-09-14 17:59:27

 * @Description:

 */

const pipeArr = [] // 所有的管道数据

var handler = null;

/**

 * @description 添加管道

 * @param {* geojson 地址} url

 * @param {* 管道名称 } name

 * @param {* 管道颜色 } color

 */

export function addPolylineVolume(url, name, color) {

  if (!handler) {

    handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)

  }

  addWheelHeight()

  var geojsonPromise = Cesium.GeoJsonDataSource.load(url);

  viewer.dataSources.add(geojsonPromise).then((dataSource) => {

    var entities = dataSource.entities.values;

    for (var i = 0; i < entities.length; i++) {

      var entity = entities[i];

      if (entity.polyline && entity.polyline.positions) {

        var positions = entity.polyline.positions.getValue();

        entity.polylineVolume = new Cesium.PolylineVolumeGraphics({

          positions: positions,

          shape: computedCircle(130),

          material: Cesium.Color.fromCssColorString(color),

        })

        entity.nameForDelete = name

      }

    }

    pipeArr.push({

      name,

      entities

    })

  });

}

/**

 * @description 移除管道

 */

export function removePolylineVolume(name) {

  pipeArr.forEach(el => {

    if (el.name == name) {

      el.entities.forEach(enty => {

        enty.show = false

      })

    }

  })

}

function updateWidth(width = 10) {

  pipeArr.forEach(el => {

    el.entities.forEach(enty => {

      if (enty.polylineVolume) {

        enty.polylineVolume.shape = computedCircle(width)

      }

      console.log('enty :>> ', enty);

    })

  })

}

function addWheelHeight() {

  viewer.camera.moveEnd.addEventListener(() => {

    // 视高 km

    let alt = (viewer.camera.positionCartographic.height / 1000).toFixed(2);

    // 方位角

    let heading = Cesium.Math.toDegrees(viewer.camera.heading).toFixed(2);

    // 俯仰角

    let pitch = Cesium.Math.toDegrees(viewer.camera.pitch).toFixed(2);

    // 翻滚角

    let roll = Cesium.Math.toDegrees(viewer.camera.roll).toFixed(2);

    // 级别

    let level = 0;

    let tileRender = viewer.scene._globe._surface._tilesToRender;

    if (tileRender && tileRender.length > 0) {

      level = viewer.scene._globe._surface._tilesToRender[0]._level;

    }

    let str = `级数:${level} 视高:${alt}km  方位角:${heading}° 俯仰角:${pitch}° 翻滚角:${roll}°`;

    console.log('str :>> ', str);

    if (level > 14) {

      updateWidth(10)

    } else if (level > 11 && level < 13) {

      updateWidth(50)

    }

  })

}


 

/**

 * @description 设置管道半径

 * @radius 管道半径

 */

function computedCircle(radius) {

  var positions = [];

  for (var i = 0; i < 36; i++) {

    var radian = Cesium.Math.toRadians(i * 10);

    var x = radius * Math.cos(radian);

    var y = radius * Math.sin(radian);

    positions.push(new Cesium.Cartesian2(x, y));

  }

  return positions;

}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到