From 28bd61701bb409257ea0dd3c78f32bd0b45ebbd5 Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期一, 06 三月 2023 09:16:35 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.20.39:8989/r/LFWEB_NEW

---
 src/components/MapView/mapMenuTop.vue |  657 ++++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 487 insertions(+), 170 deletions(-)

diff --git a/src/components/MapView/mapMenuTop.vue b/src/components/MapView/mapMenuTop.vue
index 7155efe..9a79515 100644
--- a/src/components/MapView/mapMenuTop.vue
+++ b/src/components/MapView/mapMenuTop.vue
@@ -1,6 +1,10 @@
 <template>
   <div class="menuBox">
-    <el-form :inline="true" :model="menuTopFrom" class="demo-form-inline">
+    <el-form
+      :inline="true"
+      :model="menuTopFrom"
+      class="demo-form-inline"
+    >
       <el-form-item>
         <el-select
           v-model="menuTopFrom.queryLayer"
@@ -8,7 +12,10 @@
           placeholder="璇烽�夋嫨..."
           :popper-append-to-body="false"
         >
-          <el-option :value="menuTopFrom.queryLayer" style="height: 100%">
+          <el-option
+            :value="menuTopFrom.queryLayer"
+            style="height: 100%"
+          >
             <div style="height: 200px; overflow: auto">
               <el-tree
                 :data="layerData"
@@ -22,16 +29,17 @@
               </el-tree>
             </div>
             <div style="margin-top: 5px">
-              <el-button size="small" plain @click="getCheckedNodes"
-                >纭</el-button
-              >
+              <el-button
+                size="small"
+                plain
+                @click="getCheckedNodes"
+              >纭</el-button>
               <el-button
                 size="small"
                 type="info"
                 plain
                 @click="resetCheckedNodes"
-                >閲嶇疆</el-button
-              >
+              >閲嶇疆</el-button>
             </div>
           </el-option>
         </el-select>
@@ -68,13 +76,19 @@
           >瀵煎叆閫夋嫨鑼冨洿</el-link
         > -->
       </el-form-item>
+
       <el-form-item>
-        <el-button plain size="small" @click="getAttributeQuery"
-          >鏌ヨ</el-button
-        >
-        <el-button type="info" size="small" @click="clearQuery" plain
-          >閲嶇疆</el-button
-        >
+        <el-button
+          plain
+          size="small"
+          @click="getAttributeQuery"
+        >鏌ヨ</el-button>
+        <el-button
+          type="info"
+          size="small"
+          @click="clearQuery"
+          plain
+        >閲嶇疆</el-button>
       </el-form-item>
       <!-- <el-form-item>
         <el-button
@@ -90,43 +104,116 @@
       </el-form-item> -->
     </el-form>
     <queryinfo ref="queryinfo" />
