From ab8f3297f7c8243d486c9da0900e4f813b2ea2df Mon Sep 17 00:00:00 2001 From: suerprisePlus <15810472099@163.com> Date: 星期三, 27 十一月 2024 17:16:46 +0800 Subject: [PATCH] 功能更新 --- src/views/visualization/list/mapWeather.js | 236 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 205 insertions(+), 31 deletions(-) diff --git a/src/views/visualization/list/mapWeather.js b/src/views/visualization/list/mapWeather.js index 21f8beb..088eefa 100644 --- a/src/views/visualization/list/mapWeather.js +++ b/src/views/visualization/list/mapWeather.js @@ -1,9 +1,40 @@ -import mapServer from '../../../assets/js/mapSdk/mapServe'; +import mapServer from '@/assets/js/mapSdk/mapServe.js'; import * as turf from '@turf/turf'; const mapWeather = { regionWeather: null, particle: null, showRain: 'ShowRain', + wallLayer: null, + pathLayer: null, + listBiildBord: [], + listParticle: [], + getWearData(res) { + return { + name: res.address, + data: [ + { + name: '鍚嶇О', + val: res.address, + }, + { + name: '姘旇薄绾у埆', + val: res.level, + }, + { + name: '鎵�灞炵嚎璺�', + val: res.line, + }, + { + name: '鏁版嵁鏉ユ簮', + val: res.source, + }, + { + name: '鍙戝竷鏃堕棿', + val: res.time, + }, + ], + }; + }, closeRegionWeather() { if (this.regionWeather) { this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_NONE; @@ -19,6 +50,24 @@ Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[i]); } } + if (this.wallLayer) { + Viewer.entities.remove(this.wallLayer); + this.wallLayer = null; + // this.wallLayer.removeFromMap(); + // this.wallLayer = null; + } + if (this.pathLayer) { + this.pathLayer.deleteObject(); + this.pathLayer = null; + } + for (var i in this.listBiildBord) { + this.listBiildBord[i].removeFromMap(); + } + this.listBiildBord = []; + for (var i in this.listParticle) { + this.listParticle[i].deleteObject(); + } + this.listParticle = []; }, setRegionWeatherType(response) { this.closeRegionWeather(); @@ -32,51 +81,166 @@ case 'rain': // earthCtrl.camera.flyTo(coord[0], coord[1], 8000, 0, -90, 0, 0); this.showRain(response); - break; case 'fire': this.showFire(response); - earthCtrl.camera.flyTo(coord[0], coord[1], 1000, 0, -90, 0, 0); + // earthCtrl.camera.flyTo(coord[0], coord[1], 1000, 0, -90, 0, 0); break; case 'snow': this.showSnow(); - earthCtrl.camera.flyTo(coord[0], coord[1], 1000, 0, -90, 0, 0); + break; + case 'thunder': + this.showThunder(response); break; } }, - showFire(res) { - const coord = this.getCoord(res); + showThunder(response) { + if (response.geom) { + this.addWatherGeom(response.geom, 'thunder2.png'); + } + // const points = this.chunkArray(response.point.split(','), 2); + + // for (var i in points) { + // const billboardEntity = earthCtrl.factory.createBillboard({ + // name: '鏍囩鐐�', + // id: earthCtrl.factory.createUUID(), + // image: config.images + 'thunder.png', // 璐村浘, + // width: 40, + // height: 40, + // lon: parseFloat(points[i][0]), + // lat: parseFloat(points[i][1]), + // alt: 1, + // scale: 6, + // }); + // this.listBiildBord.push(billboardEntity); + // } + }, + addWatherGeom(response, image) { + if (response.ploygon) { + this.addWatherPloygon(this.chunkArray(response.ploygon, 2), image); + } + if (response.line) { + this.addWatherLine(this.chunkArray(response.line, 2)); + } + }, + addWatherLine(response) { const obj = { - x: coord[0], - y: coord[1], - z: 0, + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + geometry: { + type: 'LineString', + coordinates: response, + }, + }, + ], }; - this.particle = earthCtrl.factory.createParticleEffect( - 'flame', - obj, - { - translation: SmartEarth.Cesium.Cartesian3.fromElements(0, 0, 0), //骞崇Щ - particleSize: 10, + this.pathLayer = earthCtrl.factory.createPathLayer({ + url: obj, + color: '#ff0000', //绾跨殑棰滆壊 + width: 5.0, //绾跨殑瀹藉害 + pointColor: '#FFFFFF', //绉诲姩鐐圭殑棰滆壊 + speed: 1, + far: 50000, + }); + }, + addWatherPloygon(response, image) { + response.push(response[0]); + const coord = this.getCentroid(response); + earthCtrl.camera.flyTo(coord[0], coord[1], 80000, 0, -90, 0, 0); + var geom = []; + for (var i = 0; i < response.length; i++) { + geom.push(response[i][0], response[i][1]); + } + + this.wallLayer = Viewer.entities.add({ + polygon: { + hierarchy: Cesium.Cartesian3.fromDegreesArray(geom), + material: new Cesium.ImageMaterialProperty({ + image: config.images + image, + alpha: 0.2, // 璁剧疆閫忔槑搴︿负0.5 + repeat: Cesium.Cartesian2(1.0, 1.0), // 涓嶉噸澶� + transparent: true, // 鍚敤png閫忔槑 + color: new Cesium.Color(1.0, 1.0, 1.0, 0.3), // 璁剧疆棰滆壊鍜岄�忔槑搴� + }), + stRotation: Cesium.Math.toRadians(0), }, - function (data) {} - ); + }); + // this.wallLayer = earthCtrl.factory.createPolygon({ + // name: '闈�', + // id: earthCtrl.factory.createUUID(), + // material: Cesium.Color.fromCssColorString('rgba(128,128,128, .2)'), + // outlineColor: Cesium.Color.fromCssColorString('rgba(128,128,128, .5)'), + // lineWidth: 3, + // height: 10, + // outline: true, + // outlineWidth: 2, + // positions: SmartEarth.Cesium.Cartesian3.fromDegreesArrayHeights(geom), + // }); + + // const obj = { type: 'GeometryCollection', geometries: [{ type: 'LineString', coordinates: response }] }; + // // 娴佸姩澧欏浘灞� + // this.wallLayer = earthCtrl.factory.createTrailWallLayer({ + // url: obj, + // color: '#0000ff05', //棰滆壊 + // height: 20, //楂樺害 + // speed: 2, + // }); + }, + showFire(response) { + if (response.geom) { + this.addWatherGeom(response.geom, 'filre.png'); + } + // const points = this.chunkArray(response.point.split(','), 2); + // for (var i in points) { + // const particle = earthCtrl.factory.createParticleEffect( + // 'flame', + // { + // x: parseFloat(points[i][0]), + // y: parseFloat(points[i][1]), + // z: 0, + // }, + // { + // translation: SmartEarth.Cesium.Cartesian3.fromElements(0, 0, 0), //骞崇Щ + // particleSize: 10, + // }, + // function (data) {} + // ); + + // this.listParticle.push(particle); + // } + // const coord = this.getCoord(res); + // const obj = { + // x: coord[0], + // y: coord[1], + // z: 0, + // }; + // this.particle = earthCtrl.factory.createParticleEffect( + // 'flame', + // obj, + // { + // translation: SmartEarth.Cesium.Cartesian3.fromElements(0, 0, 0), //骞崇Щ + // particleSize: 10, + // }, + // function (data) {} + // ); }, showRain(res) { var area = []; - var std =[]; - for (var i = 0; i < res.area.length; i += 3) { + var std = []; + for (var i = 0; i < res.area.length; i += 2) { area.push(res.area[i]); area.push(res.area[i + 1]); - std.push([res.area[i],res.area[i + 1]]) + std.push([res.area[i], res.area[i + 1]]); } - std.push(std[0]) - - + std.push(std[0]); + const polygon = turf.polygon([std]); const centerPoint = turf.center(polygon); - const coord= centerPoint.geometry.coordinates; + const coord = centerPoint.geometry.coordinates; earthCtrl.camera.flyTo(coord[0], coord[1], 8000, 0, -90, 0, 0); const geometry = new Cesium.PolygonGeometry({ @@ -115,13 +279,6 @@ }); primitive.name = this.showRain; Viewer.scene.primitives.add(primitive); - - // Viewer.camera.lookAt(primitive.boundingSphere.center, new Cesium.HeadingPitchRange(0.0, Cesium.Math.toRadians(-90), 5000)); - // if (this.regionWeather) { - // this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_RAIN; - // this.regionWeather.regionAlpha = 0.6; - // this.regionWeather.regionGradientDistance = 300; - // } }, showSnow() { @@ -135,6 +292,23 @@ const coord = res.point.split(','); return coord; }, + getCentroid(response) { + var centroid = turf.centroid(turf.polygon([response])); + return centroid.geometry.coordinates; + }, + chunkArray(array, size) { + return array.reduce((chunks, current, index) => { + const chunkIndex = Math.floor(index / size); + + if (!chunks[chunkIndex]) { + chunks[chunkIndex] = []; + } + + chunks[chunkIndex].push(current); + + return chunks; + }, []); + }, getRegionWather(res) { if (res.type == 'fire') return; const coord = this.getCoord(res); -- Gitblit v1.9.3