From b0623031f7839e3f5b061f712c6ead91f57db5cf Mon Sep 17 00:00:00 2001 From: Surpriseplus <845948745@qq.com> Date: 星期日, 08 十月 2023 15:42:37 +0800 Subject: [PATCH] 地块展示效果优化 --- static/SmartEarthSDK/Workers/image/1.png | 0 static/polyline.js | 82 +++++++++++++++++++++++++++ index.html | 1 src/assets/js/rpc.js | 64 ++++++++++++-------- 4 files changed, 121 insertions(+), 26 deletions(-) diff --git a/index.html b/index.html index bcec9a2..628d4fd 100644 --- a/index.html +++ b/index.html @@ -15,6 +15,7 @@ <script src="./static/SmartEarthSDK/Workers/jquery-2.0.3.js"></script> <script src="./static/SmartEarthSDK/SmartEarth.min.js"></script> <script src="./static/SmartEarthSDK/Workers/layui/layui.all.js"></script> + <script src="./static/polyline.js"></script> </head> <body oncontextmenu="return false;" ondragstart="return false;" onselectstart="return false;"> diff --git a/src/assets/js/rpc.js b/src/assets/js/rpc.js index de220a1..939495f 100644 --- a/src/assets/js/rpc.js +++ b/src/assets/js/rpc.js @@ -128,7 +128,7 @@ lon: val.location.x, lat: val.location.y, }; - objArr.push(itemObj); + that.objArr.push(itemObj); }); if (index == length) { if (that.objArr.length <= 0) { @@ -177,10 +177,12 @@ }, // 鏄剧ず鍦板潡鑼冨洿 getLandmass(res) { - let that = this; - if (res.tpye == "鍥尯") { - } else if (res.tpye == "鍦板潡") { + let that = this; + if (res.type == "鍥尯") { + + } else if (res.type == "鍦板潡") { + getDiKuanFanWei(res.lon, res.lat).then(response => { let center = { lon: 0, lat: 0 }; let polygon = that.read(response.geometry); @@ -189,25 +191,29 @@ let points = polygon[0].split(","); for (let i = 0; i < points.length; i++) { let point = points[i].replace(/^\s+|\s+$/g, "").split(" "); - center.lon += parseFloat(point[0]) / points.length; - center.lat += parseFloat(point[1]) / points.length; - geometry.push({ - x: parseFloat(point[0]), - y: parseFloat(point[1]), - z: 0 - }); + // center.lon += parseFloat(point[0]) / points.length; + // center.lat += parseFloat(point[1]) / points.length; + geometry.push(parseFloat(point[0]), parseFloat(point[1])) + } - if (that.lacationLine) { - sgworld.Creator.DeleteObject(that.lacationLine); - that.lacationLine = null; - } - that.lacationLine = sgworld.Creator.createPolyline( - geometry, - "#ff0000", - 1, - 0, - "绾�" - ); + that.setLacationLineClear() + var position = Cesium.Cartesian3.fromDegreesArray(geometry) + + that.lacationLine = Viewer.entities.add({ + name: "绔嬩綋澧欐晥鏋�", + wall: { + positions: position, + + + material: new Cesium.DynamicWallMaterialProperty({ + color: Cesium.Color.RED, + duration: 4000 + }), + // 璁剧疆楂樺害 + maximumHeights: Array(position.length).fill(80), + minimumHeights: Array(position.length).fill(10), + } + }) } }); } @@ -760,10 +766,8 @@ this.instance && this.instance.$destroy(); this.instance = null; } - if (this.lacationLine) { - sgworld.Creator.DeleteObject(this.lacationLine); - this.lacationLine = null; - } + //鍦板潡 + this.setLacationLineClear() // 杞ㄨ抗绾� this.setClosePathLine(); // 婕父 @@ -772,6 +776,14 @@ this.setClearPointFly(); vueEvents.$emit("queryLayer", false); }, + + + setLacationLineClear() { + if (this.lacationLine) { + Viewer.entities.remove(this.lacationLine) + this.lacationLine = null; + } + }, setClearPointFly() { if (this.pointerFly) { this.pointerFly && this.pointerFly.end(); diff --git a/static/SmartEarthSDK/Workers/image/1.png b/static/SmartEarthSDK/Workers/image/1.png new file mode 100644 index 0000000..495c3ea --- /dev/null +++ b/static/SmartEarthSDK/Workers/image/1.png Binary files differ diff --git a/static/polyline.js b/static/polyline.js new file mode 100644 index 0000000..5b16d13 --- /dev/null +++ b/static/polyline.js @@ -0,0 +1,82 @@ + + + +//鍔ㄦ�佸鏉愯川 +function DynamicWallMaterialProperty(options) { + // 榛樿鍙傛暟璁剧疆 + this._definitionChanged = new Cesium.Event(); + this._color = undefined; + this._colorSubscription = undefined; + this.color = options.color; + this.duration = options.duration; + this.trailImage = options.trailImage; + this._time = (new Date()).getTime(); +} +Object.defineProperties(DynamicWallMaterialProperty.prototype, { + isConstant: { + get: function () { + return false; + } + }, + definitionChanged: { + get: function () { + return this._definitionChanged; + } + }, + color: Cesium.createPropertyDescriptor('color') +}); +DynamicWallMaterialProperty.prototype.getType = function (time) { + return 'DynamicWall'; +}; +DynamicWallMaterialProperty.prototype.getValue = function (time, result) { + if (!Cesium.defined(result)) { + result = {}; + } + result.color = Cesium.Property.getValueOrClonedDefault(this._color, time, Cesium.Color.WHITE, result.color); + if (this.trailImage) { + result.image = this.trailImage; + } else { + result.image = Cesium.Material.DynamicWallImage + } + + if (this.duration) { + result.time = (((new Date()).getTime() - this._time) % this.duration) / this.duration; + } + Viewer.scene.requestRender(); + return result; +}; +DynamicWallMaterialProperty.prototype.equals = function (other) { + return this === other || + (other instanceof DynamicWallMaterialProperty && + Cesium.Property.equals(this._color, other._color)) +}; +Cesium.DynamicWallMaterialProperty = DynamicWallMaterialProperty; +Cesium.Material.DynamicWallType = 'DynamicWall'; +Cesium.Material.DynamicWallImage = "/static/SmartEarthSDK/Workers/image/1.png"; +Cesium.Material.DynamicWallSource = "czm_material czm_getMaterial(czm_materialInput materialInput)\n\ + {\n\ + czm_material material = czm_getDefaultMaterial(materialInput);\n\ + vec2 st = materialInput.st;\n\ + vec4 colorImage = texture2D(image, vec2(fract(st.t - time), st.t));\n\ + vec4 fragColor;\n\ + fragColor.rgb = color.rgb / 1.0;\n\ + fragColor = czm_gammaCorrect(fragColor);\n\ + material.alpha = colorImage.a * color.a;\n\ + material.diffuse = color.rgb;\n\ + material.emission = fragColor.rgb;\n\ + return material;\n\ + }"; +Cesium.Material._materialCache.addMaterial(Cesium.Material.DynamicWallType, { + fabric: { + type: Cesium.Material.DynamicWallType, + uniforms: { + color: new Cesium.Color(1.0, 1.0, 1.0, 1), + image: Cesium.Material.DynamicWallImage, + time: 0 + }, + source: Cesium.Material.DynamicWallSource + }, + translucent: function (material) { + return true; + } +}); \ No newline at end of file -- Gitblit v1.9.3