+    <!-- <div class="buffer-container" ></div> -->
+    <el-dialog
+      v-dialogDrag
+      custom-class="buffer-dialog"
+      top="40vh"
+      title="绠¢亾涓績绾挎煡璇�"
+      :visible.sync="dialogFormVisible"
+      :modal="false"
+      :lock-scroll="false"
+      :close-on-click-modal="false"
+      width="25%"
+      @opened="dialogOpend"
+    >
+      <el-form
+        :model="menuTopFrom"
+        label-width="150px"
+      >
+        <el-form-item label="绠¢亾涓績绾�">
+          <el-select
+            @change="changeSelect2"
+            v-model="menuTopFrom.pipeline"
+            placeholder="璇烽�夋嫨"
+          >
+            <el-option
+              v-for="item in pipelineOption"
+              :key="item.gid"
+              :label="item.pipeName"
+              :value="item.pipeName"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="閫夊彇绠¢亾">
+          <el-select
+            v-model="menuTopFrom.segName"
+            placeholder="璇烽�夋嫨"
+            @change="selectChangeGid"
+          >
+            <el-option
+              v-for="item in segNameOption"
+              :key="item.gid"
+              :label="item.segName"
+              :value="item.gid"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="缂撳啿鍖哄ぇ灏忥紙m锛�">
+          <el-input-number
+            v-model="menuTopFrom.bufferSize"
+            placeholder=""
+            @change="handleBufferChange"
+            :step="500"
+          ></el-input-number>
+        </el-form-item>
+      </el-form>
+      <div
+        slot="footer"
+        class="dialog-footer"
+      >
+        <el-button @click="dialogFormVisible = false">鍙� 娑�</el-button>
+        <el-button
+          type="primary"
+          @click="changeBufferData"
+        >纭� 瀹�</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import queryinfo from "../../views/Tools/queryinfo.vue";
-import $ from "jquery";
+import queryinfo from "../../views/Tools/queryinfo.vue"
+import $ from "jquery"
 import {
   inquiry_SelectTabs,
   inquiry_uploadShp,
   encr,
   dataLib_selectTabs,
-} from "../../api/api.js";
-import { getToken } from "@/utils/auth";
-import * as turf from "@turf/turf";
+  pipelines_selectSegNames,
+} from "../../api/api.js"
+import { selectPipelines } from "@/api/screen.js"
+import { getToken } from "@/utils/auth"
+import * as turf from "@turf/turf"
+import { wktToGeoJSON } from "@terraformer/wkt"
 export default {
   components: { queryinfo },
   data() {
     return {
       menuTopFrom: {
         queryType: "",
+        pipeline: "",
+        segName: "",
+        bufferSize: 5000,
       },
       treeChange: [],
       layerData: [
-        {
-          id: 1,
-          label: "鍩虹鏁版嵁",
-          tabDesc: "鍩虹鏁版嵁",
-          value: "BD",
-          children: [],
-        },
-        {
-          id: 2,
-          label: "涓氬姟鏁版嵁",
-          tabDesc: "涓氬姟鏁版嵁",
-          value: "BS",
-          children: [],
-        },
+        // {
+        //   id: 1,
+        //   label: "鍩虹鏁版嵁",
+        //   tabDesc: "鍩虹鏁版嵁",
+        //   value: "BD",
+        //   children: [],
+        // },
+        // {
+        //   id: 2,
+        //   label: "涓氬姟鏁版嵁",
+        //   tabDesc: "涓氬姟鏁版嵁",
+        //   value: "BS",
+        //   children: [],
+        // },
       ],
 
       queryOption: [
@@ -154,6 +241,10 @@
           value: "inputFile",
           label: "瀵煎叆閫夋嫨鑼冨洿",
         },
+        {
+          value: "buffer",
+          label: "涓嚎缂撳啿鍖�",
+        },
       ],
       defaultProps: {
         children: "children",
@@ -161,76 +252,111 @@
       },
       graphicLayer: null,
       flyEntity: null,
-    };
+      pipelineOption: [],
+      segNameOption: [],
+      bufferEntities: [],
+      featureLayer: [],
+      analyGid: null,
+      dialogFormVisible: false,
+      bufferLinePosition: [],
+    }
   },
 
   mounted() {
-    this.menuTopFrom.queryType = "rectangle";
-    this.getAllTable();
+    this.menuTopFrom.queryType = "rectangle"
+    this.getAllTable()
+    this.getPipelineData()
+  },
+  watch: {
+    analyGid(newVal, oldVal) {
+      if (newVal !== oldVal && this.dialogFormVisible) {
+        this.genBuffer()
+      }
+    },
   },
   methods: {
     changeValue(value) {
-      var obj = {};
+      var obj = {}
       obj = this.queryOption.find(function (item) {
-        return item.value === value;
-      });
+        return item.value === value
+      })
       if (obj.value == "inputFile") {
-        this.getMenuTopFile();
+        this.getMenuTopFile()
+      } else if (obj.value == "buffer") {
+        this.dialogFormVisible = true
       }
     },
     async getAllTable() {
       const data = await dataLib_selectTabs({
         pageIndex: 1,
         pageSize: 500,
-      });
+      })
       if (data.code != 200) {
-        this.$message.error("鍒楄〃璋冪敤澶辫触");
+        this.$message.error("鍒楄〃璋冪敤澶辫触")
       }
