| | |
| | | case "aroundPoi": |
| | | this.creatAroundPoi(res); |
| | | break; |
| | | case "getStrike": |
| | | this.creatAroundPoi(res); |
| | | break; |
| | | case "queryRelationship": |
| | | this.creatQueryRelationship(res); |
| | | break; |
| | |
| | | break; |
| | | case "getParam": |
| | | this.addTetrahedron(res); |
| | | break; |
| | | case "attackentity": |
| | | this.addPolyLine(res); |
| | | break; |
| | | } |
| | | }, |
| | |
| | | }); |
| | | this.addRaderLayer(res); |
| | | }, |
| | | //雷达遮罩扫描 |
| | | addRaderLayer(res) { |
| | | //雷达遮罩扫描(自定义) |
| | | const option = { |
| | |
| | | }, |
| | | //视锥 |
| | | addTetrahedron(res) { |
| | | res.data.forEach((item,index) => { |
| | | const modelLayer = mapServer.listData.filter((obj) => { |
| | | if (obj.name == config.modelLayer) { |
| | | return obj; |
| | | } |
| | | }); |
| | | let ids = []; |
| | | res.data.forEach((item, index) => { |
| | | const tetrahedron = earthCtrl.factory.addTetrahedron({ |
| | | position: { |
| | | lon: item.lontitude, |
| | |
| | | height: item.height |
| | | }, |
| | | multiple: 0.05, |
| | | scale: new SmartEarth.Cesium.Cartesian3(100, 100, 100), |
| | | scale: new SmartEarth.Cesium.Cartesian3(30, 30, 30), |
| | | color: "#FF0000", |
| | | outlineColor: "#FF0000" |
| | | }); |
| | | if (index == 0) { |
| | | earthCtrl.camera.flyTo(item.lontitude, item.lattitude, 5000, 0, -90, 0, 2); |
| | | const modelLayer = mapServer.listData.filter((obj) => { |
| | | if (obj.name == config.modelLayer) { |
| | | return obj; |
| | | } |
| | | // 将经纬度转换为Cartesian3坐标 |
| | | const position = Cesium.Cartesian3.fromDegrees(item.lontitude, item.lattitude - 0.01, 500); |
| | | // 创建一个边界球 (Bounding Sphere),假设半径为500 |
| | | const boundingSphere = new Cesium.BoundingSphere(position, 1000); |
| | | // 使用 flyToBoundingSphere 定位相机 |
| | | earthCtrl.viewer.camera.flyToBoundingSphere(boundingSphere, { |
| | | duration: 3.0, // 飞行的时间 |
| | | offset: new Cesium.HeadingPitchRange(0, Cesium.Math.toRadians(-30), 6.28316028073749), |
| | | }); |
| | | // debugger |
| | | if (modelLayer.length <= 0) return; |
| | | // earthCtrl.userScene.flyTo(modelLayer[0].layer); |
| | | // modelLayer[0].layer.style = new Cesium.Cesium3DTileStyle({ |
| | | // color: { |
| | | // evaluateColor: (feature) => { |
| | | // const id = feature.getProperty("id"); |
| | | // // if (id === 'de9b9f1f-bea5-11ef-bbd1-ac82473c08a6') { |
| | | // // debugger |
| | | // // // const boundingVolume = feature.tileset.root.boundingVolume |
| | | // // // const center = Cesium.BoundingVolume.computeBoundingVolume(boundingVolume, feature.tileset.root.transform); |
| | | // // // debugger |
| | | // // earthCtrl.viewer.camera.flyTo({ |
| | | // // destination: center, |
| | | // // duration: 2.0 |
| | | // // }); |
| | | // // // earthCtrl.userScene.flyTo(feature); |
| | | // // // return new SmartEarth.Cesium.Color.fromCssColorString( |
| | | // // // '#FF0000' |
| | | // // // ); |
| | | // // } |
| | | // // console.log("id**********", id); |
| | | // // const color = res.filter((item) => { |
| | | // // if (item.ids.indexOf(id) > -1) { |
| | | // // return item; |
| | | // // } |
| | | // // }); |
| | | // // if (color.length > 0) { |
| | | // // return new SmartEarth.Cesium.Color.fromCssColorString( |
| | | // // color[0].color |
| | | // // ); |
| | | // // } |
| | | // } |
| | | // } |
| | | // }); |
| | | // earthCtrl.camera.flyTo(item.lontitude, item.lattitude, 5000, 0, -90, 0, 2); |
| | | } |
| | | ids.push(item.uuid); |
| | | this.layerList.push({ |
| | | layer: tetrahedron, |
| | | func: 'tetrahedron' |
| | | }); |
| | | }); |
| | | modelLayer[0].layer.style = new Cesium.Cesium3DTileStyle({ |
| | | color: { |
| | | evaluateColor: (feature) => { |
| | | const id = feature.getProperty("id"); |
| | | if (ids.indexOf(id) > -1) { |
| | | console.log("id**********", id); |
| | | return new SmartEarth.Cesium.Color.fromCssColorString( |
| | | '#FF0000' |
| | | ); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | //绘制线 |
| | | addPolyLine(res) { |
| | | // 解析 LINESTRING 字符串为经纬度坐标数组 |
| | | const coordinates = res.bombpoint |
| | | .replace("LINESTRING", "") // 去除 'LINESTRING' 部分 |
| | | .replace(/[()]/g, "") // 去除括号 |
| | | .split(",") // 按逗号分割 |
| | | .map(coord => { |
| | | const [lon, lat] = coord.trim().split(" "); // 将每对坐标分开 |
| | | return [parseFloat(lon), parseFloat(lat)]; // 转换为数字 |
| | | }); |
| | | const positions = coordinates.map(coord => { |
| | | return { |
| | | x: coord[0], |
| | | y: coord[1], |
| | | z: 21 |
| | | }; |
| | | }); |
| | | positions.forEach((item,index) => { |
| | | const particle = earthCtrl.factory.createParticleEffect("flame", item, { |
| | | translation: SmartEarth.Cesium.Cartesian3.fromElements(0, 0, 0), //平移 |
| | | emissionRate: 500, |
| | | startScale: 15, |
| | | endScale: 45, |
| | | }); |
| | | if (index == positions.length/2) { |
| | | earthCtrl.camera.flyTo(item.x, item.y, 3000, 0, -90, 0, 2); |
| | | } |
| | | this.layerList.push({ |
| | | layer: particle, |
| | | func: 'attackentity' |
| | | }); |
| | | }) |
| | | }, |
| | |
| | | this.layerList.splice(i, 1); |
| | | i--; |
| | | } |
| | | else if (obj.func == "attackentity") { |
| | | this.layerList[i].layer.deleteObject(); |
| | | this.layerList.splice(i, 1); |
| | | i--; |
| | | } |
| | | } |
| | | if (!window.terrain) { |
| | | window.terrain = earthCtrl.factory.createTerrainLayer({ |