Cesium中圆柱和圆锥entity绘制

       原生的 Cesium中提供了绘制圆柱的方法,看似没有提供绘制圆锥的方法,其实在配置项里面可以直接设置参数生成圆锥,在cylinder对象里面有两个参数,topRadius:上底面的半径(如果为0则是圆锥啦);bottomRadius:下底面的半径 ;

import * as Cesium from "cesium";

let cylinderNum = 0;
/**
 * 圆柱/圆锥实体
 */
class CylinderGraphics {
  /**
   * 加载方法
   * @param {Object} parameter -实体默认配置项
   * @param {Number} i -判断是否为圆锥,i等于true则上底面半径为0,i等于false则上底面半径等于下底面半径
   * @param {Array} parameter.clickPointH -底面圆点的坐标经纬度高程数组
   * @param {Number} [parameter.radius] -下底面圆的半径(单位:米)
   * @param {Cesium.Viewer} parameter.viewer -地图主窗口
   * @param {Number}[parameter.numberOfVerticalLines] -沿轮廓的周长绘制的垂直线的数量,数量越多越圆滑,默认20条
   * @return {Cesium.Entity} -返回圆柱/圆锥实体
   */
  draw(parameter, i) {
    let xy = parameter.clickPointH;
    let l = parameter.radius;
    let v = parameter.viewer;
    let id = "圆柱体" + (cylinderNum == 0 ? "" : cylinderNum);
    let cylinder = new Cesium.Entity({
      id,
      position: Cesium.Cartesian3.fromDegrees(xy[0], xy[1], xy[2]),
      cylinder: {
        topRadius: i ? 0 : l,
        bottomRadius: l,
        length: 20,
        // 沿轮廓的周长绘制的垂直线的数量
        numberOfVerticalLines: 20,
        material: new Cesium.ImageMaterialProperty({
          color: Cesium.Color.fromCssColorString("#007acc"),
        }),
        heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
      },
    });
    cylinderNum++;
    // 添加实体时新增删除下来列表,视图缩放至实体
    v.entities.add(cylinder);
    v.zoomTo(cylinder);
    return cylinder;
  }
}
const Cylinder = new CylinderGraphics();
export function drawCylinder(a, i) {
  let cylinder = Cylinder.draw(a, i);
  return cylinder;
}