-      var option = data.result.filter((res) => {
-        if (res.rows != 0) {
-          return res;
+
+      // var val = data.result.filter(res => {
+      //   if (res.rows != 0) {
+      //     return res
+      //   }
+      // })
+      var val = data.result
+      var std = [];
+      val.filter((item) => {
+        if (std.indexOf(item.bak) == -1) {
+          std.push(item.bak);
+          this.layerData.push(
+            {
+              val: item.bak,
+              label: item.bak,
+              children: [],
+            }
+          )
         }
       });
-      for (var i in option) {
-        var val_Data = option[i];
-        val_Data.id = "1" + i;
-        val_Data.label = val_Data.tabDesc;
-        if (option[i].ns == "bd") {
-          this.layerData[0].children.push(val_Data);
-        } else {
-          this.layerData[1].children.push(val_Data);
-        }
-      }
+
+      this.layerData.filter((item) => {
+        val.filter((res) => {
+          if (item.val === res.bak && res.rows != 0 && res.rows) {
+            console.log(res)
+            res.label = res.tabDesc
+            item.children.push(res)
+          }
+        })
+      })
+
     },
     //鑾峰彇閫夋嫨鏍戠殑鑺傜偣
     getCheckedNodes() {
-      var valTree = this.$refs.tree.getCheckedNodes();
-      if (valTree.length == 0) return;
-
+      var valTree = this.$refs.tree.getCheckedNodes()
+      if (valTree.length == 0) return
       this.menuTopFrom.queryLayer = valTree[0].tabDesc;
+      this.$store.state.propertiesName = valTree[0];
       for (var i = 0; i < valTree.length; i++) {
-        this.treeChange.push(valTree[i]);
+        if (valTree[i].entity) {
+          this.treeChange.push(valTree[i])
+        }
       }
     },
     //娓呯┖鏍戦�変腑鐨勮妭鐐�
     resetCheckedNodes() {
-      this.treeChange = [];
-      this.menuTopFrom.queryLayer = null;
-      this.$refs.tree.setCheckedKeys([]);
+      this.treeChange = []
+      this.menuTopFrom.queryLayer = null
+      this.$refs.tree.setCheckedKeys([])
     },
     //瀵煎叆shp鏂囦欢
     async setMenuTopFile() {
-      var val = document.getElementById("getMenuTopFile").files;
-      if (!val || !val.length) return;
-      var formData = new FormData();
-      var exts = [".shp", ".shx", ".dbf", ".prj"];
-      var count = 0;
+      var val = document.getElementById("getMenuTopFile").files
+      if (!val || !val.length) return
+      var formData = new FormData()
+      var exts = [".shp", ".shx", ".dbf", ".prj"]
+      var count = 0
       for (var i = 0; i < val.length; i++) {
-        var name = val[i].name.toLocaleLowerCase();
-        var ext = name.substring(name.lastIndexOf("."));
+        var name = val[i].name.toLocaleLowerCase()
+        var ext = name.substring(name.lastIndexOf("."))
         if (exts.indexOf(ext) > -1) {
-          count++;
-          formData.append(val[i].name, val[i]); // fs.files[i].name,file
+          count++
+          formData.append(val[i].name, val[i]) // fs.files[i].name,file
         }
       }
 
@@ -238,8 +364,8 @@
         this.$message({
           message: "ShapeFile鏂囦欢閫夋嫨涓嶅叏锛�",
           type: "warning",
-        });
-        return;
+        })
+        return
       }
       $.ajax(BASE_URL + "/inquiry/uploadShp?token=" + getToken(), {
         type: "post",
@@ -248,138 +374,149 @@
         cache: false,
         processData: false,
         contentType: false,
-        success: (rs) => {
+        success: rs => {
           if (rs.code !== 200) {
-            return this.$message.error("鐢ㄦ埛瑙掕壊璇锋眰閿欒");
+            return this.$message.error("鐢ㄦ埛瑙掕壊璇锋眰閿欒")
           }
 
-          this.$store.state.mapMenuShpFile = rs.result.wkt;
-          this.showMapMenuPop();
+          this.$store.state.mapMenuShpFile = rs.result.wkt
+          this.showMapMenuPop()
         },
-        error: (e) => {
-          console.log(e);
+        error: e => {
+          console.log(e)
         },
-      });
+      })
     },
     getMenuTopFile() {
-      $("#getMenuTopFile").click();
+      $("#getMenuTopFile").click()
     },
     //鏌ヨ
     getAttributeQuery() {
       //娓呯┖鏍囩粯
-      sgworld.Creator.SimpleGraphic.edit(false, { editProp: false });
-      sgworld.Creator.SimpleGraphic.clear();
+      sgworld.Creator.SimpleGraphic.edit(false, { editProp: false })
+      sgworld.Creator.SimpleGraphic.clear()
+      this.clearBufferEntities()
       if (this.$store.state.queryInfo.length != 0) {
         for (var i in this.$store.state.queryInfo) {
-          sgworld.Viewer.entities.remove(this.$store.state.queryInfo[i]);
+          sgworld.Viewer.entities.remove(this.$store.state.queryInfo[i])
         }
-        this.$store.state.queryInfo = [];
+        this.$store.state.queryInfo = []
       }
       if (this.$store.state.primitLayer != null) {
-        sgworld.Creator.DeleteObject(this.$store.state.primitLayer);
-        this.$store.state.primitLayer = null;
+        sgworld.Creator.DeleteObject(this.$store.state.primitLayer)
+        this.$store.state.primitLayer = null
       }
       if (this.treeChange.length == 0) {
-        this.$message.error("璇烽�夋嫨瑕佹煡璇㈢殑鏁版嵁");
-        return;
+        this.$message.error("璇烽�夋嫨瑕佹煡璇㈢殑鏁版嵁")
+        return
       }
-      if (this.menuTopFrom.queryType != "inputFile") {
-        sgworld.Creator.createSimpleGraphic(
-          this.menuTopFrom.queryType,
-          {
-            color: "#00FF0060",
-            outlineColor: "#0f0",
-            outlineWidth: 5,
-          },
-          (entity) => {
-            this.setTurfGeometry(entity);
-          }
-        );
-      } else {
-        this.getMenuTopFile();
+      let type = this.menuTopFrom.queryType
+      switch (type) {
+        case "buffer":
+          this.dialogFormVisible = true
+          break
+        case "inputFile":
+          this.getMenuTopFile()
+
+          break
+        default:
+          sgworld.Creator.createSimpleGraphic(
+            this.menuTopFrom.queryType,
+            {
+              color: "#00FF0060",
+              outlineColor: "#0f0",
+              outlineWidth: 5,
+            },
+            entity => {
+              this.setTurfGeometry(entity)
+            }
+          )
+          break
       }
     },
     setTurfGeometry(res) {
-      var that = this;
-      var res_val;
+      var that = this
+      var res_val
       switch (this.menuTopFrom.queryType) {
         case "point": //鐐�
-          var val = that.setCartesianToEightFour(res.position.getValue());
-          res_val = val;
-          that.setTurfCircle([val.lng, val.lat], 10);
-          break;
+          var val = that.setCartesianToEightFour(res.position.getValue())
+          res_val = val
+          that.setTurfCircle([val.lng, val.lat], 10)
+          break
         case "polyline": //绾�
-          var polyline = res.polyline.positions.getValue();
-          res_val = polyline;
-          that.setTurfPolyOrLine(polyline, "polyline");
-          break;
+          var polyline = res.polyline.positions.getValue()
+          res_val = polyline
+          that.setTurfPolyOrLine(polyline, "polyline")
+          break
         case "rectangle": //鐭╁舰
-          let rectangle = res.rectangle.coordinates.getValue();
-          res_val = rectangle;
+          let rectangle = res.rectangle.coordinates.getValue()
+          res_val = rectangle
           var result = new Cesium.Rectangle.subsample(
             rectangle,
             Cesium.Ellipsoid.WGS84,
             rectangle.height
-          );
-          that.setTurfPolyOrLine(result, "rectangle");
+          )
+          that.setTurfPolyOrLine(result, "rectangle")
 
-          break;
+          break
         case "circle": //鍦�
-          var val = that.setCartesianToEightFour(res.position.getValue());
-          res_val = res.position.getValue();
-          var radius = res.ellipse.semiMajorAxis.getValue();
-          that.setTurfCircle([val.lng, val.lat], radius);
-          break;
+          var val = that.setCartesianToEightFour(res.position.getValue())
+          res_val = res.position.getValue()
+          var radius = res.ellipse.semiMajorAxis.getValue()
+          that.setTurfCircle([val.lng, val.lat], radius)
+          break
         case "polygon": //澶氳竟褰�
-          var polygon = res.polygon.hierarchy.getValue().positions;
-          res_val = polygon;
-          that.setTurfPolyOrLine(polygon, "polygon");
-          break;
+          var polygon = res.polygon.hierarchy.getValue().positions
+          res_val = polygon
+          that.setTurfPolyOrLine(polygon, "polygon")
+          break
       }
-      this.flyEntity = res_val;
+      this.flyEntity = res_val
     },
     setTurfCircle(position, radius) {
       var options = {
         steps: 10,
         units: "meters",
         properties: { foo: "bar" },
-      };
-      var circle = turf.circle(position, radius, options);
+      }
+      var circle = turf.circle(position, radius, options)
 
