| | |
| | | import mapServer from '../../../assets/js/mapSdk/mapServe'; |
| | | |
| | | import * as turf from '@turf/turf'; |
| | | const mapWeather = { |
| | | regionWeather: null, |
| | | particle: null, |
| | | showRain: 'ShowRain', |
| | | closeRegionWeather() { |
| | | if (this.regionWeather) { |
| | | this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_NONE; |
| | |
| | | this.particle.deleteObject(); |
| | | this.particle = null; |
| | | } |
| | | for (var i in Viewer.scene.primitives._primitives) { |
| | | const name = Viewer.scene.primitives._primitives[i].name; |
| | | if (name && name == this.showRain) { |
| | | Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[i]); |
| | | } |
| | | } |
| | | }, |
| | | setRegionWeatherType(response) { |
| | | this.closeRegionWeather(); |
| | | if (!this.regionWeather) { |
| | | this.getRegionWather(response); |
| | | } |
| | | |
| | | const coord = this.getCoord(response); |
| | | earthCtrl.camera.flyTo(coord[0], coord[1], 1000, 0, -90, 0, 0); |
| | | |
| | | switch (response.type) { |
| | | case 'rain': |
| | | this.showRain(); |
| | | // 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); |
| | | break; |
| | | case 'snow': |
| | | this.showSnow(); |
| | | earthCtrl.camera.flyTo(coord[0], coord[1], 1000, 0, -90, 0, 0); |
| | | break; |
| | | } |
| | | }, |
| | |
| | | obj, |
| | | { |
| | | translation: SmartEarth.Cesium.Cartesian3.fromElements(0, 0, 0), //平移 |
| | | particleSize:10 |
| | | particleSize: 10, |
| | | }, |
| | | function (data) {} |
| | | ); |
| | | }, |
| | | |
| | | showRain() { |
| | | if (this.regionWeather) { |
| | | this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_RAIN; |
| | | this.regionWeather.regionAlpha = 0.6; |
| | | this.regionWeather.regionGradientDistance = 300; |
| | | showRain(res) { |
| | | var area = []; |
| | | var std =[]; |
| | | for (var i = 0; i < res.area.length; i += 3) { |
| | | area.push(res.area[i]); |
| | | area.push(res.area[i + 1]); |
| | | std.push([res.area[i],res.area[i + 1]]) |
| | | } |
| | | std.push(std[0]) |
| | | |
| | | |
| | | const polygon = turf.polygon([std]); |
| | | |
| | | const centerPoint = turf.center(polygon); |
| | | const coord= centerPoint.geometry.coordinates; |
| | | earthCtrl.camera.flyTo(coord[0], coord[1], 8000, 0, -90, 0, 0); |
| | | |
| | | const geometry = new Cesium.PolygonGeometry({ |
| | | polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray(area)), |
| | | height: 0, // 底面高度 |
| | | extrudedHeight: 0.2, // 水面高度 |
| | | ellipsoid: Cesium.Ellipsoid.WGS84, |
| | | }); |
| | | |
| | | // 2. 创建GeometryInstance |
| | | const geometryInstances = new Cesium.GeometryInstance({ geometry }); |
| | | |
| | | // 3. 创建material |
| | | const material = new Cesium.Material({ |
| | | fabric: { |
| | | type: 'Water', |
| | | uniforms: { |
| | | baseWaterColor: new Cesium.Color(0.25, 0.6, 0.9, 0.5), // 水面颜色 |
| | | normalMap: config.images + 'waterNormals.jpg', // 贴图 |
| | | frequency: 5000, // 水波纹数量 |
| | | animationSpeed: 0.02, // 水流速 |
| | | amplitude: 30, // 水波纹振动幅度 |
| | | specularIntensity: 5, // 镜面反射强度 |
| | | }, |
| | | }, |
| | | }); |
| | | // 4. 创建Appearance |
| | | const appearance = new Cesium.EllipsoidSurfaceAppearance({ |
| | | aboveGround: true, |
| | | material, |
| | | }); |
| | | // 5. 创建primitive |
| | | var primitive = new Cesium.Primitive({ |
| | | geometryInstances, |
| | | appearance, |
| | | }); |
| | | 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() { |
| | | if (this.regionWeather) { |
| | | this.regionWeather.enableWeatherType = SmartEarth.Cesium.RegionWeather.TYPE_SNOW; |
| | |
| | | } |
| | | }, |
| | | getCoord(res) { |
| | | const coord = res.point.split(','); |
| | | |
| | | |
| | | const coord = res.point.split(','); |
| | | return coord; |
| | | }, |
| | | getRegionWather(res) { |
| | |
| | | primitive: model[0].layer.item, |
| | | position: new SmartEarth.Cesium.Cartesian3.fromDegrees(coord[0], coord[1], 1), |
| | | radius: 1000, |
| | | }) |
| | | }); |
| | | }, |
| | | }; |
| | | |