150 lines
5.4 KiB
JavaScript
150 lines
5.4 KiB
JavaScript
|
|
|
|||
|
|
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)
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|