-      this.setJonToWKT(circle);
+      this.setJonToWKT(circle)
     },
     setTurfPolyOrLine(res, type) {
       var restVal,
-        std = [];
+        std = []
       for (var i in res) {
-        var line_data = this.setCartesianToEightFour(res[i]);
-        std.push([line_data.lng, line_data.lat]);
+        var line_data = this.setCartesianToEightFour(res[i])
+        std.push([line_data.lng, line_data.lat])
       }
       if (type == "polyline") {
-        var line = turf.lineString(std, { name: "polyline" });
-        restVal = turf.buffer(line, 10, { units: "meters" });
+        var line = turf.lineString(std, { name: "polyline" })
+        restVal = turf.buffer(line, 10, { units: "meters" })
       } else if (type == "rectangle") {
-        var ste = this.setCartesianToEightFour(res[0]);
-        std.push([ste.lng, ste.lat]);
-        restVal = turf.polygon([std], { name: "rectangle" });
+        var ste = this.setCartesianToEightFour(res[0])
+        std.push([ste.lng, ste.lat])
+        restVal = turf.polygon([std], { name: "rectangle" })
       } else if (type == "polygon") {
-        var ste = this.setCartesianToEightFour(res[0]);
-        std.push([ste.lng, ste.lat]);
-        restVal = turf.polygon([std], { name: "polygon" });
+        var ste = this.setCartesianToEightFour(res[0])
+        std.push([ste.lng, ste.lat])
+        restVal = turf.polygon([std], { name: "polygon" })
       }
-      this.setJonToWKT(restVal);
+      console.log("restVal", restVal)
+      this.setJonToWKT(restVal)
     },
 
     setJonToWKT(res) {
-      var jsonToWkt = this.$wkt.convert(res.geometry);
-      this.$store.state.mapMenuShpFile = encr(jsonToWkt);
+      let fixedVal = this.fixToPositon(res)
+      var jsonToWkt = this.$wkt.convert(fixedVal.geometry)
+      this.$store.state.mapMenuShpFile = encr(jsonToWkt)
 
-      this.showMapMenuPop();
+      this.showMapMenuPop()
     },
     showMapMenuPop() {
-      this.$store.state.mapSpaceQueryLayer = this.treeChange;
-      this.$store.state.mapPopBoxFlag = "1";
-      this.$refs && this.$refs.queryinfo && this.$refs.queryinfo.close();
+      this.$store.state.mapSpaceQueryLayer = this.treeChange
+      this.$store.state.mapPopBoxFlag = "1"
+      this.$refs && this.$refs.queryinfo && this.$refs.queryinfo.close()
       this.$refs &&
         this.$refs.queryinfo &&
         this.$refs.queryinfo.open("绌洪棿鏌ヨ", null, {
@@ -392,50 +529,187 @@
             //   window.Viewer.scene.primitives.removeAll()
             // }
           },
-        });
+        })
       // this.$bus.$emit('changeMapMenuTop', 'true');
 
       // sgworld.Creator.SimpleGraphic.clear();
       //娓呯┖inputFile
       // var file = document.getElementById('getMenuTopFile');
       // file.outerHTML = file.outerHTML;
