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