? ? ? ?原生的 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;
}