-      this.$refs.pathClear.value = "";
+      this.$refs.pathClear.value = ""
     },
     clearQuery() {
-      this.$refs.pathClear.value = "";
-      this.treeChange = [];
-      this.menuTopFrom.queryLayer = null;
-      this.menuTopFrom.queryType = "rectangle";
-      this.$refs.tree.setCheckedKeys([]);
+      // 娓呮buffer
+      this.clearBufferEntities()
+      this.$refs.pathClear.value = ""
+      this.treeChange = []
+      this.menuTopFrom.queryLayer = null
+      this.menuTopFrom.queryType = "rectangle"
+      this.$refs.tree.setCheckedKeys([])
       //娓呯┖鏍囩粯
-      sgworld.Creator.SimpleGraphic.edit(false, { editProp: false });
-      sgworld.Creator.SimpleGraphic.clear();
+      sgworld.Creator.SimpleGraphic.edit(false, { editProp: false })
+      sgworld.Creator.SimpleGraphic.clear()
       if (this.$store.state.queryInfo.length != 0) {
         for (var i in this.$store.state.queryInfo) {
-          sgworld.Viewer.entities.remove(this.$store.state.queryInfo[i]);
+          sgworld.Viewer.entities.remove(this.$store.state.queryInfo[i])
         }
-        this.$store.state.queryInfo = [];
+        this.$store.state.queryInfo = []
       }
       //鍏抽棴绐楀彛
       this.$refs &&
         this.$refs.queryinfo &&
-        this.$refs.queryinfo.close("queryinfo");
+        this.$refs.queryinfo.close("queryinfo")
       if (this.$store.state.primitLayer != null) {
-        sgworld.Creator.DeleteObject(this.$store.state.primitLayer);
-        this.$store.state.primitLayer = null;
+        sgworld.Creator.DeleteObject(this.$store.state.primitLayer)
+        this.$store.state.primitLayer = null
       }
     },
     setCartesianToEightFour(res) {
-      var std = {};
-      let ellipsoid = Viewer.scene.globe.ellipsoid;
-      let cartographic = ellipsoid.cartesianToCartographic(res);
-      std.lat = Cesium.Math.toDegrees(cartographic.latitude);
-      std.lng = Cesium.Math.toDegrees(cartographic.longitude);
-      std.alt = cartographic.height;
-      return std;
+      var std = {}
+      let ellipsoid = Viewer.scene.globe.ellipsoid
+      let cartographic = ellipsoid.cartesianToCartographic(res)
+      std.lat = Cesium.Math.toDegrees(cartographic.latitude)
+      std.lng = Cesium.Math.toDegrees(cartographic.longitude)
+      std.alt = cartographic.height
+      return std
     },
