export default class LayerMgr { constructor({ viewer }) { this.viewer = viewer } //加载模型 getGltf() { const model = this.viewer.scene.primitives.add(Cesium.Model.fromGltf({ url: `${process.env.PUBLIC_URL}/models/dam/scene.gltf`, modelMatrix: Cesium.Transforms.eastNorthUpToFixedFrame( Cesium.Cartesian3.fromDegrees(114.97, 31.48) // 模型位置 ), scale: 100 })); } getWater() { let initialHeight = 130 const geometry = new Cesium.PolygonGeometry({ polygonHierarchy: new Cesium.PolygonHierarchy( Cesium.Cartesian3.fromDegreesArray(positions) ), extrudedHeight: initialHeight }); const waterPrimitive = new Cesium.Primitive({ geometryInstances: new Cesium.GeometryInstance({ geometry }), appearance: new Cesium.EllipsoidSurfaceAppearance({ aboveGround: true, material: new Cesium.Material({ fabric: { type: 'Water', uniforms: { normalMap: Cesium.buildModuleUrl( `${process.env.PUBLIC_URL}/models/waternormals.jpg` ), frequency: 1000.0, animationSpeed: 0.01, amplitude: 10, }, }, }), }), show: true, // releaseGeometryInstances: false }); this.viewer.scene.primitives.add(waterPrimitive); // 自动抬升 let height = 0; setInterval(() => { if (height < 0.4) { height += 0.001; // height += 0.02; // waterPrimitive.extrudedHeight = height; // 触发setter var currentModelMatrix = Cesium.Matrix4.clone(waterPrimitive.modelMatrix); // 定义平移向量(例如,沿x轴平移100单位) var translation = new Cesium.Cartesian3(-height*0.7, height, height*0.8); // 创建一个平移矩阵 var translationMatrix = Cesium.Matrix4.fromTranslation(translation); // 计算新的modelMatrix(将平移矩阵应用到当前模型矩阵上) var newModelMatrix = Cesium.Matrix4.multiply(translationMatrix, currentModelMatrix, new Cesium.Matrix4()); waterPrimitive.modelMatrix = newModelMatrix; } }, 100); } getQxsy() { var tileset = new Cesium.Cesium3DTileset({ // url: 'http://res3dstatic7.cloudowr.cn/wufeng/3dtile/tileset.json', url: // 'service2/kshdata/1221wtz-3dtile-all/tileset.json', 'http://res3d.oss-cn-shenzhen.aliyuncs.com/macheng/xiaoyutan/Scene/3DTILE.json', // "service2/kshdata/GRH/tileset.json", maximumScreenSpaceError: 1, //精细程度越小越精细 maximumMemoryUsage: 1000, //不可设置太高,目标机子空闲内存值以内,防止浏览器过于卡 }); // fetch(`${process.env.PUBLIC_URL}/data/geojson/macheng/boua.geojson`) // .then(resp => resp.json()) // .then(data => { // let features = data.features; // let positionArray = []; // // 获取区域的经纬度坐标 // for (let i = 0; i < features[0].geometry.coordinates[0].length; i++) { // let coor = features[0].geometry.coordinates[0][i]; // positionArray.push(coor[0]); // positionArray.push(coor[1]); // } // // 遮罩 // let polygonEntity = new Cesium.Entity({ // polygon: { // hierarchy: { // // 添加外部区域为1/4半圆,设置为180会报错 [0, 0, 0, 90, 179, 90, 179, 0] // positions: Cesium.Cartesian3.fromDegreesArray([100, 0, 100, 89, 150, 89, 150, 0]), // // 中心挖空的“洞” // holes: [{ // positions: Cesium.Cartesian3.fromDegreesArray(positionArray) // }] // }, // material: Cesium.Color.BLACK.withAlpha(0.7) //new Cesium.Color(236,242,249, 1) // } // }); // // 边界线 // let lineEntity = new Cesium.Entity({ // polyline: { // positions: Cesium.Cartesian3.fromDegreesArray(positionArray), // width: 7, // material: Cesium.Color.fromCssColorString('#7AE3C8'),//边界线颜色//Cesium.Color.YELLOW //new Cesium.Color(122,227,200, 1) // clampToGround: true, // zIndex: 10 // } // }); // viewer.entities.add(polygonEntity); // viewer.entities.add(lineEntity); // //viewer.flyTo(lineEntity); // }); //添加到球体上 viewer.scene.primitives.add(tileset); tileset.readyPromise.then(function () { viewer.zoomTo( tileset, new Cesium.HeadingPitchRange( 0, -0.7, 2500 // tileset.boundingSphere.radius * 10 ) ); }); //设置倾斜摄影Z轴高度 tileset.readyPromise.then(function (tileset) { const offsetHeight = 15 const boundingSphere = tileset.boundingSphere const cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center) const surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0) const offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, offsetHeight) const translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3()) tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation) // viewer.flyTo(tileset) }) } }