+    async getPipelineData() {
+      const data = await pipelines_selectSegNames()
+      if (data.code != 200) {
+        this.$message.error("鍒楄〃璋冪敤澶辫触")
+      }
+      var std = []
+      var str = []
+      var result = data.result
+      for (var i in result) {
+        if (std.indexOf(result[i].pipeName) == -1) {
+          std.push(result[i].pipeName)
+          str.push(result[i])
+        }
+      }
+      this.featureLayer = data.result
+      this.pipelineOption = str
+      this.menuTopFrom.pipeline = this.pipelineOption[0].pipeName
+      this.changeSelect2(this.menuTopFrom.pipeline)
+    },
+    async genBuffer() {
+      let { pipeline, segName } = this.menuTopFrom
+      let params = { name: pipeline }
+      // let params = { name: "瑗挎皵涓滆緭涓�绾�" }
+
+      const res = await selectPipelines(params)
+      if (res.code == 200) {
+        const item = res.result.find(item => item.gid == this.analyGid)
+        console.log("selectPipelines", item)
+        const wkt = item.wkt
+
+        if (item && wkt) {
+          const line = wktToGeoJSON(wkt)
+
+          let position = line.coordinates
+          if (wkt.includes("MULTILINESTRING")) {
+            position = line.coordinates.flat()
+          }
+          this.bufferLinePosition = position
+          if (this.dialogFormVisible) {
+            this.createBuffer()
+          }
+        }
+      }
+    },
+    createBuffer() {
+      this.clearBufferEntities()
+      const position = this.bufferLinePosition
+      const buffRadius = this.menuTopFrom.bufferSize
+      var polylineF = turf.lineString(position)
+      var bufferd = turf.buffer(polylineF, buffRadius, { units: "meters" })
+      var coordinates = bufferd.geometry.coordinates
+      // console.log("coordinates", coordinates)
+
+      var points = coordinates[0]
+      var degreesArray = this.pointsToDegreesArray(points)
+      let array = Cesium.Cartesian3.fromDegreesArray(degreesArray)
+      const hierarchy = new Cesium.PolygonHierarchy(array)
+      const bufferPolygon = sgworld.Viewer.entities.add({
+        polygon: {
+          hierarchy: hierarchy,
+          material: Cesium.Color.RED.withAlpha(0.5),
+          classificationType: Cesium.ClassificationType.BOTH,
+        },
+      })
+      this.bufferEntities.push(bufferPolygon)
+      let res = hierarchy.positions
+      sgworld.Navigate.flyToObj(bufferPolygon)
+      this.flyEntity = res
+    },
+    changeBufferData() {
+      this.dialogFormVisible = false
+      let res = this.flyEntity
+      let restVal,
+        std = []
+      for (let i in res) {
+        let line_data = this.setCartesianToEightFour(res[i])
+        std.push([line_data.lng, line_data.lat])
+      }
+      restVal = turf.polygon([std], { name: "polygon" })
+
+      console.log("bufferPolygon", res)
+
+      console.log("bufferPolygon", restVal)
+      this.setJonToWKT(restVal)
+    },
+
+    pointsToDegreesArray(points) {
+      let degreesArray = []
+      points.forEach(item => {
+        degreesArray.push(item[0])
+        degreesArray.push(item[1])
+      })
+      return degreesArray
+    },
+    clearBufferEntities() {
+      this.bufferEntities.forEach(entity => {
+        sgworld.Viewer.entities.remove(entity)
+      })
+      this.flyEntity = null
+    },
+    changeSelect2(res) {
+      var value = this.featureLayer
+      let option = []
+      for (var i in value) {
+        if (value[i].pipeName == res) {
+          option.push(value[i])
+        }
+      }
+      this.segNameOption = option
+      this.menuTopFrom.segName = option[0].segName || "<绌�>"
+      this.analyGid = option[0].gid
+      this.genBuffer()
+    },
+    selectChangeGid(res) {
+      this.analyGid = res
+    },
+    fixToPositon(restVal, digits = 6) {
+      restVal.geometry.coordinates.forEach(coord => {
+        if (Array.isArray(coord)) {
+          coord.forEach(item => {
+            if (item.length >= 2) {
+              item[0] = Number(item[0].toFixed(digits))
+              item[1] = Number(item[1].toFixed(digits))
+            }
+          })
+        }
+      })
+      return restVal
+    },
+    handleBufferChange(val, oldVal) {
+      this.createBuffer()
+    },
+    dialogOpend() {
+      this.createBuffer()
+    }
   },
-};
+}
 </script>
 
 <style lang="less" scoped>
@@ -453,4 +727,47 @@
   padding: 4px 20px;
   font-weight: 400;
 }
+.buffer-dialog {
+  width: 300px;
+  height: 300px;
+  background-color: rgba(244, 248, 255, 0.85) !important;
+  .el-dialog__body {
+    .el-form-item {
+      margin-bottom: 20px !important;
+    }
+  }
+}
+</style>
+
+<style lang="less">
+.menuBox {
+  .el-dialog__wrapper {
+    pointer-events: none;
+    .buffer-dialog {
+      top: 355px;
+      background-color: rgba(244, 248, 255, 0.85) !important;
+      border: 1px solid rgba(32, 160, 255, 0.6);
+      color: #202020;
+      .el-dialog__body,
+      .el-dialog__header,
+      .el-dialog__footer {
+        pointer-events: auto;
+      }
+      .el-dialog__header {
+        padding: 10px 20px;
+        border-bottom: 1px solid rgba(32, 160, 255, 0.6);
+
+        .el-dialog__headerbtn {
+          top: 10px;
+          font-size: 18px;
+        }
+      }
+      .el-form-item {
+        .el-input-number {
+          width: 202px;
+        }
+      }
+    }
+  }
+}
 </style>

--
Gitblit v1.9.3