Browse Source

合并中图的代码

lkk 10 months ago
parent
commit
f6c61c2d50
44 changed files with 15535 additions and 64 deletions
  1. 1644 0
      package-lock.json
  2. 6 1
      package.json
  3. 700 0
      src/components/Combinations/NightscapeAnalysis/index.js
  4. 1224 0
      src/components/Combinations/NightscapeAnalysis/index1.js
  5. 15 1
      src/components/sceneAtttribute/basicOptions/basicOptions.vue
  6. 5 0
      src/main.js
  7. 2 1
      src/resource/resourceCN.js
  8. 5 0
      src/store/store.js
  9. 81 0
      src/utils/MapHelper/MapHelper.js
  10. 0 0
      src/views/ConstructionApplication3D/3维报建.txt
  11. 68 0
      src/views/ConstructionApplication3D/ConstructionModelInfo/ConstructionModelInfo.vue
  12. 112 0
      src/views/ConstructionApplication3D/ConstructionModelInfo/addConstructionModelInfo.vue
  13. 130 0
      src/views/ConstructionApplication3D/HighLimitAnalysis/HighLimitAnalysis.vue
  14. 1013 0
      src/views/ConstructionApplication3D/NightscapeAnalysis/NightscapeAnalysis.vue
  15. 56 0
      src/views/ConstructionApplication3D/PlanningPlot/PlanningPlotInfo.vue
  16. 443 0
      src/views/ConstructionApplication3D/SunlightAnalysis/SunlightAnalysis.vue
  17. 207 0
      src/views/ConstructionApplication3D/ZBFXAnalysisinfo/ZBFXAnalysisinfo.vue
  18. 183 0
      src/views/ConstructionApplication3D/ZYAnalysisinfo/ZYAnalysisinfo.vue
  19. 220 0
      src/views/ConstructionApplication3D/backLineAnalysis/backLineAnalysisinfo.vue
  20. 184 0
      src/views/ConstructionApplication3D/projectInfo/addProjectInfo.vue
  21. 77 0
      src/views/ConstructionApplication3D/projectInfo/projectInfo.vue
  22. 2170 0
      src/views/ConstructionApplication3D/projectManagement/projectManagement.vue
  23. 443 0
      src/views/ConstructionApplication3D/skylineAnalysis/skylineAnalysis.vue
  24. 133 0
      src/views/ConstructionApplication3D/zt.scss
  25. 33 2
      src/views/checkmodel.vue
  26. 81 0
      static/Config/config copy.js
  27. 909 58
      static/Config/config.js
  28. BIN
      static/ModelData/billboard/box.bin
  29. 131 0
      static/ModelData/billboard/box.gltf
  30. BIN
      static/ModelData/billboard/guanggaopai.bin
  31. 239 0
      static/ModelData/billboard/guanggaopai.gltf
  32. 13 0
      static/ModelData/billboard/web.config
  33. 27 1
      static/css/index.css
  34. 1141 0
      static/data/fg.json
  35. 2292 0
      static/data/ld.json
  36. 637 0
      static/data/light.json
  37. 911 0
      static/data/lightPoint3D.json
  38. BIN
      static/images/zt/Nightscape/BlackMarble_2016-1.jpg
  39. BIN
      static/images/zt/Nightscape/Texture01.jpg
  40. BIN
      static/images/zt/Nightscape/Texture02.jpg
  41. BIN
      static/images/zt/Nightscape/Texture03.jpg
  42. BIN
      static/images/zt/Nightscape/Texture04.jpg
  43. BIN
      static/images/zt/Nightscape/Texture05.jpg
  44. BIN
      static/images/zt/Nightscape/blmq.jpg

File diff suppressed because it is too large
+ 1644 - 0
package-lock.json


+ 6 - 1
package.json

@@ -10,14 +10,19 @@
         "build": "node build/build.js"
     },
     "dependencies": {
+        "@turf/turf": "^7.0.0",
         "axios": "^0.19.2",
         "echarts": "^4.8.0",
-        "highcharts": "^9.2.2",
         "element-ui": "^2.15.14",
+        "highcharts": "^9.2.2",
         "lodash": "^4.17.19",
+        "lodash-es": "^4.17.21",
+        "moment": "^2.30.1",
+        "proj4": "^2.11.0",
         "url-loader": "^4.1.0",
         "view-design": "^4.3.2",
         "vue": "^2.6.12",
+        "vue-layer": "^1.2.5",
         "vue-lazyload": "^1.3.3",
         "vue-template-compiler": "2.6.12"
     },

+ 700 - 0
src/components/Combinations/NightscapeAnalysis/index.js

@@ -0,0 +1,700 @@
+const Nightscape = {
+  GeoJsonLayerList: [],
+  liudongGntities: [],
+  routesGroupByAirline: {},
+  //打开夜景
+  openNightSwitch() {
+    store.state.isNightSwitch = true;
+    this.startNight(true);
+  },
+  closNightSwitch() {
+    store.state.isNightSwitch = false;
+    this.startNight(false);
+  },
+
+  //夜景开关
+  startNight(isNight) {
+    let that = this;
+    scene.globe.show = true;
+    viewer.scene.hdrEnabled = isNight;
+    viewer.scene.bloomEffect.show = false;
+
+    // 是否开启夜景
+    if (!isNight) {
+      scene.sun.show = true;
+      this.clearLightSource(true, true);
+
+      scene.skyAtmosphere.show = true;
+
+      this.switchLight(true); //白天
+      this.setHypsometric(false); //夜景材质
+      viewer.imageryLayers.remove(this.imageLayer);
+    } else {
+      scene.sun.show = false;
+
+      // 泛光线
+      let roadLine1 = Cesium.GeoJsonDataSource.load("static/data/fg.json");
+
+      roadLine1
+        .then(function (dataSource) {
+          viewer.dataSources.add(dataSource);
+          that.GeoJsonLayerList.push(dataSource);
+          let lines_1 = dataSource.entities.values;
+          for (let i = 0; i < lines_1.length; i++) {
+            let line = lines_1[i];
+            line.polyline.material = new Cesium.PolylineGlowMaterialProperty({
+              //设置Glow材质
+              glowPower: 0.005,
+              color: Cesium.Color.ORANGE.withAlpha(0.9),
+            });
+            line.polyline.width = 50;
+          }
+        })
+        .otherwise(function (error) {
+          window.alert(error);
+        });
+      let roadLine2 = Cesium.GeoJsonDataSource.load("static/data/fg.json");
+
+      roadLine2
+        .then(function (dataSource) {
+          viewer.dataSources.add(dataSource);
+          that.GeoJsonLayerList.push(dataSource);
+          let lines_1 = dataSource.entities.values;
+          for (let i = 0; i < lines_1.length; i++) {
+            let line = lines_1[i];
+            line.polyline.material = new Cesium.PolylineGlowMaterialProperty({
+              //设置Glow材质
+              glowPower: 0.001,
+              color: Cesium.Color.white,
+            });
+            line.polyline.width = 5;
+          }
+        })
+        .otherwise(function (error) {
+          window.alert(error);
+        });
+
+      //一山湖灯光
+      Cesium.loadJson("static/data/lightPoint3D.json").then((response) => {
+        let features = response.features;
+        features.forEach((element) => {
+          let p = element.geometry.coordinates;
+          var SpotLightPos3 = new Cesium.Cartesian3.fromDegrees(
+            p[0],
+            p[1],
+            p[2] + 20
+          );
+          var SpotLightPos32 = new Cesium.Cartesian3.fromDegrees(
+            p[0],
+            p[1],
+            p[2]
+          );
+          var SpotLightOptions3 = {
+            cutoffDistance: 50,
+            color: Cesium.Color.ORANGE,
+            decay: 1,
+            intensity: 5,
+          };
+
+          let SpotLight33 = new Cesium.PointLight(
+            SpotLightPos3,
+            // SpotLightPos32,
+            SpotLightOptions3
+          );
+          scene.addLightSource(SpotLight33);
+        });
+      });
+      // 道路灯光
+      Cesium.loadJson("static/data/light.json").then((response) => {
+        let features = response.features;
+        features.forEach((element) => {
+          let p = element.geometry.coordinates;
+          var SpotLightPos3 = new Cesium.Cartesian3.fromDegrees(
+            p[0],
+            p[1],
+            p[2] + 4
+          );
+          var SpotLightPos32 = new Cesium.Cartesian3.fromDegrees(
+            p[0],
+            p[1],
+            p[2] + 5
+          );
+          var SpotLightOptions3 = {
+            cutoffDistance: 50,
+            color: Cesium.Color.YELLOWGREEN,
+            decay: 1,
+            intensity: 5,
+          };
+
+          let SpotLight33 = new Cesium.PointLight(
+            SpotLightPos3,
+            // SpotLightPos32,
+            SpotLightOptions3
+          );
+          scene.addLightSource(SpotLight33);
+        });
+      });
+
+      this.loadldx();
+      this.switchLight(false);
+      scene.skyAtmosphere.show = false;
+
+      this.setHypsometric(true); //夜景
+      // this.imageLayer = viewer.imageryLayers.addImageryProvider(
+      //   new Cesium.SingleTileImageryProvider({
+      //     url: "static/images/zt/Nightscape/BlackMarble_2016-1.jpg",
+      //   })
+      // );
+    }
+  },
+
+  //设置环境光
+  switchLight(isDayLight) {
+    this.pointLight3 && scene.removeLightSource(this.pointLight3);
+    this.pointLight4 && scene.removeLightSource(this.pointLight4);
+    this.pointLight5 && scene.removeLightSource(this.pointLight5);
+    this.pointLight7 && scene.removeLightSource(this.pointLight7);
+    this.pointLight8 && scene.removeLightSource(this.pointLight8);
+    if (isDayLight) {
+      //设置环境光(白天)
+      scene.lightSource.ambientLightColor = new Cesium.Color(
+        0.65,
+        0.65,
+        0.65,
+        1
+      );
+    } else {
+      //设置环境光(夜晚)
+      scene.lightSource.ambientLightColor = new Cesium.Color(0.3, 0.3, 0.3, 1);
+      // 添加光源
+      let gyData1 = {
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.49115721355469,
+          18.29592136116859,
+          80
+        ),
+        gyDecay: 1,
+        gyDistance: 800,
+        gyColor: "rgba(255,20,147,0.37)",
+        gyIntensity: 2,
+      };
+      this.addLightSource(gyData1);
+
+      // this.addLightSource({
+      //   gyType: "点光源",
+      //   cartesian: new Cesium.Cartesian3.fromDegrees(
+      //     109.6079329911436,
+      //     18.310670039641714,
+      //     104.613270676019
+      //   ),
+      //   gyDecay: 1,
+      //   gyDistance: 800,
+      //   gyColor: "rgba(24,58,223,0.37)",
+      //   gyIntensity: 2,
+      // });
+      // this.addLightSource({
+      //   gyType: "点光源",
+      //   cartesian: new Cesium.Cartesian3.fromDegrees(
+      //     109.61138349602973,
+      //     18.296610495283307,
+      //     9.769711663871565
+      //   ),
+      //   gyDecay: 1,
+      //   gyDistance: 800,
+      //   gyColor: "rgba(223,180,24,0.37)",
+      //   gyIntensity: 2,
+      // });
+      // this.addLightSource({
+      //   gyType: "点光源",
+      //   cartesian: new Cesium.Cartesian3.fromDegrees(
+      //     109.58898183696803,
+      //     18.28649670891257,
+      //     332.7422530865857
+      //   ),
+      //   gyDecay: 1,
+      //   gyDistance: 800,
+      //   gyColor: "rgba(255,20,147,0.37)",
+      //   gyIntensity: 2,
+      // });
+      // this.addLightSource({
+      //   gyType: "点光源",
+      //   cartesian: new Cesium.Cartesian3.fromDegrees(
+      //     109.57512831644493,
+      //     18.279469823015905,
+      //     244.14713841291658
+      //   ),
+      //   gyDecay: 1,
+      //   gyDistance: 800,
+      //   gyColor: "rgba(24,58,223,0.37)",
+      //   gyIntensity: 2,
+      // });
+      this.addLightSource({
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.56270977207416,
+          18.28546598637503,
+          70.0960298993050763
+        ),
+        gyDecay: 1,
+        gyDistance: 800,
+        gyColor: "rgba(223,180,24,0.37)",
+        gyIntensity: 2,
+      });
+      this.addLightSource({
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.56270977207416,
+          18.28546598637503,
+          70.0960298993050763
+        ),
+        gyDecay: 1,
+        gyDistance: 800,
+        gyColor: "rgba(255,20,147,0.37)",
+        gyIntensity: 2,
+      });
+      this.addLightSource({
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.56083314352482,
+          18.27297006854974,
+          621.4910706459265
+        ),
+        gyDecay: 1,
+        gyDistance: 800,
+        gyColor: "rgba(24,58,223,0.37)",
+        gyIntensity: 2,
+      });
+      this.addLightSource({
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.55027179756887,
+          18.287402367862544,
+          98.73948357746379
+        ),
+        gyDecay: 1,
+        gyDistance: 800,
+        gyColor: "rgba(223,180,24,0.37)",
+        gyIntensity: 2,
+      });
+      this.addLightSource({
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.53462553327488,
+          18.29891230375388,
+          554.7880928785912
+        ),
+        gyDecay: 1,
+        gyDistance: 800,
+        gyColor: "rgba(255,20,147,0.37)",
+        gyIntensity: 2,
+      });
+      // this.addLightSource({
+      //   gyType: "点光源",
+      //   cartesian: new Cesium.Cartesian3.fromDegrees(
+      //     109.51271119523052,
+      //     18.293051443689386,
+      //     428.19406143521695
+      //   ),
+      //   gyDecay: 1,
+      //   gyDistance: 800,
+      //   gyColor: "rgba(24,58,223,0.37)",
+      //   gyIntensity: 2,
+      // });
+      // this.addLightSource({
+      //   gyType: "点光源",
+      //   cartesian: new Cesium.Cartesian3.fromDegrees(
+      //     109.48738434510864,
+      //     18.273643336979767,
+      //     354.9186201547403
+      //   ),
+      //   gyDecay: 1,
+      //   gyDistance: 800,
+      //   gyColor: "rgba(223,180,24,0.37)",
+      //   gyIntensity: 2,
+      // });
+      // this.addLightSource({
+      //   gyType: "点光源",
+      //   cartesian: new Cesium.Cartesian3.fromDegrees(
+      //     109.49994523723544,
+      //     18.249446304749195,
+      //     277.59351376153506
+      //   ),
+      //   gyDecay: 1,
+      //   gyDistance: 800,
+      //   gyColor: "rgba(255,20,147,0.37)",
+      //   gyIntensity: 2,
+      // });
+      // this.addLightSource({
+      //   gyType: "点光源",
+      //   cartesian: new Cesium.Cartesian3.fromDegrees(
+      //     109.51307820456893,
+      //     18.227901513923584,
+      //     475.587615015969
+      //   ),
+      //   gyDecay: 1,
+      //   gyDistance: 800,
+      //   gyColor: "rgba(255,20,147,0.37)",
+      //   gyIntensity: 2,
+      // });
+
+      //主建筑光源
+      let gyData2 = {
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.55348802331464,
+          18.278824564764143,
+          80
+        ),
+        gyDecay: 1,
+        gyDistance: 800,
+        gyColor: "rgba(240,248,255,1)",
+        gyIntensity: 1,
+      };
+      this.addLightSource(gyData2);
+      let gyData3 = {
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.54991809813524,
+          18.28458792962873,
+          80
+        ),
+        gyDecay: 1,
+        gyDistance: 800,
+        gyColor: "rgba(240,248,255,1)",
+        gyIntensity: 1,
+      };
+      this.addLightSource(gyData3);
+
+      let gyData4 = {
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.5490688547866,
+          18.283227701313386,
+          40
+        ),
+        gyDecay: 2,
+        gyDistance: 80,
+        gyColor: "rgba(13,128,247,0.15)",
+        gyIntensity: 0.5,
+      };
+      this.addLightSource(gyData4);
+      let gyData5 = {
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.55236475164054,
+          18.278884181031398,
+          40
+        ),
+        gyDecay: 2,
+        gyDistance: 80,
+        gyColor: "rgba(13,128,247,0.15)",
+        gyIntensity: 0.5,
+      };
+      this.addLightSource(gyData5);
+      let gyData6 = {
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.55195212379788,
+          18.283303465199854,
+          40
+        ),
+        gyDecay: 2,
+        gyDistance: 80,
+        gyColor: "rgba(13,128,247,0.15)",
+        gyIntensity: 0.5,
+      };
+      this.addLightSource(gyData6);
+      let gyData7 = {
+        gyType: "点光源",
+        cartesian: new Cesium.Cartesian3.fromDegrees(
+          109.55549715519659,
+          18.279573531714174,
+          40
+        ),
+        gyDecay: 2,
+        gyDistance: 80,
+        gyColor: "rgba(13,128,247,0.15)",
+        gyIntensity: 0.5,
+      };
+      this.addLightSource(gyData7);
+
+      // 新增直射光1--西南侧光
+      var position = new Cesium.Cartesian3.fromDegrees(109.437, 18.571, 71);
+      var targetPosition1 = new Cesium.Cartesian3.fromDegrees(
+        109.436,
+        18.569,
+        1
+      );
+      var dirLightOptions = {
+        targetPosition: targetPosition1,
+        color: new Cesium.Color(1, 1.54, 2.3, 1),
+        intensity: 0.15,
+      };
+      this.directionalLight_1 &&
+        scene.removeLightSource(this.directionalLight_1);
+      this.directionalLight_1 = new Cesium.DirectionalLight(
+        position,
+        dirLightOptions
+      );
+      scene.addLightSource(this.directionalLight_1);
+
+      //新增直射光1--东北侧光
+      var position3 = new Cesium.Cartesian3.fromDegrees(109.452, 18.573, 1);
+      var targetPosition3 = new Cesium.Cartesian3.fromDegrees(
+        109.454,
+        18.581,
+        91
+      );
+      var dirLightOptions3 = {
+        targetPosition: targetPosition3,
+        color: new Cesium.Color(1, 2, 3, 1),
+        intensity: 0.15,
+      };
+      this.directionalLight_3 &&
+        scene.removeLightSource(this.directionalLight_3);
+      this.directionalLight_3 = new Cesium.DirectionalLight(
+        position3,
+        dirLightOptions3
+      );
+      scene.addLightSource(this.directionalLight_3);
+      //新增直射光1--顶光
+      var position4 = new Cesium.Cartesian3.fromDegrees(
+        109.5522832294492,
+        18.282870873117414,
+        500
+      );
+      var targetPosition4 = new Cesium.Cartesian3.fromDegrees(
+        109.5522832294492,
+        18.282870873117414,
+        100
+      );
+      var dirLightOptions4 = {
+        targetPosition: targetPosition4,
+
+        color: Cesium.Color.SILVER.withAlpha(0.1),
+        intensity: 0.4,
+      };
+      this.directionalLight_4 &&
+        scene.removeLightSource(this.directionalLight_4);
+      this.directionalLight_4 = new Cesium.DirectionalLight(
+        position4,
+        dirLightOptions4
+      );
+      scene.addLightSource(this.directionalLight_4);
+    }
+  },
+  //设置白膜自发光纹理
+  setHypsometric(isShow = true) {
+    if (isShow) {
+      scene.layers.layerQueue.forEach((layer) => {
+        let hyp = null;
+        switch (layer.name) {
+          case "DatasetModel@sanyaDatasource":
+            // 关掉边框线
+            layer.style3D.fillStyle = Cesium.FillStyle.Fill;
+            hyp = new Cesium.HypsometricSetting();
+            hyp.emissionTextureArray = [
+              {
+                url: "static/images/zt/Nightscape/Texture03.jpg",
+                USpeed: 0,
+                VSpeed: 0,
+                UTiling: 100,
+                VTiling: 100,
+              },
+              {
+                url: "static/images/zt/Nightscape/Texture04.jpg",
+                USpeed: 0,
+                VSpeed: 0,
+                UTiling: 80,
+                VTiling: 80,
+              },
+              {
+                url: "static/images/zt/Nightscape/blmq.jpg",
+                USpeed: 0,
+                VSpeed: 0,
+                UTiling: 100,
+                VTiling: 100,
+              },
+              {
+                url: "static/images/zt/Nightscape/blmq.jpg",
+                USpeed: 0,
+                VSpeed: 0,
+                UTiling: 100,
+                VTiling: 100,
+              },
+              {
+                url: "static/images/zt/Nightscape/Texture05.jpg",
+                USpeed: 0.5,
+                VSpeed: 0,
+                UTiling: 50,
+                VTiling: 50,
+              },
+              {
+                url: "static/images/zt/Nightscape/Texture03.jpg",
+                USpeed: 0,
+                VSpeed: 0,
+                UTiling: 10,
+                VTiling: 10,
+              },
+              {
+                url: "static/images/zt/Nightscape/Texture03.jpg",
+                USpeed: 0,
+                VSpeed: 0,
+                UTiling: 5,
+                VTiling: 5,
+              },
+              {
+                url: "static/images/zt/Nightscape/Texture03.jpg",
+                USpeed: 0,
+                VSpeed: 0,
+                UTiling: 100,
+                VTiling: 100,
+              },
+              {
+                url: "static/images/zt/Nightscape/Texture04.jpg",
+                USpeed: 0,
+                VSpeed: 0,
+                UTiling: 70,
+                VTiling: 70,
+              },
+              {
+                url: "static/images/zt/Nightscape/Texture02.jpg",
+                USpeed: 0,
+                VSpeed: 0,
+                UTiling: 70,
+                VTiling: 70,
+              },
+            ];
+            layer.hypsometricSetting = {
+              hypsometricSetting: hyp,
+            };
+            // layer.refresh();
+            break;
+          case "mesh@YiShanHu":
+
+          default:
+            break;
+        }
+      });
+    } else {
+      scene.layers.layerQueue.forEach((layer) => {
+        layer.hypsometricSetting = {
+          hypsometricSetting: undefined,
+        };
+        layer.style3D.fillStyle = Cesium.FillStyle.Fill_And_WireFrame;
+        // 刷新场景
+        // layer.refresh();
+      });
+    }
+  },
+
+  /**
+   * 流动线
+   */
+  loadldx() {
+    let that = this;
+    Cesium.loadJson("static/data/ld.json").then((jsonData) => {
+      jsonData.features.forEach((route) => {
+        let list = route.geometry.coordinates.flat(Infinity);
+        let dl = viewer.entities.add({
+          // 用于打底的线
+          polyline: {
+            positions: Cesium.Cartesian3.fromDegreesArrayHeights(list),
+            width: 3, // 线的宽度,像素为单位
+            material: Cesium.Color.BLACK.withAlpha(0.3),
+          },
+        });
+        this.liudongGntities.push(dl);
+        let dls = viewer.entities.add({
+          id: route.properties.OBJECTID,
+          polyline: {
+            positions: Cesium.Cartesian3.fromDegreesArrayHeights(list),
+            width: 2.0,
+            material: new Cesium.PolylineTrailMaterialProperty({
+              outlineColor: Cesium.Color.WHITE,
+              outlineWidth: 3,
+              color: Cesium.Color.fromCssColorString("rgba(127, 255, 0, 1)"),
+              trailLength: 0.3,
+              period: 4.0,
+            }),
+          },
+        });
+        this.liudongGntities.push(dls);
+      });
+    });
+  },
+  /**
+   * 添加光源
+   * @param {} gyData
+   */
+  addLightSource(gyData) {
+    switch (gyData.gyType) {
+      case "点光源":
+        let option = {
+          color: Cesium.Color.fromCssColorString(gyData.gyColor),
+          cutoffDistance: Number(gyData.gyDistance),
+          decay: Number(gyData.gyDecay),
+          intensity: Number(gyData.gyIntensity),
+        };
+        let pointLight = new Cesium.PointLight(gyData.cartesian, option);
+        scene.addLightSource(pointLight);
+        break;
+      case "聚光灯":
+        let spotLightOptions = {
+          color: Cesium.Color.fromCssColorString(gyData.gyColor),
+          distance: Number(gyData.gyDistance),
+          decay: Number(gyData.gyDecay),
+          intensity: Number(gyData.gyIntensity),
+          angle: Cesium.Math.toRadians(Number(gyData.gyangle)),
+        };
+        let spotLight = new Cesium.SpotLight(
+          gyData.cartesian[0],
+          gyData.cartesian[1],
+          spotLightOptions
+        );
+        scene.addLightSource(spotLight);
+        break;
+      case "直射光":
+        let directionalLightOptions = {
+          targetPosition: gyData.cartesian[1],
+          color: Cesium.Color.fromCssColorString(gyData.gyColor),
+          intensity: Number(gyData.gyIntensity),
+        };
+        let directionalLight = new Cesium.DirectionalLight(
+          gyData.cartesian[0],
+          directionalLightOptions
+        );
+        scene.addLightSource(directionalLight);
+        break;
+      default:
+        break;
+    }
+  },
+
+  /**
+   * 删除灯光
+   * @param isAllRemoveLightSource 是否删除所有灯光
+   */
+  clearLightSource(isAllRemoveLightSource = false) {
+    if (isAllRemoveLightSource) {
+      while (scene.lightSource.pointLight.values.length > 0) {
+        scene.removeLightSource(scene.lightSource.pointLight.values[0]);
+      }
+      while (scene.lightSource.spotLight.values.length > 0) {
+        scene.removeLightSource(scene.lightSource.spotLight.values[0]);
+      }
+      while (scene.lightSource.directionalLight.values.length > 0) {
+        scene.removeLightSource(scene.lightSource.directionalLight.values[0]);
+      }
+      this.GeoJsonLayerList.forEach((element) => {
+        viewer.dataSources.remove(element);
+      });
+      this.liudongGntities.forEach((element) => {
+        viewer.entities.remove(element);
+      });
+    }
+  },
+};
+
+export default Nightscape;

+ 1224 - 0
src/components/Combinations/NightscapeAnalysis/index1.js

@@ -0,0 +1,1224 @@
+const Nightscape = {
+  GeoJsonLayerList: [],
+  liudongGntities: [],
+  routesGroupByAirline: {},
+  //打开夜景
+  openNightSwitch() {
+    store.state.isNightSwitch = true;
+    // this.startNight(true);
+    viewer._cesiumWidget._creditContainer.style.display = "none";
+    viewer.resolutionScale = 1.0;
+    viewer.scene.msaaSamples = 4;
+    viewer.postProcessStages.fxaa.enabled = true;
+    viewer.scene.globe.depthTestAgainstTerrain = true;
+    viewer.scene.debugShowFramesPerSecond = true;
+    // 影像夜晚滤镜
+    viewer.imageryLayers.removeAll();
+    this.imageLayer = viewer.imageryLayers.addImageryProvider(
+      new Cesium.SingleTileImageryProvider({
+        url: "static/images/zt/Nightscape/BlackMarble_2016-1.jpg",
+      })
+    );
+
+    // 场景设置
+    viewer.scene.highDynamicRange = true;
+    viewer.scene.postProcessStages.bloom.enabled = true;
+    viewer.scene.postProcessStages.bloom.uniforms.contrast = 255;
+    viewer.scene.postProcessStages.bloom.uniforms.brightness = 0.05;
+    viewer.scene.postProcessStages.bloom.uniforms.glowOnly = false;
+    viewer.scene.postProcessStages.bloom.uniforms.delta = 1.1;
+    viewer.scene.postProcessStages.bloom.uniforms.sigma = 5;
+    viewer.scene.postProcessStages.bloom.uniforms.stepSize = 0.6;
+    viewer.scene.postProcessStages.bloom.uniforms.isSelected = false;
+    viewer.scene.postProcessStages.bloom.uniforms.selectedBloom = 10;
+    viewer.scene.postProcessStages.bloom.uniforms.bloomColor =
+      Cesium.Color.fromCssColorString("#fafafa");
+    viewer.scene.sun.show = false;
+    viewer.scene.moon.show = false;
+    viewer.scene.undergroundMode = false;
+    viewer.scene.terrainProvider.isCreateSkirt = false;
+    viewer.scene.skyAtmosphere.show = false;
+    viewer.scene.globe.showGroundAtmosphere = false;
+    viewer.scene.globe.enableLighting = false;
+    viewer.scene.fog.enabled = false;
+    // viewer.scene.screenSpaceCameraController.minimumZoomDistance = 0;
+    // viewer.scene.screenSpaceCameraController.maximumZoomDistance = 50000;
+    viewer.clock.currentTime = Cesium.JulianDate.fromIso8601(
+      "2024-01-15T01:00:00Z"
+    );
+    viewer.camera.setView({
+      destination: {
+        x: -2327247.038981403,
+        y: 5390425.690024069,
+        z: 2487093.3146744343,
+      },
+      orientation: {
+        heading: Cesium.Math.toRadians(293.6635524369704),
+        pitch: Cesium.Math.toRadians(-22.617957999782014),
+        roll: Cesium.Math.toRadians(0.0013787893420239103),
+      },
+    });
+    this.initScene();
+    this.initEvent();
+  },
+
+  /**
+   * 初始化场景
+   */
+  async initScene() {
+    const initTiles = async () => {
+      let tilesets = viewer.scene.primitives.add(
+        new Cesium.Cesium3DTileset({
+          url: "static/Static/data/gz/tileset.json",
+        })
+      );
+      tilesets.readyPromise.then(function (tileset) {
+        tileset.style = new Cesium.Cesium3DTileStyle({
+          color: {
+            conditions: [["true", "color('rgb(51, 153, 255)',1)"]],
+          },
+        });
+        viewer.flyTo(tileset);
+      });
+
+      var customShader = new Cesium.CustomShader({
+        lightingModel: 0,
+        fragmentShaderText: `
+                void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {
+                    float _baseHeight = 0.0; // 物体的基础高度,需要修改成一个合适的建筑基础高度
+                    float _heightRange = 60.0; // 高亮的范围(_baseHeight ~ _baseHeight + _      heightRange) 默认是 0-60米
+                    float _glowRange = 300.0; // 光环的移动范围(高度)
+                    float vtxf_height = fsInput.attributes.positionMC.z-_baseHeight;
+                    float vtxf_a11 = fract(czm_frameNumber / 120.0) * 3.14159265 * 2.0;
+                    float vtxf_a12 = vtxf_height / _heightRange + sin(vtxf_a11) * 0.1;
+                    material.diffuse*= vec3(vtxf_a12, vtxf_a12, vtxf_a12);
+                    float vtxf_a13 = fract(czm_frameNumber / 360.0);
+                    float vtxf_h = clamp(vtxf_height / _glowRange, 0.0, 1.0);
+                    vtxf_a13 = abs(vtxf_a13 - 0.5) * 2.0;
+                    float vtxf_diff = step(0.005, abs(vtxf_h - vtxf_a13));
+                    material.diffuse += material.diffuse * (1.0 - vtxf_diff);
+                }       
+                `,
+      });
+      tilesets.customShader = customShader;
+
+      // 白膜建筑
+      building = await Cesium.Cesium3DTileset.fromUrl(
+        "static/Static/data/gz/tileset.json",
+        {
+          customShader: new Cesium.CustomShader({
+            uniforms: {
+              //   u_envTexture: {
+              //     value: new Cesium.TextureUniform({
+              //       url: "static/Static/images/pic.jpg",
+              //     }),
+              //     type: Cesium.UniformType.SAMPLER_2D,
+              //   },
+              //   u_build1: {
+              //     type: Cesium.UniformType.SAMPLER_2D,
+              //     value: new Cesium.TextureUniform({
+              //       url: "static/Static/images/color2.png",
+              //     }),
+              //   },
+              u_lerp: {
+                type: Cesium.UniformType.FLOAT,
+                value: -100,
+              },
+              u_lightPosition: {
+                type: Cesium.UniformType.VEC3,
+                value: Cesium.Cartesian3.fromDegrees(
+                  113.27956833332897,
+                  23.09121843059473,
+                  1
+                ),
+              },
+              u_lightColor: {
+                type: Cesium.UniformType.VEC3,
+                value: Cesium.Color.fromCssColorString("#6900ff"),
+              },
+              u_lightPosition2: {
+                type: Cesium.UniformType.VEC3,
+                value: Cesium.Cartesian3.fromDegrees(
+                  113.35446694395083,
+                  23.13402304623628,
+                  1
+                ),
+              },
+              u_lightColor2: {
+                type: Cesium.UniformType.VEC3,
+                value: Cesium.Color.fromCssColorString("#FF4500"),
+              },
+              u_lightRadius: {
+                type: Cesium.UniformType.FLOAT,
+                value: 2000,
+              },
+              u_play: {
+                type: Cesium.UniformType.BOOL,
+                value: true,
+              },
+              u_lerp2: {
+                type: Cesium.UniformType.FLOAT,
+                value: 0,
+              },
+              u_color: {
+                type: Cesium.UniformType.VEC4,
+                value: Cesium.Color.fromCssColorString("#62809b"),
+              },
+            },
+            mode: Cesium.CustomShaderMode.REPLACE_MATERIAL,
+            lightingModel: 0,
+            fragmentShaderText: `
+                    #define sat( a ) clamp( a, 0.0, 1.0 )
+                    float noise_fun(vec2 co) {   
+                        return fract(sin(dot(co.xy ,vec2(12.45678, 93.970204))) * 4321.12345) * 20.;
+                    }
+                    float getDistanceDecay( float lightDistance, float distance,float decay) {
+                        if ( distance > 0.0 && decay > 0.0 ) {
+                            return pow( sat( - lightDistance / distance + 1.0 ), decay );
+                        }
+                        return 1.0;
+                    }
+                    vec3 addPointLight(vec3 lightPosition, vec3 lightColor, vec3 positionWC , vec3 normal){
+                        float distance = u_lightRadius;
+                        float decay = 1.0;
+                        float lightDistance = length( lightPosition - positionWC );
+                        lightColor *= getDistanceDecay( lightDistance, distance, decay );
+                        return lightColor;
+                    }
+                    void fragmentMain(FragmentInput fsInput,inout czm_modelMaterial material) {
+                        vec3 positionMC = fsInput.attributes.positionMC;
+                        vec3 positionEC = fsInput.attributes.positionEC;
+                        vec3 normalEC = fsInput.attributes.normalEC;
+                        vec3 posToCamera = normalize(-positionEC); 
+                        vec2 uv = fsInput.attributes.texCoord_0;
+                        float diffuseCoefficient = max(0.0, dot(normalEC, vec3(0.2)) * 1.0);
+                        vec4 glColor1 = vec4(0.);
+                        vec4 glColor2 = vec4(0.);
+                        {
+                            float heightInterval = 50.0;
+                            float lineWidth = 10.0;
+                            float modResult = mod(positionMC.z, heightInterval);
+                            vec3 finalColor = vec3(0.3);
+                            vec4 textureColor3 = texture(u_build1,vec2(fract(uv.s),float(uv.t * 5.0) - (czm_frameNumber/60.)));
+                            if (modResult < lineWidth / 2.0) {
+                                finalColor = textureColor3.rgb * 2.5;
+                            }
+                            glColor1.rgb = mix(u_color.rgb * 1.5, finalColor,clamp(positionMC.z / 20., 0.0, 1.0));
+                            glColor1.rgb *= min(diffuseCoefficient + 0.2, 1.0);
+                            glColor1.a = 1.0;
+                        }
+                        {
+                            vec3 coord = normalize(vec3(czm_inverseViewRotation * reflect(posToCamera, normalEC)));
+                            vec4 darkRefColor = texture(u_envTexture, vec2(coord.x, (coord.z - coord.y) / 2.0));
+                            glColor2.rgb = mix(mix(vec3(.2), vec3(.1,.2,.6),clamp(positionMC.z / 400., 0.0, 1.0)) , darkRefColor.rgb ,0.2);
+                            glColor2.rgb *= min(diffuseCoefficient + 0.1, 1.0);
+
+                            // 基础点光源高亮指定范围
+                            glColor2.rgb += addPointLight(
+                                u_lightPosition ,
+                                u_lightColor,
+                                (czm_model * vec4(positionMC,1.0)).xyz ,
+                                normalEC);
+                            glColor2.rgb += addPointLight(
+                                u_lightPosition2 ,
+                                u_lightColor2,
+                                (czm_model * vec4(positionMC,1.0)).xyz ,
+                                normalEC);
+
+                            // cesiumlab 光圈特效
+                            float _baseHeight = 0.0;
+                            float _heightRange = 20.0;
+                            float _glowRange = 300.0;
+                            float czm_height = positionMC.z - _baseHeight;
+                            float czm_a11 = fract(czm_frameNumber / 120.0) * 3.14159265 * 2.0;
+                            float czm_a12 = czm_height / _heightRange + sin(czm_a11) * 0.1;
+                            float times = czm_frameNumber / 60.0;
+                            glColor2.rgb *= vec3(czm_a12);// 渐变
+                            float time = fract(czm_frameNumber / 360.0);
+                            time = abs(time - 0.5) * 2.0;
+                            float czm_h = clamp(czm_height / _glowRange, 0.0, 1.0);
+                            float czm_diff = step(0.005, abs(czm_h - time));
+                            glColor2.rgb += glColor2.rgb * (1.0 - czm_diff);
+                            glColor2.a = 1.0;
+                        }
+        
+                        float noise = noise_fun(vec2(positionMC.x, positionMC.y));
+                        bool condition1 = positionMC.z > (u_lerp + noise);
+                        bool condition2 = u_play && u_lerp < 0. && u_lerp2 < positionEC.x && positionEC.x < u_lerp2 + 350.;
+                        bool condition3 = u_play && u_lerp > 800. && u_lerp2 < positionEC.x && positionEC.x < u_lerp2 + 350.;
+
+                        material.diffuse = mix(glColor2.rgb, glColor1.rgb, float(condition1 || condition2 || condition3));
+                        material.alpha = mix(glColor2.a, glColor1.a, float(condition1 || condition2 || condition3));
+                       
+                    }
+                         `,
+          }),
+        }
+      );
+      viewer.scene.primitives.add(building);
+
+      // 白膜建筑线框渲染
+      building2 = await Cesium.Cesium3DTileset.fromUrl(
+        "static/Static/data/gz/tileset.json",
+        {
+          debugWireframe: true,
+          enableDebugWireframe: true,
+          customShader: new Cesium.CustomShader({
+            mode: Cesium.CustomShaderMode.REPLACE_MATERIAL,
+            lightingModel: 0,
+            uniforms: {
+              u_lerp: {
+                type: Cesium.UniformType.FLOAT,
+                value: 0,
+              },
+              u_color: {
+                type: Cesium.UniformType.VEC4,
+                value: Cesium.Color.fromCssColorString("#62809b"),
+              },
+              u_play: {
+                type: Cesium.UniformType.BOOL,
+                value: true,
+              },
+            },
+            fragmentShaderText: `
+                float noise_fun(vec2 co) {   
+                    return fract(sin(dot(co.xy ,vec2(12.45678, 93.970204))) * 4321.12345) * 20.;
+                }
+                void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {
+                    vec3 positionMC = fsInput.attributes.positionMC;
+                    vec3 positionEC = fsInput.attributes.positionEC;
+                    if(u_play && u_lerp <positionEC.x && positionEC.x < u_lerp + 350.) {
+                        material.diffuse = u_color.rgb;
+                        material.alpha = 1.;
+                    }else {
+                        discard;
+                    }
+                }
+                `,
+          }),
+        }
+      );
+      viewer.scene.primitives.add(building2);
+
+      // 广州塔模型
+      model0 = await Cesium.Cesium3DTileset.fromUrl(
+        "static/Static/data/gzt/tileset.json",
+        {
+          customShader: new Cesium.CustomShader({
+            uniforms: {
+              //   u_build0: {
+              //     type: Cesium.UniformType.SAMPLER_2D,
+              //     value: new Cesium.TextureUniform({
+              //       url: "static/Static/images/color.png",
+              //     }),
+              //   },
+              //   u_build1: {
+              //     type: Cesium.UniformType.SAMPLER_2D,
+              //     value: new Cesium.TextureUniform({
+              //       url: "static/Static/images/color2.png",
+              //     }),
+              //   },
+            },
+            lightingModel: 0,
+            fragmentShaderText: `
+                        void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {
+                            vec3 positionEC = fsInput.attributes.positionEC;
+                            vec3 normalEC = fsInput.attributes.normalEC;
+                            vec2 uv = fsInput.attributes.texCoord_0;
+                            vec3 positionMC = fsInput.attributes.positionMC;
+                            float times = czm_frameNumber / 60.0;
+                            vec4 textureColor = texture(u_build0,vec2(fract(float(uv.s) - times), uv.t));
+                            vec4 textureColor2 = texture(u_build0,vec2(fract(uv.s),float(uv.t) - times));
+                            vec4 textureColor3 = texture(u_build1,vec2(fract(uv.s),float(uv.t * 5.0) - times));
+                            // material
+                            material.diffuse *= textureColor.rgb + textureColor2.rgb + textureColor3.rgb;
+                            material.alpha += textureColor.a + textureColor3.a;
+                        }
+                         `,
+          }),
+          maximumScreenSpaceError: 2,
+        }
+      );
+      viewer.scene.primitives.add(model0);
+      model0.root.transform = generateModelMatrix(
+        [113.31914084147262, 23.10896926740387, 0],
+        [0, 0, 0],
+        [2, 2, 2]
+      );
+    };
+
+    const initWater = async () => {
+      const waterPlane = [];
+      const waterData = await Cesium.Resource.fetchJson({
+        url: "static/Static/data/water.json",
+      });
+      waterData.features.map((feature) => {
+        feature.geometry.coordinates[0].map((coordinate) => {
+          waterPlane.push(Cesium.Cartesian3.fromDegrees(...coordinate));
+        });
+      });
+      const polygon = new Cesium.PolygonGeometry({
+        polygonHierarchy: new Cesium.PolygonHierarchy(waterPlane),
+      });
+      const instance = new Cesium.GeometryInstance({
+        geometry: polygon,
+      });
+      waterPrimitive = new Cesium.GroundPrimitive({
+        geometryInstances: instance,
+        appearance: new Cesium.MaterialAppearance({
+          material: new Cesium.Material({
+            fabric: {
+              uniforms: {
+                baseWaterColor: Cesium.Color.fromCssColorString("#62809b"),
+                blendColor: new Cesium.Color(0, 1, 0.699, 1),
+                refMap: "static/Static/images/color.png",
+                normalMap: "static/Static/images/waterNormals.jpg",
+                frequency: 800,
+                animationSpeed: 0.01,
+                amplitude: 5,
+                specularIntensity: 1,
+                fadeFactor: 3,
+              },
+              source: `
+                        // Thanks for the contribution Jonas
+                        // http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog
+                        
+                        uniform sampler2D refMap;
+                        uniform sampler2D normalMap;
+                        uniform vec4 baseWaterColor;
+                        uniform vec4 blendColor;
+                        uniform float frequency;
+                        uniform float animationSpeed;
+                        uniform float amplitude;
+                        uniform float specularIntensity;
+                        uniform float fadeFactor;
+                        
+                        czm_material czm_getMaterial(czm_materialInput materialInput)
+                        {
+                            czm_material material = czm_getDefaultMaterial(materialInput);
+                        
+                            float time = czm_frameNumber * animationSpeed;
+                        
+                            // fade is a function of the distance from the fragment and the frequency of the waves
+                            float fade = max(1.0, (length(materialInput.positionToEyeEC) / 10000000000.0) * frequency * fadeFactor);
+                        
+                            float specularMapValue = 1.0;
+                        
+                            // note: not using directional motion at this time, just set the angle to 0.0;
+                            vec4 noise = czm_getWaterNoise(normalMap, materialInput.st * frequency, time, 0.0);
+                            vec3 normalTangentSpace = noise.xyz * vec3(1.0, 1.0, (1.0 / amplitude));
+                        
+                            // fade out the normal perturbation as we move further from the water surface
+                            normalTangentSpace.xy /= fade;
+                        
+                            // attempt to fade out the normal perturbation as we approach non water areas (low specular map value)
+                            normalTangentSpace = mix(vec3(0.0, 0.0, 50.0), normalTangentSpace, specularMapValue);
+                        
+                            normalTangentSpace = normalize(normalTangentSpace);
+                        
+                            // get ratios for alignment of the new normal vector with a vector perpendicular to the tangent plane
+                            float tsPerturbationRatio = clamp(dot(normalTangentSpace, vec3(0.0, 0.0, 1.0)), 0.0, 1.0);
+                        
+                            // fade out water effect as specular map value decreases
+                            material.alpha = mix(blendColor.a, baseWaterColor.a, specularMapValue) * specularMapValue;
+                        
+                            // base color is a blend of the water and non-water color based on the value from the specular map
+                            // may need a uniform blend factor to better control this
+                            material.diffuse = mix(blendColor.rgb, baseWaterColor.rgb, specularMapValue);
+                        
+                            // diffuse highlights are based on how perturbed the normal is
+                            material.diffuse += (0.1 * tsPerturbationRatio);
+                        
+                            material.diffuse = material.diffuse;
+
+                            vec2 reflectCoord = gl_FragCoord.xy / czm_viewport.zw; 
+                            vec2 reflectionTexcoord = vec2(1.0 - reflectCoord.x, reflectCoord.y);
+                            material.diffuse += blendColor.rgb * 0.4;
+                            material.diffuse *= 0.5;
+                            material.diffuse *= texture(refMap, reflectionTexcoord + normalTangentSpace.xz * 5.0).rgb;
+
+                            material.normal = normalize(materialInput.tangentToEyeMatrix * normalTangentSpace);
+                        
+                            material.specular = specularIntensity;
+                            material.shininess = 10.0;
+                        
+                            return material;
+                        }
+                        `,
+            },
+          }),
+          translucent: false,
+        }),
+        asynchronous: false,
+      });
+      viewer.scene.primitives.add(waterPrimitive);
+    };
+
+    const initRoad = async () => {
+      const appearance = new Cesium.PolylineMaterialAppearance({
+        material: new Cesium.Material({
+          fabric: {
+            uniforms: {
+              u_color: Cesium.Color.fromCssColorString("#62809b"),
+              u_speed: 200,
+            },
+            source: `
+                        uniform vec4 u_color;
+                        uniform float u_speed;
+                        uniform float u_glow;
+                        czm_material czm_getMaterial(czm_materialInput materialInput){
+                            czm_material material = czm_getDefaultMaterial(materialInput);
+                            vec2 st = materialInput.st;
+                            float t =fract(czm_frameNumber / u_speed);
+                            t *= 1.03;
+                            float alpha = smoothstep(t- 0.03, t, st.s) * step(-t, -st.s);
+                            alpha += 0.1;
+                            vec4 fragColor;
+                            fragColor.rgb = (u_color.rgb) / 0.5;
+                            fragColor = czm_gammaCorrect(fragColor);
+                            material.diffuse = fragColor.rgb;
+                            material.alpha = alpha;
+                            material.emission = fragColor.rgb * 1.5;
+                            return material;
+                        }
+                    `,
+          },
+        }),
+      });
+      const instances = [];
+      const promise = Cesium.GeoJsonDataSource.load(
+        "static/Static/data/guangzhou.geojson"
+      );
+      promise.then((dataSource) => {
+        const entities = dataSource.entities.values;
+        for (let i = 0; i < entities.length; i++) {
+          const entity = entities[i];
+          const instance = new Cesium.GeometryInstance({
+            geometry: new Cesium.PolylineGeometry({
+              positions: entity.polyline.positions.getValue(),
+              width: 3,
+            }),
+          });
+          instances.push(instance);
+        }
+        road = new Cesium.Primitive({
+          geometryInstances: instances,
+          appearance: appearance,
+          asynchronous: false,
+        });
+        viewer.scene.primitives.add(road);
+      });
+    };
+
+    const initFireWorks = async () => {
+      Cesium.Math.setRandomNumberSeed(315);
+      const modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(
+        Cesium.Cartesian3.fromDegrees(
+          113.31889874065983,
+          23.107780636178287,
+          400
+        )
+      );
+      const emitterInitialLocation = new Cesium.Cartesian3(0.0, 100.0, 200.0);
+
+      let particleCanvas;
+
+      function getImage() {
+        if (!Cesium.defined(particleCanvas)) {
+          particleCanvas = document.createElement("canvas");
+          particleCanvas.width = 20;
+          particleCanvas.height = 20;
+          const context2D = particleCanvas.getContext("2d");
+          context2D.beginPath();
+          context2D.arc(8, 8, 8, 0, Cesium.Math.TWO_PI, true);
+          context2D.closePath();
+          context2D.fillStyle = "rgb(255, 255, 255)";
+          context2D.fill();
+        }
+        return particleCanvas;
+      }
+
+      const minimumExplosionSize = 30.0;
+      const maximumExplosionSize = 1000.0;
+      const particlePixelSize = new Cesium.Cartesian2(7.0, 7.0);
+      const burstSize = 400.0;
+      const lifetime = 15.0;
+      const numberOfFireworks = 20.0;
+
+      const emitterModelMatrixScratch = new Cesium.Matrix4();
+
+      function createFirework(offset, color, bursts) {
+        const position = Cesium.Cartesian3.add(
+          emitterInitialLocation,
+          offset,
+          new Cesium.Cartesian3()
+        );
+        const emitterModelMatrix = Cesium.Matrix4.fromTranslation(
+          position,
+          emitterModelMatrixScratch
+        );
+        const particleToWorld = Cesium.Matrix4.multiply(
+          modelMatrix,
+          emitterModelMatrix,
+          new Cesium.Matrix4()
+        );
+        const worldToParticle = Cesium.Matrix4.inverseTransformation(
+          particleToWorld,
+          particleToWorld
+        );
+
+        const size = Cesium.Math.randomBetween(
+          minimumExplosionSize,
+          maximumExplosionSize
+        );
+        const particlePositionScratch = new Cesium.Cartesian3();
+        const force = function (particle) {
+          const position = Cesium.Matrix4.multiplyByPoint(
+            worldToParticle,
+            particle.position,
+            particlePositionScratch
+          );
+          if (Cesium.Cartesian3.magnitudeSquared(position) >= size * size) {
+            Cesium.Cartesian3.clone(Cesium.Cartesian3.ZERO, particle.velocity);
+          }
+        };
+
+        const normalSize =
+          (size - minimumExplosionSize) /
+          (maximumExplosionSize - minimumExplosionSize);
+        const minLife = 0.3;
+        const maxLife = 1.0;
+        const life = normalSize * (maxLife - minLife) + minLife;
+
+        viewer.scene.primitives.add(
+          new Cesium.ParticleSystem({
+            image: getImage(),
+            startColor: color,
+            endColor: color.withAlpha(0.0),
+            particleLife: life,
+            speed: 100.0,
+            imageSize: particlePixelSize,
+            emissionRate: 0,
+            emitter: new Cesium.SphereEmitter(0.5),
+            bursts: bursts,
+            lifetime: lifetime,
+            updateCallback: force,
+            modelMatrix: modelMatrix,
+            emitterModelMatrix: emitterModelMatrix,
+          })
+        );
+      }
+
+      const xMin = -100.0;
+      const xMax = 100.0;
+      const yMin = -80.0;
+      const yMax = 100.0;
+      const zMin = -50.0;
+      const zMax = 50.0;
+
+      const colorOptions = [
+        {
+          minimumRed: 0.75,
+          green: 0.0,
+          minimumBlue: 0.8,
+          alpha: 1.0,
+        },
+        {
+          red: 0.0,
+          minimumGreen: 0.75,
+          minimumBlue: 0.8,
+          alpha: 1.0,
+        },
+        {
+          red: 0.0,
+          green: 0.0,
+          minimumBlue: 0.8,
+          alpha: 1.0,
+        },
+        {
+          minimumRed: 0.75,
+          minimumGreen: 0.75,
+          blue: 0.0,
+          alpha: 1.0,
+        },
+      ];
+
+      for (let i = 0; i < numberOfFireworks; ++i) {
+        const x = Cesium.Math.randomBetween(xMin, xMax);
+        const y = Cesium.Math.randomBetween(yMin, yMax);
+        const z = Cesium.Math.randomBetween(zMin, zMax);
+        const offset = new Cesium.Cartesian3(x, y, z);
+        const color = Cesium.Color.fromRandom(
+          colorOptions[i % colorOptions.length]
+        );
+
+        const bursts = [];
+        for (let j = 0; j < 3; ++j) {
+          bursts.push(
+            new Cesium.ParticleBurst({
+              time: Cesium.Math.nextRandomNumber() * lifetime,
+              minimum: burstSize,
+              maximum: burstSize,
+            })
+          );
+        }
+
+        createFirework(offset, color, bursts);
+      }
+    };
+
+    await initTiles();
+
+    await initWater();
+
+    await initRoad();
+
+    await initFireWorks();
+  },
+
+  /**
+   * 初始化场景事件
+   */
+  async initEvent() {
+    let step = 20;
+    let step2 = 1;
+    let _date = viewer.clock.currentTime,
+      _startTime = Cesium.JulianDate.addSeconds(
+        _date,
+        10,
+        new Cesium.JulianDate()
+      ),
+      _stopTime = Cesium.JulianDate.addSeconds(
+        _date,
+        60,
+        new Cesium.JulianDate()
+      ),
+      _time1 = Cesium.JulianDate.addSeconds(
+        _date,
+        1 * 10,
+        new Cesium.JulianDate()
+      ),
+      _time2 = Cesium.JulianDate.addSeconds(
+        _date,
+        2 * 10,
+        new Cesium.JulianDate()
+      ),
+      _time3 = Cesium.JulianDate.addSeconds(
+        _date,
+        3 * 10,
+        new Cesium.JulianDate()
+      ),
+      _time4 = Cesium.JulianDate.addSeconds(
+        _date,
+        4 * 10,
+        new Cesium.JulianDate()
+      ),
+      _time5 = Cesium.JulianDate.addSeconds(
+        _date,
+        5 * 10,
+        new Cesium.JulianDate()
+      ),
+      _time6 = Cesium.JulianDate.addSeconds(
+        _date,
+        6 * 10,
+        new Cesium.JulianDate()
+      );
+    let _property = new Cesium.SampledProperty(Cesium.Color);
+    _property.addSample(_time1, Cesium.Color.fromCssColorString("#62809b"));
+    _property.addSample(_time2, Cesium.Color.fromCssColorString("#87CEFA"));
+    _property.addSample(_time3, Cesium.Color.fromCssColorString("#003cff"));
+    _property.addSample(_time4, Cesium.Color.fromCssColorString("#F08080"));
+    _property.addSample(_time5, Cesium.Color.fromCssColorString("#FFA500"));
+    _property.addSample(_time6, Cesium.Color.fromCssColorString("#FF4500"));
+    viewer.clock.startTime = _startTime;
+    viewer.clock.stopTime = _stopTime;
+    viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
+    viewer.scene.postUpdate.addEventListener((scene, time) => {
+      // 动态线框扫描
+      if (building2.customShader.uniforms.u_lerp.value < -5000) {
+        step = 20;
+      } else if (building2.customShader.uniforms.u_lerp.value > 5000) {
+        step = -20;
+      }
+      building.customShader.uniforms.u_lerp2.value += step;
+      building2.customShader.uniforms.u_lerp.value += step;
+      // 切换外观
+      if (isPlay) {
+        if (building.customShader.uniforms.u_lerp.value < -300) {
+          step2 = 1;
+        } else if (building.customShader.uniforms.u_lerp.value > 1000) {
+          step2 = -1;
+        }
+      }
+      building.customShader.uniforms.u_lerp.value += step2;
+      // 颜色主题
+      _property.getValue(time) &&
+        (road &&
+          (road.appearance.material.uniforms.u_color =
+            _property.getValue(time)),
+        (building.customShader.uniforms.u_color.value =
+          _property.getValue(time)),
+        (building2.customShader.uniforms.u_color.value =
+          _property.getValue(time)),
+        waterPrimitive &&
+          (waterPrimitive.appearance.material.uniforms.baseWaterColor =
+            _property.getValue(time)));
+    });
+
+    let gui = new dat.GUI();
+    gui
+      .add({ play: true }, "play")
+      .name("自动切换")
+      .onChange(function (value) {
+        isPlay = value;
+      });
+    gui
+      .add({ lerp: -100 }, "lerp", -100, 800, 1)
+      .name("外观过渡")
+      .onChange(function (value) {
+        building.customShader.uniforms.u_lerp.value = value;
+      });
+    gui
+      .add({ play: true }, "play")
+      .name("线框扫描")
+      .onChange(function (value) {
+        building.customShader.uniforms.u_play.value = value;
+        building2.customShader.uniforms.u_play.value = value;
+      });
+    // let bloomOptions = {
+    //     bloomEnabled: true,
+    //     glowOnly: false,
+    //     contrast: 119,
+    //     brightness: 0.05,
+    //     delta: 0.9,
+    //     sigma: 3.78,
+    //     stepSize: 5,
+    //     isSelected: false,
+    //     smoothWidth: 0.01,
+    //     luminosityThreshold: 0.0,
+    //     color: "#ffffff",
+    //     selectedBloom: 1.0
+    // }
+    // let sceneBloom = gui.addFolder('辉光控制');
+    // sceneBloom.add(bloomOptions, 'bloomEnabled').name("开关").onChange(function (value) {
+    //     viewer.scene.postProcessStages.bloom.enabled = value;
+    // })
+    // sceneBloom.add(bloomOptions, 'glowOnly').name("glowOnly").onChange(function (value) {
+    //     viewer.scene.postProcessStages.bloom.uniforms.glowOnly = value;
+    // })
+    // sceneBloom.add(bloomOptions, 'contrast', -255.0, 255.0, 0.01).name("contrast").onChange(function (value) {
+    //     viewer.scene.postProcessStages.bloom.uniforms.contrast = value;
+    // })
+    // sceneBloom.add(bloomOptions, 'brightness', -1.0, 1.0, 0.01).name("brightness").onChange(function (value) {
+    //     viewer.scene.postProcessStages.bloom.uniforms.brightness = value;
+    // })
+    // sceneBloom.add(bloomOptions, 'delta', 0.1, 5, 0.01).name("delta").onChange(function (value) {
+    //     viewer.scene.postProcessStages.bloom.uniforms.delta = value;
+    // })
+    // sceneBloom.add(bloomOptions, 'sigma', 0.1, 10, 0.01).name("sigma").onChange(function (value) {
+    //     viewer.scene.postProcessStages.bloom.uniforms.sigma = value;
+    // })
+    // sceneBloom.add(bloomOptions, 'selectedBloom', 0.1, 10, 0.01).name("selectedBloom").onChange(function (value) {
+    //     viewer.scene.postProcessStages.bloom.uniforms.selectedBloom = value;
+    // })
+    // sceneBloom.add(bloomOptions, 'stepSize', 0.1, 10).name("stepSize").onChange(function (value) {
+    //     viewer.scene.postProcessStages.bloom.uniforms.stepSize = value;
+    // })
+    // sceneBloom.add(bloomOptions, "smoothWidth", 0, 1, 0.01).name("smoothWidth").onChange(function (value) {
+    //     viewer.scene.postProcessStages.bloom.uniforms.smoothWidth = parseFloat(value)
+    // })
+    // sceneBloom.addColor(bloomOptions, "color", 0, 1, 0.01).name("color").onChange(function (value) {
+    //     viewer.scene.postProcessStages.bloom.uniforms.bloomColor = Cesium.Color.fromCssColorString(value);
+    // })
+
+    // 延迟2s加载数据 gitee网速较慢
+    // setTimeout(() => closeLoading(), 2000);
+  },
+
+  /**
+   * 生成矩阵
+   * @param {*} position
+   * @param {*} rotation
+   * @param {*} scale
+   * @returns
+   */
+  generateModelMatrix(
+    position = [0, 0, 0],
+    rotation = [0, 0, 0],
+    scale = [1, 1, 1]
+  ) {
+    const rotationX = Cesium.Matrix4.fromRotationTranslation(
+      Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(rotation[0]))
+    );
+
+    const rotationY = Cesium.Matrix4.fromRotationTranslation(
+      Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(rotation[1]))
+    );
+
+    const rotationZ = Cesium.Matrix4.fromRotationTranslation(
+      Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(rotation[2]))
+    );
+    if (!(position instanceof Cesium.Cartesian3)) {
+      position = Cesium.Cartesian3.fromDegrees(...position);
+    }
+    const enuMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);
+    Cesium.Matrix4.multiply(enuMatrix, rotationX, enuMatrix);
+    Cesium.Matrix4.multiply(enuMatrix, rotationY, enuMatrix);
+    Cesium.Matrix4.multiply(enuMatrix, rotationZ, enuMatrix);
+    const scaleMatrix = Cesium.Matrix4.fromScale(
+      new Cesium.Cartesian3(...scale)
+    );
+    const modelMatrix = Cesium.Matrix4.multiply(
+      enuMatrix,
+      scaleMatrix,
+      new Cesium.Matrix4()
+    );
+
+    return modelMatrix;
+  },
+
+  closNightSwitch() {
+    store.state.isNightSwitch = false;
+    // this.startNight(false);
+  },
+
+  //夜景开关
+  startNight(isNight) {
+    let that = this;
+    scene.globe.show = true;
+    viewer.scene.hdrEnabled = isNight;
+    viewer.scene.bloomEffect.show = false;
+    this.layer = scene.layers.find("sanyabuild");
+
+    // 是否开启夜景
+    if (!isNight) {
+      scene.sun.show = true;
+      this.clearLightSource(true, true);
+      this.layer.hypsometricSetting = {
+        hypsometricSetting: undefined,
+      };
+      this.layer.style3D.fillStyle = Cesium.FillStyle.Fill_And_WireFrame;
+      // 刷新场景
+      this.layer.refresh();
+      scene.skyAtmosphere.show = true;
+
+      this.switchLight(true); //白天
+      viewer.imageryLayers.remove(this.imageLayer);
+    } else {
+      scene.sun.show = false;
+      let roadLine1 = Cesium.GeoJsonDataSource.load("static/data/fg.json");
+
+      roadLine1
+        .then(function (dataSource) {
+          viewer.dataSources.add(dataSource);
+          that.GeoJsonLayerList.push(dataSource);
+          let lines_1 = dataSource.entities.values;
+          for (let i = 0; i < lines_1.length; i++) {
+            let line = lines_1[i];
+            line.polyline.material = new Cesium.PolylineGlowMaterialProperty({
+              //设置Glow材质
+              glowPower: 0.005,
+              color: Cesium.Color.ORANGE.withAlpha(0.9),
+            });
+            line.polyline.width = 50;
+          }
+        })
+        .otherwise(function (error) {
+          window.alert(error);
+        });
+      let roadLine2 = Cesium.GeoJsonDataSource.load("static/data/fg.json");
+
+      roadLine2
+        .then(function (dataSource) {
+          viewer.dataSources.add(dataSource);
+          that.GeoJsonLayerList.push(dataSource);
+          let lines_1 = dataSource.entities.values;
+          for (let i = 0; i < lines_1.length; i++) {
+            let line = lines_1[i];
+            line.polyline.material = new Cesium.PolylineGlowMaterialProperty({
+              //设置Glow材质
+              glowPower: 0.001,
+              color: Cesium.Color.white,
+            });
+            line.polyline.width = 5;
+          }
+        })
+        .otherwise(function (error) {
+          window.alert(error);
+        });
+
+      Cesium.loadJson("static/data/lightPoint3D.json").then((response) => {
+        let features = response.features;
+        features.forEach((element) => {
+          let p = element.geometry.coordinates;
+          var SpotLightPos3 = new Cesium.Cartesian3.fromDegrees(
+            p[0],
+            p[1],
+            p[2] + 1
+          );
+          var SpotLightPos32 = new Cesium.Cartesian3.fromDegrees(
+            p[0],
+            p[1],
+            p[2]
+          );
+          var SpotLightOptions3 = {
+            distance: 200,
+            color: new Cesium.Color(0.6, 0.3, 0.1, 1.0),
+            decay: 41,
+            intensity: 62,
+          };
+
+          let SpotLight33 = new Cesium.SpotLight(
+            SpotLightPos3,
+            SpotLightPos32,
+            SpotLightOptions3
+          );
+          scene.addLightSource(SpotLight33);
+        });
+      });
+
+      this.loadldx();
+      this.switchLight(false);
+      scene.skyAtmosphere.show = false;
+
+      this.setHypsometric(this.layer); //夜景
+      this.imageLayer = viewer.imageryLayers.addImageryProvider(
+        new Cesium.SingleTileImageryProvider({
+          url: "static/images/zt/Nightscape/BlackMarble_2016-1.jpg",
+        })
+      );
+
+      // 关掉边框线
+      this.layer.style3D.fillStyle = Cesium.FillStyle.Fill;
+      // 刷新场景
+      this.layer.refresh();
+    }
+  },
+
+  //设置环境光
+  switchLight(isDayLight) {
+    this.pointLight3 && scene.removeLightSource(this.pointLight3);
+    this.pointLight4 && scene.removeLightSource(this.pointLight4);
+    this.pointLight5 && scene.removeLightSource(this.pointLight5);
+    this.pointLight7 && scene.removeLightSource(this.pointLight7);
+    this.pointLight8 && scene.removeLightSource(this.pointLight8);
+    if (isDayLight) {
+      //设置环境光(白天)
+      scene.lightSource.ambientLightColor = new Cesium.Color(
+        0.65,
+        0.65,
+        0.65,
+        1
+      );
+    } else {
+      //设置环境光(夜晚)
+      scene.lightSource.ambientLightColor = new Cesium.Color(
+        0.15,
+        0.15,
+        0.15,
+        1
+      );
+      // 添加光源
+      // 新增直射光1--西南侧光
+      var position = new Cesium.Cartesian3.fromDegrees(109.437, 18.571, 71);
+      var targetPosition1 = new Cesium.Cartesian3.fromDegrees(
+        109.436,
+        18.569,
+        1
+      );
+      var dirLightOptions = {
+        targetPosition: targetPosition1,
+        color: new Cesium.Color(1, 1.54, 2.3, 1),
+        intensity: 0.15,
+      };
+      this.directionalLight_1 &&
+        scene.removeLightSource(this.directionalLight_1);
+      this.directionalLight_1 = new Cesium.DirectionalLight(
+        position,
+        dirLightOptions
+      );
+      scene.addLightSource(this.directionalLight_1);
+
+      //新增直射光1--东北侧光
+      var position3 = new Cesium.Cartesian3.fromDegrees(109.452, 18.573, 1);
+      var targetPosition3 = new Cesium.Cartesian3.fromDegrees(
+        109.454,
+        18.581,
+        91
+      );
+      var dirLightOptions3 = {
+        targetPosition: targetPosition3,
+        color: new Cesium.Color(1, 2, 3, 1),
+        intensity: 0.15,
+      };
+      this.directionalLight_3 &&
+        scene.removeLightSource(this.directionalLight_3);
+      this.directionalLight_3 = new Cesium.DirectionalLight(
+        position3,
+        dirLightOptions3
+      );
+      scene.addLightSource(this.directionalLight_3);
+      //新增直射光1--顶光
+      var position4 = new Cesium.Cartesian3.fromDegrees(109.492, 18.593, 100);
+      var targetPosition4 = new Cesium.Cartesian3.fromDegrees(
+        109.492,
+        18.593,
+        10
+      );
+      var dirLightOptions4 = {
+        targetPosition: targetPosition4,
+
+        color: new Cesium.Color(0.25, 0.25, 0.25, 1),
+        intensity: 0.35,
+      };
+      this.directionalLight_4 &&
+        scene.removeLightSource(this.directionalLight_4);
+      this.directionalLight_4 = new Cesium.DirectionalLight(
+        position4,
+        dirLightOptions4
+      );
+      scene.addLightSource(this.directionalLight_4);
+    }
+  },
+  //设置自发光纹理
+  setHypsometric(layer) {
+    let hyp = new Cesium.HypsometricSetting();
+    hyp.emissionTextureArray = [
+      {
+        url: "static/images/zt/Nightscape/Texture03.jpg",
+        USpeed: 0,
+        VSpeed: 0,
+        UTiling: 100,
+        VTiling: 100,
+      },
+      {
+        url: "static/images/zt/Nightscape/Texture04.jpg",
+        USpeed: 0,
+        VSpeed: 0,
+        UTiling: 80,
+        VTiling: 80,
+      },
+      {
+        url: "static/images/zt/Nightscape/Texture03.jpg",
+        USpeed: 0,
+        VSpeed: 0,
+        UTiling: 100,
+        VTiling: 100,
+      },
+      {
+        url: "static/images/zt/Nightscape/Texture03.jpg",
+        USpeed: 0,
+        VSpeed: 0,
+        UTiling: 100,
+        VTiling: 100,
+      },
+      {
+        url: "static/images/zt/Nightscape/Texture05.jpg",
+        USpeed: 0.5,
+        VSpeed: 0,
+        UTiling: 50,
+        VTiling: 50,
+      },
+      {
+        url: "static/images/zt/Nightscape/blmq.jpg",
+        USpeed: 0,
+        VSpeed: 0,
+        UTiling: 10,
+        VTiling: 10,
+      },
+      {
+        url: "static/images/zt/Nightscape/blmq.jpg",
+        USpeed: 0,
+        VSpeed: 0,
+        UTiling: 5,
+        VTiling: 5,
+      },
+      {
+        url: "static/images/zt/Nightscape/Texture03.jpg",
+        USpeed: 0,
+        VSpeed: 0,
+        UTiling: 100,
+        VTiling: 100,
+      },
+      {
+        url: "static/images/zt/Nightscape/Texture04.jpg",
+        USpeed: 0,
+        VSpeed: 0,
+        UTiling: 70,
+        VTiling: 70,
+      },
+      {
+        url: "static/images/zt/Nightscape/Texture02.jpg",
+        USpeed: 0,
+        VSpeed: 0,
+        UTiling: 70,
+        VTiling: 70,
+      },
+    ];
+    layer.hypsometricSetting = {
+      hypsometricSetting: hyp,
+    };
+  },
+
+  /**
+   * 流动线
+   */
+  loadldx() {
+    let that = this;
+    Cesium.loadJson("static/data/ld.json").then((jsonData) => {
+      jsonData.features.forEach((route) => {
+        let list = route.geometry.coordinates.flat(Infinity);
+        let dl = viewer.entities.add({
+          // 用于打底的线
+          polyline: {
+            positions: Cesium.Cartesian3.fromDegreesArrayHeights(list),
+            width: 3, // 线的宽度,像素为单位
+            material: Cesium.Color.BLACK.withAlpha(0.3),
+          },
+        });
+        this.liudongGntities.push(dl);
+        let dls = viewer.entities.add({
+          id: route.properties.OBJECTID,
+          polyline: {
+            positions: Cesium.Cartesian3.fromDegreesArrayHeights(list),
+            width: 2.0,
+            material: new Cesium.PolylineTrailMaterialProperty({
+              outlineColor: Cesium.Color.WHITE,
+              outlineWidth: 3,
+              color: Cesium.Color.fromCssColorString("rgba(127, 255, 0, 1)"),
+              trailLength: 0.3,
+              period: 4.0,
+            }),
+          },
+        });
+        this.liudongGntities.push(dls);
+      });
+    });
+  },
+
+  /**
+   * 删除灯光
+   * @param isAllRemoveLightSource 是否删除所有灯光
+   */
+  clearLightSource(isAllRemoveLightSource = false) {
+    if (isAllRemoveLightSource) {
+      while (scene.lightSource.pointLight.values.length > 0) {
+        scene.removeLightSource(scene.lightSource.pointLight.values[0]);
+      }
+      while (scene.lightSource.spotLight.values.length > 0) {
+        scene.removeLightSource(scene.lightSource.spotLight.values[0]);
+      }
+      while (scene.lightSource.directionalLight.values.length > 0) {
+        scene.removeLightSource(scene.lightSource.directionalLight.values[0]);
+      }
+      this.GeoJsonLayerList.forEach((element) => {
+        viewer.dataSources.remove(element);
+      });
+      this.liudongGntities.forEach((element) => {
+        viewer.entities.remove(element);
+      });
+    }
+  },
+};
+
+export default Nightscape;

+ 15 - 1
src/components/sceneAtttribute/basicOptions/basicOptions.vue

@@ -15,8 +15,10 @@
       <input type="checkbox" v-model="depthAgainst" />
       <label>{{ Resource.skyAtmosphereEffect }}</label>
       <input type="checkbox" v-model="atomsphereRender" />
-      <label>{{ Resource.fogEffect }}</label>
+      <label>{{ Resource.fogEffect }}</label> 
       <input type="checkbox" v-model="fogEffect" />
+      <label>{{ Resource.nightView }}</label>
+      <input type="checkbox" v-model="nightView" />
     </div>
     <div class="sm-function-module-sub-section">
       <label class="label-container">{{ Resource.brightness }}</label>
@@ -156,6 +158,9 @@
 
 <script>
 let layers, imageryLayers, handler;
+//夜景
+import Nightscape from "../../../../src/components/Combinations/NightscapeAnalysis/index.js";
+
 export default {
   name: "sceneBasicOptions",
   data() {
@@ -169,6 +174,7 @@ export default {
       depthAgainst: true,
       atomsphereRender: true,
       fogEffect: false,
+      nightView:false,
       brightness: 1,
       contrast: 1,
       hue: 0,
@@ -292,6 +298,14 @@ export default {
     fogEffect(val) {
       scene.fog.enabled = val;
     },
+    nightView(val) {
+      if (val) {
+        Nightscape.openNightSwitch();
+      } else {
+        Nightscape.closNightSwitch();
+      }
+
+    },
     brightness(val) {
       if (imageryLayers.length > 0) {
         let layer = imageryLayers.get(0);

+ 5 - 0
src/main.js

@@ -15,6 +15,11 @@ import App from './App.vue'
 import ElementUI from 'element-ui';
 import 'element-ui/lib/theme-chalk/index.css';
 import VueLazyLoad from 'vue-lazyload'
+import layer from "vue-layer";
+import "vue-layer/lib/vue-layer.css";
+Vue.prototype.$layer = layer(Vue);
+
+
 Vue.use(VueLazyLoad, {
     error: require('@/../static/images/thumbnail.jpg'),
     loading: require('@/../static/images/loading.jpg')

+ 2 - 1
src/resource/resourceCN.js

@@ -71,6 +71,7 @@
         localKML: '本地数据',
         myScenes: '我的场景',
         skyAtmosphereEffect: '天空盒',
+        nightView:'夜景',
         sunEffect: '光照渲染',
         fogEffect: '雾化效果',
         expand: '展开',
@@ -560,6 +561,6 @@
         Start: '启动',
         SwitchData: '切换数据',
         PleaseDrawCorrectPolygon: '扫描纹理',
-
+        nightscapeAnalysis: "夜景分析",
     };
     export default ResourceCN;

+ 5 - 0
src/store/store.js

@@ -79,6 +79,7 @@ var store2 = {
             // 覆盖城镇开发边界
             bfb: 0,
             ghdkmj: 0,//已入库管控范围
+            isNightSwitch: false, //夜景状态(中图)
         }
     },
     setisInitViewer(newValue) {
@@ -212,6 +213,10 @@ var store2 = {
         this.state.cockpit_gkzb = newValue;
     }, setViewerFlagb(newValue) {
         this.state.viewer_flag = newValue;
+    }, 
+    // 中图添加夜景
+    setIsNightSwitch(newValue) {
+        this.state.isNightSwitch = newValue;
     },
 }
 

+ 81 - 0
src/utils/MapHelper/MapHelper.js

@@ -0,0 +1,81 @@
+import proj4 from "proj4";
+export const mapQuery = async (url, queryObj) => {
+  let response = await axios.post(url, queryObj);
+  if (response.data.featureCount > 0) {
+    return response.data;
+  } else {
+    return null;
+  }
+};
+
+/**
+ * 墨卡托转经纬度
+ * @author JohnLiu 20231116
+ * @param {*} x
+ * @param {*} y
+ * @returns [x,y]
+ */
+export const mercator2lonLat = (x, y) => {
+  var obj = proj4(proj4("EPSG:3857"), proj4("EPSG:4326"), [x, y]);
+  return obj;
+};
+
+/**
+ * 经纬度转墨卡托
+ * @author JohnLiu 20231116
+ * @param {*} x
+ * @param {*} y
+ * @returns [x,y]
+ */
+export const lonLat2Mercator = (x, y) => {
+  var obj = proj4(proj4("EPSG:4326"), proj4("EPSG:3857"), [x, y]);
+  return obj;
+};
+
+/**
+ * 笛卡尔坐标系转WGS84坐标系(经纬度)
+ * @author
+ * @param {object} point 点,笛卡尔坐标{x:x,y:y,z:z}
+ * @returns {object} -lat: lat, lng: lng, alt: alt
+ */
+export const cartesian3ToWGS84 = (point) => {
+  var cartesian3 = new Cesium.Cartesian3(point.x, point.y, point.z);
+  var cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
+  var lat = Cesium.Math.toDegrees(cartographic.latitude);
+  var lng = Cesium.Math.toDegrees(cartographic.longitude);
+  var alt = cartographic.height;
+  return {
+    lat: lat,
+    lng: lng,
+    alt: alt,
+  };
+};
+
+/**
+ * 对象数组扁平化
+ * @param {array} arr 数组
+ * @param {string} children
+ * @returns
+ */
+export const flatten = (arr, children = "children") => {
+  return arr.reduce((result, item) => {
+    return result.concat(
+      item,
+      Array.isArray(item[children]) ? flatten(item[children], children) : []
+    );
+  }, []);
+};
+
+/**
+ * @author JohnLiu 20231010
+ * @description 设置地下模式状态
+ * @param {*} state
+ */
+export const undergroundMode = (state) => {
+  if (state) {
+    viewer.scene.globe.globeAlpha = 0;
+  } else {
+    viewer.scene.globe.globeAlpha = 1;
+  }
+  // this.scene.undergroundMode = state; //设置开启地下场景
+};

+ 0 - 0
src/views/ConstructionApplication3D/3维报建.txt


+ 68 - 0
src/views/ConstructionApplication3D/ConstructionModelInfo/ConstructionModelInfo.vue

@@ -0,0 +1,68 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-descriptions :title="'项目名称:' + info.modelname" column="1">
+          <el-descriptions-item label="设计单位">{{
+            info.designunit
+          }}</el-descriptions-item>
+          <el-descriptions-item label="总建筑面积">{{
+            info.totalarea
+          }}</el-descriptions-item>
+          <el-descriptions-item label="地上建筑面积">{{
+            info.groundarea
+          }}</el-descriptions-item>
+          <el-descriptions-item label="地上计容">
+            {{ info.groundcapacity }}
+          </el-descriptions-item>
+          <el-descriptions-item label="建筑面积">{{
+            info.buildingarea
+          }}</el-descriptions-item>
+          <el-descriptions-item label="方案描述">{{
+            info.plandescription
+          }}</el-descriptions-item>
+        </el-descriptions>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    // this.init();
+  },
+  methods: {},
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>

+ 112 - 0
src/views/ConstructionApplication3D/ConstructionModelInfo/addConstructionModelInfo.vue

@@ -0,0 +1,112 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-form
+          ref="ruleForm"
+          :model="form"
+          :rules="rules"
+          label-width="120px"
+        >
+          <el-form-item label="模型名称:">
+            <el-input v-model="form.modelname"></el-input>
+          </el-form-item>
+          <el-form-item label="模型地址:">
+            <el-input v-model="form.url"></el-input>
+          </el-form-item>
+        </el-form>
+        <div class="SaveCenter">
+          <el-button type="primary" @click="submitForm('ruleForm')"
+            >添加</el-button
+          >
+          <el-button @click="resetForm('ruleForm')">重置</el-button>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { v4 as uuidv4 } from "uuid";
+import moment from "moment";
+export default {
+  data() {
+    return {
+      form: {
+        id: uuidv4(),
+        projectinformationid: "ertyuiop",
+        modelname: "报建模型1",
+        creationtime: moment(new Date()).format("YYYY-MM-DD HH:mm:ss"),
+        x: "109.55145569681383",
+        y: "18.28012526287734",
+        z: "2000.0",
+        url: "",
+        designunit: "筑博设计股份有限公司",
+        totalarea: "",
+        groundarea: "",
+        groundcapacity: "",
+        buildingarea: "",
+        plandescription:
+          "拟建15栋25-26层安居房、 1栋3层幼儿园、 1栋1层配套用房、 1栋1层开闭所及1个2层整体地下室。总建筑面积约23.81万平方米, 其中计容建筑面积约17.41万平方米, 不计容建筑面积约6.40万平方米。 容积率3.0, 建筑密度17.59%, 建筑高度80米, 绿地率40%, 总户数1552户。机动车停车位1944个(地上154个, 地下1790个) , 非机动车位3270个",
+      },
+
+      rules: {
+        modelname: [
+          { required: true, message: "请输入模型名称", trigger: "blur" },
+        ],
+        url: [{ required: true, message: "请输入模型地址", trigger: "blur" }],
+      },
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    // this.init();
+  },
+  methods: {
+    submitForm(formName) {
+      let that = this;
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          that.form.projectinformationid = that.info.id;
+          window.constructionmodel.push(that.form);
+          that.lyoption.cancel();
+          that.$layer.close(that.layerid);
+        } else {
+          return false;
+        }
+      });
+    },
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+  },
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style lang="scss" scoped></style>

+ 130 - 0
src/views/ConstructionApplication3D/HighLimitAnalysis/HighLimitAnalysis.vue

@@ -0,0 +1,130 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <div class="titleHeader">
+          <span>控规建筑高度:≤{{ info.JZXGD }}米。</span>
+          <br />
+          <span v-if="TableData.length > 0"
+            >结论:有超高建筑,建筑高度不符合控规要求。</span
+          >
+          <span v-else>结论:无超高建筑,建筑高度符合控规要求。</span>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-table
+          ref="table"
+          :data="TableData"
+          :highlight-current-row="true"
+          @current-change="handleCurrentChange"
+          style="width: 100%"
+        >
+          <el-table-column label="超高楼号" align="center">
+            <template #default="{ row }">
+              {{ row.data.find((c) => c.label == "BUILDNO").value }}
+            </template>
+          </el-table-column>
+          <el-table-column label="楼高(米)" align="center">
+            <template #default="{ row }">
+              {{ row.data.find((c) => c.label == "HEIGHT").value }}
+            </template>
+          </el-table-column>
+          <el-table-column label="超高(米)" align="center">
+            <template #default="{ row }">
+              {{ row.cg }}
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      TableData: [],
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    this.init();
+  },
+  methods: {
+    init() {
+      debugger;
+      this.info.layerDataList.forEach((layerData) => {
+        let HEIGHT = layerData.data.find((c) => c.label == "HEIGHT").value;
+        layerData.cg = this.calculateHighLimit(HEIGHT, this.info.JZXGD);
+        if (layerData.cg > 0) {
+          this.TableData.push(layerData);
+        }
+      });
+    },
+    /**
+     * // 计算超高距离
+     * @param Height 建筑高度
+     * @param JZXGD 限高上限
+     */
+    calculateHighLimit(Height, JZXGD) {
+      let sd = Height - JZXGD;
+      return sd.toFixed(2);
+    },
+    //选中
+    handleCurrentChange(row) {
+      var center = Cesium.Cartesian3.fromDegrees(
+        row.geometry.position.x,
+        row.geometry.position.y
+      ); //camera视野中心点坐标
+      var heading = Cesium.Math.toRadians(0.0);
+      var pitch = Cesium.Math.toRadians(-55.0);
+      var range = row.geometry.boundingBox.upper.z + 300;
+      viewer.camera.lookAt(
+        center,
+        new Cesium.HeadingPitchRange(heading, pitch, range)
+      );
+      viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
+    },
+  },
+
+  beforeDestroy() {},
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style lang="scss" scoped>
+.el-card {
+  border: 0px solid #02a7f0;
+}
+.el-form-item {
+  margin-bottom: 0;
+}
+</style>

+ 1013 - 0
src/views/ConstructionApplication3D/NightscapeAnalysis/NightscapeAnalysis.vue

@@ -0,0 +1,1013 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <div class="titleHeader">
+          <el-switch
+            v-model="isNightscaoe"
+            active-text="开启夜景"
+            inactive-text="关闭夜景"
+            @change="handleChange"
+          >
+          </el-switch>
+          <el-tooltip content="点击后可直接在光源参数中保存" placement="top">
+            <el-button type="primary" size="mini" @click="openDgyAddVisibility"
+              >添加光源</el-button
+            >
+          </el-tooltip>
+
+          <el-button type="danger" size="mini" @click="dgyremove"
+            >删除光源</el-button
+          >
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="10">
+        光源列表:
+        <el-row>
+          <el-col :span="24" style="border: 1px solid #fff">
+            <el-table
+              ref="dgytable"
+              :show-header="false"
+              :data="gyTableData"
+              :highlight-current-row="true"
+              @current-change="handleCurrentChange"
+              style="width: 100%"
+            >
+              <el-table-column prop="gyName" label="光源名称"></el-table-column>
+            </el-table> </el-col
+        ></el-row>
+      </el-col>
+      <el-col :span="14">
+        光源参数:
+        <el-row>
+          <el-col :span="24" style="border: 1px solid #fff">
+            <el-form
+              ref="dgyform"
+              :model="dgyform"
+              label-width="80px"
+              style="padding: 1rem 1rem 0rem 1rem"
+            >
+              <el-form-item label="光源名称">
+                <el-input
+                  size="mini"
+                  v-model="dgyform.gyName"
+                  placeholder="请输入光源名称"
+                ></el-input>
+              </el-form-item>
+              <el-form-item label="光源类型">
+                <el-select
+                  size="mini"
+                  v-model="dgyform.gyType"
+                  placeholder="请选择光源类型"
+                >
+                  <el-option label="点光源" value="点光源"></el-option>
+                  <el-option label="聚光灯" value="聚光灯"></el-option>
+                  <el-option label="直射光" value="直射光"></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="光源颜色">
+                <el-color-picker
+                  size="mini"
+                  popper-class="colorPicker"
+                  v-model="dgyform.gyColor"
+                ></el-color-picker>
+                <el-button size="mini" @click="addPoint"
+                  >添加光源位置</el-button
+                >
+              </el-form-item>
+              <el-form-item label="扩散距离" v-if="dgyform.gyType != '直射光'">
+                <el-slider
+                  size="mini"
+                  max="10000"
+                  v-model="dgyform.gyDistance"
+                ></el-slider>
+              </el-form-item>
+              <el-form-item label="衰减因子" v-if="dgyform.gyType != '直射光'">
+                <el-slider size="mini" v-model="dgyform.gyDecay"></el-slider>
+              </el-form-item>
+              <el-form-item label="光源强度">
+                <el-slider
+                  size="mini"
+                  v-model="dgyform.gyIntensity"
+                ></el-slider>
+              </el-form-item>
+            </el-form>
+            <div class="SaveCenter">
+              <el-button size="mini" type="primary" @click="onSubmit"
+                >保存</el-button
+              >
+              <el-button size="mini" @click="resetForm">取消</el-button>
+            </div>
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      sharedState: store.state,
+      isNightscaoe: false,
+      directionalLight_1: null,
+      directionalLight_2: null,
+      directionalLight_3: null,
+      directionalLight_4: null,
+      pointLight3: null,
+      pointLight4: null,
+      pointLight5: null,
+      pointLight7: null,
+      pointLight8: null,
+
+      imageLayer: null,
+      layer: null,
+      gyTableData: [
+        {
+          id: "sdsdsds",
+          gyName: "点光源1",
+          gyType: "点光源",
+          gyColor: "#409EFF",
+          gyDistance: 211,
+          gyDecay: 5,
+          gyIntensity: 16,
+          cartesian: {
+            x: -2027555.313406858,
+            y: 5708952.048688679,
+            z: 1987714.2546412952,
+          },
+        },
+      ],
+      dgyform: {
+        id: "",
+        gyName: "",
+        gyType: "点光源",
+        gyColor: "#409EFF",
+        gyDistance: 300,
+        gyDecay: 5,
+        gyIntensity: 5,
+      },
+      pointLightSourceDrawHandler: null,
+      spotOrDirectionalLightSourceDrawHandler: null,
+      spotOrDirectionalLightSourceCountHandler: null,
+      spotOrDirectionalLightSourceAdding: false,
+      spotOrDirectionalLightPositions: [],
+      entityPointLightPairs: new Map(), // Entity和点光源对象的键值对
+      entitySpotLightPairs: new Map(), // Entity和聚光灯对象的键值对
+      entityDirectionalLightPairs: new Map(), // Entity和平行光对象的键值对
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {
+    Nightscape: function () {
+      return this.sharedState.toolBar[10];
+    },
+  },
+  mounted() {
+    this.init();
+  },
+  methods: {
+    handleChange() {
+      if (this.isNightscaoe) {
+        this.startNight(true);
+      } else {
+        this.startNight(false);
+      }
+    },
+
+    openDgyAddVisibility() {
+      this.resetForm();
+    },
+
+    init() {
+      this.hyp = new Cesium.HypsometricSetting();
+      this.startNight(false);
+    },
+    //夜景开关
+    startNight(isNight) {
+      scene.globe.show = true;
+      viewer.scene.hdrEnabled = isNight;
+      viewer.scene.bloomEffect.show = false;
+
+      // 是否开启夜景
+      if (!isNight) {
+        scene.sun.show = true;
+        this.clearLightSource(true, true);
+
+        scene.skyAtmosphere.show = true;
+
+        this.switchLight(true); //白天
+        this.setHypsometric(false); //夜景材质
+        viewer.imageryLayers.remove(this.imageLayer);
+      } else {
+        this.switchLight(false);
+        scene.sun.show = false;
+        scene.skyAtmosphere.show = false;
+
+        this.setHypsometric(true); //夜景
+        // this.imageLayer = viewer.imageryLayers.addImageryProvider(
+        //   new Cesium.SingleTileImageryProvider({
+        //     url: "static/images/zt/Nightscape/BlackMarble_2016-1.jpg",
+        //   })
+        // );
+
+        this.gyTableData.forEach((element) => {
+          this.addLightSource(element);
+        });
+      }
+    },
+
+    //设置环境光
+    switchLight(isDayLight) {
+      this.pointLight3 && scene.removeLightSource(this.pointLight3);
+      this.pointLight4 && scene.removeLightSource(this.pointLight4);
+      this.pointLight5 && scene.removeLightSource(this.pointLight5);
+      this.pointLight7 && scene.removeLightSource(this.pointLight7);
+      this.pointLight8 && scene.removeLightSource(this.pointLight8);
+      if (isDayLight) {
+        //设置环境光(白天)
+        scene.lightSource.ambientLightColor = new Cesium.Color(
+          0.65,
+          0.65,
+          0.65,
+          1
+        );
+      } else {
+        //设置环境光(夜晚)
+        scene.lightSource.ambientLightColor = new Cesium.Color(
+          0.15,
+          0.15,
+          0.15,
+          1
+        );
+
+        // 添加光源
+        let gyData1 = {
+          gyType: "点光源",
+          cartesian: new Cesium.Cartesian3.fromDegrees(
+            109.49115721355469,
+            18.29592136116859,
+            80
+          ),
+          gyDecay: 1,
+          gyDistance: 800,
+          gyColor: "rgba(255,20,147,0.37)",
+          gyIntensity: 2,
+        };
+        this.addLightSource(gyData1);
+
+        //主建筑光源
+        let gyData2 = {
+          gyType: "点光源",
+          cartesian: new Cesium.Cartesian3.fromDegrees(
+            109.55348802331464,
+            18.278824564764143,
+            80
+          ),
+          gyDecay: 1,
+          gyDistance: 800,
+          gyColor: "rgba(240,248,255,1)",
+          gyIntensity: 1,
+        };
+        this.addLightSource(gyData2);
+        let gyData3 = {
+          gyType: "点光源",
+          cartesian: new Cesium.Cartesian3.fromDegrees(
+            109.54991809813524,
+            18.28458792962873,
+            80
+          ),
+          gyDecay: 1,
+          gyDistance: 800,
+          gyColor: "rgba(240,248,255,1)",
+          gyIntensity: 1,
+        };
+        this.addLightSource(gyData3);
+
+        let gyData4 = {
+          gyType: "点光源",
+          cartesian: new Cesium.Cartesian3.fromDegrees(
+            109.5490688547866,
+            18.283227701313386,
+            40
+          ),
+          gyDecay: 2,
+          gyDistance: 80,
+          gyColor: "rgba(13,128,247,0.15)",
+          gyIntensity: 0.5,
+        };
+        this.addLightSource(gyData4);
+        let gyData5 = {
+          gyType: "点光源",
+          cartesian: new Cesium.Cartesian3.fromDegrees(
+            109.55236475164054,
+            18.278884181031398,
+            40
+          ),
+          gyDecay: 2,
+          gyDistance: 80,
+          gyColor: "rgba(13,128,247,0.15)",
+          gyIntensity: 0.5,
+        };
+        this.addLightSource(gyData5);
+        let gyData6 = {
+          gyType: "点光源",
+          cartesian: new Cesium.Cartesian3.fromDegrees(
+            109.55195212379788,
+            18.283303465199854,
+            40
+          ),
+          gyDecay: 2,
+          gyDistance: 80,
+          gyColor: "rgba(13,128,247,0.15)",
+          gyIntensity: 0.5,
+        };
+        this.addLightSource(gyData6);
+        let gyData7 = {
+          gyType: "点光源",
+          cartesian: new Cesium.Cartesian3.fromDegrees(
+            109.55549715519659,
+            18.279573531714174,
+            40
+          ),
+          gyDecay: 2,
+          gyDistance: 80,
+          gyColor: "rgba(13,128,247,0.15)",
+          gyIntensity: 0.5,
+        };
+        this.addLightSource(gyData7);
+        // 添加光源
+        // 新增直射光1--西南侧光
+        var position = new Cesium.Cartesian3.fromDegrees(109.437, 18.571, 71);
+        var targetPosition1 = new Cesium.Cartesian3.fromDegrees(
+          109.436,
+          18.569,
+          1
+        );
+        var dirLightOptions = {
+          targetPosition: targetPosition1,
+          color: new Cesium.Color(1, 1.54, 2.3, 1),
+          intensity: 0.15,
+        };
+        this.directionalLight_1 &&
+          scene.removeLightSource(this.directionalLight_1);
+        this.directionalLight_1 = new Cesium.DirectionalLight(
+          position,
+          dirLightOptions
+        );
+        scene.addLightSource(this.directionalLight_1);
+
+        //新增直射光1--东北侧光
+        var position3 = new Cesium.Cartesian3.fromDegrees(109.452, 18.573, 1);
+        var targetPosition3 = new Cesium.Cartesian3.fromDegrees(
+          109.454,
+          18.581,
+          91
+        );
+        var dirLightOptions3 = {
+          targetPosition: targetPosition3,
+          color: new Cesium.Color(1, 2, 3, 1),
+          intensity: 0.15,
+        };
+        this.directionalLight_3 &&
+          scene.removeLightSource(this.directionalLight_3);
+        this.directionalLight_3 = new Cesium.DirectionalLight(
+          position3,
+          dirLightOptions3
+        );
+        scene.addLightSource(this.directionalLight_3);
+        //新增直射光1--顶光
+        var position4 = new Cesium.Cartesian3.fromDegrees(109.492, 18.593, 100);
+        var targetPosition4 = new Cesium.Cartesian3.fromDegrees(
+          109.492,
+          18.593,
+          10
+        );
+        var dirLightOptions4 = {
+          targetPosition: targetPosition4,
+
+          color: new Cesium.Color(0.25, 0.25, 0.25, 1),
+          intensity: 0.35,
+        };
+        this.directionalLight_4 &&
+          scene.removeLightSource(this.directionalLight_4);
+        this.directionalLight_4 = new Cesium.DirectionalLight(
+          position4,
+          dirLightOptions4
+        );
+        scene.addLightSource(this.directionalLight_4);
+      }
+    },
+    //设置白膜自发光纹理
+    setHypsometric(isShow = true) {
+      if (isShow) {
+        scene.layers.layerQueue.forEach((layer) => {
+          let hyp = null;
+          switch (layer.name) {
+            case "DatasetModel@sanyaDatasource":
+              // 关掉边框线
+              layer.style3D.fillStyle = Cesium.FillStyle.Fill;
+              hyp = new Cesium.HypsometricSetting();
+              hyp.emissionTextureArray = [
+                {
+                  url: "static/images/zt/Nightscape/Texture03.jpg",
+                  USpeed: 0,
+                  VSpeed: 0,
+                  UTiling: 100,
+                  VTiling: 100,
+                },
+                {
+                  url: "static/images/zt/Nightscape/Texture04.jpg",
+                  USpeed: 0,
+                  VSpeed: 0,
+                  UTiling: 80,
+                  VTiling: 80,
+                },
+                {
+                  url: "static/images/zt/Nightscape/Texture03.jpg",
+                  USpeed: 0,
+                  VSpeed: 0,
+                  UTiling: 100,
+                  VTiling: 100,
+                },
+                {
+                  url: "static/images/zt/Nightscape/Texture03.jpg",
+                  USpeed: 0,
+                  VSpeed: 0,
+                  UTiling: 100,
+                  VTiling: 100,
+                },
+                {
+                  url: "static/images/zt/Nightscape/Texture05.jpg",
+                  USpeed: 0.5,
+                  VSpeed: 0,
+                  UTiling: 50,
+                  VTiling: 50,
+                },
+                {
+                  url: "static/images/zt/Nightscape/blmq.jpg",
+                  USpeed: 0,
+                  VSpeed: 0,
+                  UTiling: 10,
+                  VTiling: 10,
+                },
+                {
+                  url: "static/images/zt/Nightscape/blmq.jpg",
+                  USpeed: 0,
+                  VSpeed: 0,
+                  UTiling: 5,
+                  VTiling: 5,
+                },
+                {
+                  url: "static/images/zt/Nightscape/Texture03.jpg",
+                  USpeed: 0,
+                  VSpeed: 0,
+                  UTiling: 100,
+                  VTiling: 100,
+                },
+                {
+                  url: "static/images/zt/Nightscape/Texture04.jpg",
+                  USpeed: 0,
+                  VSpeed: 0,
+                  UTiling: 70,
+                  VTiling: 70,
+                },
+                {
+                  url: "static/images/zt/Nightscape/Texture02.jpg",
+                  USpeed: 0,
+                  VSpeed: 0,
+                  UTiling: 70,
+                  VTiling: 70,
+                },
+              ];
+              layer.hypsometricSetting = {
+                hypsometricSetting: hyp,
+              };
+              // layer.refresh();
+              break;
+            case "mesh@YiShanHu":
+
+            default:
+              break;
+          }
+        });
+      } else {
+        scene.layers.layerQueue.forEach((layer) => {
+          layer.hypsometricSetting = {
+            hypsometricSetting: undefined,
+          };
+          layer.style3D.fillStyle = Cesium.FillStyle.Fill_And_WireFrame;
+          // 刷新场景
+          // layer.refresh();
+        });
+      }
+    },
+    // //设置自发光纹理
+    // setHypsometric(layer) {
+    //   this.hyp.emissionTextureArray = [
+    //     {
+    //       url: "static/images/zt/Nightscape/Texture03.jpg",
+    //       USpeed: 0,
+    //       VSpeed: 0,
+    //       UTiling: 100,
+    //       VTiling: 100,
+    //     },
+    //     {
+    //       url: "static/images/zt/Nightscape/Texture04.jpg",
+    //       USpeed: 0,
+    //       VSpeed: 0,
+    //       UTiling: 80,
+    //       VTiling: 80,
+    //     },
+    //     {
+    //       url: "static/images/zt/Nightscape/Texture03.jpg",
+    //       USpeed: 0,
+    //       VSpeed: 0,
+    //       UTiling: 100,
+    //       VTiling: 100,
+    //     },
+    //     {
+    //       url: "static/images/zt/Nightscape/Texture03.jpg",
+    //       USpeed: 0,
+    //       VSpeed: 0,
+    //       UTiling: 100,
+    //       VTiling: 100,
+    //     },
+    //     {
+    //       url: "static/images/zt/Nightscape/Texture05.jpg",
+    //       USpeed: 0.5,
+    //       VSpeed: 0,
+    //       UTiling: 50,
+    //       VTiling: 50,
+    //     },
+    //     {
+    //       url: "static/images/zt/Nightscape/blmq.jpg",
+    //       USpeed: 0,
+    //       VSpeed: 0,
+    //       UTiling: 10,
+    //       VTiling: 10,
+    //     },
+    //     {
+    //       url: "static/images/zt/Nightscape/blmq.jpg",
+    //       USpeed: 0,
+    //       VSpeed: 0,
+    //       UTiling: 5,
+    //       VTiling: 5,
+    //     },
+    //     {
+    //       url: "static/images/zt/Nightscape/Texture03.jpg",
+    //       USpeed: 0,
+    //       VSpeed: 0,
+    //       UTiling: 100,
+    //       VTiling: 100,
+    //     },
+    //     {
+    //       url: "static/images/zt/Nightscape/Texture04.jpg",
+    //       USpeed: 0,
+    //       VSpeed: 0,
+    //       UTiling: 70,
+    //       VTiling: 70,
+    //     },
+    //     {
+    //       url: "static/images/zt/Nightscape/Texture02.jpg",
+    //       USpeed: 0,
+    //       VSpeed: 0,
+    //       UTiling: 70,
+    //       VTiling: 70,
+    //     },
+    //   ];
+    //   layer.hypsometricSetting = {
+    //     hypsometricSetting: this.hyp,
+    //   };
+    // },
+    //提交光源数据
+    onSubmit() {
+      //更新
+      if (this.dgyform.id) {
+        let gydata = this.gyTableData.find((c) => c.id == this.dgyform.id);
+        let data = JSON.parse(JSON.stringify(this.dgyform));
+        gydata.gyName = data.gyName;
+        gydata.gyColor = data.gyColor;
+        gydata.gyDistance = data.gyDistance;
+        gydata.gyDecay = data.gyDecay;
+        gydata.gyIntensity = data.gyIntensity;
+        gydata.cartesian = data.cartesian;
+        gydata.LightSource = this.dgyform.LightSource;
+      }
+      //添加
+      else {
+        this.dgyform.id = Math.floor(Math.random() * 10000);
+        let data = JSON.parse(JSON.stringify(this.dgyform));
+        data.LightSource = this.dgyform.LightSource;
+        this.gyTableData.push(this.dgyform);
+      }
+
+      this.clearLightSource(false);
+    },
+    //清空from
+    resetForm() {
+      this.dgyform = {
+        id: "",
+        gyName: "",
+        gyType: "点光源",
+        gyColor: "#409EFF",
+        gyDistance: 300,
+        gyDecay: 5,
+        gyIntensity: 5,
+        cartesian: {},
+        LightSource: null,
+      };
+    },
+    //删除添加的光源
+    dgyremove() {
+      let that = this;
+      this.gyTableData = this.gyTableData.filter(function (item) {
+        if (that.currentRow == item) {
+          if (item.LightSource) scene.removeLightSource(item.LightSource);
+          return false;
+        } else {
+          return true;
+        }
+      });
+    },
+    //点光源表选中
+    handleCurrentChange(row) {
+      this.currentRow = row;
+      this.clearLightSource();
+      let data = JSON.parse(JSON.stringify(row));
+      this.dgyform = data;
+      this.dgyform.LightSource = row.LightSource;
+    },
+    addPoint() {
+      switch (this.dgyform.gyType) {
+        case "点光源":
+          if (this.pointLightSourceDrawHandler) {
+            this.pointLightSourceDrawHandler.clear();
+            this.pointLightSourceDrawHandler = null;
+          }
+          this.initPointLightSourceDrawHandler();
+          this.pointLightSourceDrawHandler.activate();
+          break;
+        case "聚光灯":
+        case "直射光":
+          if (this.spotOrDirectionalLightSourceDrawHandler) {
+            this.spotOrDirectionalLightSourceDrawHandler.clear();
+            this.spotOrDirectionalLightSourceDrawHandler = null;
+            this.spotOrDirectionalLightPositions = [];
+            this.spotOrDirectionalLightSourceDrawHandler.deactivate();
+          }
+          if (this.spotOrDirectionalLightSourceCountHandler) {
+            this.spotOrDirectionalLightSourceCountHandler.destroy();
+            this.spotOrDirectionalLightSourceCountHandler = undefined;
+          }
+          this.initSpotOrDirectionalLightSourceDrawHandler();
+          this.spotOrDirectionalLightSourceAdding = true;
+          this.spotOrDirectionalLightSourceDrawHandler.activate();
+          break;
+        default:
+          break;
+      }
+    },
+    initPointLightSourceDrawHandler() {
+      this.clearLightSource();
+      this.pointLightSourceDrawHandler = new Cesium.DrawHandler(
+        viewer,
+        Cesium.DrawMode.Point
+      );
+      this.pointLightSourceDrawHandler.activeEvt.addEventListener(function (
+        isActive
+      ) {
+        if (isActive == true) {
+          viewer.enableCursorStyle = false;
+          viewer._element.style.cursor = "";
+          document.body.classList.add("drawCur");
+        } else {
+          viewer.enableCursorStyle = true;
+          document.body.classList.remove("drawCur");
+        }
+      });
+      this.pointLightSourceDrawHandler.movingEvt.addEventListener(
+        (windowPosition) => {
+          window.tooltip.showAt(
+            windowPosition,
+            `<p>${Resource.clickToConfirmThePositionOfTheLightSource}</p><p>${Resource.clickLightChangeAttributes}</p>`
+          );
+        }
+      );
+      this.pointLightSourceDrawHandler.drawEvt.addEventListener((result) => {
+        let cartesian = result.object.position;
+        this.cartesianToWgs84(cartesian.x, cartesian.y, cartesian.z);
+        this.dgyform.cartesian = cartesian;
+        let option = {
+          color: Cesium.Color.fromCssColorString(this.dgyform.gyColor),
+          cutoffDistance: Number(this.dgyform.gyDistance),
+          decay: Number(this.dgyform.gyDecay),
+          intensity: Number(this.dgyform.gyIntensity),
+        };
+        let pointLight = new Cesium.PointLight(cartesian, option);
+        scene.addLightSource(pointLight);
+        if (this.dgyform.LightSource) {
+          scene.removeLightSource(this.dgyform.LightSource);
+        }
+        this.dgyform.LightSource = pointLight;
+        let entityAsKey = viewer.entities.add({
+          id: "point-light-" + new Date().getTime(),
+          position: cartesian,
+          billboard: {
+            image: "@/../static/images/lightSource/pointLight.png",
+            scaleByDistance: new Cesium.NearFarScalar(10, 1.0, 1000, 0.1),
+            disableDepthTestDistance: Number.POSITIVE_INFINITY, // 关闭深度检测,使billboard不至于被裁剪
+          },
+        });
+        console.log(this.entityPointLightPairs);
+        this.entityPointLightPairs.set(entityAsKey, pointLight);
+        this.pointLightSourceDrawHandler.clear();
+        this.pointLightSourceDrawHandler = null;
+        window.tooltip.setVisible(false);
+      });
+    },
+    initSpotOrDirectionalLightSourceDrawHandler() {
+      let that = this;
+      that.clearLightSource();
+      this.spotOrDirectionalLightSourceDrawHandler = new Cesium.DrawHandler(
+        viewer,
+        Cesium.DrawMode.Line
+      );
+      this.spotOrDirectionalLightSourceCountHandler =
+        new Cesium.ScreenSpaceEventHandler(scene.canvas);
+      this.spotOrDirectionalLightSourceDrawHandler.activeEvt.addEventListener(
+        function (isActive) {
+          if (isActive == true) {
+            viewer.enableCursorStyle = false;
+            viewer._element.style.cursor = "";
+            document.body.classList.add("drawCur");
+          } else {
+            viewer.enableCursorStyle = true;
+            document.body.classList.remove("drawCur");
+          }
+        }
+      );
+      this.spotOrDirectionalLightSourceDrawHandler.movingEvt.addEventListener(
+        (windowPosition) => {
+          window.tooltip.showAt(
+            windowPosition,
+            `<p>${Resource.ClickLineDirectionLightSource}</p><p>${Resource.clickLightChangeAttributes}</p>`
+          );
+        }
+      );
+      this.spotOrDirectionalLightSourceDrawHandler.drawEvt.addEventListener(
+        (result) => {
+          let positions = (result.object && result.object.positions) || result;
+          if (positions.length !== 2) {
+            return;
+          }
+          this.dgyform.cartesian = positions;
+          if (that.dgyform.gyType === "聚光灯") {
+            let spotLightOptions = {
+              color: Cesium.Color.fromCssColorString(this.dgyform.gyColor),
+              distance: Number(this.dgyform.gyDistance),
+              decay: Number(this.dgyform.gyDecay),
+              intensity: Number(this.dgyform.gyIntensity),
+              angle: Cesium.Math.toRadians(Number(30)),
+            };
+            let spotLight = new Cesium.SpotLight(
+              positions[0],
+              positions[1],
+              spotLightOptions
+            );
+            scene.addLightSource(spotLight);
+            if (this.dgyform.LightSource) {
+              scene.removeLightSource(this.dgyform.LightSource);
+            }
+            this.dgyform.LightSource = spotLight;
+            let entityAsKey = viewer.entities.add({
+              id: "spot-light-" + new Date().getTime(),
+              position: positions[0],
+              billboard: {
+                image: "@/../static/images/lightSource/spotLight.png",
+                scaleByDistance: new Cesium.NearFarScalar(10, 1.0, 1000, 0.1), // 按照距离调整图片的大小
+                disableDepthTestDistance: Number.POSITIVE_INFINITY, // 关闭深度检测,使billboard不至于被裁剪
+              },
+            });
+            this.entitySpotLightPairs.set(entityAsKey, spotLight);
+          } else if (that.dgyform.gyType === "直射光") {
+            let directionalLightOptions = {
+              targetPosition: positions[1],
+              color: Cesium.Color.fromCssColorString(this.dgyform.gyColor),
+              intensity: Number(this.dgyform.gyIntensity),
+            };
+            let directionalLight = new Cesium.DirectionalLight(
+              positions[0],
+              directionalLightOptions
+            );
+            scene.addLightSource(directionalLight);
+            if (this.dgyform.LightSource) {
+              scene.removeLightSource(this.dgyform.LightSource);
+            }
+            this.dgyform.LightSource = directionalLight;
+            let entityAsKey = viewer.entities.add({
+              id: "directional-light-" + new Date().getTime(),
+              position: positions[0],
+              billboard: {
+                image: "@/../static/images/lightSource/directionalLight.png",
+                scaleByDistance: new Cesium.NearFarScalar(10, 1.0, 1000, 0.1),
+                disableDepthTestDistance: Number.POSITIVE_INFINITY, // 关闭深度检测,使billboard不至于被裁剪
+              },
+            });
+            this.entityDirectionalLightPairs.set(entityAsKey, directionalLight);
+          }
+          this.spotOrDirectionalLightPositions = [];
+          this.spotOrDirectionalLightSourceDrawHandler.clear();
+          this.spotOrDirectionalLightSourceDrawHandler = null;
+          window.tooltip.setVisible(false);
+        }
+      );
+
+      this.spotOrDirectionalLightSourceCountHandler.setInputAction(function (
+        e
+      ) {
+        if (that.spotOrDirectionalLightSourceAdding) {
+          that.spotOrDirectionalLightPositions.push(
+            scene.pickPosition(e.position)
+          );
+          if (that.spotOrDirectionalLightPositions.length === 2) {
+            if (that.spotOrDirectionalLightSourceCountHandler) {
+              that.spotOrDirectionalLightSourceCountHandler.destroy();
+              that.spotOrDirectionalLightSourceCountHandler = undefined;
+            }
+            that.spotOrDirectionalLightSourceDrawHandler.deactivate();
+            that.spotOrDirectionalLightSourceAdding = false;
+            that.spotOrDirectionalLightSourceDrawHandler.drawEvt.raiseEvent(
+              that.spotOrDirectionalLightPositions
+            );
+          }
+        }
+      },
+      Cesium.ScreenSpaceEventType.LEFT_CLICK);
+    },
+
+    addLightSource(gyData) {
+      switch (gyData.gyType) {
+        case "点光源":
+          let option = {
+            color: Cesium.Color.fromCssColorString(gyData.gyColor),
+            cutoffDistance: Number(gyData.gyDistance),
+            decay: Number(gyData.gyDecay),
+            intensity: Number(gyData.gyIntensity),
+          };
+          let pointLight = new Cesium.PointLight(gyData.cartesian, option);
+          scene.addLightSource(pointLight);
+          gyData.LightSource = pointLight;
+          break;
+        case "聚光灯":
+          let spotLightOptions = {
+            color: Cesium.Color.fromCssColorString(gyData.gyColor),
+            distance: Number(gyData.gyDistance),
+            decay: Number(gyData.gyDecay),
+            intensity: Number(gyData.gyIntensity),
+            angle: Cesium.Math.toRadians(Number(30)),
+          };
+          let spotLight = new Cesium.SpotLight(
+            gyData.cartesian[0],
+            gyData.cartesian[1],
+            spotLightOptions
+          );
+          scene.addLightSource(spotLight);
+          gyData.LightSource = spotLight;
+          break;
+        case "直射光":
+          let directionalLightOptions = {
+            targetPosition: gyData.cartesian[1],
+            color: Cesium.Color.fromCssColorString(gyData.gyColor),
+            intensity: Number(gyData.gyIntensity),
+          };
+          let directionalLight = new Cesium.DirectionalLight(
+            gyData.cartesian[0],
+            directionalLightOptions
+          );
+          scene.addLightSource(directionalLight);
+          gyData.LightSource = directionalLight;
+          break;
+        default:
+          break;
+      }
+    },
+    /**
+     * 删除灯光
+     * @param isRemoveLightSource 是否删除临时灯光
+     * @param isAllRemoveLightSource 是否删除所有灯光
+     */
+    clearLightSource(
+      isRemoveLightSource = true,
+      isAllRemoveLightSource = false
+    ) {
+      for (let key of this.entityPointLightPairs.keys()) {
+        viewer.entities.remove(key);
+        if (isRemoveLightSource)
+          scene.removeLightSource(this.entityPointLightPairs.get(key));
+      }
+      this.entityPointLightPairs.clear();
+
+      for (let key of this.entitySpotLightPairs.keys()) {
+        viewer.entities.remove(key);
+        if (isRemoveLightSource)
+          scene.removeLightSource(this.entitySpotLightPairs.get(key));
+      }
+      this.entitySpotLightPairs.clear();
+
+      for (let key of this.entityDirectionalLightPairs.keys()) {
+        viewer.entities.remove(key);
+        if (isRemoveLightSource)
+          scene.removeLightSource(this.entityDirectionalLightPairs.get(key));
+      }
+      this.entityDirectionalLightPairs.clear();
+
+      if (isAllRemoveLightSource) {
+        while (scene.lightSource.pointLight.values.length > 0) {
+          scene.removeLightSource(scene.lightSource.pointLight.values[0]);
+        }
+        while (scene.lightSource.spotLight.values.length > 0) {
+          scene.removeLightSource(scene.lightSource.spotLight.values[0]);
+        }
+        while (scene.lightSource.directionalLight.values.length > 0) {
+          scene.removeLightSource(scene.lightSource.directionalLight.values[0]);
+        }
+      }
+    },
+    cartesianToWgs84(x, y, z) {
+      var scene = viewer.scene;
+      var positionCartesian = new Cesium.Cartesian3(x, y, z);
+      var positionWGS84 =
+        scene.globe.ellipsoid.cartesianToCartographic(positionCartesian);
+      var longitude = Cesium.Math.toDegrees(positionWGS84.longitude);
+      var latitude = Cesium.Math.toDegrees(positionWGS84.latitude);
+      var height = positionWGS84.height;
+      console.log(longitude + "," + latitude + "," + height);
+    },
+  },
+  watch: {
+    "dgyform.gyColor": function (val, oldVal) {
+      if (this.dgyform.LightSource) {
+        let color = Cesium.Color.fromCssColorString(val);
+        this.dgyform.LightSource.color = color;
+      }
+    },
+    "dgyform.gyDistance": function (val, oldVal) {
+      if (this.dgyform.LightSource) {
+        this.dgyform.LightSource.cutoffDistance = Number(val);
+      }
+    },
+    "dgyform.gyDecay": function (val, oldVal) {
+      if (this.dgyform.LightSource) {
+        this.dgyform.LightSource.decay = Number(val);
+      }
+    },
+    "dgyform.gyIntensity": function (val, oldVal) {
+      if (this.dgyform.LightSource) {
+        this.dgyform.LightSource.intensity = Number(val);
+      }
+    },
+  },
+  beforeDestroy() {
+    this.clearLightSource(false, true);
+    this.startNight(false);
+  },
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style lang="scss" scoped>
+.el-card {
+  border: 0px solid #02a7f0;
+}
+.el-form-item {
+  margin-bottom: 0;
+}
+</style>

+ 56 - 0
src/views/ConstructionApplication3D/PlanningPlot/PlanningPlotInfo.vue

@@ -0,0 +1,56 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-descriptions column="1">
+          <el-descriptions-item
+            :label="item.labelCN"
+            v-for="item in info"
+            :key="item.label"
+            >{{ item.value }}</el-descriptions-item
+          >
+        </el-descriptions>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    // this.init();
+  },
+  methods: {},
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>

+ 443 - 0
src/views/ConstructionApplication3D/SunlightAnalysis/SunlightAnalysis.vue

@@ -0,0 +1,443 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1.1rem 0rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <div class="titleHeader">
+          <h3>参数设置</h3>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-row :gutter="10" style="display: flex; align-items: center">
+          <el-col :span="24">
+            日 期:
+            <el-date-picker
+              size="mini"
+              v-model="form.selDate"
+              type="date"
+              placeholder="选择日期"
+            >
+            </el-date-picker>
+          </el-col>
+        </el-row>
+        <el-row :gutter="10" style="display: flex; align-items: center">
+          <el-col :span="6"> 日照时间范围: </el-col>
+          <el-col :span="18">
+            <el-slider
+              size="mini"
+              v-model="datavalue"
+              range
+              :marks="marks"
+              :max="24"
+              @change="datavalueChange"
+            >
+            </el-slider>
+          </el-col>
+        </el-row>
+        <el-row :gutter="10">
+          <el-col :span="12">
+            时间间隔:
+            <el-input-number
+              style="width: 50%"
+              size="mini"
+              v-model="form.timeInterval"
+            ></el-input-number>
+          </el-col>
+          <el-col :span="12">
+            间距(米):
+            <el-input-number
+              style="width: 50%"
+              size="mini"
+              v-model="form.spacing"
+            ></el-input-number>
+          </el-col>
+        </el-row>
+        <el-row :gutter="10">
+          <el-col :span="24">
+            <div class="SaveCenter">
+              <el-button size="mini" type="primary" @click="statrSunlight"
+                >执行日照效果</el-button
+              >
+              <el-button size="mini" type="primary" @click="dqSunlight"
+                >当前日照</el-button
+              >
+            </div>
+          </el-col>
+        </el-row>
+        <el-divider></el-divider>
+        <el-row :gutter="10">
+          <el-col :span="12">
+            底部高程(米):
+            <el-input-number
+              style="width: 50%"
+              size="mini"
+              v-model="form.bottomHeight"
+            ></el-input-number>
+          </el-col>
+          <el-col :span="12">
+            拉伸高度(米):
+            <el-input-number
+              style="width: 50%"
+              size="mini"
+              v-model="form.extrudeHeight"
+            ></el-input-number>
+          </el-col>
+        </el-row>
+        <el-row :gutter="10">
+          <el-col :span="24">
+            阴影分析时日照时间案范围重合时为时刻阴影,不重合时计算为时间范围内阴影率
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+
+    <div class="SaveCenter">
+      <el-button size="mini" type="primary" @click="onSubmit"
+        >阴影分析</el-button
+      >
+      <el-button size="mini" @click="resetForm">清除</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      form: {
+        timeInterval: 60,
+        spacing: 10,
+        selDate: new Date(),
+        startTime: 10,
+        endTime: 14,
+        bottomHeight: 0,
+        extrudeHeight: 100,
+      },
+      datavalue: [8, 18],
+      positions: [],
+      points: [],
+      layers: null,
+      shadowQuery: null,
+      marks: {
+        8: "8点",
+        12: {
+          style: {
+            color: "#1989FA",
+          },
+          label: this.$createElement("strong", "12点"),
+        },
+        20: "20点",
+      },
+      handlerPolygon: null,
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    this.init();
+  },
+  methods: {
+    init() {
+      if (this.layers) {
+        return;
+      }
+      if (viewer.shadows == false) {
+        viewer.shadows = true; //开启场景阴影
+        viewer.terrainShadows = true; //地形阴影
+      }
+      let scene = viewer.scene;
+      this.layers = scene.layers.layerQueue;
+      //图层模型设置阴影
+      for (let i = 0; i < this.layers.length; i++) {
+        if (this.layers[i].shadowType !== 2) {
+          this.layers[i].shadowType = 2;
+          this.layers[i].refresh();
+        }
+      }
+
+      //创建阴影查询对象
+      if (!this.shadowQuery) {
+        this.shadowQuery = new Cesium.ShadowQueryPoints(scene);
+        this.shadowQuery.build();
+      }
+      let that = this;
+      //   this.setCurrentTime();
+      this.dqSunlight();
+      this.handlerPolygon = new Cesium.DrawHandler(
+        viewer,
+        Cesium.DrawMode.Polygon,
+        0
+      );
+      let handlerPolygon = this.handlerPolygon;
+      handlerPolygon.activeEvt.addEventListener(function (isActive) {
+        if (isActive == true) {
+          viewer.enableCursorStyle = false;
+          viewer._element.style.cursor = "";
+          document.body.classList.add("drawCur");
+        } else {
+          viewer.enableCursorStyle = true;
+          document.body.classList.remove("drawCur");
+        }
+      });
+      handlerPolygon.movingEvt.addEventListener((windowPosition) => {
+        window.tooltip.showAt(
+          windowPosition,
+          "<p>点击鼠标左键开始绘制分析区域</p>"
+        );
+      });
+      handlerPolygon.drawEvt.addEventListener((result) => {
+        window.tooltip.setVisible(false);
+        let positions = that.positions;
+        let points = that.points;
+
+        points.length = 0;
+        var polygon = result.object;
+        if (!polygon) {
+          return;
+        }
+        polygon.show = false;
+        handlerPolygon.polyline.show = false;
+        positions = [].concat(polygon.positions);
+        positions = Cesium.arrayRemoveDuplicates(
+          positions,
+          Cesium.Cartesian3.equalsEpsilon
+        );
+        //遍历多边形,取出所有点
+        for (var i = 0, len = positions.length; i < len; i++) {
+          //转化为经纬度,并加入至临时数组
+          var cartographic = Cesium.Cartographic.fromCartesian(
+            polygon.positions[i]
+          );
+          var longitude = Cesium.Math.toDegrees(cartographic.longitude);
+          var latitude = Cesium.Math.toDegrees(cartographic.latitude);
+          points.push(longitude);
+          points.push(latitude);
+        }
+        //设置分析对象的开始结束时间
+        var dateValue = that.form.selDate;
+        var st = new Date(dateValue);
+        st.setHours(Number(that.form.startTime));
+        that.shadowQuery.startTime = Cesium.JulianDate.fromDate(st);
+
+        var et = new Date(dateValue);
+        et.setHours(Number(that.form.endTime));
+        that.shadowQuery.endTime = Cesium.JulianDate.fromDate(et);
+
+        //设置当前时间
+        that.setCurrentTime();
+
+        that.shadowQuery.spacing = that.form.spacing;
+        that.shadowQuery.timeInterval = that.form.timeInterval;
+
+        //设置分析区域、底部高程和拉伸高度
+        var bh = Number(that.form.bottomHeight);
+        var eh = Number(that.form.extrudeHeight);
+        that.shadowQuery.qureyRegion({
+          position: points,
+          bottom: bh,
+          extend: eh,
+        });
+        that.shadowQuery.build();
+      });
+    },
+
+    //提交数据
+    onSubmit() {
+      this.analysis();
+    },
+    //清空from
+    resetForm() {
+      this.clear();
+    },
+    /**
+     * 开始分析
+     */
+    analysis() {
+      // this.init();
+
+      this.handlerPolygon.deactivate();
+      this.handlerPolygon.activate();
+    },
+    clear() {
+      if (this.handlerPolygon) {
+        this.handlerPolygon.deactivate();
+      }
+      window.tooltip.setVisible(false);
+      // common.clearHandlerDrawing();
+      viewer.entities.removeAll();
+
+      // let layers = scene.layers.layerQueue;
+      // for (var i = 0; i < layers.length; i++) {
+      //   layers[i].shadowType = 0;
+      // }
+      if (this.shadowQuery) {
+        this.shadowQuery.qureyRegion({
+          position: [0, 0],
+          bottom: 0,
+          extend: 0,
+        });
+      }
+
+      this.positions = [];
+      this.points = [];
+    },
+    //结束时日照阴影
+    setCurrentTime() {
+      var et = this.form.selDate;
+      et.setHours(Number(this.form.endTime));
+      viewer.clock.currentTime = Cesium.JulianDate.fromDate(et);
+      viewer.clock.multiplier = 1;
+      viewer.clock.shouldAnimate = false;
+    },
+    /**
+     * 执行日照动画
+     */
+    statrSunlight() {
+      var dateVal = this.form.selDate;
+      var startTime = new Date(dateVal);
+      var shour = Number(this.form.startTime);
+      var ehour = Number(this.form.endTime);
+
+      if (shour > ehour) {
+        return;
+      }
+
+      var nTimer = 0.0;
+      var nIntervId = setInterval(function () {
+        if (shour < ehour) {
+          startTime.setHours(shour);
+          startTime.setMinutes(nTimer);
+          viewer.clock.currentTime = Cesium.JulianDate.fromDate(startTime);
+          nTimer += 10.0;
+          if (nTimer > 60.0) {
+            shour += 1.0;
+            nTimer = 0.0;
+          }
+        } else {
+          clearInterval(nIntervId);
+        }
+      }, 20);
+    },
+    //当前日照效果
+    dqSunlight() {
+      viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date());
+      viewer.clock.multiplier = 1;
+      viewer.clock.shouldAnimate = true;
+    },
+
+    datavalueChange(val) {
+      this.form.startTime = val[0];
+      this.form.endTime = val[1];
+    },
+  },
+  watch: {
+    "form.selDate": function (newValue) {
+      let st = new Date(newValue);
+      st.setHours(this.form.startTime);
+      let et = new Date(newValue);
+      et.setHours(this.form.endTime);
+      this.shadowQuery.startTime = Cesium.JulianDate.fromDate(st);
+      this.shadowQuery.endTime = Cesium.JulianDate.fromDate(et);
+    },
+    "form.startTime": function (newValue) {
+      let thisdate = new Date(this.form.selDate);
+      var st = thisdate;
+      st.setHours(Number(newValue));
+      this.shadowQuery.startTime = Cesium.JulianDate.fromDate(st);
+    },
+    "form.endTime": function (newValue) {
+      let thisdate = new Date(this.form.selDate);
+      var et = thisdate;
+      et.setHours(Number(newValue));
+      this.shadowQuery.endTime = Cesium.JulianDate.fromDate(et);
+    },
+    "form.timeInterval": function (newValue) {
+      this.shadowQuery.timeInterval = Number(newValue);
+      // var bh = Number(this.bottomHeight);
+      // var eh = Number(this.extrudeHeight);
+      // shadowQuery.qureyRegion({
+      //   position: this.points,
+      //   bottom: bh,
+      //   extend: eh
+      // });
+      this.shadowQuery.build();
+    },
+    "form.spacing": function (newValue) {
+      this.shadowQuery.spacing = Number(newValue);
+      // var bh = Number(this.bottomHeight);
+      // var eh = Number(this.extrudeHeight);
+      // shadowQuery.qureyRegion({
+      //   position: this.points,
+      //   bottom: bh,
+      //   extend: eh
+      // });
+      this.shadowQuery.build();
+    },
+    "form.bottomHeight": function (newValue) {
+      var bh = Number(newValue);
+      var eh = Number(this.form.extrudeHeight);
+      this.shadowQuery.qureyRegion({
+        position: this.points,
+        bottom: bh,
+        extend: eh,
+      });
+      this.shadowQuery.build();
+    },
+    "form.extrudeHeight": function (newValue) {
+      var bh = Number(this.form.bottomHeight);
+      var eh = Number(newValue);
+      this.shadowQuery.qureyRegion({
+        position: this.points,
+        bottom: bh,
+        extend: eh,
+      });
+      this.shadowQuery.build();
+    },
+  },
+  beforeDestroy() {
+    this.clear();
+    this.shadowQuery.destroy();
+    this.handlerPolygon.deactivate();
+    this.handlerPolygon = undefined;
+    this.dqSunlight();
+  },
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style lang="scss" scoped>
+.el-card {
+  border: 0px solid #02a7f0;
+}
+.el-form-item {
+  margin-bottom: 0;
+}
+.slider_padding {
+  padding: 0rem 0.5rem;
+}
+</style>

+ 207 - 0
src/views/ConstructionApplication3D/ZBFXAnalysisinfo/ZBFXAnalysisinfo.vue

@@ -0,0 +1,207 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-row :gutter="10" v-for="DKZBData in DKZBDataList" :key="DKZBData">
+          <el-col :span="24">
+            规划地块:{{ DKZBData.DKBM }}
+            <el-table
+              :data="DKZBData.TableData"
+              :highlight-current-row="true"
+              style="width: 100%"
+            >
+              <el-table-column label="指标" align="center">
+                <template #default="{ row }">
+                  {{ row.zbmc }}
+                </template>
+              </el-table-column>
+              <el-table-column label="方案指标预估" align="center">
+                <template #default="{ row }">
+                  {{ row.fazbyg }}
+                </template>
+              </el-table-column>
+              <el-table-column label="控规要求" align="center">
+                <template #default="{ row }">
+                  {{ row.kgyq }}
+                </template>
+              </el-table-column>
+              <el-table-column label="结论" align="center">
+                <template #default="{ row }">
+                  {{ row.jl ? "合规" : "不合规" }}
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-col></el-row
+        >
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import {
+  cartesian3ToWGS84,
+  mapQuery,
+  flatten,
+  mercator2lonLat,
+  undergroundMode,
+} from "@/utils/MapHelper/MapHelper.js";
+import {
+  area,
+  intersect,
+  polygon,
+  point,
+  midpoint,
+  difference,
+} from "@turf/turf";
+export default {
+  data() {
+    return {
+      DKZBDataList: [],
+      guihuamj: 0,
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    debugger;
+    this.init();
+  },
+  methods: {
+    async init() {
+      let that = this;
+      this.info.tableDataList.forEach((Data) => {
+        let DKZBData = { DKBM: Data.KG_Data.DKBM };
+        let TableData = [];
+        debugger;
+        let YDMJrow = {};
+        YDMJrow.zbmc = "用地总面积";
+        YDMJrow.fazbyg = Number(Data.FA_Data.YDMJ).toFixed(2);
+        YDMJrow.kgyq = Number(Data.KG_Data.YDMJ).toFixed(2);
+        if (Number(Data.KG_Data.YDMJ) >= Number(Data.FA_Data.YDMJ)) {
+          YDMJrow.jl = true;
+        } else {
+          YDMJrow.jl = false;
+        }
+        TableData.push(YDMJrow);
+
+        let JZMJrow = {};
+        JZMJrow.zbmc = "建筑面积";
+        JZMJrow.fazbyg = Number(Data.FA_Data.JZMJ).toFixed(2);
+        JZMJrow.kgyq = Number(Data.KG_Data.JZMJ).toFixed(2);
+        if (Number(Data.KG_Data.JZMJ) >= Number(Data.FA_Data.JZMJ)) {
+          JZMJrow.jl = true;
+        } else {
+          JZMJrow.jl = false;
+        }
+        TableData.push(JZMJrow);
+
+        let JDMJrow = {};
+        JDMJrow.zbmc = "基底面积";
+        JDMJrow.fazbyg = Number(Data.FA_Data.JDMJ).toFixed(2);
+        JDMJrow.kgyq = Data.KG_Data.JDMJ;
+        if (Number(Data.KG_Data.JDMJ) >= Number(Data.FA_Data.JDMJ)) {
+          JDMJrow.jl = true;
+        } else {
+          JDMJrow.jl = false;
+        }
+        TableData.push(JDMJrow);
+
+        let JRJZMJrow = {};
+        JRJZMJrow.zbmc = "计容建筑面积";
+        JRJZMJrow.fazbyg = Number(Data.FA_Data.JRJZMJ).toFixed(2);
+        JRJZMJrow.kgyq = Data.KG_Data.JRJZMJX + "/" + Data.KG_Data.JRJZMJD;
+        if (
+          Number(Data.FA_Data.JRJZMJ) >= Number(Data.KG_Data.JRJZMJX) &&
+          Number(Data.FA_Data.JRJZMJ) <= Number(Data.KG_Data.JRJZMJD)
+        ) {
+          JRJZMJrow.jl = true;
+        } else {
+          JRJZMJrow.jl = false;
+        }
+        TableData.push(JRJZMJrow);
+
+        let RJLrow = {};
+        RJLrow.zbmc = "容积率";
+        RJLrow.fazbyg = Data.FA_Data.RJL;
+        RJLrow.kgyq = Data.KG_Data.RJLX + "/" + Data.KG_Data.RJLD;
+        if (
+          Number(Data.FA_Data.RJL) >= Number(Data.KG_Data.RJLX) &&
+          Number(Data.FA_Data.RJL) <= Number(Data.KG_Data.RJLD)
+        ) {
+          JRLrow.jl = true;
+        } else {
+          RJLrow.jl = false;
+        }
+        TableData.push(RJLrow);
+
+        let JZMDrow = {};
+        JZMDrow.zbmc = "建筑密度";
+        JZMDrow.fazbyg = Data.FA_Data.JZMD;
+        JZMDrow.kgyq = Data.KG_Data.JZMDX + "/" + Data.KG_Data.JZMDD;
+        if (
+          Number(Data.FA_Data.JZMD) >= Number(Data.KG_Data.JZMDX) &&
+          Number(Data.FA_Data.JZMD) <= Number(Data.KG_Data.JZMDD)
+        ) {
+          JZMDrow.jl = true;
+        } else {
+          JZMDrow.jl = false;
+        }
+        TableData.push(JZMDrow);
+
+        let JZXGDrow = {};
+        JZXGDrow.zbmc = "建筑限高";
+        JZXGDrow.fazbyg = Data.FA_Data.JZGD;
+        JZXGDrow.kgyq = Data.KG_Data.JZXGX + "/" + Data.KG_Data.JZXGD;
+        if (
+          Number(Data.FA_Data.JZGD) >= Number(Data.KG_Data.JZXGX) &&
+          Number(Data.FA_Data.JZGD) <= Number(Data.KG_Data.JZXGD)
+        ) {
+          JZXGDrow.jl = true;
+        } else {
+          JZXGDrow.jl = false;
+        }
+        TableData.push(JZXGDrow);
+        DKZBData.TableData = TableData;
+        that.DKZBDataList.push(DKZBData);
+      });
+    },
+  },
+
+  beforeDestroy() {},
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style lang="scss" scoped>
+.el-card {
+  border: 0px solid #02a7f0;
+}
+.el-form-item {
+  margin-bottom: 0;
+}
+</style>

+ 183 - 0
src/views/ConstructionApplication3D/ZYAnalysisinfo/ZYAnalysisinfo.vue

@@ -0,0 +1,183 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <div class="titleHeader">
+          <span>项目用地面积:{{ guihuamj }}平方米。</span>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-table
+          ref="table"
+          :data="TableData"
+          :highlight-current-row="true"
+          @current-change="handleCurrentChange"
+          style="width: 100%"
+        >
+          <el-table-column label="地类图斑类型" align="center">
+            <template #default="{ row }">
+              {{
+                row.data.find((c) => c.label == "DLMC")
+                  ? row.data.find((c) => c.label == "DLMC").value
+                  : "未定义"
+              }}
+            </template>
+          </el-table-column>
+          <el-table-column label="图斑面积(㎡)" align="center">
+            <template #default="{ row }">
+              {{
+                row.data.find((c) => c.label == "TBMJ")
+                  ? row.data.find((c) => c.label == "TBMJ").value
+                  : 0
+              }}
+            </template>
+          </el-table-column>
+          <el-table-column label="占用面积(㎡)" align="center">
+            <template #default="{ row }">
+              {{ row.jjmj }}
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import {
+  cartesian3ToWGS84,
+  mapQuery,
+  flatten,
+  mercator2lonLat,
+  undergroundMode,
+} from "@/utils/MapHelper/MapHelper.js";
+import {
+  area,
+  intersect,
+  polygon,
+  point,
+  midpoint,
+  difference,
+} from "@turf/turf";
+export default {
+  data() {
+    return {
+      TableData: [],
+      guihuamj: 0,
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    debugger;
+    this.init();
+  },
+  methods: {
+    async init() {
+      let that = this;
+      that.guihuamj = 0;
+      that.info.LandPlanningList.forEach((element) => {
+        let ydmj = element.data.find((c) => c.label == "YDMJ");
+        if (ydmj) {
+          that.guihuamj += Number(ydmj.value);
+        }
+      });
+      //地类图斑数组
+      this.info.DLTBlayerDataList.forEach((DLTBlayerData) => {
+        let Area = that.CalculateIntersectionArea(
+          that.info.LandPlanningList,
+          DLTBlayerData.geometry
+        );
+
+        DLTBlayerData.jjmj = Area;
+        if (DLTBlayerData.jjmj > 0) {
+          that.TableData.push(DLTBlayerData);
+        }
+      });
+    },
+    /**
+     * // 计算相交面积
+     * @param LandPlanningGeometrys 规划地块范围
+     * @param DLTBlayerDataGeometry 地类范围
+     */
+    CalculateIntersectionArea(LandPlanningGeometrys, DLTBlayerDataGeometry) {
+      let LandPlanningPs = [];
+      let DLTBlayerDataPs = [];
+      LandPlanningGeometrys.forEach((element) => {
+        let LandPlanningP = [];
+        element.geometry.points.forEach((point) => {
+          LandPlanningP.push([point.x, point.y]);
+        });
+        LandPlanningPs.push(LandPlanningP);
+      });
+
+      DLTBlayerDataGeometry.points.forEach((point) => {
+        DLTBlayerDataPs.push([point.x, point.y]);
+      });
+      let polygon1 = polygon(LandPlanningPs);
+      let polygon2 = polygon([DLTBlayerDataPs]);
+      //交集
+      let differenceion = intersect(polygon1, polygon2);
+      if (differenceion) {
+        const areadifference = area(differenceion);
+        return areadifference.toFixed(2);
+      } else {
+        return 0;
+      }
+    },
+    //选中
+    handleCurrentChange(row) {
+      // var center = Cesium.Cartesian3.fromDegrees(
+      //   row.geometry.position.x,
+      //   row.geometry.position.y
+      // ); //camera视野中心点坐标
+      // var heading = Cesium.Math.toRadians(0.0);
+      // var pitch = Cesium.Math.toRadians(-55.0);
+      // var range = row.geometry.boundingBox.upper.z + 300;
+      // viewer.camera.lookAt(
+      //   center,
+      //   new Cesium.HeadingPitchRange(heading, pitch, range)
+      // );
+      // viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
+    },
+  },
+
+  beforeDestroy() {},
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style lang="scss" scoped>
+.el-card {
+  border: 0px solid #02a7f0;
+}
+.el-form-item {
+  margin-bottom: 0;
+}
+</style>

+ 220 - 0
src/views/ConstructionApplication3D/backLineAnalysis/backLineAnalysisinfo.vue

@@ -0,0 +1,220 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <div class="titleHeader">
+          <span>超建筑退线面积:80.45平方米。</span>
+          <br />
+          <span v-if="TableData.length > 0">结论:超出建筑退线范围。</span>
+          <span v-else>结论:未超出建筑退线范围。</span>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-table
+          ref="table"
+          :data="TableData"
+          :highlight-current-row="true"
+          @current-change="handleCurrentChange"
+          style="width: 100%"
+        >
+          <el-table-column label="超高楼号" align="center">
+            <template #default="{ row }">
+              {{ row.data.find((c) => c.label == "BUILDNO").value }}
+            </template>
+          </el-table-column>
+          <el-table-column label="层数" align="center">
+            <template #default="{ row }">
+              {{
+                row.data.find((c) => c.label == "FLOOR")
+                  ? row.data.find((c) => c.label == "FLOOR").value
+                  : 1
+              }}
+            </template>
+          </el-table-column>
+          <el-table-column label="超出面积(㎡)" align="center">
+            <template #default="{ row }">
+              {{ row.ccmj }}
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import {
+  cartesian3ToWGS84,
+  mapQuery,
+  flatten,
+  mercator2lonLat,
+  undergroundMode,
+} from "@/utils/MapHelper/MapHelper.js";
+import {
+  area,
+  intersect,
+  polygon,
+  point,
+  midpoint,
+  difference,
+} from "@turf/turf";
+export default {
+  data() {
+    return {
+      TableData: [],
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    debugger;
+    this.init();
+  },
+  methods: {
+    async init() {
+      //查询当前项目建筑轮廓范围
+      let jzlkList = [];
+      if (this.info.Minfo.dataurl && this.info.Minfo.dataSourceName) {
+        let queryByGeometryParameters = {
+          getFeatureMode: "SQL",
+          datasetNames: [this.info.Minfo.dataSourceName + ":" + "建筑轮廓"],
+          queryParameter: {
+            attributeFilter: "1=1",
+          },
+          hasGeometry: "true",
+        };
+        let e = await mapQuery(
+          this.info.Minfo.dataurl + "/featureResults.json?returnContent=true",
+          queryByGeometryParameters
+        );
+        if (e && e.totalCount > 0) {
+          e.features.forEach((feature) => {
+            let jzlk = { data: [], geometry: feature.geometry };
+            feature.fieldNames.forEach((fieldName, i) => {
+              let Field = e.datasetInfos[0].fieldInfos.find(
+                (c) =>
+                  c.name.toUpperCase() == fieldName.toUpperCase() &&
+                  c.name.toUpperCase().indexOf("SM") == -1
+              );
+              if (Field) {
+                jzlk.data.push({
+                  label: fieldName,
+                  labelCN: Field ? Field.caption : fieldName,
+                  value: feature.fieldValues[i],
+                });
+              }
+            });
+            jzlkList.push(jzlk);
+          });
+        } else {
+          console.log("wushuju");
+        }
+        //退线区域
+        this.info.JZTXlayerDataList.forEach((JZTXlayerData) => {
+          //楼体信息
+          jzlkList.forEach((jzlkData) => {
+            let Area = this.calculateDisjointArea(
+              jzlkData.geometry,
+              JZTXlayerData.geometry
+            );
+            let FLOOR = jzlkData.data.find((c) => c.label == "FLOOR");
+            if (FLOOR) FLOOR = Number(FLOOR.value);
+            else {
+              FLOOR = 1;
+            }
+            debugger;
+            jzlkData.ccmj = Area * FLOOR;
+            if (jzlkData.ccmj > 0) {
+              this.TableData.push(jzlkData);
+            }
+          });
+        });
+      } else {
+        console.log("wushuju");
+      }
+    },
+    /**
+     * // 计算不相交面积
+     * @param jzlkDataGeometry 建筑轮廓范围
+     * @param JZTXlayerDataGeometry 建筑退线范围
+     */
+    calculateDisjointArea(jzlkDataGeometry, JZTXlayerDataGeometry) {
+      let jzlkDataPs = [];
+      let JZTXlayerDataPs = [];
+      jzlkDataGeometry.points.forEach((point) => {
+        jzlkDataPs.push([point.x, point.y]);
+      });
+      if (jzlkDataPs.length > 0) {
+        jzlkDataPs.push(jzlkDataPs[0]);
+      }
+      JZTXlayerDataGeometry.points.forEach((point) => {
+        JZTXlayerDataPs.push([point.x, point.y]);
+      });
+      var polygon1 = polygon([jzlkDataPs]);
+
+      var polygon2 = polygon([JZTXlayerDataPs]);
+      //差集
+      let differenceion = difference(polygon1, polygon2);
+      if (differenceion) {
+        const areadifference = area(differenceion);
+        return areadifference.toFixed(2);
+      } else {
+        return 0;
+      }
+    },
+    //选中
+    handleCurrentChange(row) {
+      var center = Cesium.Cartesian3.fromDegrees(
+        row.geometry.position.x,
+        row.geometry.position.y
+      ); //camera视野中心点坐标
+      var heading = Cesium.Math.toRadians(0.0);
+      var pitch = Cesium.Math.toRadians(-55.0);
+      var range = row.geometry.boundingBox.upper.z + 300;
+      viewer.camera.lookAt(
+        center,
+        new Cesium.HeadingPitchRange(heading, pitch, range)
+      );
+      viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
+    },
+  },
+
+  beforeDestroy() {},
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style lang="scss" scoped>
+.el-card {
+  border: 0px solid #02a7f0;
+}
+.el-form-item {
+  margin-bottom: 0;
+}
+</style>

+ 184 - 0
src/views/ConstructionApplication3D/projectInfo/addProjectInfo.vue

@@ -0,0 +1,184 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-form ref="ruleForm" :model="form" :rules="rules" label-width="90px">
+          <el-form-item label="项目名称" size="mini" prop="projectname">
+            <el-col :span="20">
+              <el-input size="mini" v-model="form.projectname"></el-input>
+            </el-col>
+          </el-form-item>
+          <el-form-item label="申请单位" size="mini" prop="applicant">
+            <el-col :span="20">
+              <el-input size="mini" v-model="form.applicant"></el-input>
+            </el-col>
+          </el-form-item>
+          <el-form-item label="项目地址" size="mini" prop="projectaddress">
+            <el-col :span="20">
+              <el-input size="mini" v-model="form.projectaddress"></el-input>
+            </el-col>
+          </el-form-item>
+          <el-form-item label="地块编号" size="mini" prop="plotnumber">
+            <el-col :span="20">
+              <el-input size="mini" v-model="form.plotnumber"></el-input>
+            </el-col>
+          </el-form-item>
+          <el-form-item label="用地面积" size="mini" prop="landarea">
+            <el-col :span="20">
+              <el-input size="mini" v-model="form.landarea"></el-input>
+            </el-col>
+            <el-col :span="4">平方米</el-col>
+          </el-form-item>
+          <el-form-item label="用地性质" size="mini" prop="landusenature">
+            <el-col :span="20">
+              <el-select
+                v-model="form.landusenature"
+                placeholder="用地性质"
+                clearable
+              >
+                <el-option
+                  v-for="dict in zt_landusenature"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-col>
+          </el-form-item>
+          <el-form-item label="项目定位" size="mini" prop="projectpositioning">
+            <el-col :span="20">
+              <el-input
+                size="mini"
+                v-model="form.projectpositioning"
+              ></el-input>
+            </el-col>
+          </el-form-item>
+          <el-form-item
+            label="项目总投资"
+            size="mini"
+            prop="totalprojectinvestment"
+          >
+            <el-col :span="20">
+              <el-input
+                size="mini"
+                v-model="form.totalprojectinvestment"
+              ></el-input>
+            </el-col>
+            <el-col :span="4">亿元</el-col>
+          </el-form-item>
+          <el-form-item label="资金来源" size="mini" prop="fundingsource">
+            <el-col :span="20">
+              <el-input size="mini" v-model="form.fundingsource"></el-input>
+            </el-col>
+          </el-form-item>
+
+          <el-form-item label="土地情况" size="mini" prop="landsituation">
+            <el-col :span="20">
+              <el-input
+                type="textarea"
+                :autosize="{ minRows: 2, maxRows: 4 }"
+                size="mini"
+                v-model="form.landsituation"
+              ></el-input>
+            </el-col>
+          </el-form-item>
+        </el-form>
+        <div class="SaveCenter">
+          <el-button type="primary" @click="submitForm('ruleForm')"
+            >添加</el-button
+          >
+          <el-button @click="resetForm('ruleForm')">重置</el-button>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { v4 as uuidv4 } from "uuid";
+export default {
+  data() {
+    return {
+      form: {
+        id: "",
+        meetingProgress: 0,
+        applicant: "",
+        projectname: "",
+        projectaddress: "",
+        plotnumber: "",
+        landarea: "",
+        landusenature: "",
+        projectpositioning: "",
+        landsituation: "",
+        totalprojectinvestment: "",
+        fundingsource: "",
+      },
+      zt_landusenature: window.dict.zt_landusenature,
+      zt_fundingsource: window.dict.zt_fundingsource,
+      rules: {
+        projectname: [
+          { required: true, message: "请输入项目名称", trigger: "blur" },
+        ],
+        plotnumber: [
+          { required: true, message: "请输入地块编号", trigger: "blur" },
+        ],
+        landusenature: [
+          { required: true, message: "用地性质", trigger: "blur" },
+        ],
+      },
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    // this.init();
+  },
+  methods: {
+    submitForm(formName) {
+      let that = this;
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          that.form.id = uuidv4();
+          that.form.meetingProgress = 0;
+          window.projectinformation.push(that.form);
+          debugger;
+          that.lyoption.cancel();
+          that.$layer.close(that.layerid);
+        } else {
+          return false;
+        }
+      });
+    },
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+  },
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style lang="scss" scoped></style>

+ 77 - 0
src/views/ConstructionApplication3D/projectInfo/projectInfo.vue

@@ -0,0 +1,77 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-descriptions :title="'项目名称:' + info.projectname" column="1">
+          <el-descriptions-item label="申请单位">{{
+            info.applicant
+          }}</el-descriptions-item>
+          <el-descriptions-item label="项目地址">{{
+            info.projectaddress
+          }}</el-descriptions-item>
+          <el-descriptions-item label="地块编号">{{
+            info.plotnumber
+          }}</el-descriptions-item>
+          <el-descriptions-item label="用地面积">
+            {{ info.landarea }}
+          </el-descriptions-item>
+          <el-descriptions-item label="用地性质">{{
+            info.landusenature
+          }}</el-descriptions-item>
+          <el-descriptions-item label="项目定位">{{
+            info.projectpositioning
+          }}</el-descriptions-item>
+          <el-descriptions-item label="土地情况">{{
+            info.landsituation
+          }}</el-descriptions-item>
+          <el-descriptions-item label="项目总投资">{{
+            info.totalprojectinvestment
+          }}</el-descriptions-item>
+          <el-descriptions-item label="资金来源">{{
+            info.fundingsource
+          }}</el-descriptions-item>
+        </el-descriptions>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    // this.init();
+  },
+  methods: {},
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>

+ 2170 - 0
src/views/ConstructionApplication3D/projectManagement/projectManagement.vue

@@ -0,0 +1,2170 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="12">
+        <el-input
+          size="mini"
+          placeholder="请输入内容"
+          v-model="input3"
+          class="input-with-select"
+        >
+          <el-button slot="append" icon="el-icon-search"></el-button>
+        </el-input>
+      </el-col>
+      <el-col :span="12">
+        <el-button size="mini" type="primary" plain @click="openaddProjectInfo"
+          >新增项目</el-button
+        >
+        <el-button size="mini" type="primary" plain>导入项目</el-button>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-tabs v-model="activeName" style="height: 100%">
+          <el-tab-pane label="未上会项目" name="未上会项目">
+            <el-collapse accordion @change="handleChangeXM">
+              <el-collapse-item
+                v-for="item in wsh"
+                :key="item.id"
+                :name="item.id"
+              >
+                <template slot="title">
+                  {{ item.projectname }}({{
+                    getConstructionModel(item.id).length
+                  }}个)<i
+                    style="padding-left: 10px"
+                    class="header-icon el-icon-info"
+                    @click.stop="openProjectInfo(item)"
+                  ></i>
+                </template>
+                <div>
+                  <el-row :gutter="10">
+                    <el-col :span="24">
+                      <el-button
+                        style="margin-left: 10px"
+                        size="mini"
+                        type="primary"
+                        plain
+                        @click="openAddConstructionModelInfo(item)"
+                        >导入模型</el-button
+                      >
+                      <el-button size="mini" type="primary" plain
+                        >模型对比</el-button
+                      >
+                      <el-button
+                        size="mini"
+                        type="primary"
+                        plain
+                        @click="setStrategy(item)"
+                        >选定方案</el-button
+                      >
+                    </el-col>
+                  </el-row>
+
+                  <el-row
+                    :gutter="10"
+                    v-for="itemModel in getConstructionModel(item.id)"
+                    :key="itemModel.id"
+                  >
+                    <el-col :span="24">
+                      <div
+                        class="checkedState"
+                        :ref="'Model' + itemModel.id"
+                        @click="SelectConstructionModelHendle(itemModel)"
+                      >
+                        <div class="status ce" style="display: none">
+                          <div class="icon"></div>
+                          <div class="txts ce">待选定</div>
+                        </div>
+                        <el-card
+                          shadow="hover"
+                          class="card_body_style hover_style"
+                        >
+                          <el-row>
+                            <el-col :span="24">
+                              <el-checkbox
+                                v-model="itemModel.checked"
+                                :label="itemModel.id"
+                                @change="changeModel($event, itemModel)"
+                                >{{ itemModel.modelname }}</el-checkbox
+                              >
+                            </el-col>
+                          </el-row>
+                          <el-row>
+                            <el-col :span="24">
+                              {{ itemModel.creationtime }}
+                            </el-col>
+                          </el-row>
+                          <el-row>
+                            <el-col
+                              :span="6"
+                              class="container hover_style"
+                              style="cursor: pointer"
+                            >
+                              <i
+                                style="font-size: 2rem"
+                                class="el-icon-s-operation"
+                                @click.stop="openConstructionModel(itemModel)"
+                              ></i>
+                              <a @click.stop="openConstructionModel(itemModel)"
+                                >详情</a
+                              >
+                            </el-col>
+                            <el-col
+                              :span="6"
+                              class="container hover_style"
+                              style="cursor: pointer"
+                            >
+                              <i
+                                style="font-size: 2rem"
+                                class="el-icon-location-outline"
+                                @click.stop="positionModel()"
+                              ></i>
+                              <a @click.stop="positionModel()">定位</a>
+                            </el-col>
+                            <el-col
+                              :span="6"
+                              class="container hover_style"
+                              style="cursor: pointer"
+                            >
+                              <i
+                                style="font-size: 2rem"
+                                class="el-icon-share"
+                                @click.stop="openAnalyzeList(itemModel)"
+                              ></i>
+                              <a @click.stop="openAnalyzeList(itemModel)"
+                                >分析</a
+                              >
+                            </el-col>
+                            <el-col
+                              :span="6"
+                              class="container hover_style"
+                              style="cursor: pointer"
+                            >
+                              <i
+                                style="font-size: 2rem"
+                                class="el-icon-delete"
+                                @click.stop="openProjectInfo(item)"
+                              ></i>
+                              <a>删除</a>
+                            </el-col>
+                          </el-row>
+                          <el-row
+                            :ref="itemModel.id + 'AnalyzeList'"
+                            class="none"
+                          >
+                            <el-col :span="24">
+                              <el-row>
+                                <el-col :span="24">
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="
+                                      openNightscapeAnalysis(itemModel)
+                                    "
+                                    >夜景分析</el-button
+                                  >
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="openskylineAnalysis(itemModel)"
+                                    >天际线分析</el-button
+                                  >
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="
+                                      openSunlightAnalysis(itemModel)
+                                    "
+                                    >日照分析</el-button
+                                  >
+                                </el-col>
+                              </el-row>
+                              <el-row>
+                                <el-col :span="24">
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="DistrictAnalysis(itemModel)"
+                                    >区位分析
+                                  </el-button>
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="limitHeightAnalysis(itemModel)"
+                                    >限高分析
+                                  </el-button>
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="trafficAnalysis(itemModel)"
+                                    >交通分析
+                                  </el-button>
+                                </el-col>
+                              </el-row>
+                              <el-row>
+                                <el-col :span="24">
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="undergroundModeAnalysis()"
+                                    >地下分析
+                                  </el-button>
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="backLineAnalysis(itemModel)"
+                                    >建筑退线
+                                  </el-button>
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="occupyAnalysis(itemModel)"
+                                    >占压分析
+                                  </el-button>
+                                </el-col>
+                              </el-row>
+                              <el-row>
+                                <el-col :span="24">
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="normAnalysis(itemModel)"
+                                    >指标分析
+                                  </el-button>
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="backLineAnalysis(itemModel)"
+                                    >建筑退线
+                                  </el-button>
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="occupyAnalysis(itemModel)"
+                                    >占压分析
+                                  </el-button>
+                                </el-col>
+                              </el-row>
+                            </el-col>
+                          </el-row>
+                        </el-card>
+                      </div>
+                    </el-col>
+                  </el-row>
+                </div>
+              </el-collapse-item>
+            </el-collapse>
+          </el-tab-pane>
+          <el-tab-pane label="已上会项目" name="已上会项目">
+            <el-collapse accordion>
+              <el-collapse-item
+                v-for="item in ysh"
+                :key="item.id"
+                :name="item.id"
+              >
+                <template slot="title">
+                  {{ item.projectname }}({{
+                    getConstructionModel(item.id).length
+                  }}个)<i
+                    style="padding-left: 10px"
+                    class="header-icon el-icon-info"
+                    @click.stop="openProjectInfo(item)"
+                  ></i>
+                </template>
+                <div>
+                  <el-row :gutter="10">
+                    <el-col :span="24">
+                      <el-button size="mini" type="primary" plain
+                        >模型对比</el-button
+                      >
+                      <el-button
+                        style="margin-left: 10px"
+                        size="mini"
+                        type="primary"
+                        plain
+                        >模型注册</el-button
+                      >
+                    </el-col>
+                  </el-row>
+
+                  <el-row
+                    :gutter="10"
+                    v-for="itemModel in getConstructionModel(item.id)"
+                    :key="itemModel.id"
+                  >
+                    <el-col :span="24">
+                      <div
+                        class="checkedState"
+                        :ref="'Model' + itemModel.id"
+                        @click="SelectConstructionModelHendle(itemModel)"
+                      >
+                        <div
+                          class="status ce"
+                          :style="{
+                            display: itemModel.selectionStatus
+                              ? 'block'
+                              : 'none',
+                          }"
+                        >
+                          <div class="icon"></div>
+                          <div class="txts ce">已选定</div>
+                        </div>
+                        <el-card
+                          shadow="hover"
+                          class="card_body_style hover_style"
+                        >
+                          <el-row>
+                            <el-col :span="24">
+                              <el-checkbox
+                                v-model="itemModel.checked"
+                                :label="itemModel.id"
+                                >{{ itemModel.modelname }}</el-checkbox
+                              >
+                            </el-col>
+                          </el-row>
+                          <el-row>
+                            <el-col :span="24">
+                              {{ itemModel.creationtime }}
+                            </el-col>
+                          </el-row>
+                          <el-row>
+                            <el-col
+                              :span="6"
+                              class="container hover_style"
+                              style="cursor: pointer"
+                            >
+                              <i
+                                style="font-size: 2rem"
+                                class="el-icon-s-operation"
+                                @click.stop="openProjectInfo(itemModel)"
+                              ></i>
+                              <a @click.stop="openProjectInfo(itemModel)"
+                                >详情</a
+                              >
+                            </el-col>
+                            <el-col
+                              :span="6"
+                              class="container hover_style"
+                              style="cursor: pointer"
+                            >
+                              <i
+                                style="font-size: 2rem"
+                                class="el-icon-location-outline"
+                                @click.stop="positionModel()"
+                              ></i>
+                              <a @click.stop="positionModel()">定位</a>
+                            </el-col>
+                            <el-col
+                              :span="6"
+                              class="container hover_style"
+                              style="cursor: pointer"
+                            >
+                              <i
+                                style="font-size: 2rem"
+                                class="el-icon-share"
+                                @click.stop="openAnalyzeList(itemModel)"
+                              ></i>
+                              <a @click.stop="openAnalyzeList(itemModel)"
+                                >分析</a
+                              >
+                            </el-col>
+                          </el-row>
+                          <el-row
+                            :ref="itemModel.id + 'AnalyzeList'"
+                            class="none"
+                          >
+                            <el-col :span="24">
+                              <el-row>
+                                <el-col :span="24">
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="
+                                      openNightscapeAnalysis(itemModel)
+                                    "
+                                    >夜景分析</el-button
+                                  >
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="openskylineAnalysis(itemModel)"
+                                    >天际线分析</el-button
+                                  >
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="
+                                      openSunlightAnalysis(itemModel)
+                                    "
+                                    >日照分析</el-button
+                                  >
+                                </el-col>
+                              </el-row>
+                              <el-row>
+                                <el-col :span="24">
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="DistrictAnalysis(itemModel)"
+                                    >区位分析
+                                  </el-button>
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="limitHeightAnalysis(itemModel)"
+                                    >限高分析
+                                  </el-button>
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="trafficAnalysis(itemModel)"
+                                    >交通分析
+                                  </el-button>
+                                </el-col>
+                              </el-row>
+                              <el-row>
+                                <el-col :span="24">
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="undergroundModeAnalysis()"
+                                    >地下分析
+                                  </el-button>
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="backLineAnalysis(itemModel)"
+                                    >建筑退线
+                                  </el-button>
+                                  <el-button
+                                    type="primary"
+                                    size="mini"
+                                    @click.stop="trafficAnalysis(itemModel)"
+                                    >占压分析
+                                  </el-button>
+                                </el-col>
+                              </el-row>
+                            </el-col>
+                          </el-row>
+                        </el-card>
+                      </div>
+                    </el-col>
+                  </el-row>
+                </div>
+              </el-collapse-item>
+            </el-collapse>
+          </el-tab-pane>
+        </el-tabs>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import {
+  cartesian3ToWGS84,
+  mapQuery,
+  flatten,
+  mercator2lonLat,
+  undergroundMode,
+} from "@/utils/MapHelper/MapHelper.js";
+import { v4 as uuidv4 } from "uuid";
+import { isFunction, flatMap, values } from "lodash-es";
+import {
+  area,
+  intersect,
+  polygon,
+  point,
+  midpoint,
+  difference,
+} from "@turf/turf";
+import NightscapeAnalysis from "@/views/ConstructionApplication3D/NightscapeAnalysis/NightscapeAnalysis.vue";
+import addProjectInfo from "@/views/ConstructionApplication3D/projectInfo/addProjectInfo.vue";
+import projectInfo from "@/views/ConstructionApplication3D/projectInfo/projectInfo.vue";
+import skylineAnalysis from "@/views/ConstructionApplication3D/skylineAnalysis/skylineAnalysis.vue";
+import SunlightAnalysis from "@/views/ConstructionApplication3D/SunlightAnalysis/SunlightAnalysis.vue";
+import ConstructionModelInfo from "@/views/ConstructionApplication3D/ConstructionModelInfo/ConstructionModelInfo.vue";
+import addConstructionModelInfo from "@/views/ConstructionApplication3D/ConstructionModelInfo/addConstructionModelInfo.vue";
+import PlanningPlotInfo from "@/views/ConstructionApplication3D/PlanningPlot/PlanningPlotInfo.vue";
+import HighLimitAnalysis from "@/views/ConstructionApplication3D/HighLimitAnalysis/HighLimitAnalysis.vue";
+import backLineAnalysisinfo from "@/views/ConstructionApplication3D/backLineAnalysis/backLineAnalysisinfo.vue";
+import ZYAnalysisinfo from "@/views/ConstructionApplication3D/ZYAnalysisinfo/ZYAnalysisinfo.vue";
+import ZBFXAnalysisinfo from "@/views/ConstructionApplication3D/ZBFXAnalysisinfo/ZBFXAnalysisinfo.vue";
+export default {
+  data() {
+    return {
+      activeName: "未上会项目",
+      ysh: [],
+      wsh: [],
+      WaitingSelectionModel: null,
+      //点击查询用地红线事件
+      handler: null,
+      //点查entities事件
+      getEntitiesHandler: null,
+      tooltip: createTooltip(document.body),
+      //模型数据数组
+      layerDataList: [],
+      //模型图层数组
+      layerList: [],
+      // 规划地块数组
+      LandPlanningList: [],
+      //道路数组
+      DLlayerDatas: [],
+      //地下模式状态
+      underground: false,
+      //建筑退线数组
+      JZTXlayerDatas: [],
+      //地类图斑数组
+      DLTBlayerDatas: [],
+    };
+  },
+  computed: {},
+  mounted() {
+    this.initEntitiesHandler();
+    this.init();
+  },
+  methods: {
+    init() {
+      this.wsh = this.getshProjectinformations(0);
+      this.ysh = this.getshProjectinformations(1);
+    },
+
+    /**
+     * //获取项目进度
+     * @param meetingProgress
+     */
+    getshProjectinformations(meetingProgress) {
+      let Projectinformations = window.projectinformation.filter(
+        (c) => c.meetingProgress == meetingProgress
+      );
+      return Projectinformations;
+    },
+    //获取项目模型信息
+    getConstructionModel(fid) {
+      let ConstructionModels = window.constructionmodel.filter(
+        (c) => c.projectinformationid == fid
+      );
+      return ConstructionModels;
+    },
+
+    /**
+     * //选定方案
+     * @param projectin 方案信息
+     */
+    setStrategy(projectin) {
+      this.$layer.confirm("确认该项目已上会?", (layerid) => {
+        projectin.meetingProgress = 1;
+        this.WaitingSelectionModel.selectionStatus = true;
+        this.DestroyAll();
+        this.init();
+        this.$layer.close(layerid);
+        this.$layer.close(layerid);
+      });
+    },
+
+    //分析列表显隐
+    openAnalyzeList(itemModel) {
+      const classList =
+        this.$refs[itemModel.id + "AnalyzeList"][0].$el.classList;
+      classList.toggle("none");
+    },
+
+    //切换项目
+    handleChangeXM(val) {
+      // closAndChangeXM(val);
+      // 清除待选模型
+      this.WaitingSelectionModel = null;
+      // 清除其他选定样式
+      for (let key in this.$refs) {
+        if (key.indexOf("Model") !== -1) {
+          let item = this.$refs[key][0];
+          item.childNodes.forEach((Citem) => {
+            if (
+              Citem.className &&
+              Citem.className.indexOf("status ce") !== -1
+            ) {
+              Citem.style.display = "none";
+            }
+          });
+        }
+      }
+    },
+
+    /**
+     * //打开切换项目时关闭并初始化新项目必要图层
+     * @param xmid
+     */
+    closAndChangeXM(xmid) {
+      //清空之前打开的项目信息等
+      //打开新项目图层
+    },
+
+    //选中报建模型
+    SelectConstructionModelHendle(Minfo) {
+      this.removeModel();
+      this.WaitingSelectionModel = null;
+      this.removeAll();
+      // 清除其他选定样式
+      for (let key in this.$refs) {
+        if (key.indexOf("Model") !== -1) {
+          let item = this.$refs[key][0];
+          item.childNodes.forEach((Citem) => {
+            if (
+              Citem.className &&
+              Citem.className.indexOf("status ce") !== -1
+            ) {
+              Citem.style.display = "none";
+            }
+          });
+        }
+      }
+      // 添加当前选定样式及待选模型
+      this.$refs["Model" + Minfo.id][0].childNodes.forEach((item) => {
+        if (item.className && item.className.indexOf("status ce") !== -1) {
+          item.style.display = "block";
+          this.WaitingSelectionModel = Minfo;
+        }
+      });
+
+      //添加模型
+      this.addModel(Minfo);
+    },
+    //添加项目模型
+    openAddConstructionModelInfo(info) {
+      let layerid = this.$layer.iframe({
+        content: {
+          content: addConstructionModelInfo, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info }, //props
+        },
+
+        area: ["30rem", "20rem"], //宽 高
+        title: "添加项目模型详情",
+        maxmin: false,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          this.wsh = this.getshProjectinformations(0);
+        },
+      });
+    },
+    // 添加项目信息
+    openaddProjectInfo() {
+      let layerid = this.$layer.iframe({
+        content: {
+          content: addProjectInfo, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: {}, //props
+        },
+
+        area: ["30rem", "38rem"], //宽 高
+        title: "添加项目详情",
+        maxmin: false,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          this.wsh = this.getshProjectinformations(0);
+        },
+      });
+    },
+
+    //打开项目信息弹窗
+    openProjectInfo(info) {
+      let w = document.body.offsetWidth;
+      let h = document.body.offsetHeight;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = 430 / 2 + 556;
+      let top = 430 / 2 + 60;
+      let layerid = this.$layer.iframe({
+        content: {
+          content: projectInfo, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "430px"], //宽 高
+        title: "项目详情",
+        maxmin: true,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          // alert("关闭iframe");
+        },
+      });
+    },
+    // 打开模型信息弹窗
+    openConstructionModel(info) {
+      let w = document.body.offsetWidth;
+      let h = document.body.offsetHeight;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = 430 / 2 + 556;
+      let top = 430 / 2 + 60;
+      let layerid = this.$layer.iframe({
+        content: {
+          content: ConstructionModelInfo, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "430px"], //宽 高
+        title: "模型详情",
+        maxmin: true,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          // alert("关闭iframe");
+        },
+      });
+    },
+    //打开夜景分析弹窗
+    openNightscapeAnalysis(info) {
+      let w = document.body.offsetWidth;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = w - 430 + 430 / 2;
+      let top = 550 / 2 + 60;
+      let layerid = this.$layer.iframe({
+        content: {
+          content: NightscapeAnalysis, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "550px"],
+        title: "夜景分析",
+        maxmin: true,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          // alert("关闭iframe");
+        },
+      });
+    },
+    //打开天际线分析弹窗
+    openskylineAnalysis(info) {
+      let w = document.body.offsetWidth;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = w - 430 + 430 / 2;
+      let top = 550 / 2 + 60;
+      let layerid = this.$layer.iframe({
+        content: {
+          content: skylineAnalysis, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "550px"],
+        title: "天际线分析",
+        maxmin: true,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          // alert("关闭iframe");
+        },
+      });
+    },
+    //打开日照分析弹窗
+    openSunlightAnalysis(info) {
+      let w = document.body.offsetWidth;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = w - 430 + 430 / 2;
+      let top = 550 / 2 + 60;
+      let layerid = this.$layer.iframe({
+        content: {
+          content: SunlightAnalysis, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "550px"],
+        title: "日照分析",
+        maxmin: true,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          // alert("关闭iframe");
+        },
+      });
+    },
+
+    //添加模型
+    addModel(Minfo) {
+      this.yp();
+      var modelLayer = scene.open(Minfo.url);
+      let that = this;
+      that.layerDataList = [];
+      Cesium.when(modelLayer, async function (layers) {
+        debugger;
+        layers.forEach((layer) => {
+          that.layerList.push(layer);
+        });
+
+        //获取模型信息
+        let queryBySQLParameters = {
+          getFeatureMode: "SQL",
+          datasetNames: [Minfo.dataSourceName + ":" + Minfo.datasetName],
+          queryParameter: {
+            attributeFilter: "1=1",
+          },
+          hasGeometry: true,
+        };
+        let e = await mapQuery(
+          Minfo.dataurl + "/featureResults.json?returnContent=true",
+          queryBySQLParameters
+        );
+        e.features.forEach((feature) => {
+          let layerData = { data: [], geometry: feature.geometry };
+          feature.fieldNames.forEach((fieldName, i) => {
+            let Field = e.datasetInfos[0].fieldInfos.find(
+              (c) => c.name.toUpperCase() == fieldName.toUpperCase()
+            );
+            if (Field) {
+              layerData.data.push({
+                label: fieldName,
+                labelCN: Field ? Field.caption : fieldName,
+                value: feature.fieldValues[i],
+              });
+            }
+          });
+          that.layerDataList.push(layerData);
+        });
+
+        debugger;
+        that.layerDataList.forEach((layerData) => {
+          // 添加模型楼号
+          let SMID = layerData.data.find((c) => c.label == "SMID").value;
+          let x = layerData.geometry.position.x;
+          let y = layerData.geometry.position.y;
+          let z =
+            layerData.geometry.boundingBox.upper.z -
+            layerData.geometry.boundingBox.lower.z;
+          let BUILDNO = layerData.data.find((c) => c.label == "BUILDNO").value;
+          if (viewer.entities.getById("MXLH-" + SMID)) {
+            viewer.entities.removeById("MXLH-" + SMID);
+          }
+          let label = viewer.entities.add({
+            id: "MXLH-" + SMID,
+            // name: "MXLH-" + SMID,
+            //点
+            position: Cesium.Cartesian3.fromDegrees(x, y, z),
+            label: {
+              text: BUILDNO, //描述内容
+              font: "20px Sans-Serif", //字体大小 类型
+              fillColor: new Cesium.Color(83 / 255, 249 / 255, 255 / 255, 1), //颜色
+              outlineColor: Cesium.Color.GOLD,
+              style: Cesium.LabelStyle.CENTER_LABEL,
+              // 垂直位置
+              verticalOrigin: Cesium.VerticalOrigin.BUTTON,
+              // 中心位置
+              pixelOffset: new Cesium.Cartesian2(0, -10),
+              //设置背景颜色透明
+              backgroundColor: new Cesium.Color(
+                35 / 255,
+                55 / 255,
+                75 / 255,
+                0
+              ),
+              //打开背景  打开背景 (不会被线段覆盖)
+              showBackground: true,
+              heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
+            },
+          });
+        });
+      });
+    },
+    //删除模型图层
+    removeModel() {
+      this.qxyp();
+      this.layerList.forEach((element) => {
+        scene.layers.remove(element.name);
+      });
+      this.layerList = [];
+      this.layerDataList.forEach((element) => {
+        let SMID = element.data.find((c) => c.label == "SMID").value;
+        viewer.entities.removeById("MXLH-" + SMID);
+      });
+      this.layerDataList = [];
+    },
+    //定位模型
+    positionModel() {
+      if (this.layerList.length > 0) {
+        viewer.flyTo(this.layerList[0]);
+      }
+    },
+
+    // 获取规划地块
+    getGuiHuaDiKuai(completed) {
+      if (this.LandPlanningList.length > 0) {
+        this.removeAll();
+
+        return;
+      }
+
+      let that = this;
+      this.handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
+      this.handler.setInputAction((evt) => {
+        that.tooltip.showAt(
+          evt.endPosition,
+          `<p>点击地图,选择要分析的点位坐标,右键取消</p>`
+        );
+      }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
+      this.handler.setInputAction((evt) => {
+        that.removeEventHandler();
+      }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
+      this.handler.setInputAction(async function (movement) {
+        that.tooltip.setVisible(false);
+
+        //拾取图层
+        let pickRay = viewer.camera.getPickRay(movement.position);
+        let artesian3 = viewer.scene.globe.pick(pickRay, viewer.scene);
+        let xy = cartesian3ToWGS84(artesian3);
+
+        //查询用地红线
+        let layer = flatten(window.layerTree).find(
+          (item) => item.core == "003006"
+        );
+
+        let queryByIDParameters = {
+          getFeatureMode: "BUFFER",
+          datasetNames: [
+            layer.date_server.dataSourceName +
+              ":" +
+              layer.date_server.datasetName,
+          ],
+          geometry: {
+            parts: [1],
+            points: [{ y: xy.lat, x: xy.lng }],
+            type: "POINT",
+          },
+          bufferDistance: 0.00005,
+          hasGeometry: true,
+        };
+        let e = await mapQuery(
+          layer.date_server.url + "/featureResults.json?returnContent=true",
+          queryByIDParameters
+        );
+        if (e && e.totalCount > 0) {
+          let GHYDlayerData = {
+            id: uuidv4(),
+            layerInfo: layer,
+            data: [],
+            geometry: e.features[0].geometry,
+          };
+
+          e.features[0].fieldNames.forEach((fieldName, i) => {
+            let Field = e.datasetInfos[0].fieldInfos.find(
+              (c) =>
+                c.name.toUpperCase() == fieldName.toUpperCase() &&
+                c.name.toUpperCase().indexOf("SM") == -1
+            );
+            if (Field) {
+              GHYDlayerData.data.push({
+                label: fieldName,
+                labelCN: Field ? Field.caption : fieldName,
+                value: e.features[0].fieldValues[i],
+              });
+            }
+          });
+
+          let ps = [];
+          for (
+            let index = 0;
+            index < GHYDlayerData.geometry.points.length;
+            index++
+          ) {
+            const element = GHYDlayerData.geometry.points[index];
+            ps.push(element.x);
+            ps.push(element.y);
+          }
+          //获取地块编码
+          // let SMID = GHYDlayerData.data.find((c) => c.label == "SMID").value;
+          let DKBM = GHYDlayerData.data.find((c) => c.label == "DKBM").value;
+          let YDMJ = GHYDlayerData.data.find((c) => c.label == "YDMJ").value;
+          const line = viewer.entities.add({
+            id: "ydhxl-" + GHYDlayerData.id,
+            polyline: {
+              positions: Cesium.Cartesian3.fromDegreesArray(ps),
+              width: 5,
+              material: Cesium.Color.RED,
+              clampToGround: true,
+            },
+          });
+          //生成点
+          const point = viewer.entities.add({
+            id: "ydhxp-" + GHYDlayerData.id,
+            //点
+            position: Cesium.Cartesian3.fromDegrees(ps[0], ps[1]),
+            label: {
+              text: DKBM + "  " + YDMJ + "㎡", //描述内容
+              font: "30px Sans-Serif", //字体大小 类型
+              fillColor: Cesium.Color.RED, //颜色
+              outlineColor: Cesium.Color.GOLD,
+              style: Cesium.LabelStyle.CENTER_LABEL,
+              // 垂直位置
+              verticalOrigin: Cesium.VerticalOrigin.BUTTON,
+              // 中心位置
+              pixelOffset: new Cesium.Cartesian2(0, -10),
+              //设置背景颜色透明
+              backgroundColor: new Cesium.Color(0.0, 0.0, 0.0, 0.0),
+              //打开背景  打开背景 (不会被线段覆盖)
+              showBackground: true,
+              heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
+            },
+          });
+          that.LandPlanningList.push(GHYDlayerData);
+        }
+
+        that.removeEventHandler();
+        if (completed && isFunction(completed)) {
+          completed();
+        }
+      }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+    },
+    //区位分析
+    DistrictAnalysis() {
+      this.getGuiHuaDiKuai();
+    },
+    /**
+     * 限高分析
+     * @param Minfo  报建模型信息
+     */
+    limitHeightAnalysis(Minfo) {
+      let that = this;
+      this.getGuiHuaDiKuai(function () {
+        that.HighLimit(Minfo);
+      });
+    },
+    // 生成限高
+    async HighLimit(Minfo) {
+      let that = this;
+      let JZXGD = 0;
+      if (that.LandPlanningList.length > 0) {
+        let ps = [];
+        let DKBM = [];
+
+        that.LandPlanningList.forEach((GHYDlayerData) => {
+          ps = [];
+          for (
+            let index = 0;
+            index < GHYDlayerData.geometry.points.length;
+            index++
+          ) {
+            const element = GHYDlayerData.geometry.points[index];
+            ps.push(element.x);
+            ps.push(element.y);
+          }
+          JZXGD = Number(
+            GHYDlayerData.data.find((c) => c.label == "JZXGD").value
+          );
+          let bm = GHYDlayerData.data.find((c) => c.label == "DKBM");
+          if (bm && bm.value) {
+            DKBM.push(bm.value);
+          }
+
+          let entity = viewer.entities.add({
+            id: "polygonA",
+            polygon: {
+              hierarchy: Cesium.Cartesian3.fromDegreesArray(ps),
+              height: JZXGD || 0,
+              material: new Cesium.Color(1, 1, 0.2, 0.5),
+              outline: true,
+              outlineColor: Cesium.Color.RED,
+            },
+          });
+          let label = viewer.entities.add({
+            id: "JZXGD-A",
+            //点
+            position: Cesium.Cartesian3.fromDegrees(ps[0], ps[1], JZXGD),
+            label: {
+              text: "限高上限:" + JZXGD + "米", //描述内容
+              font: "20px Sans-Serif", //字体大小 类型
+              fillColor: Cesium.Color.RED, //颜色
+              outlineColor: Cesium.Color.GOLD,
+              style: Cesium.LabelStyle.CENTER_LABEL,
+              // 垂直位置
+              verticalOrigin: Cesium.VerticalOrigin.BUTTON,
+              // 中心位置
+              pixelOffset: new Cesium.Cartesian2(0, -10),
+              //设置背景颜色透明
+              backgroundColor: new Cesium.Color(0.0, 0.0, 0.0, 0.0),
+              //打开背景  打开背景 (不会被线段覆盖)
+              showBackground: true,
+              heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
+            },
+          });
+        });
+
+        that.layerList.forEach((layer) => {
+          debugger;
+          var hyp = new Cesium.HypsometricSetting();
+
+          //创建分层设色对象   设置最大/最小可见高度   颜色表  显示模式   透明度及线宽
+          var colorTable = new Cesium.ColorTable();
+          colorTable.insert(999, new Cesium.Color(1, 0, 0));
+          colorTable.insert(JZXGD, new Cesium.Color(1, 0, 0));
+          hyp.MaxVisibleValue = 999;
+          hyp.MinVisibleValue = JZXGD;
+
+          hyp.ColorTable = colorTable;
+          hyp.DisplayMode = Cesium.HypsometricSettingEnum.DisplayMode.FACE;
+          hyp.Opacity = 0.5;
+
+          hyp.LineInterval = 10.0;
+
+          //设置图层分层设色属性
+          layer.hypsometricSetting = {
+            hypsometricSetting: hyp,
+            CoverageArea: ps,
+            analysisMode:
+              Cesium.HypsometricSettingEnum.AnalysisRegionMode.ARM_REGION,
+          };
+        });
+
+        that.layerDataList.forEach((layerData) => {
+          let SMID = layerData.data.find((c) => c.label == "SMID").value;
+          let x = layerData.geometry.boundingBox.upper.x;
+          let y = layerData.geometry.boundingBox.upper.y;
+          let z =
+            layerData.geometry.boundingBox.upper.z -
+            layerData.geometry.boundingBox.lower.z;
+          let Height = layerData.data.find((c) => c.label == "HEIGHT").value;
+          if (viewer.entities.getById("JZXG-" + SMID)) {
+            viewer.entities.removeById("JZXG-" + SMID);
+          }
+          let cg = this.calculateHighLimit(Height, JZXGD);
+          if (cg > 0) {
+            let label = viewer.entities.add({
+              id: "JZXG-" + SMID,
+              //点
+              position: Cesium.Cartesian3.fromDegrees(x, y, z),
+              label: {
+                text: "超高:" + cg + "米", //描述内容
+                font: "14px", //字体大小 类型
+                fillColor: new Cesium.Color(255 / 255, 255 / 255, 255 / 255, 1), //颜色
+                outlineColor: Cesium.Color.GOLD,
+                style: Cesium.LabelStyle.CENTER_LABEL,
+                // 垂直位置
+                verticalOrigin: Cesium.VerticalOrigin.BUTTON,
+                // 中心位置
+                pixelOffset: new Cesium.Cartesian2(0, -10),
+                //设置背景颜色透明
+                backgroundColor: new Cesium.Color(
+                  0 / 255,
+                  0 / 255,
+                  0 / 255,
+                  0.6
+                ),
+                //打开背景  打开背景 (不会被线段覆盖)
+                showBackground: true,
+                heightReference: Cesium.HeightReference.NONE,
+              },
+            });
+          }
+        });
+      }
+      this.openXGFXInfo(that.layerDataList, JZXGD);
+    },
+    /**
+     * // 计算超高距离
+     * @param Height 建筑高度
+     * @param JZXGD 限高上限
+     */
+    calculateHighLimit(Height, JZXGD) {
+      let sd = Height - JZXGD;
+      return sd.toFixed(2);
+    },
+    /**
+     * 交通分析
+     */
+    trafficAnalysis() {
+      let that = this;
+      this.getGuiHuaDiKuai(function () {
+        that.getBufferTraffic();
+      });
+    },
+    /**
+     * 查询200米范围内的道路
+     */
+    async getBufferTraffic() {
+      debugger;
+      let that = this;
+      let geo = this.LandPlanningList[0].geometry;
+
+      // let geo = {
+      //   id: 0,
+      //   style: null,
+      //   parts: geometry.parts,
+      //   points: geometry.points,
+      //   type: "REGION",
+      //   prjCoordSys: {
+      //     epsgCode: null,
+      //   },
+      // };
+
+      // 加载道路中线
+      let layer = flatten(window.layerTree).find(
+        (item) => item.core == "005004"
+      );
+      if (layer && layer.date_server.url) {
+        let queryByGeometryParameters = {
+          getFeatureMode: "BUFFER",
+          datasetNames: [
+            layer.date_server.dataSourceName +
+              ":" +
+              layer.date_server.datasetName,
+          ],
+          geometry: geo,
+          bufferDistance: 0.002,
+          hasGeometry: "true",
+        };
+        let e = await mapQuery(
+          layer.date_server.url + "/featureResults.json?returnContent=true",
+          queryByGeometryParameters
+        );
+        debugger;
+
+        if (e && e.totalCount > 0) {
+          e.features.forEach((feature) => {
+            let DLlayerData = {
+              id: uuidv4(),
+              layerInfo: layer,
+              data: [],
+              geometry: feature.geometry,
+              entities: [],
+            };
+            feature.fieldNames.forEach((fieldName, i) => {
+              let Field = e.datasetInfos[0].fieldInfos.find(
+                (c) =>
+                  c.name.toUpperCase() == fieldName.toUpperCase() &&
+                  c.name.toUpperCase().indexOf("SM") == -1
+              );
+              if (Field) {
+                DLlayerData.data.push({
+                  label: fieldName,
+                  labelCN: Field ? Field.caption : fieldName,
+                  value: feature.fieldValues[i],
+                });
+              }
+            });
+            let ps = [];
+            for (
+              let index = 0;
+              index < feature.geometry.points.length;
+              index++
+            ) {
+              const element = feature.geometry.points[index];
+              ps.push(element.x);
+              ps.push(element.y);
+            }
+            //判断是否规划道路
+
+            let SSQK = DLlayerData.data.find((c) => c.label == "SSQK");
+            if (SSQK && SSQK.value == "规划") {
+              var line = viewer.entities.add({
+                id: "DLX-" + DLlayerData.id,
+                polyline: {
+                  positions: Cesium.Cartesian3.fromDegreesArray(ps),
+                  width: 4,
+                  material: new Cesium.PolylineDashMaterialProperty({
+                    color: Cesium.Color.CYAN,
+                    clampToGround: true,
+                  }),
+                  clampToGround: true,
+                },
+              });
+              DLlayerData.entities.push(line);
+            } else {
+              const line = viewer.entities.add({
+                id: "DLX-" + DLlayerData.id,
+                polyline: {
+                  positions: Cesium.Cartesian3.fromDegreesArray(ps),
+                  width: 5,
+                  material: new Cesium.Color(0.0, 223 / 255, 22 / 255, 1),
+                  clampToGround: true,
+                },
+              });
+              DLlayerData.entities.push(line);
+            }
+
+            that.DLlayerDatas.push(DLlayerData);
+          });
+        }
+      }
+      // 加载禁止开口线
+      layer = flatten(window.layerTree).find((item) => item.core == "005005");
+      if (layer && layer.date_server.url) {
+        let queryByGeometryParameters = {
+          getFeatureMode: "BUFFER",
+          datasetNames: [
+            layer.date_server.dataSourceName +
+              ":" +
+              layer.date_server.datasetName,
+          ],
+          geometry: geo,
+          bufferDistance: 0.002,
+          hasGeometry: "true",
+        };
+        let e = await mapQuery(
+          layer.date_server.url + "/featureResults.json?returnContent=true",
+          queryByGeometryParameters
+        );
+        debugger;
+
+        if (e && e.totalCount > 0) {
+          e.features.forEach((feature) => {
+            let DLlayerData = {
+              id: uuidv4(),
+              layerInfo: layer,
+              data: [],
+              geometry: feature.geometry,
+              entities: [],
+            };
+            feature.fieldNames.forEach((fieldName, i) => {
+              let Field = e.datasetInfos[0].fieldInfos.find(
+                (c) =>
+                  c.name.toUpperCase() == fieldName.toUpperCase() &&
+                  c.name.toUpperCase().indexOf("SM") == -1
+              );
+              if (Field) {
+                DLlayerData.data.push({
+                  label: fieldName,
+                  labelCN: Field ? Field.caption : fieldName,
+                  value: feature.fieldValues[i],
+                });
+              }
+            });
+            let ps = [];
+            for (
+              let index = 0;
+              index < feature.geometry.points.length;
+              index++
+            ) {
+              const element = feature.geometry.points[index];
+              ps.push(element.x);
+              ps.push(element.y);
+            }
+
+            const line = viewer.entities.add({
+              id: "DLX-" + DLlayerData.id,
+              polyline: {
+                positions: Cesium.Cartesian3.fromDegreesArray(ps),
+                width: 5,
+                material: Cesium.Color.ORANGE,
+                clampToGround: true,
+              },
+            });
+
+            DLlayerData.entities.push(line);
+            that.DLlayerDatas.push(DLlayerData);
+          });
+        }
+      }
+    },
+
+    //切换地下模式
+    undergroundModeAnalysis() {
+      this.underground = !this.underground;
+      undergroundMode(this.underground);
+    },
+    //建筑退线
+    backLineAnalysis(Minfo) {
+      let that = this;
+      this.getGuiHuaDiKuai(function () {
+        that.getbackLine(Minfo);
+      });
+    },
+    // 绘制建筑退线面
+    async getbackLine(Minfo) {
+      let that = this;
+      if (that.LandPlanningList.length > 0) {
+        let ps = [];
+        let DKBM = [];
+        let layer = flatten(window.layerTree).find(
+          (item) => item.core == "004004"
+        );
+        if (layer && layer.date_server && layer.date_server.url) {
+          for (
+            let GHYDindex = 0;
+            GHYDindex < that.LandPlanningList.length;
+            GHYDindex++
+          ) {
+            const GHYDlayerData = that.LandPlanningList[GHYDindex];
+
+            let bm = GHYDlayerData.data.find((c) => c.label == "DKBM");
+            if (bm && bm.value) {
+              DKBM.push(bm.value);
+            }
+
+            let queryByGeometryParameters = {
+              getFeatureMode: "SQL",
+              datasetNames: [
+                layer.date_server.dataSourceName +
+                  ":" +
+                  layer.date_server.datasetName,
+              ],
+              queryParameter: {
+                attributeFilter: "DKBM = '" + bm.value + "'",
+              },
+              hasGeometry: "true",
+            };
+            let e = await mapQuery(
+              layer.date_server.url + "/featureResults.json?returnContent=true",
+              queryByGeometryParameters
+            );
+            debugger;
+
+            if (e && e.totalCount > 0) {
+              e.features.forEach((feature) => {
+                let JZTXlayerData = {
+                  id: uuidv4(),
+                  layerInfo: layer,
+                  data: [],
+                  geometry: feature.geometry,
+                  // entities: [],
+                };
+                feature.fieldNames.forEach((fieldName, i) => {
+                  let Field = e.datasetInfos[0].fieldInfos.find(
+                    (c) =>
+                      c.name.toUpperCase() == fieldName.toUpperCase() &&
+                      c.name.toUpperCase().indexOf("SM") == -1
+                  );
+                  if (Field) {
+                    JZTXlayerData.data.push({
+                      label: fieldName,
+                      labelCN: Field ? Field.caption : fieldName,
+                      value: feature.fieldValues[i],
+                    });
+                  }
+                });
+                let ps = [];
+                for (
+                  let index = 0;
+                  index < feature.geometry.points.length;
+                  index++
+                ) {
+                  const element = feature.geometry.points[index];
+                  ps.push(element.x);
+                  ps.push(element.y);
+                  ps.push(0);
+                }
+
+                //添加建筑退线线
+                var orangePolygon1 = viewer.entities.add({
+                  id: "JZTXQ-" + JZTXlayerData.id,
+
+                  polygon: {
+                    hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(ps),
+                    extrudedHeight: 157.4,
+                    perPositionHeight: true,
+                    material: Cesium.Color.ORANGE.withAlpha(0.3),
+                    outline: true,
+                    outlineColor: Cesium.Color.BLACK,
+                    outlineWidth: 10.0,
+                  },
+                });
+                // JZTXlayerData.entities.push(orangePolygon1);
+                that.JZTXlayerDatas.push(JZTXlayerData);
+              });
+            }
+          }
+        }
+      }
+      this.openJZXGInfo(that.layerDataList, that.JZTXlayerDatas, Minfo);
+    },
+    //占压分析
+    occupyAnalysis(Minfo) {
+      let that = this;
+      this.getGuiHuaDiKuai(function () {
+        that.getoccupy(Minfo);
+      });
+    },
+    //获取占压交集
+    async getoccupy(Minfo) {
+      let that = this;
+      if (that.LandPlanningList.length > 0) {
+        let ps = [];
+        let DKBM = [];
+        let layer = flatten(window.layerTree).find(
+          (item) => item.core == "002002"
+        );
+        if (layer && layer.date_server && layer.date_server.url) {
+          for (
+            let GHYDindex = 0;
+            GHYDindex < that.LandPlanningList.length;
+            GHYDindex++
+          ) {
+            const GHYDlayerData = that.LandPlanningList[GHYDindex];
+            let queryByGeometryParameters = {
+              getFeatureMode: "SPATIAL",
+              datasetNames: [
+                layer.date_server.dataSourceName +
+                  ":" +
+                  layer.date_server.datasetName,
+              ],
+              geometry: GHYDlayerData.geometry,
+              spatialQueryMode: "INTERSECT",
+              hasGeometry: "true",
+            };
+            let e = await mapQuery(
+              layer.date_server.url + "/featureResults.json?returnContent=true",
+              queryByGeometryParameters
+            );
+            if (e && e.totalCount > 0) {
+              e.features.forEach((feature) => {
+                let DLTBlayerData = {
+                  id: uuidv4(),
+                  layerInfo: layer,
+                  data: [],
+                  geometry: feature.geometry,
+                };
+                feature.fieldNames.forEach((fieldName, i) => {
+                  let Field = e.datasetInfos[0].fieldInfos.find(
+                    (c) =>
+                      c.name.toUpperCase() == fieldName.toUpperCase() &&
+                      c.name.toUpperCase().indexOf("SM") == -1
+                  );
+                  if (Field) {
+                    DLTBlayerData.data.push({
+                      label: fieldName,
+                      labelCN: Field ? Field.caption : fieldName,
+                      value: feature.fieldValues[i],
+                    });
+                  }
+                });
+                let ps = [];
+                for (
+                  let index = 0;
+                  index < feature.geometry.points.length;
+                  index++
+                ) {
+                  const element = feature.geometry.points[index];
+                  ps.push(element.x);
+                  ps.push(element.y);
+                  ps.push(15);
+                }
+                let DLLX = DLTBlayerData.data.find(
+                  (c) => c.label == "DLMC"
+                ).value;
+                let col = Cesium.Color.ORANGE.withAlpha(0.7);
+                switch (DLLX) {
+                  case "城镇村道路用地":
+                    col = Cesium.Color.DARKGREY.withAlpha(0.7);
+                    break;
+                  case "城镇住宅用地":
+                    col = Cesium.Color.LIGHTBLUE.withAlpha(0.7);
+                    break;
+                  case "灌木林地":
+                    col = Cesium.Color.LAWNGREEN.withAlpha(0.7);
+                    break;
+                  default:
+                    break;
+                }
+
+                //添加地类图斑
+                var orangePolygon1 = viewer.entities.add({
+                  id: "DLTB-" + DLTBlayerData.id,
+                  polygon: {
+                    hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(ps),
+                    perPositionHeight: true,
+                    material: col,
+                    outline: true,
+                    outlineColor: Cesium.Color.BLACK,
+                    outlineWidth: 2.0,
+                  },
+                });
+                debugger;
+                const point = viewer.entities.add({
+                  id: "DLTBlable-" + DLTBlayerData.id,
+                  //点
+                  position: Cesium.Cartesian3.fromDegrees(
+                    DLTBlayerData.geometry.center.x,
+                    DLTBlayerData.geometry.center.y,
+                    15
+                  ),
+                  label: {
+                    text: DLLX, //描述内容
+                    fillColor: Cesium.Color.WHITE,
+                    font: "40px Calibri",
+                    scale: 0.5,
+                    fillStyle: Cesium.LabelStyle.FILL,
+                    // 垂直位置
+                    verticalOrigin: Cesium.VerticalOrigin.BUTTON,
+                    // 中心位置
+                    pixelOffset: new Cesium.Cartesian2(0, -10),
+                    //设置背景颜色透明
+                    backgroundColor: new Cesium.Color(0.0, 0.0, 0.0, 0.0),
+                    //打开背景  打开背景 (不会被线段覆盖)
+                    showBackground: true,
+                    heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
+                  },
+                });
+                that.DLTBlayerDatas.push(DLTBlayerData);
+              });
+            }
+          }
+        }
+      }
+      this.openDLTBInfo(that.LandPlanningList, that.DLTBlayerDatas, Minfo);
+    },
+
+    //指标分析
+    normAnalysis(Minfo) {
+      let that = this;
+      this.getGuiHuaDiKuai(function () {
+        that.getnorm(Minfo);
+      });
+    },
+    // 获取指标
+    async getnorm(Minfo) {
+      //组装指标对象
+      let tableDataList = [];
+      debugger;
+      for (let index = 0; index < this.LandPlanningList.length; index++) {
+        const LandPlanning = this.LandPlanningList[index];
+        let KG_Data = {};
+        KG_Data.DKBM = LandPlanning.data.find((c) => c.label == "DKBM")
+          ? LandPlanning.data.find((c) => c.label == "DKBM").value
+          : "";
+        KG_Data.YDMJ = LandPlanning.data.find((c) => c.label == "YDMJ")
+          ? LandPlanning.data.find((c) => c.label == "YDMJ").value
+          : "";
+        KG_Data.JZMJ = LandPlanning.data.find((c) => c.label == "JZMJ")
+          ? LandPlanning.data.find((c) => c.label == "JZMJ").value
+          : "";
+        KG_Data.JDMJ = LandPlanning.data.find((c) => c.label == "JDMJ")
+          ? LandPlanning.data.find((c) => c.label == "JDMJ").value
+          : "";
+        // KG_Data.JRJZMJ = LandPlanning.data.find((c) => c.label == "JRJZMJ")
+        //   ? LandPlanning.data.find((c) => c.label == "JRJZMJ").value
+        //   : "";
+        KG_Data.RJLD = LandPlanning.data.find((c) => c.label == "RJLD")
+          ? LandPlanning.data.find((c) => c.label == "RJLD").value
+          : "";
+        KG_Data.RJLX = LandPlanning.data.find((c) => c.label == "RJLX")
+          ? LandPlanning.data.find((c) => c.label == "RJLX").value
+          : "";
+        KG_Data.JZMDD = LandPlanning.data.find((c) => c.label == "JZMDD")
+          ? LandPlanning.data.find((c) => c.label == "JZMDD").value
+          : "";
+        KG_Data.JZMDX = LandPlanning.data.find((c) => c.label == "JZMDX")
+          ? LandPlanning.data.find((c) => c.label == "JZMDX").value
+          : "";
+        KG_Data.JZXGD = LandPlanning.data.find((c) => c.label == "JZXGD")
+          ? LandPlanning.data.find((c) => c.label == "JZXGD").value
+          : "";
+        KG_Data.JZXGX = LandPlanning.data.find((c) => c.label == "JZXGX")
+          ? LandPlanning.data.find((c) => c.label == "JZXGX").value
+          : "";
+        KG_Data.JRJZMJD = KG_Data.YDMJ * KG_Data.RJLD;
+        KG_Data.JRJZMJX = KG_Data.YDMJ * KG_Data.RJLX;
+        let FA_Data = {};
+        if (Minfo.dataurl && Minfo.dataSourceName) {
+          //获取项目范围数据数据
+          let queryByGeometryParameters = {
+            getFeatureMode: "SQL",
+            datasetNames: [Minfo.dataSourceName + ":" + "项目范围"],
+            queryParameter: {
+              attributeFilter: "1=1",
+            },
+            hasGeometry: "true",
+          };
+          let e = await mapQuery(
+            Minfo.dataurl + "/featureResults.json?returnContent=true",
+            queryByGeometryParameters
+          );
+
+          //项目用地总面积
+          let xmzmj = 0;
+          debugger;
+          if (e && e.totalCount > 0) {
+            e.features.forEach((feature) => {
+              let DataPs = feature.geometry.points.map((item) => [
+                item.x,
+                item.y,
+              ]);
+              if (DataPs.length > 0) {
+                if (DataPs[0] != DataPs[DataPs.length - 1]) {
+                  DataPs.push(DataPs[0]);
+                }
+                let polygonPs = polygon([DataPs]);
+                let areaPs = area(polygonPs);
+                xmzmj += areaPs;
+              }
+            });
+          }
+          FA_Data.YDMJ = xmzmj;
+          //获取单栋楼体数据 (模型中Model数据)
+          let queryByGeometryParameters1 = {
+            getFeatureMode: "SQL",
+            datasetNames: [Minfo.dataSourceName + ":" + Minfo.datasetName],
+            queryParameter: {
+              attributeFilter: "1=1",
+            },
+            hasGeometry: "true",
+          };
+          let e1 = await mapQuery(
+            Minfo.dataurl + "/featureResults.json?returnContent=true",
+            queryByGeometryParameters1
+          );
+          //楼体信息
+          let ltDatas = [];
+          if (e1 && e1.totalCount > 0) {
+            e1.features.forEach((feature) => {
+              let Data = {
+                data: [],
+                geometry: feature.geometry,
+              };
+              feature.fieldNames.forEach((fieldName, i) => {
+                let Field = e1.datasetInfos[0].fieldInfos.find(
+                  (c) =>
+                    c.name.toUpperCase() == fieldName.toUpperCase() &&
+                    c.name.toUpperCase().indexOf("SM") == -1
+                );
+                if (Field) {
+                  Data.data.push({
+                    label: fieldName,
+                    labelCN: Field ? Field.caption : fieldName,
+                    value: feature.fieldValues[i],
+                  });
+                }
+              });
+              ltDatas.push(Data);
+            });
+          }
+          //建筑总面积
+          let jzzmj = 0;
+          let maxJZGD = 0;
+          ltDatas.forEach((ltData) => {
+            jzzmj += Number(
+              ltData.data.find((c) => c.label == "BUILDAREA")
+                ? ltData.data.find((c) => c.label == "BUILDAREA").value
+                : 0
+            );
+            let jzgd = ltData.data.find((c) => c.label == "HEIGHT")
+              ? ltData.data.find((c) => c.label == "HEIGHT").value
+              : 0;
+            if (Number(jzgd) > maxJZGD) {
+              maxJZGD = Number(jzgd);
+            }
+          });
+          FA_Data.JZMJ = Number(jzzmj);
+          FA_Data.JZGD = Number(maxJZGD);
+
+          //基底面积查建筑轮廓数据
+          FA_Data.JDMJ = 0;
+
+          let queryByGeometryParameters2 = {
+            getFeatureMode: "SQL",
+            datasetNames: [Minfo.dataSourceName + ":" + "建筑轮廓"],
+            queryParameter: {
+              attributeFilter: "1=1",
+            },
+            hasGeometry: "true",
+          };
+          let e2 = await mapQuery(
+            Minfo.dataurl + "/featureResults.json?returnContent=true",
+            queryByGeometryParameters2
+          );
+
+          //建筑基底总面积
+          let jzjdzmj = 0;
+          debugger;
+          if (e2 && e2.totalCount > 0) {
+            e2.features.forEach((feature) => {
+              let DataPs = feature.geometry.points.map((item) => [
+                item.x,
+                item.y,
+              ]);
+              if (DataPs.length > 0) {
+                if (DataPs[0] != DataPs[DataPs.length - 1]) {
+                  DataPs.push(DataPs[0]);
+                }
+                let polygonPs = polygon([DataPs]);
+                let areaPs = area(polygonPs);
+                jzjdzmj += areaPs;
+              }
+            });
+          }
+          FA_Data.JDMJ = jzjdzmj;
+          // 容积率
+          FA_Data.RJL = (FA_Data.JZMJ / FA_Data.YDMJ).toFixed(5);
+          //计容建筑面积
+          FA_Data.JRJZMJ = FA_Data.YDMJ * FA_Data.RJL;
+          //建筑密度
+          FA_Data.JZMD = Number((FA_Data.JDMJ / FA_Data.YDMJ).toFixed(5)) * 100;
+        }
+        tableDataList.push({ KG_Data, FA_Data });
+      }
+      this.openZBFXInfo(tableDataList, Minfo);
+    },
+    // 删除限高
+    removeHighLimit() {
+      viewer.entities.removeById("polygonA");
+      viewer.entities.removeById("JZXGD-A");
+
+      this.layerList.forEach((layer) => {
+        var hyp = new Cesium.HypsometricSetting();
+        hyp.MaxVisibleValue = -1000;
+        layer.hypsometricSetting = {
+          hypsometricSetting: hyp,
+          analysisMode:
+            Cesium.HypsometricSettingEnum.AnalysisRegionMode.ARM_ALL,
+        };
+      });
+      this.layerDataList.forEach((element) => {
+        let SMID = element.data.find((c) => c.label == "SMID").value;
+        viewer.entities.removeById("JZXG-" + SMID);
+      });
+    },
+    //取消左键事件
+    removeEventHandler() {
+      if (this.handler) {
+        this.tooltip.setVisible(false);
+        this.handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
+        this.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
+        this.handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK);
+        this.handler.destroy();
+        this.handler = null;
+      }
+    },
+
+    //删除规划地块
+    removeLandPlanningList() {
+      for (let index = 0; index < this.LandPlanningList.length; index++) {
+        const element = this.LandPlanningList[index];
+
+        viewer.entities.removeById("ydhxp-" + element.id);
+        viewer.entities.removeById("ydhxl-" + element.id);
+      }
+      this.LandPlanningList = [];
+    },
+    //删除道路线
+    removeDLlayerDatasList() {
+      for (let index = 0; index < this.DLlayerDatas.length; index++) {
+        const element = this.DLlayerDatas[index];
+        element.entities.forEach((entitie) => {
+          viewer.entities.remove(entitie);
+        });
+      }
+      this.DLlayerDatas = [];
+    },
+    //删除建筑退线
+    removeJZTXlayerDatas() {
+      for (let index = 0; index < this.JZTXlayerDatas.length; index++) {
+        const element = this.JZTXlayerDatas[index];
+
+        viewer.entities.removeById("JZTXQ-" + element.id);
+      }
+      this.JZTXlayerDatas = [];
+    },
+    //删除地类图斑
+    removeDLTBlayerDatas() {
+      for (let index = 0; index < this.DLTBlayerDatas.length; index++) {
+        const element = this.DLTBlayerDatas[index];
+        viewer.entities.removeById("DLTB-" + element.id);
+        viewer.entities.removeById("DLTBlable-" + element.id);
+      }
+      this.DLTBlayerDatas = [];
+    },
+
+    initEntitiesHandler() {
+      let that = this;
+      this.getEntitiesHandler = new Cesium.ScreenSpaceEventHandler(
+        scene.canvas
+      );
+      this.getEntitiesHandler.setInputAction(function (click) {
+        var pick = viewer.scene.pick(click.position);
+        //用地红线信息弹窗
+        if (pick && pick.id.id && pick.id.id.indexOf("ydhxp") !== -1) {
+          let id = pick.id.id.split("ydhxp-")[1];
+          let info = that.LandPlanningList.find((c) => c.id == id);
+          that.openOBJInfo("用地红线详情", info.data);
+        }
+        //道路信息弹窗
+        if (pick && pick.id.id && pick.id.id.indexOf("DLX-") !== -1) {
+          let id = pick.id.id.split("DLX-")[1];
+          let info = that.DLlayerDatas.find((c) => c.id == id);
+          that.openOBJInfo("道路信息详情", info.data);
+        }
+        //图斑地类弹窗
+        if (pick && pick.id.id && pick.id.id.indexOf("DLTB-") !== -1) {
+          let id = pick.id.id.split("DLTB-")[1];
+          let info = that.DLTBlayerDatas.find((c) => c.id == id);
+          that.openOBJInfo("地类信息详情", info.data);
+        }
+      }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+    },
+    //打开用地红线信息弹窗
+    openOBJInfo(title, info) {
+      let w = document.body.offsetWidth;
+      let h = document.body.offsetHeight;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = 430 / 2 + 556;
+      let top = 430 / 2 + 60;
+      let layerid = this.$layer.iframe({
+        content: {
+          content: PlanningPlotInfo, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "430px"], //宽 高
+        title: title,
+        maxmin: true,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          // alert("关闭iframe");
+        },
+      });
+    },
+
+    /**
+     * //打开限高分析信息弹窗
+     * @param layerDataList 楼层信息
+     * @param JZXGD 限高值
+     */
+    openXGFXInfo(layerDataList, JZXGD) {
+      let that = this;
+      let w = document.body.offsetWidth;
+      let h = document.body.offsetHeight;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = w - 430 + 430 / 2;
+      let top = 430 / 2 + 60;
+      let layerid = this.$layer.iframe({
+        content: {
+          content: HighLimitAnalysis, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info: { layerDataList, JZXGD } }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "430px"], //宽 高
+        title: "限高分析",
+        maxmin: true,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          this.removeLandPlanningList();
+          this.removeHighLimit();
+        },
+      });
+    },
+    /**
+     * //打开退线分析信息弹窗
+     * @param layerDataList 楼层信息
+     * @param JZTXlayerDatas 退线信息
+     */
+    openJZXGInfo(layerDataList, JZTXlayerDataList, Minfo) {
+      let that = this;
+      let w = document.body.offsetWidth;
+      let h = document.body.offsetHeight;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = w - 430 + 430 / 2;
+      let top = 430 / 2 + 60;
+      let layerid = this.$layer.iframe({
+        content: {
+          content: backLineAnalysisinfo, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: {
+            info: { layerDataList, JZTXlayerDataList, Minfo },
+          }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "430px"], //宽 高
+        title: "建筑退线分析",
+        maxmin: true,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          this.removeLandPlanningList();
+          this.removeJZTXlayerDatas();
+        },
+      });
+    },
+
+    /**
+     * //打开地类图斑分析信息弹窗
+     * @param LandPlanningList 规划地块数组
+     * @param DLTBlayerDataList 地类图斑信息
+     */
+    openDLTBInfo(LandPlanningList, DLTBlayerDataList, Minfo) {
+      let that = this;
+      let w = document.body.offsetWidth;
+      let h = document.body.offsetHeight;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = w - 430 + 430 / 2;
+      let top = 430 / 2 + 60;
+      let layerid = this.$layer.iframe({
+        content: {
+          content: ZYAnalysisinfo, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: {
+            info: { LandPlanningList, DLTBlayerDataList, Minfo },
+          }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "430px"], //宽 高
+        title: "占压分析",
+        maxmin: true,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          this.removeLandPlanningList();
+          this.removeDLTBlayerDatas();
+        },
+      });
+    },
+    /**
+     * //打开指标分析信息弹窗
+     * @param tableDataList 控规指标和项目指标
+     * @param Minfo
+     */
+    openZBFXInfo(tableDataList, Minfo) {
+      let that = this;
+      let w = document.body.offsetWidth;
+      let h = document.body.offsetHeight;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = w - 430 + 430 / 2;
+      let top = 430 / 2 + 60;
+      let layerid = this.$layer.iframe({
+        content: {
+          content: ZBFXAnalysisinfo, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: {
+            info: { tableDataList, Minfo },
+          }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "430px"], //宽 高
+        title: "指标分析",
+        maxmin: true,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {
+          //关闭事件
+          this.removeLandPlanningList();
+        },
+      });
+    },
+    // 压平
+    yp() {
+      let flatPoints = [
+        109.48482400719071, 18.29951085777014, -10.00041263509053046676,
+        109.48554500174846, 18.30108393277133, -10.00047798530245388843,
+        109.4873746948443, 18.3010997277107, -10.35302657491684614,
+        109.48749476533833, 18.300990310771073, -10.0008463849132034158,
+        109.48748475731615, 18.299967228358295, -10.10017789504110265,
+        109.48662969547186, 18.299952380186266, -10.00015392120471346737,
+        109.48663008984137, 18.29976573938069, -10.5355135143000762,
+        109.48653283908195, 18.29969021497898, -10.09950885525611478,
+        109.48576555239313, 18.299690483879495, -10.09921040906718022,
+      ];
+      viewer.scene.layers.layerQueue.forEach((layer) => {
+        let name = "flatten" + Math.random();
+        let istrue = layer.addFlattenRegion({
+          position: flatPoints,
+          name: name,
+        });
+      });
+    },
+    qxyp() {
+      viewer.scene.layers.layerQueue.forEach((layer) => {
+        layer.removeAllFlattenRegion();
+      });
+    },
+
+    removeAll() {
+      this.removeEventHandler();
+      this.removeLandPlanningList();
+      this.removeHighLimit();
+      this.removeDLlayerDatasList();
+      this.removeJZTXlayerDatas();
+      this.removeDLTBlayerDatas();
+    },
+    DestroyAll() {
+      this.qxyp();
+      if (this.getEntitiesHandler) {
+        this.getEntitiesHandler.removeInputAction(
+          Cesium.ScreenSpaceEventType.LEFT_CLICK
+        );
+      }
+      this.removeModel();
+      this.removeAll();
+      undergroundMode(false);
+    },
+  },
+  beforeDestroy() {
+    this.DestroyAll();
+  },
+};
+</script>
+
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style lang="scss" scoped>
+.card_body_style {
+  border: 1px dashed #02a7f0;
+}
+.hover_style:hover {
+  border: 1px solid #02a7f0;
+}
+.checkedState {
+  position: relative;
+
+  .status {
+    position: absolute;
+    right: 0;
+    top: 0;
+    // z-index: 2;
+    overflow: hidden;
+    // border-radius: 6px;
+  }
+  .icon {
+    position: absolute;
+    right: 0;
+    top: 0;
+    width: 4rem;
+    height: 4rem;
+    border: 8px;
+    background: #ffff80;
+    -webkit-clip-path: polygon(100% 0, 0 0, 100% 100%);
+    clip-path: polygon(100% 0, 0 0, 100% 100%);
+  }
+
+  .txts {
+    line-height: 2.6rem;
+    text-align: center;
+    transform: rotate(45deg);
+    transform-origin: center center;
+    color: #ec808c;
+    // font-size: 18px;
+  }
+  /* 带圆角的话这个status 和 txts的宽度/宽度 是要比icon的宽度/高度小的,效果可以自己慢慢调 */
+  .ce {
+    width: 4rem;
+    height: 4rem;
+  }
+}
+</style>

+ 443 - 0
src/views/ConstructionApplication3D/skylineAnalysis/skylineAnalysis.vue

@@ -0,0 +1,443 @@
+<template>
+  <div style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <div class="titleHeader">
+          <h3>观察者信息</h3>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-row :gutter="10">
+          <el-col :span="12">
+            经度(°):
+            <el-input
+              style="width: 50%"
+              size="mini"
+              v-model="form.viewlongitude"
+            ></el-input>
+          </el-col>
+          <el-col :span="12">
+            纬度(°):
+            <el-input
+              style="width: 50%"
+              size="mini"
+              v-model="form.viewlatitude"
+            ></el-input>
+          </el-col>
+        </el-row>
+        <el-row :gutter="10">
+          <el-col :span="12">
+            高程(米):
+            <el-input
+              style="width: 50%"
+              size="mini"
+              v-model="form.viewheight"
+            ></el-input>
+          </el-col>
+          <el-col :span="12">
+            方向角(°):
+            <el-input
+              style="width: 50%"
+              size="mini"
+              v-model="form.direction"
+            ></el-input>
+          </el-col>
+        </el-row>
+        <el-row :gutter="10">
+          <el-col :span="12">
+            俯仰角(°):
+            <el-input
+              style="width: 50%"
+              size="mini"
+              v-model="form.pitch"
+            ></el-input>
+          </el-col>
+          <el-col :span="12">
+            分析半径:
+            <el-input
+              style="width: 50%"
+              size="mini"
+              v-model="form.skylineRadius"
+            ></el-input>
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <div class="titleHeader">
+          <h3>参数设置</h3>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-form :inline="true">
+          <el-form-item label="显示模式:">
+            <el-select
+              size="mini"
+              v-model="form.skylineMode"
+              placeholder="请选择显示模式"
+            >
+              <el-option label="线显示" :value="0"></el-option>
+              <el-option label="面显示" :value="1"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="天际线颜色:">
+            <el-color-picker
+              color-format="rgb"
+              v-model="form.skylineColor"
+            ></el-color-picker>
+          </el-form-item>
+          <el-form-item label="障碍物高亮颜色:">
+            <el-color-picker
+              color-format="rgb"
+              v-model="form.highlightBarrierColor"
+            ></el-color-picker>
+          </el-form-item>
+          <el-form-item>
+            <el-checkbox size="mini" v-model="form.highlightBarrier"
+              >高亮障碍物</el-checkbox
+            >
+          </el-form-item>
+          <el-form-item>
+            <el-checkbox size="mini" v-model="form.Skyline2D"
+              >二维天际线</el-checkbox
+            >
+          </el-form-item>
+        </el-form>
+        <div id="echartF" ref="echartF" class="EchartsWH">
+          <div
+            id="skyEcharts"
+            ref="skyEcharts"
+            :style="{ width: '100%', height: '100%' }"
+          ></div>
+        </div>
+
+        <div class="SaveCenter">
+          <el-button size="mini" type="primary" @click="onSubmit"
+            >天际线</el-button
+          >
+          <el-button size="mini" @click="resetForm">清除</el-button>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import elementResizeDetectorMaker from "element-resize-detector";
+export default {
+  data() {
+    return {
+      form: {
+        viewlongitude: 0,
+        viewlatitude: 0,
+        viewheight: 0,
+        direction: 0.0,
+        pitch: 0.0,
+        lineWidth: 1,
+        skylineRadius: 10000,
+        skylineColor: "rgb(200, 0, 0)",
+        highlightBarrierColor: "rgba(255, 186, 1, 1)",
+        skylineMode: 0,
+        highlightBarrier: false,
+        Skyline2D: false,
+      },
+      skyline: null,
+      myChart: null,
+      s3mInstance: null,
+      flag: false,
+      erd: null,
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    const erd = elementResizeDetectorMaker();
+    let that = this;
+    erd.listenTo(this.$refs.echartF, () => {
+      that.$nextTick(() => {
+        //监听到事件后执行的业务逻辑
+        window.echarts.init(this.$refs.skyEcharts).resize();
+      });
+    });
+    this.$refs.echartF.style.display = "none";
+    this.init();
+  },
+  methods: {
+    init() {},
+
+    //提交数据
+    onSubmit() {
+      this.analysis();
+    },
+    //清空from
+    resetForm() {
+      this.clear();
+    },
+    /**
+     * 开始分析天际线
+     */
+    analysis() {
+      let that = this;
+      this.clear(); // 清除上一次分析结果
+      this.flag = true;
+      if (!this.skyline) {
+        this.skyline = new Cesium.Skyline(scene);
+      }
+
+      let cartographic = scene.camera.positionCartographic;
+      let longitude = Cesium.Math.toDegrees(cartographic.longitude);
+      let latitude = Cesium.Math.toDegrees(cartographic.latitude);
+      let height = cartographic.height;
+      // 天际线分析的视口位置设置成当前相机位置
+      this.skyline.viewPosition = [longitude, latitude, height];
+
+      this.form.viewlongitude = longitude.toFixed(6);
+      this.form.viewlatitude = latitude.toFixed(6);
+      this.form.viewheight = height.toFixed(6);
+
+      //设置俯仰和方向
+      this.skyline.pitch = Cesium.Math.toDegrees(scene.camera.pitch);
+      this.skyline.direction = Cesium.Math.toDegrees(scene.camera.heading);
+
+      this.form.pitch = this.skyline.pitch;
+      this.form.direction = this.skyline.direction;
+      this.skyline.radius = this.form.skylineRadius;
+      this.skyline.lineWidth = Number(this.form.lineWidth);
+      let color = Cesium.Color.fromCssColorString(this.form.skylineColor);
+      this.skyline.color = color;
+      this.skyline.displayStyle = this.form.skylineMode;
+      this.skyline.build();
+
+      setTimeout(function () {
+        // 延时执行的函数
+        if (that.form.highlightBarrier) {
+          that.ObstacleSwitching(true);
+        }
+        if (that.form.Skyline2D) {
+          that.getSkyline2D(true);
+        }
+      }, 500);
+
+      // console.log(skyline.lineWidth,this.lineWidth)
+    },
+    clear() {
+      this.flag = false;
+      this.getSkyline2D(false);
+      viewer.entities.removeAll();
+      scene.primitives._primitives = [];
+      if (this.skyline) {
+        this.skyline.clear();
+        this.skyline = null;
+      }
+
+      for (var i = 0; i < scene.layers._layerQueue.length; i++) {
+        var layer = scene.layers.findByIndex(i);
+        layer.removeAllObjsColor();
+      }
+
+      this.form.viewlongitude = 0;
+      this.form.viewlatitude = 0;
+      this.form.viewheight = 0;
+      this.form.direction = 0.0;
+      this.form.pitch = 0.0;
+
+      this.form.skylineColor = "rgb(200, 0, 0)";
+      this.form.highlightBarrierColor = "rgba(255, 186, 1, 1)";
+      //初始化参数
+    },
+    /**
+     * 障碍物切换显示隐藏
+     * @param isShow 是否显示
+     */
+    ObstacleSwitching(isShow = true) {
+      console.log(JSON.stringify(this.skyline.getObjectIds()));
+      if (this.skyline && isShow) {
+        let BarrierColor = Cesium.Color.fromCssColorString(
+          this.form.highlightBarrierColor
+        );
+        let ObjectIds = this.skyline.getObjectIds();
+        for (let index in ObjectIds) {
+          //   let layer = scene.layers.findByIndex(Number(index)); // 底层索引从3开始
+          let layer = scene.layers.layerQueue.find(
+            (c) => c.id == Number(index)
+          );
+          let ids = this.skyline.getObjectIds()[index];
+          layer.setObjsColor(ids, BarrierColor);
+        }
+      } else if (this.skyline && !isShow) {
+        for (var i = 0; i < scene.layers._layerQueue.length; i++) {
+          var layer = scene.layers.findByIndex(i);
+          layer.removeAllObjsColor();
+        }
+      }
+    },
+    /**
+     * 障碍物切换显示隐藏
+     * @param isShow 是否显示
+     */
+    getSkyline2D: function (isShow = false) {
+      if (isShow) {
+        this.$refs.echartF.style.display = "block";
+        console.log(this.$refs.echartF.style.display);
+        this.myChart = window.echarts.init(this.$refs.skyEcharts);
+
+        let object = this.skyline.getSkyline2D();
+        let option = {
+          backgroundColor: "rgba(73,139,156,0.0)",
+          grid: {
+            top: "20%",
+            right: "10%",
+            left: "8%",
+            bottom: "12%",
+          },
+          xAxis: [
+            {
+              type: "category",
+              boundaryGap: false,
+              data: object.x,
+              show: false,
+            },
+          ],
+          yAxis: [
+            {
+              type: "value",
+              min: 0,
+              max: 1,
+              // grid: {
+              //   show: false
+              // },
+              axisLabel: {
+                show: true,
+                textStyle: {
+                  color: "#fff",
+                },
+              },
+            },
+          ],
+          series: [
+            {
+              name: "",
+              type: "line",
+              data: object.y,
+            },
+          ],
+        };
+        this.myChart.setOption(option);
+      } else {
+        this.$refs.echartF.style.display = "none";
+        // this.myChart = null;
+      }
+    },
+  },
+  watch: {
+    //初始化echarts,切换时需要能获取节点
+
+    "form.direction": function (newValue) {
+      if (this.flag) {
+        this.skyline.direction = parseFloat(newValue);
+      }
+    },
+    "form.pitch": function (newValue) {
+      if (this.flag) {
+        this.skyline.pitch = parseFloat(newValue);
+      }
+    },
+    "form.skylineRadius": function (newValue) {
+      if (this.flag) {
+        this.skyline.radius = parseFloat(newValue);
+      }
+    },
+    "form.lineWidth": function (newValue) {
+      if (this.flag) {
+        this.skyline.lineWidth = parseFloat(newValue);
+      }
+    },
+    "form.skylineColor": function (newValue) {
+      if (this.flag) {
+        let color = Cesium.Color.fromCssColorString(newValue);
+        if (this.skyline) {
+          this.skyline.color = color;
+        }
+      }
+    },
+    "form.highlightBarrierColor": function (newValue) {
+      this.form.highlightBarrierColor = newValue;
+    },
+    "form.highlightBarrier": function (newValue) {
+      // let skyline = this.skyline;
+      if (newValue && this.skyline) {
+        this.ObstacleSwitching(true);
+      } else if (!newValue && this.skyline) {
+        this.ObstacleSwitching(false);
+      }
+    },
+    "form.Skyline2D": function (newValue) {
+      if (newValue && this.skyline) {
+        this.getSkyline2D(true);
+      } else if (!newValue && this.skyline) {
+        this.getSkyline2D(false);
+      }
+    },
+    "form.skylineMode": function (newValue) {
+      this.form.skylineMode = Number(newValue);
+      if (!this.skyline) {
+        return;
+      }
+      let value = newValue;
+      if (value == "0") {
+        this.skyline.displayStyle = 0;
+        scene.primitives._primitives = [];
+      } else if (value == "1") {
+        this.skyline.displayStyle = 1;
+        scene.primitives._primitives = [];
+      }
+    },
+  },
+  beforeDestroy() {
+    this.clear();
+  },
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style lang="scss" scoped>
+.el-card {
+  border: 0px solid #02a7f0;
+}
+.el-form-item {
+  margin-bottom: 0;
+}
+.EchartsWH {
+  width: 100%;
+  height: 8rem;
+}
+</style>

+ 133 - 0
src/views/ConstructionApplication3D/zt.scss

@@ -0,0 +1,133 @@
+.colorPicker {
+  z-index: 999999 !important;
+}
+.el-row {
+  margin-bottom: 20px;
+  &:last-child {
+    margin-bottom: 0;
+  }
+}
+.el-col {
+  border-radius: 4px;
+}
+.bg-purple-dark {
+  background: #99a9bf;
+}
+.bg-purple {
+  background: #d3dce6;
+}
+.bg-purple-light {
+  background: #e5e9f2;
+}
+.grid-content {
+  border-radius: 4px;
+  min-height: 36px;
+}
+.row-bg {
+  padding: 10px 0;
+  background-color: #f9fafc;
+}
+.xmtabls {
+  background-color: rgba(10, 36, 80, 1);
+  width: 100%;
+}
+.el-tabs__item {
+  color: white;
+}
+.el-collapse-item__header {
+  color: #fff;
+  background-color: #fff0;
+  border-bottom: 0px solid #ebeef5;
+}
+.el-collapse-item__wrap {
+  background-color: #fff0;
+  border-bottom: 0px solid #ebeef5;
+  overflow: unset;
+}
+.el-collapse {
+  border-top: 0px solid #ebeef5;
+  border-bottom: 0px solid #ebeef5;
+}
+.el-card {
+  color: #fff;
+  
+  background-color: #fff0;
+}
+.el-radio {
+  color: #fff;
+}
+
+.container {
+  display: flex; /* 使用Flexbox布局 */
+  flex-direction: column; /* 子标签竖向排列 */
+  justify-content: center;
+  align-items: center;
+}
+.none {
+  display: none;
+}
+.block {
+  display: block;
+}
+.el-switch__label {
+  color: #fff;
+}
+
+ 
+ 
+
+.el-descriptions {
+  color: #fff;
+}
+.el-descriptions__body {
+  color: #fff;
+  background-color: #fff0;
+}
+
+.titleHeader{
+text-align: left;
+}
+
+
+.el-table {
+   
+  color: #fff;
+}
+
+.el-table  {
+  background-color: #fff0 !important;
+}
+.el-table thead {
+  color: #fff;
+  background-color: #fff0 !important;
+}
+.el-table__body tr.el-table__row {
+  background-color: #fff0 !important; /* 浅灰色背景 */
+}
+ 
+// 修改表格背景颜色
+.el-table, .el-table__expanded-cell{
+  background-color: #fff0 !important;
+}
+// 鼠标悬浮该行时的背景颜色
+.el-table--enable-row-hover .el-table__body tr:hover > td{
+  background-color: #40a0ff42 !important;
+}
+       
+    
+.el-table th,
+.el-table tr,
+.el-table td {
+  background-color: #fff0 !important;
+}
+.el-table__body tr.current-row > td {
+  background-color: #40a0ff59 !important;
+}
+    
+.SaveCenter{
+  text-align: center;
+  padding: 1rem 0 ;
+}
+.el-checkbox {
+  color: #ffffff;
+}

+ 33 - 2
src/views/checkmodel.vue

@@ -1,17 +1,48 @@
 <template>
   <div class="checkmodel">
-    <div class="innerContainer leftPane">三维报建</div>
+    <!-- <div class="innerContainer leftPane">三维报建</div> -->
   </div>
 </template>
 
 <script>
+import ConstructionApplication3D from "@/views/ConstructionApplication3D/projectManagement/projectManagement.vue";
 export default {
   name: "checkmodel",
   data() {
     return {};
   },
   created() {},
-  methods: {},
+  methods: {
+    openDialog(componentName) {
+      switch (componentName) {
+        case "ConstructionApplication3D":
+          let layerid = this.$layer.iframe({
+            content: {
+              content: ConstructionApplication3D, //传递的组件对象
+              parent: this, //当前的vue对象
+              data: {}, //props
+            },
+            offset: [236, 488], //left top  左上角(left=430px/2;top=(800px+header高)/2)
+            area: ["430px", "800px"],
+            title: "三维报建",
+            maxmin: true,
+            shade: false, //是否显示遮罩
+            shadeClose: false, //点击遮罩是否关闭
+            cancel: () => {
+              //关闭事件
+              // alert("关闭iframe");
+            },
+          });
+          break;
+
+        default:
+          break;
+      }
+    },
+  },
+  mounted() {
+    this.openDialog("ConstructionApplication3D");
+  },
 };
 </script>
 

+ 81 - 0
static/Config/config copy.js

@@ -0,0 +1,81 @@
+/*
+ * @Author: LAPTOP-BJJ3IV5R\SIWEI zhxjavait@163.com
+ * @Date: 2024-05-29 08:19:49
+ * @LastEditors: Please set LastEditors
+ * @LastEditTime: 2024-06-11 09:14:12
+ * @FilePath: \real3d-portalsite\static\Config\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+//后台地址配置
+window.axiosURI = "http://192.168.60.4:8080";
+//倾斜模型高度配置
+window.modelBottomAltitude = 10;
+// 服务器ip
+window.hostconfig = "127.0.0.1";
+//地图初始化中心点
+window.mapview = [110.0353, 16.3, 300000.0];
+//默认影像地址,空则为不加载默认影像
+//window.baseImgLayer = "http://127.0.0.1:8090/iserver/services/map-sanyadsm/rest/maps/%E6%B5%B7%E5%8D%97%E5%B2%9B%E5%BD%B1%E5%83%8F15%E7%BA%A7_Level_15%40DataSource";
+window.baseImgLayer = "http://192.168.60.3:8099/iserver/services/map-WorkSpace/rest/maps/%E6%B5%B7%E5%8D%97%E5%B2%9B%E5%BD%B1%E5%83%8F15%E7%BA%A7_Level_15%40DataSource";
+//三维模型查询地址
+window.baseModelQueryLayer = "http://192.168.60.3:8099/iserver/services/data-building/rest/data/featureResults.rjson?returnContent=true";
+// ai大模型
+window.aiModel = "https://agent-demo.h1url.cn/agents-admin-vue/#/chat/chat?shareId=f509257cc7f8964f44b177aa72549204";/**
+ * 模型对应数据图层
+ * url:数据服务地址
+ * DataName:数据源:数据集
+ * Name3D:三维图层名称
+ * Fields:要素字段别名对照
+ */
+window.layersDataUrl = [{
+        url: "http://www.supermapol.com/realspace/services/data-cbd/rest/data/featureResults.rjson?returnContent=true",
+        datasources: [{
+                DataName: "二维数据:Building",
+                Name3D: "Building@CBD",
+                Fields: [
+                    { FieldEn: "SMID", FieldCn: "唯一键" },
+                    { FieldEn: "SMSDRIW", FieldCn: "西" }
+                ]
+            },
+            {
+                DataName: "二维数据:Ground",
+                Name3D: "Ground@CBD",
+                Fields: [
+                    { FieldEn: "SMID", FieldCn: "唯一键" },
+                    { FieldEn: "SMSDRIW", FieldCn: "西" }
+                ]
+            }
+        ]
+    },
+    {
+        url: "http://www.supermapol.com/realspace/services/data-OlympicGreenNight/rest/data/featureResults.rjson?returnContent=true",
+        datasources: [{
+                DataName: "OlympicGreenNight:BuilderResult_1",
+                Name3D: "BirdNest@OlympicGreenDataSource",
+                Fields: [
+                    { FieldEn: "SMID", FieldCn: "唯一键" },
+                    { FieldEn: "SMSDRIW", FieldCn: "西" }
+                ]
+            },
+            {
+                DataName: "OlympicGreenNight:OlympicGreenNight",
+                Name3D: "Ground@OlympicGreen",
+                Fields: [
+                    { FieldEn: "SMID", FieldCn: "唯一键" },
+                    { FieldEn: "SMSDRIW", FieldCn: "西" }
+                ]
+            }
+        ]
+    },
+    {
+        url: "http://www.supermapol.com/realspace/services/data-jinjiang/rest/data/featureResults.rjson?returnContent=true",
+        datasources: [{
+            DataName: "jinjiang:test",
+            Name3D: "jinjiang",
+            Fields: [
+                { FieldEn: "SMID", FieldCn: "唯一键" },
+                { FieldEn: "SMSDRIW", FieldCn: "西" }
+            ]
+        }]
+    }
+];

+ 909 - 58
static/Config/config.js

@@ -1,11 +1,3 @@
-/*
- * @Author: LAPTOP-BJJ3IV5R\SIWEI zhxjavait@163.com
- * @Date: 2024-05-29 08:19:49
- * @LastEditors: Please set LastEditors
- * @LastEditTime: 2024-06-11 09:14:12
- * @FilePath: \real3d-portalsite\static\Config\config.js
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
- */
 //后台地址配置
 window.axiosURI = "http://192.168.60.4:8080";
 //倾斜模型高度配置
@@ -21,61 +13,920 @@ window.baseImgLayer = "http://192.168.60.3:8099/iserver/services/map-WorkSpace/r
 window.baseModelQueryLayer = "http://192.168.60.3:8099/iserver/services/data-building/rest/data/featureResults.rjson?returnContent=true";
 // ai大模型
 window.aiModel = "https://agent-demo.h1url.cn/agents-admin-vue/#/chat/chat?shareId=f509257cc7f8964f44b177aa72549204";/**
+  /**
  * 模型对应数据图层
  * url:数据服务地址
  * DataName:数据源:数据集
  * Name3D:三维图层名称
  * Fields:要素字段别名对照
  */
-window.layersDataUrl = [{
-        url: "http://www.supermapol.com/realspace/services/data-cbd/rest/data/featureResults.rjson?returnContent=true",
-        datasources: [{
-                DataName: "二维数据:Building",
-                Name3D: "Building@CBD",
-                Fields: [
-                    { FieldEn: "SMID", FieldCn: "唯一键" },
-                    { FieldEn: "SMSDRIW", FieldCn: "西" }
-                ]
-            },
-            {
-                DataName: "二维数据:Ground",
-                Name3D: "Ground@CBD",
-                Fields: [
-                    { FieldEn: "SMID", FieldCn: "唯一键" },
-                    { FieldEn: "SMSDRIW", FieldCn: "西" }
-                ]
-            }
-        ]
+window.layersDataUrl = [
+  {
+    url: "http://www.supermapol.com/realspace/services/data-cbd/rest/data/featureResults.rjson?returnContent=true",
+    datasources: [
+      {
+        DataName: "二维数据:Building",
+        Name3D: "Building@CBD",
+        Fields: [
+          { FieldEn: "SMID", FieldCn: "唯一键" },
+          { FieldEn: "SMSDRIW", FieldCn: "西" },
+        ],
+      },
+      {
+        DataName: "二维数据:Ground",
+        Name3D: "Ground@CBD",
+        Fields: [
+          { FieldEn: "SMID", FieldCn: "唯一键" },
+          { FieldEn: "SMSDRIW", FieldCn: "西" },
+        ],
+      },
+    ],
+  },
+  {
+    url: "http://www.supermapol.com/realspace/services/data-OlympicGreenNight/rest/data/featureResults.rjson?returnContent=true",
+    datasources: [
+      {
+        DataName: "OlympicGreenNight:BuilderResult_1",
+        Name3D: "BirdNest@OlympicGreenDataSource",
+        Fields: [
+          { FieldEn: "SMID", FieldCn: "唯一键" },
+          { FieldEn: "SMSDRIW", FieldCn: "西" },
+        ],
+      },
+      {
+        DataName: "OlympicGreenNight:OlympicGreenNight",
+        Name3D: "Ground@OlympicGreen",
+        Fields: [
+          { FieldEn: "SMID", FieldCn: "唯一键" },
+          { FieldEn: "SMSDRIW", FieldCn: "西" },
+        ],
+      },
+    ],
+  },
+  {
+    url: "http://www.supermapol.com/realspace/services/data-jinjiang/rest/data/featureResults.rjson?returnContent=true",
+    datasources: [
+      {
+        DataName: "jinjiang:test",
+        Name3D: "jinjiang",
+        Fields: [
+          { FieldEn: "SMID", FieldCn: "唯一键" },
+          { FieldEn: "SMSDRIW", FieldCn: "西" },
+        ],
+      },
+    ],
+  },
+];
+
+/**
+ * //项目信息
+ * meetingProgress (未上会:0,已上会:1)
+ */
+window.projectinformation = [
+  {
+    id: "ertyuiop",
+    meetingProgress: 0,
+    applicant: "三亚保岭投资发展有限公司",
+    projectname: "保利·栖山雨茗安居房项目",
+    projectaddress: "温泉二路南侧、 规划路北侧",
+    plotnumber: "bl-04-04、bl-04-08",
+    landarea: "58042.62平方米(约87.06亩)",
+    landusenature: "二类城镇住宅用地(070102)",
+    projectpositioning: "安居房",
+    landsituation: "2023年11月拿地, 12月22日取得不动产权证书",
+    totalprojectinvestment: "约19亿元",
+    fundingsource: "企业投资",
+  },
+  {
+    id: "222ertyuiop",
+    projectname: "222保利·栖山雨茗安居房项目",
+    meetingProgress: 1,
+    applicant: "三亚保岭投资发展有限公司",
+    projectaddress: "温泉二路南侧、 规划路北侧",
+    plotnumber: "bl-04-04、bl-04-08",
+    landarea: "58042.62平方米(约87.06亩)",
+    landusenature: "二类城镇住宅用地(070102)",
+    projectpositioning: "安居房",
+    landsituation: "2023年11月拿地, 12月22日取得不动产权证书",
+    totalprojectinvestment: "约19亿元",
+    fundingsource: "企业投资",
+  },
+];
+//报建模型
+window.constructionmodel = [
+  {
+    id: "hfgdg",
+    projectinformationid: "ertyuiop",
+    modelname: "报建模型1",
+    creationtime: "2024:-04-24 17:22:13",
+    x: "109.55145569681383",
+    y: "18.28012526287734",
+    z: "2000.0",
+    url: "http://192.168.1.30:8091/iserver/services/3D-fangan/rest/realspace",
+    dataurl: "http://192.168.1.30:8091/iserver/services/data-fangan/rest/data",
+    dataSourceName: "sanyatieluxiaoqu",
+    datasetName: "Model",
+    selectionStatus: false,
+    designunit: "筑博设计股份有限公司",
+    totalarea: "",
+    groundarea: "",
+    groundcapacity: "",
+    buildingarea: "",
+    plandescription:
+      "拟建15栋25-26层安居房、 1栋3层幼儿园、 1栋1层配套用房、 1栋1层开闭所及1个2层整体地下室。总建筑面积约23.81万平方米, 其中计容建筑面积约17.41万平方米, 不计容建筑面积约6.40万平方米。 容积率3.0, 建筑密度17.59%, 建筑高度80米, 绿地率40%, 总户数1552户。机动车停车位1944个(地上154个, 地下1790个) , 非机动车位3270个",
+  },
+  {
+    id: "2hfgddfzg",
+    projectinformationid: "ertyuiop",
+    modelname: "报建模型2",
+    creationtime: "2024:-04-24 17:22:13",
+    x: "109.55145569681383",
+    y: "18.28012526287734",
+    z: "2000.0",
+    url: "http://192.168.1.30:8091/iserver/services/3D-fangan2/rest/realspace",
+    dataurl: "http://192.168.1.30:8091/iserver/services/data-fangan2/rest/data",
+    dataSourceName: "sanyatieluxiaoqu2",
+    datasetName: "Model",
+    selectionStatus: false,
+    designunit: "2筑博设计股份有限公司",
+    totalarea: "",
+    groundarea: "",
+    groundcapacity: "",
+    buildingarea: "",
+    plandescription:
+      "拟建15栋25-26层安居房、 1栋3层幼儿园、 1栋1层配套用房、 1栋1层开闭所及1个2层整体地下室。总建筑面积约23.81万平方米, 其中计容建筑面积约17.41万平方米, 不计容建筑面积约6.40万平方米。 容积率3.0, 建筑密度17.59%, 建筑高度80米, 绿地率40%, 总户数1552户。机动车停车位1944个(地上154个, 地下1790个) , 非机动车位3270个",
+  },
+  {
+    id: "222hfgdg",
+    projectinformationid: "222ertyuiop",
+    modelname: "222报建模型1",
+    creationtime: "2024:-04-24 17:22:13",
+    x: "109.55145569681383",
+    y: "18.28012526287734",
+    z: "2000.0",
+    url: "http://192.168.1.30:8091/iserver/services/3D-fangan2/rest/realspace",
+    dataurl: "http://192.168.1.30:8091/iserver/services/data-fangan2/rest/data",
+    dataSourceName: "sanyatieluxiaoqu2",
+    datasetName: "Model",
+    selectionStatus: true,
+    designunit: "筑博设计股份有限公司",
+    totalarea: "",
+    groundarea: "",
+    groundcapacity: "",
+    buildingarea: "",
+    plandescription:
+      "拟建15栋25-26层安居房、 1栋3层幼儿园、 1栋1层配套用房、 1栋1层开闭所及1个2层整体地下室。总建筑面积约23.81万平方米, 其中计容建筑面积约17.41万平方米, 不计容建筑面积约6.40万平方米。 容积率3.0, 建筑密度17.59%, 建筑高度80米, 绿地率40%, 总户数1552户。机动车停车位1944个(地上154个, 地下1790个) , 非机动车位3270个",
+  },
+];
+
+//图层服务查询分组树
+window.layerTree = [
+  {
+    nvfid: "1",
+    pnvfid: "0",
+    layer_name: "索引",
+    core: "001",
+    server: {
+      nvfid: "45678",
+      server_name: "索引",
+      url: "",
+      scene: "",
+      layer: "",
+    },
+    date_server: {
+      nvfid: "456sd78",
+      server_name: "索引",
+      url: "",
+      dataSourceName: "",
+      datasetName: "",
+    },
+    children: [
+      {
+        nvfid: "1-1",
+        pnvfid: "1",
+        layer_name: "市政府",
+        core: "001001",
+        server: {
+          nvfid: "456sd78",
+          server_name: "市政府",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "456sd78",
+          server_name: "市政府",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "1-2",
+        pnvfid: "1",
+        layer_name: "区政府",
+        core: "001002",
+        server: {
+          nvfid: "456swd78",
+          server_name: "区政府",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "区政府",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "1-3",
+        pnvfid: "1",
+        layer_name: "道路中线",
+        core: "001003",
+        server: {
+          nvfid: "456swd78",
+          server_name: "道路中线",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "道路中线",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "1-4",
+        pnvfid: "1",
+        layer_name: "兴趣点",
+        core: "001004",
+        server: {
+          nvfid: "456swdf7we8",
+          server_name: "兴趣点",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "45wef26fwsd78",
+          server_name: "兴趣点",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "1-5",
+        pnvfid: "1",
+        layer_name: "行政区划",
+        core: "001005",
+        server: {
+          nvfid: "456swdf7we8",
+          server_name: "行政区划",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "45wef26fwsd78",
+          server_name: "行政区划",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "1-6",
+        pnvfid: "1",
+        layer_name: "水系",
+        core: "001006",
+        server: {
+          nvfid: "456swdf7we8",
+          server_name: "水系",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "45wef26fwsd78",
+          server_name: "水系",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+    ],
+  },
+  {
+    nvfid: "2",
+    pnvfid: "0",
+    layer_name: "土地利用现状",
+    core: "002",
+    server: {
+      nvfid: "45678",
+      server_name: "土地利用现状",
+      url: "",
+      scene: "",
+      layer: "",
+    },
+    date_server: {
+      nvfid: "456sd78",
+      server_name: "土地利用现状",
+      url: "",
+      dataSourceName: "",
+      datasetName: "",
+    },
+    children: [
+      {
+        nvfid: "2-1",
+        pnvfid: "2",
+        layer_name: "山体绿地",
+        core: "002001",
+        server: {
+          nvfid: "456sd78",
+          server_name: "山体绿地",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "456sd78",
+          server_name: "山体绿地",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "2-2",
+        pnvfid: "2",
+        layer_name: "地类图斑",
+        core: "002002",
+        server: {
+          nvfid: "456swd78",
+          server_name: "地类图斑",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "地类图斑",
+          url: "http://192.168.1.30:8091/iserver/services/data-sanyamap1-2/rest/data",
+          dataSourceName: "sanya",
+          datasetName: "地类图斑",
+        },
+      },
+    ],
+  },
+  {
+    nvfid: "3",
+    pnvfid: "0",
+    layer_name: "城市规划",
+    core: "003",
+    server: {
+      nvfid: "45678",
+      server_name: "土地利用现状",
+      url: "",
+      scene: "",
+      layer: "",
+    },
+    date_server: {
+      nvfid: "456sd78",
+      server_name: "土地利用现状",
+      url: "",
+      dataSourceName: "",
+      datasetName: "",
+    },
+    children: [
+      {
+        nvfid: "3-1",
+        pnvfid: "3",
+        layer_name: "综合管廊规划",
+        core: "003001",
+        server: {
+          nvfid: "456sd78",
+          server_name: "综合管廊规划",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "456sd78",
+          server_name: "综合管廊规划",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "3-2",
+        pnvfid: "3",
+        layer_name: "雨水管线规划",
+        core: "003002",
+        server: {
+          nvfid: "456swd78",
+          server_name: "雨水管线规划",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "雨水管线规划",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "3-3",
+        pnvfid: "3",
+        layer_name: "污水管线规划",
+        core: "003003",
+        server: {
+          nvfid: "456swd78",
+          server_name: "污水管线规划",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "污水管线规划",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "3-4",
+        pnvfid: "3",
+        layer_name: "燃气管线规划",
+        core: "003004",
+        server: {
+          nvfid: "456swd78",
+          server_name: "燃气管线规划",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "燃气管线规划",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "3-5",
+        pnvfid: "3",
+        layer_name: "给水管线规划",
+        core: "003005",
+        server: {
+          nvfid: "456swd78",
+          server_name: "给水管线规划",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "给水管线规划",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "3-6",
+        pnvfid: "3",
+        layer_name: "规划地块",
+        core: "003006",
+        server: {
+          nvfid: "456swd78",
+          server_name: "规划地块",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "规划地块",
+          url: "http://192.168.1.30:8091/iserver/services/data-sanyamap1-2/rest/data",
+          dataSourceName: "sanya",
+          datasetName: "规划地块",
+        },
+      },
+    ],
+  },
+  {
+    nvfid: "4",
+    pnvfid: "0",
+    layer_name: "土地规划",
+    core: "004",
+    server: {
+      nvfid: "45678",
+      server_name: "土地规划",
+      url: "",
+      scene: "",
+      layer: "",
+    },
+    date_server: {
+      nvfid: "456sd78",
+      server_name: "土地规划",
+      url: "",
+      dataSourceName: "",
+      datasetName: "",
+    },
+    children: [
+      {
+        nvfid: "4-1",
+        pnvfid: "4",
+        layer_name: "城镇开发边界",
+        core: "004001",
+        server: {
+          nvfid: "456sd78",
+          server_name: "城镇开发边界",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "456sd78",
+          server_name: "城镇开发边界",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "4-2",
+        pnvfid: "4",
+        layer_name: "生态保护红线",
+        core: "004002",
+        server: {
+          nvfid: "456swd78",
+          server_name: "生态保护红线",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "生态保护红线",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "4-3",
+        pnvfid: "4",
+        layer_name: "永久基本农田",
+        core: "004003",
+        server: {
+          nvfid: "456swd78",
+          server_name: "永久基本农田",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "永久基本农田",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "4-4",
+        pnvfid: "4",
+        layer_name: "建筑退线",
+        core: "004004",
+        server: {
+          nvfid: "456swd78",
+          server_name: "建筑退线",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "建筑退线",
+          url: "http://192.168.1.30:8091/iserver/services/data-sanyamap1-2/rest/data",
+          dataSourceName: "sanya",
+          datasetName: "建筑退线",
+        },
+      },
+    ],
+  },
+  {
+    nvfid: "5",
+    pnvfid: "0",
+    layer_name: "市政设施",
+    core: "005",
+    server: {
+      nvfid: "45678",
+      server_name: "市政设施",
+      url: "",
+      scene: "",
+      layer: "",
+    },
+    date_server: {
+      nvfid: "456sd78",
+      server_name: "市政设施",
+      url: "",
+      dataSourceName: "",
+      datasetName: "",
+    },
+    children: [
+      {
+        nvfid: "5-1",
+        pnvfid: "5",
+        layer_name: "高速",
+        core: "005001",
+        server: {
+          nvfid: "456sd78",
+          server_name: "高速",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "456sd78",
+          server_name: "高速",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "5-2",
+        pnvfid: "5",
+        layer_name: "铁路",
+        core: "005002",
+        server: {
+          nvfid: "456swd78",
+          server_name: "铁路",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "铁路",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "5-3",
+        pnvfid: "5",
+        layer_name: "道路",
+        core: "005003",
+        server: {
+          nvfid: "456swd78",
+          server_name: "道路",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "道路",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "5-4",
+        pnvfid: "5",
+        layer_name: "道路中线",
+        core: "005004",
+        server: {
+          nvfid: "456swd78",
+          server_name: "道路中线",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "道路中线",
+          url: "http://192.168.1.30:8091/iserver/services/data-sanyamap1-2/rest/data",
+          dataSourceName: "sanya",
+          datasetName: "道路中线",
+        },
+      },
+      {
+        nvfid: "5-5",
+        pnvfid: "5",
+        layer_name: "禁止开口线",
+        core: "005005",
+        server: {
+          nvfid: "456swd78",
+          server_name: "禁止开口线",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "禁止开口线",
+          url: "http://192.168.1.30:8091/iserver/services/data-sanyamap1-2/rest/data",
+          dataSourceName: "sanya",
+          datasetName: "禁止开口线",
+        },
+      },
+    ],
+  },
+  {
+    nvfid: "6",
+    pnvfid: "0",
+    layer_name: "基础地价",
+    core: "006",
+    server: {
+      nvfid: "45678",
+      server_name: "基础地价",
+      url: "",
+      scene: "",
+      layer: "",
     },
-    {
-        url: "http://www.supermapol.com/realspace/services/data-OlympicGreenNight/rest/data/featureResults.rjson?returnContent=true",
-        datasources: [{
-                DataName: "OlympicGreenNight:BuilderResult_1",
-                Name3D: "BirdNest@OlympicGreenDataSource",
-                Fields: [
-                    { FieldEn: "SMID", FieldCn: "唯一键" },
-                    { FieldEn: "SMSDRIW", FieldCn: "西" }
-                ]
-            },
-            {
-                DataName: "OlympicGreenNight:OlympicGreenNight",
-                Name3D: "Ground@OlympicGreen",
-                Fields: [
-                    { FieldEn: "SMID", FieldCn: "唯一键" },
-                    { FieldEn: "SMSDRIW", FieldCn: "西" }
-                ]
-            }
-        ]
+    date_server: {
+      nvfid: "456sd78",
+      server_name: "基础地价",
+      url: "",
+      dataSourceName: "",
+      datasetName: "",
     },
-    {
-        url: "http://www.supermapol.com/realspace/services/data-jinjiang/rest/data/featureResults.rjson?returnContent=true",
-        datasources: [{
-            DataName: "jinjiang:test",
-            Name3D: "jinjiang",
-            Fields: [
-                { FieldEn: "SMID", FieldCn: "唯一键" },
-                { FieldEn: "SMSDRIW", FieldCn: "西" }
-            ]
-        }]
-    }
-];
+    children: [
+      {
+        nvfid: "6-1",
+        pnvfid: "6",
+        layer_name: "c12 商服级别",
+        core: "006001",
+        server: {
+          nvfid: "456sd78",
+          server_name: "c12 商服级别",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "456sd78",
+          server_name: "c12 商服级别",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "6-2",
+        pnvfid: "6",
+        layer_name: "c2 2 住宅级别",
+        core: "006002",
+        server: {
+          nvfid: "456swd78",
+          server_name: "c2 2 住宅级别",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "c2 2 住宅级别",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "6-3",
+        pnvfid: "6",
+        layer_name: "c32T业级别",
+        core: "006003",
+        server: {
+          nvfid: "456swd78",
+          server_name: "c32T业级别",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "c32T业级别",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "6-4",
+        pnvfid: "6",
+        layer_name: "c41公服级别",
+        core: "006004",
+        server: {
+          nvfid: "456swd78",
+          server_name: "c41公服级别",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "c41公服级别",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "6-5",
+        pnvfid: "6",
+        layer_name: "c230T业级别",
+        core: "006005",
+        server: {
+          nvfid: "456swd78",
+          server_name: "c230T业级别",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "c230T业级别",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "6-6",
+        pnvfid: "6",
+        layer_name: "c210商服级别",
+        core: "006006",
+        server: {
+          nvfid: "456swd78",
+          server_name: "c210商服级别",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "c210商服级别",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+      {
+        nvfid: "6-7",
+        pnvfid: "6",
+        layer_name: "c4路线价",
+        core: "006007",
+        server: {
+          nvfid: "456swd78",
+          server_name: "c4路线价",
+          url: "",
+          scene: "",
+          layer: "",
+        },
+        date_server: {
+          nvfid: "4526wsd78",
+          server_name: "c4路线价",
+          url: "",
+          dataSourceName: "",
+          datasetName: "",
+        },
+      },
+    ],
+  },
+];
+
+//字典
+window.dict = {
+  //用地性质
+  zt_landusenature: [
+    { label: "一类城镇住宅用地", value: "一类城镇住宅用地" },
+    { label: "二类城镇住宅用地", value: "二类城镇住宅用地" },
+  ],
+  //资金来源
+  zt_fundingsource: [
+    { label: "企业投资", value: "企业投资" },
+    { label: "政府投资", value: "政府投资" },
+    { label: "社会投资", value: "社会投资" },
+    { label: "其他", value: "其他" },
+  ],
+};

BIN
static/ModelData/billboard/box.bin


+ 131 - 0
static/ModelData/billboard/box.gltf

@@ -0,0 +1,131 @@
+{
+  "asset": {
+    "version": "2.0",
+    "generator": "babylon.js glTF exporter for 3dsmax 2021 v20210727.3"
+  },
+  "scene": 0,
+  "scenes": [
+    {
+      "nodes": [
+        0
+      ]
+    }
+  ],
+  "nodes": [
+    {
+      "mesh": 0,
+      "rotation": [
+        -0.7071068,
+        0,
+        0,
+        0.7071067
+      ],
+      "name": "Box001",
+      "translation": [
+        0,
+        0,
+        0
+      ],
+      "scale": [
+        1,
+        1,
+        1
+      ]
+    }
+  ],
+  "meshes": [
+    {
+      "primitives": [
+        {
+          "attributes": {
+            "POSITION": 1,
+            "NORMAL": 2,
+            "TEXCOORD_0": 3
+          },
+          "indices": 0,
+          "mode": 4,
+          "material": 0,
+          "extensions": {
+            "KHR_draco_mesh_compression": {
+              "bufferView": 0,
+              "attributes": {
+                "POSITION": 0,
+                "NORMAL": 1,
+                "TEXCOORD_0": 2
+              }
+            }
+          }
+        }
+      ],
+      "name": "Box001"
+    }
+  ],
+  "accessors": [
+    {
+      "componentType": 5123,
+      "count": 36,
+      "type": "SCALAR",
+      "name": "accessorIndices"
+    },
+    {
+      "componentType": 5126,
+      "count": 24,
+      "max": [
+        0.5000610388817677,
+        0.00004272721723737327,
+        0.5000610388817677
+      ],
+      "min": [
+        -0.5000610388817677,
+        -0.10006103888176769,
+        -0.5000610388817677
+      ],
+      "type": "VEC3",
+      "name": "accessorPositions"
+    },
+    {
+      "componentType": 5126,
+      "count": 24,
+      "type": "VEC3",
+      "name": "accessorNormals"
+    },
+    {
+      "componentType": 5126,
+      "count": 24,
+      "type": "VEC2",
+      "name": "accessorUVs"
+    }
+  ],
+  "bufferViews": [
+    {
+      "buffer": 0,
+      "byteOffset": 0,
+      "byteLength": 221
+    }
+  ],
+  "buffers": [
+    {
+      "name": "box",
+      "byteLength": 224,
+      "uri": "box.bin"
+    }
+  ],
+  "materials": [
+    {
+      "name": "default",
+      "emissiveFactor": [
+        0,
+        0,
+        0
+      ],
+      "alphaMode": "OPAQUE",
+      "doubleSided": false
+    }
+  ],
+  "extensionsRequired": [
+    "KHR_draco_mesh_compression"
+  ],
+  "extensionsUsed": [
+    "KHR_draco_mesh_compression"
+  ]
+}

BIN
static/ModelData/billboard/guanggaopai.bin


+ 239 - 0
static/ModelData/billboard/guanggaopai.gltf

@@ -0,0 +1,239 @@
+{
+  "asset": {
+    "version": "2.0",
+    "generator": "babylon.js glTF exporter for 3dsmax 2021 v20210727.3"
+  },
+  "scene": 0,
+  "scenes": [
+    {
+      "nodes": [
+        0,
+        1
+      ]
+    }
+  ],
+  "nodes": [
+    {
+      "mesh": 0,
+      "translation": [
+        0.0000490546227,
+        0.002568718,
+        0.0037069926
+      ],
+      "scale": [
+        3.09,
+        3.09,
+        3.09
+      ],
+      "name": "Cube.161",
+      "rotation": [
+        0,
+        0,
+        0,
+        1
+      ]
+    },
+    {
+      "mesh": 1,
+      "translation": [
+        0.0000490546227,
+        0.002568718,
+        0.0037069926
+      ],
+      "scale": [
+        3.07887983,
+        3.08280063,
+        3.08280063
+      ],
+      "name": "对象001",
+      "rotation": [
+        0,
+        0,
+        0,
+        1
+      ]
+    }
+  ],
+  "meshes": [
+    {
+      "primitives": [
+        {
+          "attributes": {
+            "POSITION": 1,
+            "NORMAL": 2,
+            "TEXCOORD_0": 3
+          },
+          "indices": 0,
+          "material": 0,
+          "mode": 4,
+          "extensions": {
+            "KHR_draco_mesh_compression": {
+              "bufferView": 0,
+              "attributes": {
+                "POSITION": 0,
+                "NORMAL": 1,
+                "TEXCOORD_0": 2
+              }
+            }
+          }
+        }
+      ],
+      "name": "Cube.161"
+    },
+    {
+      "primitives": [
+        {
+          "attributes": {
+            "POSITION": 5,
+            "NORMAL": 6,
+            "TEXCOORD_0": 7
+          },
+          "indices": 4,
+          "mode": 4,
+          "material": 1,
+          "extensions": {
+            "KHR_draco_mesh_compression": {
+              "bufferView": 1,
+              "attributes": {
+                "POSITION": 0,
+                "NORMAL": 1,
+                "TEXCOORD_0": 2
+              }
+            }
+          }
+        }
+      ],
+      "name": "对象001"
+    }
+  ],
+  "accessors": [
+    {
+      "componentType": 5125,
+      "count": 1462290,
+      "type": "SCALAR",
+      "name": "accessorIndices"
+    },
+    {
+      "componentType": 5126,
+      "count": 273885,
+      "max": [
+        2.9460512552993965,
+        6.159629108073431,
+        4.142168332765063
+      ],
+      "min": [
+        -1.7449528027650612,
+        0.11736523623493865,
+        -4.137709022765061
+      ],
+      "type": "VEC3",
+      "name": "accessorPositions"
+    },
+    {
+      "componentType": 5126,
+      "count": 273885,
+      "type": "VEC3",
+      "name": "accessorNormals"
+    },
+    {
+      "componentType": 5126,
+      "count": 273885,
+      "type": "VEC2",
+      "name": "accessorUVs"
+    },
+    {
+      "componentType": 5123,
+      "count": 6,
+      "type": "SCALAR",
+      "name": "accessorIndices"
+    },
+    {
+      "componentType": 5126,
+      "count": 4,
+      "max": [
+        2.423643077188549,
+        5.505534458726729,
+        3.894297077188549
+      ],
+      "min": [
+        2.422692922811451,
+        1.270221322811451,
+        -3.889842657188549
+      ],
+      "type": "VEC3",
+      "name": "accessorPositions"
+    },
+    {
+      "componentType": 5126,
+      "count": 4,
+      "type": "VEC3",
+      "name": "accessorNormals"
+    },
+    {
+      "componentType": 5126,
+      "count": 4,
+      "type": "VEC2",
+      "name": "accessorUVs"
+    }
+  ],
+  "bufferViews": [
+    {
+      "buffer": 0,
+      "byteOffset": 0,
+      "byteLength": 1309983
+    },
+    {
+      "buffer": 0,
+      "byteOffset": 1309984,
+      "byteLength": 190
+    }
+  ],
+  "buffers": [
+    {
+      "name": "guanggaopai",
+      "byteLength": 1310176,
+      "uri": "guanggaopai.bin"
+    }
+  ],
+  "materials": [
+    {
+      "pbrMetallicRoughness": {
+        "baseColorFactor": [
+          0.09803922,
+          0.09803922,
+          0.09803922,
+          1
+        ],
+        "metallicFactor": 0.8,
+        "roughnessFactor": 0.6
+      },
+      "doubleSided": true,
+      "name": "01 - Default",
+      "extras": {
+        "babylonSeparateCullingPass": false
+      },
+      "emissiveFactor": [
+        0,
+        0,
+        0
+      ],
+      "alphaMode": "OPAQUE"
+    },
+    {
+      "name": "default",
+      "emissiveFactor": [
+        0,
+        0,
+        0
+      ],
+      "alphaMode": "OPAQUE",
+      "doubleSided": false
+    }
+  ],
+  "extensionsRequired": [
+    "KHR_draco_mesh_compression"
+  ],
+  "extensionsUsed": [
+    "KHR_draco_mesh_compression"
+  ]
+}

+ 13 - 0
static/ModelData/billboard/web.config

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <system.webServer>
+        <staticContent>
+            <mimeMap fileExtension=".gltf" mimeType="model/gltf-binary" />
+        </staticContent>
+        <httpProtocol>
+            <customHeaders>
+                <add name="Access-Control-Allow-Origin" value="*" />
+            </customHeaders>
+        </httpProtocol>
+    </system.webServer>
+</configuration>

+ 27 - 1
static/css/index.css

@@ -108,4 +108,30 @@ div::-webkit-scrollbar-track {
 
 .el-dialog__headerbtn .el-dialog__close {
     color: white !important;
-}
+}
+
+
+/* 中图合入代码 */
+.vl-notify.vl-notify-alert h2.vl-notice-title {
+    border-bottom: 0px solid #eee !important;
+    background-color: #fff0 !important;
+    background: url(/static/images/popup/title.png) no-repeat !important;
+    background-size: 100% 100% !important;
+  }
+  
+  .vl-notify.vl-notify-iframe {
+    background-color: #fff0 !important;
+    background: url(/static/images/popup/background.png) no-repeat !important;
+    background-size: 100% 100% !important;
+  }
+  .vl-notify.vl-notify-alert {
+    background-color: #fff0 !important;
+    background: url(/static/images/popup/background.png) no-repeat !important;
+    background-size: 100% 100% !important;
+  }
+  
+  .vl-notify.vl-notify-main {
+    border: 0px solid #eee !important;
+    background-color: #fff0 !important;
+  }
+  /*----------------------------  */

+ 1141 - 0
static/data/fg.json

@@ -0,0 +1,1141 @@
+{
+  "type": "FeatureCollection",
+  "features": [
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 93,
+        "路名": "狗岭路",
+        "Shape_Length": 3787.5327906472837,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "MultiLineString",
+        "coordinates": [
+          [
+            [109.54289256433214, 18.23693615358315, 18.0],
+            [109.54240113015224, 18.239035232030245, 18.0],
+            [109.54118152093335, 18.241448622610485, 18.0]
+          ],
+          [
+            [109.51675550242399, 18.255399636242385, 18.0],
+            [109.52043648303732, 18.25557005296072, 18.0],
+            [109.52101811926133, 18.25527370202859, 18.0],
+            [109.5215559914332, 18.254737866689106, 18.0],
+            [109.52256348212309, 18.254379958771005, 18.0],
+            [109.52409537067041, 18.25401048542142, 18.0],
+            [109.52550315744922, 18.253614247958454, 18.0],
+            [109.52687560286175, 18.253622545844388, 18.0],
+            [109.52933426776265, 18.253049995094778, 18.0],
+            [109.53062845699478, 18.252767794856145, 18.0],
+            [109.5317123962328, 18.25224519152512, 18.0],
+            [109.53284015171724, 18.251504416899946, 18.0],
+            [109.53541534275613, 18.249482348530866, 18.0],
+            [109.5373045593442, 18.24737115246764, 18.0],
+            [109.53916485283108, 18.24489394243763, 18.0],
+            [109.54116583946535, 18.241397106343184, 18.0]
+          ]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 7,
+        "路名": "新风街",
+        "Shape_Length": 2206.465161133042,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.4962738126289, 18.251930737942997, 18.0],
+          [109.50584910637065, 18.253778382165785, 18.0],
+          [109.51675550242399, 18.255399636242385, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 12,
+        "路名": "田独路",
+        "Shape_Length": 5956.087896342747,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.57906102926437, 18.31979425612014, 18.0],
+          [109.5823048348982, 18.31649787512223, 18.0],
+          [109.58571027604349, 18.313117617274476, 18.0],
+          [109.58646475898034, 18.31264523859646, 18.0],
+          [109.59111270118939, 18.31030171429293, 18.0],
+          [109.59341069073898, 18.309243233676584, 18.0],
+          [109.59509789744227, 18.307905392792475, 18.0],
+          [109.5983359758737, 18.305061369326844, 18.0],
+          [109.60090711562813, 18.302690369023894, 18.0],
+          [109.60261188904706, 18.30070731680613, 18.0],
+          [109.6036708463708, 18.29813400569896, 18.0],
+          [109.60378800406383, 18.294442509488524, 18.0],
+          [109.60375307205605, 18.28943546940563, 18.0],
+          [109.60389461193789, 18.28710906473758, 18.0],
+          [109.60560070046046, 18.281027342645957, 18.0],
+          [109.60672364325714, 18.277416647300478, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 217,
+        "路名": "龙溪路",
+        "Shape_Length": 1728.014427252332,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.62090666261284, 18.246949135127744, 18.0],
+          [109.62064295214225, 18.24491222016758, 18.0],
+          [109.6201446256339, 18.242121354919797, 18.0],
+          [109.62002097041052, 18.24131028774024, 18.0],
+          [109.61995017050448, 18.240397803967214, 18.0],
+          [109.62010745023884, 18.239796457667866, 18.0],
+          [109.62044007624891, 18.238874002794679, 18.0],
+          [109.62080450843567, 18.2380762848553, 18.0],
+          [109.62095698765478, 18.237569428374117, 18.0],
+          [109.62092365585312, 18.237306335835148, 18.0],
+          [109.62068391713018, 18.23691418664994, 18.0],
+          [109.6203682585781, 18.236604689246204, 18.0],
+          [109.61844903439207, 18.235023788617757, 18.0],
+          [109.61826283876238, 18.234818728834467, 18.0],
+          [109.61811195094809, 18.234613889540435, 18.0],
+          [109.61729455892724, 18.23292066757244, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 516,
+        "路名": "无路名",
+        "Shape_Length": 46.11008174176055,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.52298945794336, 18.343775723910846, 18.0],
+          [109.52342437207254, 18.343765838904699, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 1380,
+        "路名": "大阳湾路",
+        "Shape_Length": 932.6746437081374,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.61729455892724, 18.23292066757244, 18.0],
+          [109.61687789722399, 18.231909455721096, 18.0],
+          [109.61649765977447, 18.23117975158073, 18.0],
+          [109.61578505500033, 18.230209082883776, 18.0],
+          [109.61558676190333, 18.229906436961586, 18.0],
+          [109.61520116755327, 18.22811794140001, 18.0],
+          [109.61479273707522, 18.22699070380418, 18.0],
+          [109.61476302853382, 18.226682979853167, 18.0],
+          [109.61479228137965, 18.22626333011694, 18.0],
+          [109.61504769890972, 18.2255328790533, 18.0],
+          [109.61512064965922, 18.22523645145549, 18.0],
+          [109.61510987934793, 18.22510072338475, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 1314,
+        "路名": "亚龙湾路 S216",
+        "Shape_Length": 4021.8962452716107,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.60527450572669, 18.277598756056098, 18.0],
+          [109.60601825486219, 18.277263593735314, 18.0],
+          [109.6066336294125, 18.276866390250846, 18.0],
+          [109.6068928845473, 18.2764848334742, 18.0],
+          [109.60708784420376, 18.275930689481496, 18.0],
+          [109.60739547416832, 18.275214588153835, 18.0],
+          [109.60761674768641, 18.27379000977361, 18.0],
+          [109.60775501064242, 18.273256617431224, 18.0],
+          [109.60834488960433, 18.272632264187256, 18.0],
+          [109.60879755092972, 18.2720047523025, 18.0],
+          [109.60918460543894, 18.271256489635677, 18.0],
+          [109.60928017253224, 18.270435939878167, 18.0],
+          [109.6091206264582, 18.269585673470379, 18.0],
+          [109.60853546393739, 18.268290395314698, 18.0],
+          [109.60817754404656, 18.267387870031258, 18.0],
+          [109.60807706679255, 18.266670125530064, 18.0],
+          [109.60815527345194, 18.265795520209215, 18.0],
+          [109.60870370231057, 18.264585936232103, 18.0],
+          [109.60947544167573, 18.26342918077087, 18.0],
+          [109.61276683924732, 18.260095940899, 18.0],
+          [109.6141327546474, 18.257837690722508, 18.0],
+          [109.62023872649243, 18.249840908113787, 18.0],
+          [109.620681145097, 18.2487536136182, 18.0],
+          [109.62086423086909, 18.2481225245613, 18.0],
+          [109.62098878208656, 18.247236770051417, 18.0],
+          [109.62090666261284, 18.246949135127744, 18.0],
+          [109.62095291860546, 18.246950351060307, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": null,
+        "路名": "",
+        "Shape_Length": 46094.55334624152,
+        "OBJECTID": 1,
+        "Id": 0,
+        "名称": "海南环岛高速"
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.00002743408511, 18.416778859177275, 18.0],
+          [109.0066063058078, 18.40887748132226, 18.0],
+          [109.01324725544676, 18.400747097925274, 18.0],
+          [109.01750398274044, 18.396204152891209, 18.0],
+          [109.02126038364337, 18.39337616271022, 18.0],
+          [109.02593139648316, 18.39030623216249, 18.0],
+          [109.03257024799865, 18.387507892352244, 18.0],
+          [109.03769263800403, 18.386007774515897, 18.0],
+          [109.04160385092821, 18.385379084935378, 18.0],
+          [109.06295220657971, 18.383065020114026, 18.0],
+          [109.06778438458508, 18.382875233150725, 18.0],
+          [109.0859973087245, 18.383441658347367, 18.0],
+          [109.0904773551656, 18.383415004059015, 18.0],
+          [109.09423749723354, 18.382855373771773, 18.0],
+          [109.09705065100893, 18.381927791299338, 18.0],
+          [109.10004705933909, 18.380261291890176, 18.0],
+          [109.10310155868366, 18.377854614901, 18.0],
+          [109.10851384413819, 18.372651867786379, 18.0],
+          [109.1127126098921, 18.368553946987107, 18.0],
+          [109.11539487282666, 18.36640020691905, 18.0],
+          [109.11722093501871, 18.365313183159608, 18.0],
+          [109.11938972712476, 18.364348995787183, 18.0],
+          [109.1216800483455, 18.36371452181464, 18.0],
+          [109.12603655369006, 18.362921160678128, 18.0],
+          [109.1404817364953, 18.360583764908115, 18.0],
+          [109.14300767595749, 18.360136504376038, 18.0],
+          [109.14534460385555, 18.35922740461435, 18.0],
+          [109.14697032234079, 18.35813214916521, 18.0],
+          [109.14883075948548, 18.356143125167838, 18.0],
+          [109.15726190800044, 18.34687024234228, 18.0],
+          [109.16960161614672, 18.33344098884808, 18.0],
+          [109.17275021698386, 18.330245421938167, 18.0],
+          [109.1752866431742, 18.328155037316575, 18.0],
+          [109.17842266117758, 18.32614202487546, 18.0],
+          [109.18242317918544, 18.32399382479499, 18.0],
+          [109.18668030018906, 18.322421446266487, 18.0],
+          [109.19213478114692, 18.321182896042374, 18.0],
+          [109.19668118795028, 18.320652448591816, 18.0],
+          [109.20478500595982, 18.32087224363743, 18.0],
+          [109.21172892179867, 18.320758244074683, 18.0],
+          [109.219992454541, 18.32004698354606, 18.0],
+          [109.2241231110021, 18.319798734392277, 18.0],
+          [109.22648571534636, 18.319964080595715, 18.0],
+          [109.23131623545618, 18.32101252009529, 18.0],
+          [109.23337866842127, 18.32117500077518, 18.0],
+          [109.23529391343738, 18.321049354297736, 18.0],
+          [109.23736179939974, 18.32067419858123, 18.0],
+          [109.23939324111564, 18.320191153888854, 18.0],
+          [109.24206006699252, 18.31996484378597, 18.0],
+          [109.24404781906685, 18.320090677542397, 18.0],
+          [109.24595908160083, 18.320359159441006, 18.0],
+          [109.24970333238345, 18.321217936523543, 18.0],
+          [109.25550796000216, 18.322453926176228, 18.0],
+          [109.2575711746371, 18.32254446833421, 18.0],
+          [109.25922303963189, 18.322487861631058, 18.0],
+          [109.26095282334423, 18.322145204733788, 18.0],
+          [109.26257395881976, 18.321407266902367, 18.0],
+          [109.26431194820457, 18.320240256704694, 18.0],
+          [109.26912476662896, 18.31555264924105, 18.0],
+          [109.27109278604958, 18.313885846865995, 18.0],
+          [109.27267948217384, 18.31282490972806, 18.0],
+          [109.27445022815755, 18.312124057200508, 18.0],
+          [109.27576534856917, 18.311956724129808, 18.0],
+          [109.27719091330359, 18.312005441048524, 18.0],
+          [109.27910004379243, 18.31248862965452, 18.0],
+          [109.28904562095542, 18.31623410260712, 18.0],
+          [109.29850522478447, 18.319831378974784, 18.0],
+          [109.3028807792696, 18.321411636612397, 18.0],
+          [109.30587768674629, 18.321975930940118, 18.0],
+          [109.30775438224954, 18.321956741892998, 18.0],
+          [109.30970682858443, 18.321866518578088, 18.0],
+          [109.31384591202822, 18.320756134903165, 18.0],
+          [109.31987200784973, 18.318551114106357, 18.0],
+          [109.32280908845198, 18.317537470340974, 18.0],
+          [109.32416279520501, 18.3172626102043, 18.0],
+          [109.32570275123919, 18.317132750387278, 18.0],
+          [109.32742827098002, 18.317219571033396, 18.0],
+          [109.3293011471692, 18.317594420745846, 18.0],
+          [109.34717419251665, 18.324560533402474, 18.0],
+          [109.3488605843422, 18.324826049397854, 18.0],
+          [109.35040060671054, 18.324695994713414, 18.0],
+          [109.3517557024422, 18.324277572653629, 18.0],
+          [109.35311350606298, 18.323572406522318, 18.0],
+          [109.35424850312629, 18.322614395798039, 18.0],
+          [109.3585047138791, 18.31702344228175, 18.0],
+          [109.36006053565613, 18.31520873630389, 18.0],
+          [109.36130970558945, 18.314072432394665, 18.0],
+          [109.36296996097467, 18.313118870858493, 18.0],
+          [109.36492838727644, 18.312382916316435, 18.0],
+          [109.3669574797408, 18.31211352814608, 18.0],
+          [109.36868199580835, 18.31230749889253, 18.0],
+          [109.37044236567549, 18.31268098543891, 18.0],
+          [109.37238434537567, 18.313701214506915, 18.0],
+          [109.37991632763077, 18.31896282896502, 18.0],
+          [109.38200821643197, 18.320020085651604, 18.0],
+          [109.38410179596674, 18.320898109984264, 18.0],
+          [109.38709807214919, 18.32156867455568, 18.0],
+          [109.39002329781538, 18.32180845313066, 18.0],
+          [109.39280272437445, 18.321580970307058, 18.0],
+          [109.39562330990697, 18.32095949498032, 18.0],
+          [109.4020594332873, 18.318970321874319, 18.0],
+          [109.40687418837624, 18.31779183705883, 18.0],
+          [109.40946754651424, 18.31738332500924, 18.0],
+          [109.41273508905873, 18.317123767598546, 18.0],
+          [109.417989651361, 18.31709570871487, 18.0],
+          [109.4216660963329, 18.317269534653869, 18.0],
+          [109.42691938640424, 18.31738460237506, 18.0],
+          [109.4290216133177, 18.317330228604683, 18.0],
+          [109.43334349277605, 18.3166846890006, 18.0],
+          [109.43578572344072, 18.31638210964858, 18.0],
+          [109.43784977226444, 18.316399016277, 18.0],
+          [109.4395747839355, 18.316556513078749, 18.0],
+          [109.4410371022345, 18.316711847370195, 18.0],
+          [109.44309763348771, 18.317122974209015, 18.0],
+          [109.4445577204758, 18.31752918641699, 18.0],
+          [109.44919402124578, 18.31950260446291, 18.0],
+          [109.45614741182611, 18.32260590966596, 18.0],
+          [109.45977448568819, 18.324140763512529, 18.0],
+          [109.46130910586752, 18.324619147261989, 18.0],
+          [109.46307018456241, 18.324955959077888, 18.0],
+          [109.46494512832199, 18.32515028656284, 18.0],
+          [109.46719664642019, 18.325204237029824, 18.0],
+          [109.48679862832884, 18.324106107285144, 18.0],
+          [109.488477141159, 18.324152137755229, 18.0],
+          [109.49137396150485, 18.324536655713304, 18.0],
+          [109.49898006739717, 18.32606636689666, 18.0],
+          [109.50107935277696, 18.32636964800047, 18.0],
+          [109.50344321922009, 18.3264599010892, 18.0],
+          [109.50520904746438, 18.326258666822516, 18.0],
+          [109.50750277430766, 18.32577477184194, 18.0],
+          [109.51066707503975, 18.32443732379247, 18.0],
+          [109.51259464786217, 18.322875101914727, 18.0],
+          [109.51441204134759, 18.32102522430968, 18.0],
+          [109.51520874484946, 18.320027713291088, 18.0],
+          [109.51717253608553, 18.31860910754547, 18.0],
+          [109.51913477230782, 18.317369701897755, 18.0],
+          [109.52161996051706, 18.316421102147499, 18.0],
+          [109.52398979998999, 18.31579419861755, 18.0],
+          [109.52718284644539, 18.315460396034717, 18.0],
+          [109.5299215964469, 18.315589052711979, 18.0],
+          [109.53625959023093, 18.316175474652778, 18.0],
+          [109.54064788295232, 18.316531706028355, 18.0],
+          [109.5430104733988, 18.316764841209225, 18.0],
+          [109.54593183414205, 18.317504068309967, 18.0],
+          [109.55255384297229, 18.32006372621733, 18.0],
+          [109.55476221755389, 18.320797413371336, 18.0],
+          [109.55659856912084, 18.321133939678778, 18.0],
+          [109.55809892852679, 18.321252826069658, 18.0],
+          [109.56083960541939, 18.32116597540657, 18.0],
+          [109.56324575455972, 18.320682243839547, 18.0],
+          [109.56580437925266, 18.319912846975297, 18.0],
+          [109.56832309529448, 18.319429895136805, 18.0],
+          [109.57091391860968, 18.319305925707839, 18.0],
+          [109.58565611803926, 18.320347805166788, 18.0],
+          [109.58966880403027, 18.320771831667405, 18.0],
+          [109.59236616061081, 18.321401163684905, 18.0],
+          [109.59794253792671, 18.323413857828027, 18.0],
+          [109.60138543989466, 18.32469380664326, 18.0],
+          [109.60460693521394, 18.325506052865046, 18.0],
+          [109.60730644278027, 18.325884260135316, 18.0],
+          [109.60982345269376, 18.32561583508654, 18.0],
+          [109.61211754680228, 18.325058969486269, 18.0],
+          [109.61464053609413, 18.32403771150639, 18.0],
+          [109.61787861001266, 18.32277066333863, 18.0],
+          [109.61968301794603, 18.32242524401663, 18.0],
+          [109.62167309673915, 18.32233208607497, 18.0],
+          [109.62384715207128, 18.322706261213065, 18.0],
+          [109.62601697327021, 18.323618106188748, 18.0],
+          [109.6278095083712, 18.324778152303894, 18.0],
+          [109.63106136263106, 18.326522234271108, 18.0],
+          [109.63450489277004, 18.327765759562199, 18.0],
+          [109.64274391745751, 18.330190558989107, 18.0],
+          [109.64532906062053, 18.330818362546294, 18.0],
+          [109.64739319524783, 18.330868860473819, 18.0],
+          [109.64995001498518, 18.330313399942218, 18.0],
+          [109.66189900794814, 18.323837294981695, 18.0],
+          [109.66461380110023, 18.3222431230689, 18.0],
+          [109.66709675997118, 18.321507660626133, 18.0],
+          [109.66908820790113, 18.321234771916193, 18.0],
+          [109.67092760331772, 18.32121174377632, 18.0],
+          [109.67332671688816, 18.321622776548833, 18.0],
+          [109.67628366288675, 18.322718780232088, 18.0],
+          [109.6783373888266, 18.324131124151444, 18.0],
+          [109.68258721052733, 18.32799635428325, 18.0],
+          [109.69410526805521, 18.338758571193805, 18.0],
+          [109.69696823160229, 18.34243476289586, 18.0],
+          [109.69941811807881, 18.346143947389927, 18.0],
+          [109.70226631743381, 18.351827517205796, 18.0],
+          [109.7051104172377, 18.35808460914365, 18.0],
+          [109.70795657745618, 18.364090736332096, 18.0],
+          [109.70972986327029, 18.367974463250599, 18.0],
+          [109.71139963833886, 18.37063860593336, 18.0],
+          [109.71355861231285, 18.373162647076197, 18.0],
+          [109.72146584949488, 18.38031406383524, 18.0],
+          [109.72814411385103, 18.386166397248539, 18.0],
+          [109.73075777848266, 18.388191412922838, 18.0],
+          [109.73486613839423, 18.391230123123525, 18.0],
+          [109.7395368486628, 18.394415877720346, 18.0],
+          [109.74764685619168, 18.399775175455308, 18.0],
+          [109.75183709953767, 18.40195369865591, 18.0],
+          [109.76175758135968, 18.406320523256704, 18.0],
+          [109.76860834740637, 18.409376400882655, 18.0],
+          [109.77246569766746, 18.41090704190521, 18.0],
+          [109.7749381733752, 18.411783390709905, 18.0],
+          [109.77857410613238, 18.412774740151389, 18.0],
+          [109.78382544173981, 18.413704669919694, 18.0],
+          [109.79208199672527, 18.41454603844462, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 1401,
+        "路名": "G225(海榆西线)",
+        "Shape_Length": 3186.1683928170725,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.51530966542025, 18.22832819644623, 18.0],
+          [109.51509912458853, 18.229108635022457, 18.0],
+          [109.51550438820596, 18.23248915909657, 18.0],
+          [109.51523560986138, 18.23339232666177, 18.0],
+          [109.51520440853172, 18.233406563803656, 18.0],
+          [109.51523560986138, 18.23339232666177, 18.0],
+          [109.5151837072155, 18.233432247874974, 18.0],
+          [109.51523560986138, 18.23339232666177, 18.0],
+          [109.51632039768735, 18.235333607170376, 18.0],
+          [109.51656148139407, 18.236537492255743, 18.0],
+          [109.51524744779536, 18.241467696428189, 18.0],
+          [109.51536427449456, 18.242712423144416, 18.0],
+          [109.51684473635454, 18.248103429199003, 18.0],
+          [109.51705648115834, 18.24957488952703, 18.0],
+          [109.51675899349664, 18.25527351290781, 18.0],
+          [109.51663602892907, 18.259715404564735, 18.0],
+          [109.51643521201784, 18.263883629263569, 18.0],
+          [109.51610969115456, 18.267244836636196, 18.0],
+          [109.51489598601543, 18.270072845793263, 18.0],
+          [109.51282805967968, 18.27294047487088, 18.0],
+          [109.50878832903064, 18.277095085915258, 18.0],
+          [109.50613889483901, 18.279755739245446, 18.0],
+          [109.50227869690719, 18.28356829888809, 18.0],
+          [109.49945282718363, 18.28731768215777, 18.0],
+          [109.49853810457212, 18.288358598627306, 18.0],
+          [109.4973446804275, 18.28901451811359, 18.0],
+          [109.49639689178933, 18.289178126728836, 18.0],
+          [109.48446509192267, 18.28934057574623, 18.0],
+          [109.47685857369727, 18.289490358493585, 18.0],
+          [109.4753351304929, 18.289764973395749, 18.0],
+          [109.47421176227937, 18.29006189074873, 18.0],
+          [109.47318694585904, 18.290531652086906, 18.0],
+          [109.46647992533633, 18.295353008808069, 18.0],
+          [109.46509044683757, 18.296316861889605, 18.0],
+          [109.46356288490147, 18.297050176924885, 18.0],
+          [109.46205785684794, 18.297496889824865, 18.0],
+          [109.458792682123, 18.297814680130505, 18.0],
+          [109.45546898685903, 18.297959878189006, 18.0],
+          [109.45406863544184, 18.298297491591737, 18.0],
+          [109.45042857962638, 18.30025624115245, 18.0],
+          [109.44910327595035, 18.300742542421447, 18.0],
+          [109.44743842101198, 18.301149600696669, 18.0],
+          [109.4376846569991, 18.3022674236619, 18.0],
+          [109.43709762115312, 18.302167028509709, 18.0],
+          [109.43019257149483, 18.300772115915398, 18.0],
+          [109.42740647698376, 18.300390723443575, 18.0],
+          [109.42590636062558, 18.300282769536286, 18.0],
+          [109.42384273075202, 18.300241842859408, 18.0],
+          [109.41188286850945, 18.300374509471987, 18.0],
+          [109.4067643716442, 18.300353360824074, 18.0],
+          [109.39649378368216, 18.299072510452996, 18.0],
+          [109.38489624395393, 18.29792327579607, 18.0],
+          [109.37901444130378, 18.297181695525344, 18.0],
+          [109.37105070295813, 18.296815374987206, 18.0],
+          [109.36985098302245, 18.296697599207677, 18.0],
+          [109.35507480885676, 18.29310586058839, 18.0],
+          [109.35404680415606, 18.293037233717905, 18.0],
+          [109.35323908111, 18.293142712355654, 18.0],
+          [109.35250857251703, 18.293322699895588, 18.0],
+          [109.35091393860238, 18.293966087305287, 18.0],
+          [109.34561228971401, 18.29640544942754, 18.0],
+          [109.34223006729899, 18.298240025906883, 18.0],
+          [109.34158686108762, 18.29855224755481, 18.0],
+          [109.3411645332205, 18.298828011003346, 18.0],
+          [109.34082878521028, 18.299132710910987, 18.0],
+          [109.34051038545657, 18.299488496267874, 18.0],
+          [109.34020765127487, 18.29995043571752, 18.0],
+          [109.34007301477766, 18.300235154746706, 18.0],
+          [109.33998524269737, 18.300612533949214, 18.0],
+          [109.33969831979225, 18.301303887159887, 18.0],
+          [109.33966202681288, 18.301540452172956, 18.0],
+          [109.3397126402524, 18.302166313481398, 18.0],
+          [109.33967957942761, 18.302282323664845, 18.0],
+          [109.3395960683615, 18.302343696841278, 18.0],
+          [109.3392545447705, 18.302421169451173, 18.0],
+          [109.33879718734772, 18.302574005320648, 18.0],
+          [109.33845571785423, 18.302723953362074, 18.0],
+          [109.33682515810649, 18.303685276420567, 18.0],
+          [109.33610521487437, 18.304019838162146, 18.0],
+          [109.33190730233119, 18.305590628290266, 18.0],
+          [109.3297576079306, 18.306595504386825, 18.0],
+          [109.32847516132365, 18.307283560548965, 18.0],
+          [109.32424253433762, 18.308414640566494, 18.0],
+          [109.32270521271133, 18.30880699465297, 18.0],
+          [109.3219465367217, 18.309035108955834, 18.0],
+          [109.32122125854858, 18.309300516058383, 18.0],
+          [109.31877842155575, 18.309993523462045, 18.0],
+          [109.31376188006056, 18.311047698933007, 18.0],
+          [109.31341654919418, 18.311065923056739, 18.0],
+          [109.31304913587971, 18.31105688213902, 18.0],
+          [109.30926934627125, 18.31052589559, 18.0],
+          [109.30850059603145, 18.31049878503807, 18.0],
+          [109.30331565002061, 18.310461069870195, 18.0],
+          [109.30040084435997, 18.31053269145012, 18.0],
+          [109.29764984930574, 18.310444877516298, 18.0],
+          [109.29476328699879, 18.310396529036266, 18.0],
+          [109.2945173692344, 18.310415539815716, 18.0],
+          [109.28653754677848, 18.311940230916595, 18.0],
+          [109.28622948161123, 18.31196121330772, 18.0],
+          [109.28581868949715, 18.3119415102863, 18.0],
+          [109.2854643902498, 18.311900318471566, 18.0],
+          [109.28520633502335, 18.311844345437416, 18.0],
+          [109.28056442232368, 18.310329632271157, 18.0],
+          [109.28006873857716, 18.310201134274469, 18.0],
+          [109.2795034146406, 18.310109647544466, 18.0],
+          [109.27900146014967, 18.310097206591914, 18.0],
+          [109.27220968419799, 18.310347112084075, 18.0],
+          [109.27206803631666, 18.310324524755378, 18.0],
+          [109.27157926368683, 18.310171743373166, 18.0],
+          [109.27113408939921, 18.310159499143358, 18.0],
+          [109.26891346102069, 18.310364193280305, 18.0],
+          [109.26864245777404, 18.310417534594938, 18.0],
+          [109.26830267282148, 18.310522088787797, 18.0],
+          [109.26802700252243, 18.31063681709127, 18.0],
+          [109.26760464458809, 18.310895699426717, 18.0],
+          [109.26718390394454, 18.311242240504578, 18.0],
+          [109.26694231458927, 18.31150632373903, 18.0],
+          [109.26363256810468, 18.316353531078037, 18.0],
+          [109.2633603433865, 18.31667096241778, 18.0],
+          [109.26310934821567, 18.316905487038406, 18.0],
+          [109.26291466046398, 18.317053184624585, 18.0],
+          [109.2626820020179, 18.317199986762647, 18.0],
+          [109.26240892147296, 18.317329071395169, 18.0],
+          [109.26200863574282, 18.317454990150105, 18.0],
+          [109.26170278068907, 18.317504590926708, 18.0],
+          [109.26143531334317, 18.317519388565566, 18.0],
+          [109.26121944594753, 18.317509903955057, 18.0],
+          [109.25512758661431, 18.31641240632216, 18.0],
+          [109.25035680113007, 18.31590728311878, 18.0],
+          [109.24784841323712, 18.3159090599032, 18.0],
+          [109.2441676882169, 18.316067461122655, 18.0],
+          [109.2397094849842, 18.316475243060638, 18.0],
+          [109.23471384186866, 18.319062530388697, 18.0],
+          [109.23368573594742, 18.31941938849898, 18.0],
+          [109.2324037302114, 18.31942717516791, 18.0],
+          [109.22953059966159, 18.319357410710948, 18.0],
+          [109.21947212348194, 18.318506879298999, 18.0],
+          [109.21503157499274, 18.317981989452535, 18.0],
+          [109.21428256941167, 18.31799176767234, 18.0],
+          [109.21296787002466, 18.318151795770406, 18.0],
+          [109.20923682192879, 18.318508463284546, 18.0],
+          [109.20689569024222, 18.31869267280278, 18.0],
+          [109.20348809860117, 18.319130544578955, 18.0],
+          [109.1994908129705, 18.31990936275104, 18.0],
+          [109.18612844143815, 18.319676334837398, 18.0],
+          [109.18547989736374, 18.319737401779176, 18.0],
+          [109.18475154614107, 18.31992393169003, 18.0],
+          [109.18393786691422, 18.320259460914174, 18.0],
+          [109.18336790128136, 18.32056325312726, 18.0],
+          [109.18265808236409, 18.32112212712741, 18.0],
+          [109.177792782134, 18.3257683524664, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 1299,
+        "路名": "S314",
+        "Shape_Length": 10998.454023878392,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.32847516132365, 18.307283560548965, 18.0],
+          [109.32850786373227, 18.308653605431006, 18.0],
+          [109.32778102317201, 18.30932237795589, 18.0],
+          [109.32785250796543, 18.30982000813971, 18.0],
+          [109.33067072166738, 18.31446176771032, 18.0],
+          [109.33192341847733, 18.316094405635199, 18.0],
+          [109.33198300800113, 18.316210496329874, 18.0],
+          [109.33202304242234, 18.316392664691834, 18.0],
+          [109.33202527628697, 18.316588210601297, 18.0],
+          [109.3319102885815, 18.31707336490589, 18.0],
+          [109.33008200348719, 18.321400746557033, 18.0],
+          [109.32962874480953, 18.32191840157774, 18.0],
+          [109.32936741640232, 18.322105298412187, 18.0],
+          [109.32923748799712, 18.32217959175321, 18.0],
+          [109.32911196004337, 18.322206312199687, 18.0],
+          [109.32871925610429, 18.322194567950644, 18.0],
+          [109.32773469037089, 18.322048821542106, 18.0],
+          [109.32685126020572, 18.321762511097146, 18.0],
+          [109.32651411529074, 18.32176853884737, 18.0],
+          [109.32482898052038, 18.322614205703699, 18.0],
+          [109.32457207401504, 18.322807607858846, 18.0],
+          [109.32448282451621, 18.32293319903909, 18.0],
+          [109.32442908455337, 18.32307491969066, 18.0],
+          [109.32437549275503, 18.323285304323276, 18.0],
+          [109.32437295986979, 18.323601838872134, 18.0],
+          [109.32439496076411, 18.323711923570739, 18.0],
+          [109.3246810756213, 18.324526292161044, 18.0],
+          [109.3246891622203, 18.32494376030908, 18.0],
+          [109.32472665153978, 18.325057921553367, 18.0],
+          [109.32477141925047, 18.32513352211745, 18.0],
+          [109.32485040776996, 18.325212942061304, 18.0],
+          [109.32539567522325, 18.325473676096036, 18.0],
+          [109.32545404466481, 18.32554025148331, 18.0],
+          [109.32629756006812, 18.326892439650256, 18.0],
+          [109.32634225059964, 18.32801402693184, 18.0],
+          [109.32664960496281, 18.32919222767453, 18.0],
+          [109.32655308001793, 18.330459347725819, 18.0],
+          [109.32720671535744, 18.331679329605099, 18.0],
+          [109.32728412049886, 18.332078331184346, 18.0],
+          [109.32743089629051, 18.333464667838159, 18.0],
+          [109.32746787997314, 18.333945360463465, 18.0],
+          [109.32748907403598, 18.334896509552068, 18.0],
+          [109.32758064684578, 18.33585776507827, 18.0],
+          [109.32746832554155, 18.337138565069738, 18.0],
+          [109.32749062689315, 18.337422811594906, 18.0],
+          [109.32754577131475, 18.337672406872554, 18.0],
+          [109.3286508468224, 18.341089966234159, 18.0],
+          [109.32864435442315, 18.341370240487224, 18.0],
+          [109.32848851182423, 18.342568294647248, 18.0],
+          [109.32830953009437, 18.343096012160268, 18.0],
+          [109.32825953517849, 18.343339384816955, 18.0],
+          [109.32798723011554, 18.3462505006384, 18.0],
+          [109.32795902737584, 18.346383383265537, 18.0],
+          [109.32780227261968, 18.346641773923339, 18.0],
+          [109.3279183021595, 18.348191921577429, 18.0],
+          [109.32798726441618, 18.348609744358457, 18.0],
+          [109.3280116993613, 18.34897688846735, 18.0],
+          [109.32799043168844, 18.349155581192919, 18.0],
+          [109.32771030333334, 18.350054624885673, 18.0],
+          [109.32773023052838, 18.35070476037335, 18.0],
+          [109.3278699741469, 18.35107771803075, 18.0],
+          [109.32814068106491, 18.35168633606988, 18.0],
+          [109.3279448203298, 18.352700692849124, 18.0],
+          [109.32758911648327, 18.353293654884927, 18.0],
+          [109.32745474427633, 18.35342561149889, 18.0],
+          [109.32734656969109, 18.353493042061669, 18.0],
+          [109.3270758728191, 18.353587947252124, 18.0],
+          [109.32681343100107, 18.35365444677476, 18.0],
+          [109.32658630668088, 18.353688914364889, 18.0],
+          [109.32650320213945, 18.353715479330338, 18.0],
+          [109.3264339101597, 18.3537852960836, 18.0],
+          [109.32637958217379, 18.35391126706071, 18.0],
+          [109.32635068981782, 18.35414943517849, 18.0],
+          [109.32638072003027, 18.354369026333516, 18.0],
+          [109.32636876419136, 18.354534659634223, 18.0],
+          [109.3262701558496, 18.354858368819504, 18.0],
+          [109.32619510059129, 18.354975247547175, 18.0],
+          [109.32590135427327, 18.355202611055739, 18.0],
+          [109.32521374103932, 18.356151092483864, 18.0],
+          [109.32513391847842, 18.356406236316724, 18.0],
+          [109.32507207671105, 18.356535684478478, 18.0],
+          [109.32440941288663, 18.357478477284315, 18.0],
+          [109.32436396499345, 18.357571435178405, 18.0],
+          [109.32435252771542, 18.358365446531829, 18.0],
+          [109.32432577651355, 18.358443998062996, 18.0],
+          [109.32416345194136, 18.358673576850657, 18.0],
+          [109.3240577036166, 18.358743449355889, 18.0],
+          [109.3239539054125, 18.358778085886795, 18.0],
+          [109.32384581022757, 18.358786869365536, 18.0],
+          [109.32360713539035, 18.35874952755018, 18.0],
+          [109.3235110945292, 18.35875574665341, 18.0],
+          [109.32341690424747, 18.358796504892085, 18.0],
+          [109.32336455026732, 18.35885703695957, 18.0],
+          [109.32332586962113, 18.358958119840293, 18.0],
+          [109.32334711153387, 18.359456924437756, 18.0],
+          [109.32329578155684, 18.359694969541584, 18.0],
+          [109.32326615990138, 18.36014154237596, 18.0],
+          [109.32321893656227, 18.36032059551151, 18.0],
+          [109.32310948202961, 18.360990192336723, 18.0],
+          [109.32320524427398, 18.362512961472956, 18.0],
+          [109.3231693574796, 18.362630780341406, 18.0],
+          [109.32285043322676, 18.363243638648976, 18.0],
+          [109.32284071813155, 18.36338225699152, 18.0],
+          [109.32297154782668, 18.36358573461249, 18.0],
+          [109.32302323358572, 18.363724325446435, 18.0],
+          [109.32303549623295, 18.36395773364008, 18.0],
+          [109.32305570232966, 18.364033734610226, 18.0],
+          [109.3232783936567, 18.36430962214639, 18.0],
+          [109.32332988460408, 18.364344503822147, 18.0],
+          [109.32340496488266, 18.364365663012689, 18.0],
+          [109.32364369037598, 18.36437368438172, 18.0],
+          [109.324199001699, 18.364024886988604, 18.0],
+          [109.32426840798724, 18.364006569418458, 18.0],
+          [109.32453223935345, 18.364000187948489, 18.0],
+          [109.3272604449924, 18.364746273458289, 18.0],
+          [109.32740305381141, 18.364735476738074, 18.0],
+          [109.32775191321439, 18.364575982480564, 18.0],
+          [109.3280983525987, 18.36459880586426, 18.0],
+          [109.32827529479859, 18.364658725197314, 18.0],
+          [109.32845161004684, 18.364844067176148, 18.0],
+          [109.32848475476219, 18.364936189641463, 18.0],
+          [109.3288242277361, 18.366847507380365, 18.0],
+          [109.32878744224675, 18.36710050145827, 18.0],
+          [109.32861295668049, 18.367409936187469, 18.0],
+          [109.32825925931474, 18.36795180682941, 18.0],
+          [109.32816526217025, 18.3681658667856, 18.0],
+          [109.32813603810698, 18.368439310054954, 18.0],
+          [109.32822626182079, 18.36868437701636, 18.0],
+          [109.32873172998809, 18.369237258010725, 18.0],
+          [109.33056294398122, 18.37058872993786, 18.0],
+          [109.33211113594824, 18.37147240572081, 18.0],
+          [109.33225185335042, 18.371593715030323, 18.0],
+          [109.33238677791914, 18.371834416973216, 18.0],
+          [109.33243055731134, 18.37204433369392, 18.0],
+          [109.33241294221223, 18.372364314986684, 18.0],
+          [109.33237097165255, 18.372476286853354, 18.0],
+          [109.3323103467857, 18.37255776104043, 18.0],
+          [109.33099770450784, 18.373355354010024, 18.0],
+          [109.32973733446205, 18.374907356464388, 18.0],
+          [109.32940379455659, 18.37542363902349, 18.0],
+          [109.3289566505436, 18.375708259517194, 18.0],
+          [109.32789836016709, 18.375877713333425, 18.0],
+          [109.32724600576249, 18.375809213633123, 18.0],
+          [109.32608983381759, 18.375904728761335, 18.0],
+          [109.32577800483895, 18.375892886819448, 18.0],
+          [109.32550845037211, 18.375962540020578, 18.0],
+          [109.3253107601692, 18.376033961056629, 18.0],
+          [109.32520274683226, 18.376113312113188, 18.0],
+          [109.32510542300048, 18.37624060669896, 18.0],
+          [109.32499430893434, 18.376508694593946, 18.0],
+          [109.32481286302117, 18.37679221643953, 18.0],
+          [109.32476821356781, 18.37689219866061, 18.0],
+          [109.32471199648684, 18.377135124718003, 18.0],
+          [109.32471698069816, 18.377534250302788, 18.0],
+          [109.32481158786374, 18.37830256254678, 18.0],
+          [109.32482647882388, 18.380049516535246, 18.0],
+          [109.32476742896378, 18.38023300120346, 18.0],
+          [109.32384187094687, 18.38200979991786, 18.0],
+          [109.32373370053729, 18.382094501153277, 18.0],
+          [109.32319843830453, 18.38229311718433, 18.0],
+          [109.32295133125148, 18.382326364998986, 18.0],
+          [109.32283419837292, 18.382401078406884, 18.0],
+          [109.32267126757592, 18.382405646385317, 18.0],
+          [109.3225512252424, 18.382449415587709, 18.0],
+          [109.32169029896024, 18.383015876589618, 18.0],
+          [109.32162826263849, 18.383122263235344, 18.0],
+          [109.3216009983458, 18.383293430090445, 18.0],
+          [109.32159937017085, 18.383381360125843, 18.0],
+          [109.32165188774715, 18.383600075003089, 18.0],
+          [109.32172804100579, 18.3841936610332, 18.0],
+          [109.32172143734765, 18.384410204299255, 18.0],
+          [109.3216959478618, 18.38460482565828, 18.0],
+          [109.321626163582, 18.384835277091228, 18.0],
+          [109.32150928224725, 18.385118901993267, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 5,
+        "路名": "三亚湾路(西段)",
+        "Shape_Length": 13300.984486763995,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.3652169750273, 18.31214560113728, 18.0],
+          [109.36512708783558, 18.311800338129367, 18.0],
+          [109.3650868961776, 18.31136068108144, 18.0],
+          [109.36508406095533, 18.310942913042447, 18.0],
+          [109.3651795435801, 18.310365289677038, 18.0],
+          [109.36545023995339, 18.30956532591907, 18.0],
+          [109.36807607581214, 18.30591458524952, 18.0],
+          [109.37376272562277, 18.29693501843908, 18.0],
+          [109.37027554566905, 18.2907682885808, 18.0],
+          [109.37024296532432, 18.290516520048386, 18.0],
+          [109.37027822194036, 18.290317108607917, 18.0],
+          [109.37039474200923, 18.29015900842588, 18.0],
+          [109.3706681127901, 18.29001544494319, 18.0],
+          [109.37256370539292, 18.289453778379519, 18.0],
+          [109.38075701538929, 18.2896668053785, 18.0],
+          [109.38893966424962, 18.290135965733766, 18.0],
+          [109.39618997856432, 18.29043747759778, 18.0],
+          [109.40455381127723, 18.290622244563559, 18.0],
+          [109.40755618623949, 18.290580394018006, 18.0],
+          [109.41036333343307, 18.290667370081736, 18.0],
+          [109.4131199000662, 18.290578914924418, 18.0],
+          [109.41588153357348, 18.290601843980768, 18.0],
+          [109.41770382806115, 18.290483128365556, 18.0],
+          [109.42368911017762, 18.29034145197349, 18.0],
+          [109.4267878317833, 18.290102317175849, 18.0],
+          [109.42987226969551, 18.28989778467791, 18.0],
+          [109.43151125461235, 18.28931565142995, 18.0],
+          [109.432131086651, 18.28919864846207, 18.0],
+          [109.43536184415275, 18.288830147767638, 18.0],
+          [109.44272635306079, 18.28748238374139, 18.0],
+          [109.44958445760146, 18.285764653695109, 18.0],
+          [109.45182576732386, 18.285123672335584, 18.0],
+          [109.45274908450942, 18.28477313090134, 18.0],
+          [109.453488652112, 18.28433093602795, 18.0],
+          [109.45468744657549, 18.283527637807724, 18.0],
+          [109.45492029365886, 18.28340443069916, 18.0],
+          [109.45514778093488, 18.283343088474106, 18.0],
+          [109.45534524565386, 18.283332295042347, 18.0],
+          [109.45664593453827, 18.283369243009685, 18.0],
+          [109.45702864574864, 18.283337585767446, 18.0],
+          [109.45736150408489, 18.28326829940024, 18.0],
+          [109.45881209944403, 18.282773508655404, 18.0],
+          [109.46522247089271, 18.279883333739556, 18.0],
+          [109.46790187894061, 18.27865422904693, 18.0],
+          [109.4764287030023, 18.27351809758439, 18.0],
+          [109.47745115161001, 18.27281782202567, 18.0],
+          [109.48307894742901, 18.268159943537144, 18.0],
+          [109.48734822584606, 18.26400968570658, 18.0],
+          [109.49032738333144, 18.26124707598362, 18.0],
+          [109.49307204126795, 18.257701783949636, 18.0],
+          [109.49435020648086, 18.256014096126035, 18.0],
+          [109.4962738126289, 18.251930737942997, 18.0],
+          [109.49725851160848, 18.247976014437019, 18.0],
+          [109.49725384931097, 18.24779408758008, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 1354,
+        "路名": "榆亚路(西段)",
+        "Shape_Length": 4382.811338626727,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.51530966542025, 18.22832819644623, 18.0],
+          [109.5160618253488, 18.227735460440419, 18.0],
+          [109.52109263550001, 18.225461042343424, 18.0],
+          [109.52156279299483, 18.225317714586656, 18.0],
+          [109.5217530572767, 18.225293554761718, 18.0],
+          [109.52523453347777, 18.22529205876657, 18.0],
+          [109.53250718184937, 18.231824349278666, 18.0],
+          [109.53332862979636, 18.23228471011347, 18.0],
+          [109.53532385249328, 18.2329452357953, 18.0],
+          [109.53587022525402, 18.23340348256092, 18.0],
+          [109.5368563365226, 18.234480010116255, 18.0],
+          [109.5380023860267, 18.23550794219151, 18.0],
+          [109.54231921821853, 18.236822355226669, 18.0],
+          [109.543043272012, 18.236971256693559, 18.0],
+          [109.54574783594002, 18.23720300640317, 18.0],
+          [109.54628817000247, 18.23729905682865, 18.0],
+          [109.54668920231164, 18.2374753230141, 18.0],
+          [109.54724839910333, 18.23781027250824, 18.0],
+          [109.54867963177417, 18.23921857836825, 18.0],
+          [109.55016660832205, 18.240538402264588, 18.0],
+          [109.55130990055607, 18.241407401889256, 18.0],
+          [109.55539681727497, 18.243206776755497, 18.0],
+          [109.55845900736965, 18.244926658198016, 18.0],
+          [109.55952872095549, 18.245627768634575, 18.0],
+          [109.56012226534105, 18.246444783635746, 18.0],
+          [109.56048855653448, 18.24752297108194, 18.0],
+          [109.56373998692881, 18.25876076363653, 18.0],
+          [109.56457901034074, 18.26065817405642, 18.0],
+          [109.5680679200608, 18.268777826471135, 18.0],
+          [109.56991023453986, 18.272902160209456, 18.0],
+          [109.57134048690847, 18.275880994187398, 18.0],
+          [109.57185393896627, 18.27645092473448, 18.0],
+          [109.57236688775243, 18.27676429094524, 18.0],
+          [109.57515789030666, 18.277876387858453, 18.0],
+          [109.57657985875224, 18.2785007619744, 18.0],
+          [109.58116658127423, 18.282210910880474, 18.0],
+          [109.59160089908987, 18.291226218337099, 18.0],
+          [109.59450262671818, 18.29437832243764, 18.0],
+          [109.60237440991276, 18.304224121689907, 18.0],
+          [109.60555267659844, 18.307385705769677, 18.0],
+          [109.60889049277103, 18.31001793823448, 18.0],
+          [109.61251657650989, 18.312362249253718, 18.0],
+          [109.61861681152917, 18.316404174299483, 18.0],
+          [109.62006015686694, 18.317512339366304, 18.0],
+          [109.6202942311876, 18.31803283918291, 18.0],
+          [109.62090868848544, 18.319213136913445, 18.0],
+          [109.62162391811074, 18.32085363359383, 18.0],
+          [109.62236082860977, 18.323304449394766, 18.0],
+          [109.62445520297735, 18.328310731800685, 18.0],
+          [109.62611850809999, 18.337387333470557, 18.0],
+          [109.62653290920727, 18.338780051187479, 18.0],
+          [109.63151461551085, 18.351188279265068, 18.0],
+          [109.63482514371727, 18.363033462120698, 18.0],
+          [109.63344347887154, 18.371277084661086, 18.0],
+          [109.6328595763798, 18.372146049669217, 18.0],
+          [109.63081472945926, 18.37399496654176, 18.0],
+          [109.62940550017277, 18.376883951263463, 18.0],
+          [109.62986235844005, 18.378575762405175, 18.0],
+          [109.6309421220474, 18.38032960176659, 18.0],
+          [109.63034235327783, 18.384298452367326, 18.0],
+          [109.62868509750159, 18.3888501670339, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 1351,
+        "路名": "迎宾路西段",
+        "Shape_Length": 822.3562497352059,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.49032726000765, 18.261251842297204, 18.0],
+          [109.49610289440074, 18.26619592767248, 18.0],
+          [109.50014177460659, 18.26962767244554, 18.0],
+          [109.51585041454452, 18.283071171172574, 18.0],
+          [109.52422783009293, 18.290047212094288, 18.0],
+          [109.52717805221998, 18.29180947421332, 18.0],
+          [109.52988383618525, 18.292886369498598, 18.0],
+          [109.53140025388683, 18.29337617660053, 18.0],
+          [109.53273388361989, 18.293693578276764, 18.0],
+          [109.53473657532432, 18.293961066053556, 18.0],
+          [109.5379070308694, 18.29395779392328, 18.0],
+          [109.54001689824526, 18.293697163735268, 18.0],
+          [109.54147216779406, 18.293409279687617, 18.0],
+          [109.54279274388044, 18.293060219451527, 18.0],
+          [109.54462779137627, 18.292392750527755, 18.0],
+          [109.54643534409463, 18.29160513314893, 18.0],
+          [109.54859510040936, 18.29051571715515, 18.0],
+          [109.55130008215876, 18.28905942509875, 18.0],
+          [109.55250165455388, 18.28847342348509, 18.0],
+          [109.55575616634735, 18.28716653814352, 18.0],
+          [109.55822378798759, 18.286370981041359, 18.0],
+          [109.56661194278695, 18.284218559847657, 18.0],
+          [109.576027148674, 18.28184642812457, 18.0],
+          [109.57786922357565, 18.281755593738955, 18.0],
+          [109.58185253206914, 18.282805200642718, 18.0],
+          [109.58395894431223, 18.283436602886458, 18.0],
+          [109.5850231043213, 18.283644381656499, 18.0],
+          [109.59277915879582, 18.28366824913216, 18.0],
+          [109.59376059218697, 18.283634164588177, 18.0],
+          [109.5945117616915, 18.28347249988066, 18.0],
+          [109.59502693499856, 18.283238768013363, 18.0],
+          [109.6003041252804, 18.279835887158684, 18.0],
+          [109.60527450572669, 18.277598756056098, 18.0],
+          [109.60575369566647, 18.277491750347257, 18.0],
+          [109.60611702799902, 18.277437517134105, 18.0],
+          [109.60672364325714, 18.277416647300478, 18.0],
+          [109.6135540797114, 18.27818315837935, 18.0],
+          [109.61429081697288, 18.27825288557853, 18.0],
+          [109.61494799687036, 18.278275326385729, 18.0],
+          [109.61545186347479, 18.278267982516025, 18.0],
+          [109.61655135212254, 18.278148367387258, 18.0],
+          [109.61757581094206, 18.277911955579574, 18.0],
+          [109.61902630737349, 18.27741106863409, 18.0],
+          [109.62223408249534, 18.276220539942608, 18.0],
+          [109.62296531418764, 18.27593026859088, 18.0],
+          [109.62394695714238, 18.27548476136401, 18.0],
+          [109.62548355612225, 18.274685304411788, 18.0],
+          [109.62671098173797, 18.27414405900103, 18.0],
+          [109.62744205077598, 18.273859725982385, 18.0],
+          [109.62845216885995, 18.273522159933746, 18.0],
+          [109.63009278402932, 18.27305295524049, 18.0],
+          [109.63077564632623, 18.272824142893009, 18.0],
+          [109.63391671529122, 18.271675342104353, 18.0],
+          [109.63596564418525, 18.27089942627659, 18.0],
+          [109.63720986457438, 18.270350138951735, 18.0],
+          [109.63775327259191, 18.270082338082813, 18.0],
+          [109.63822962218764, 18.269875605233435, 18.0],
+          [109.63878044348765, 18.269685478209089, 18.0],
+          [109.63922997882584, 18.26955265701383, 18.0],
+          [109.63980038858478, 18.26942135257314, 18.0],
+          [109.64044312470823, 18.269298903504106, 18.0],
+          [109.64139171580205, 18.26904928586972, 18.0],
+          [109.64197416573879, 18.268841983895, 18.0],
+          [109.64239021367976, 18.26867559822661, 18.0],
+          [109.64690913427889, 18.2663264478889, 18.0],
+          [109.64768374596363, 18.265895750438856, 18.0],
+          [109.6485676497392, 18.265486620164656, 18.0],
+          [109.64912151127877, 18.265298911720877, 18.0],
+          [109.64987935210638, 18.265139698260666, 18.0],
+          [109.65022007652626, 18.265090223716187, 18.0],
+          [109.65062340621492, 18.265132800390047, 18.0],
+          [109.65471398699137, 18.265973066820839, 18.0],
+          [109.65536828618804, 18.26617212698015, 18.0],
+          [109.65629504285922, 18.266387050400643, 18.0],
+          [109.65704197744974, 18.266505076132547, 18.0],
+          [109.65882712277242, 18.266660212304694, 18.0],
+          [109.65952754241887, 18.26679379255779, 18.0],
+          [109.66013528743714, 18.266948318444518, 18.0],
+          [109.66067430543414, 18.2671561331941, 18.0],
+          [109.66112202349842, 18.26738950449476, 18.0],
+          [109.66175165289214, 18.267848360378247, 18.0],
+          [109.66214376731769, 18.268221685084236, 18.0],
+          [109.6630041167814, 18.269280102327714, 18.0],
+          [109.66375988231671, 18.27040864202151, 18.0],
+          [109.6644372477153, 18.271678495514359, 18.0],
+          [109.66532089411879, 18.273783224962405, 18.0],
+          [109.66785996568524, 18.278573723901716, 18.0],
+          [109.66832426525463, 18.27932836159859, 18.0],
+          [109.66893399786217, 18.28010776582588, 18.0],
+          [109.66963436093481, 18.280857028436818, 18.0],
+          [109.67250077276785, 18.283541060613414, 18.0],
+          [109.67293110478619, 18.28388566762017, 18.0],
+          [109.67357385452442, 18.284302346305247, 18.0],
+          [109.67416812400103, 18.28459545792153, 18.0],
+          [109.67465997145162, 18.284770575192526, 18.0],
+          [109.67597509662343, 18.285095527559297, 18.0],
+          [109.67681739737823, 18.285359075459458, 18.0],
+          [109.67734230210846, 18.28558561688295, 18.0],
+          [109.6785984404635, 18.286275902422564, 18.0],
+          [109.68381986146359, 18.290029527491705, 18.0],
+          [109.68408171553856, 18.290242945663129, 18.0],
+          [109.68452247729629, 18.29069223052122, 18.0],
+          [109.68741069485226, 18.294640304817127, 18.0],
+          [109.68802817032712, 18.29536469531613, 18.0],
+          [109.69334086974574, 18.30011096478783, 18.0],
+          [109.69422787481446, 18.30096521152137, 18.0],
+          [109.69568758709431, 18.303526273772034, 18.0],
+          [109.69729775904183, 18.308534757258795, 18.0],
+          [109.69887946800044, 18.315045588801355, 18.0],
+          [109.70000819958067, 18.317617063886414, 18.0],
+          [109.70189353397295, 18.3242016529675, 18.0],
+          [109.70276770457459, 18.327391703229734, 18.0],
+          [109.70284048503035, 18.32819785850922, 18.0],
+          [109.70258226516859, 18.335554268870774, 18.0],
+          [109.70349313203066, 18.341518402518486, 18.0],
+          [109.70503858108676, 18.348530318544545, 18.0],
+          [109.7055410643403, 18.354285377787418, 18.0],
+          [109.70698226849528, 18.359464135365174, 18.0],
+          [109.71213779185448, 18.369755032185773, 18.0],
+          [109.7138490684109, 18.372068964448024, 18.0],
+          [109.71572047037553, 18.373950276947406, 18.0],
+          [109.71789288117349, 18.376005078298726, 18.0],
+          [109.72092718234024, 18.377796893390899, 18.0],
+          [109.72443049810711, 18.380523967424297, 18.0],
+          [109.73193103561398, 18.38785123130662, 18.0],
+          [109.73214497095174, 18.388252918047493, 18.0],
+          [109.73231735221168, 18.389344937127416, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID_1": 1391,
+        "路名": "水蛟路 X827",
+        "Shape_Length": 601.8924811403977,
+        "OBJECTID": null,
+        "Id": null,
+        "名称": ""
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.43825090290537, 18.330881603807336, 18.0],
+          [109.43792456394674, 18.330277905912845, 18.0],
+          [109.43824222550967, 18.328640337469559, 18.0],
+          [109.43834860791708, 18.326729468406936, 18.0],
+          [109.43898603625806, 18.325510854670644, 18.0],
+          [109.43974495672592, 18.3239434592717, 18.0],
+          [109.44001029139547, 18.322870906651429, 18.0],
+          [109.440176506094, 18.321056838158208, 18.0],
+          [109.44062627248444, 18.318188529980515, 18.0],
+          [109.44124193175921, 18.31565558853064, 18.0],
+          [109.44322271620109, 18.307901440381206, 18.0],
+          [109.44316182074692, 18.30699405960316, 18.0],
+          [109.44276661252744, 18.30624116748639, 18.0],
+          [109.44222043336063, 18.305760175093967, 18.0],
+          [109.44138921288074, 18.305473244323925, 18.0],
+          [109.43718420486693, 18.304984334088599, 18.0],
+          [109.43757256551038, 18.303678056760334, 18.0],
+          [109.4376641420881, 18.303238786507234, 18.0],
+          [109.43771522570518, 18.30280276769245, 18.0],
+          [109.43834684386134, 18.29894069558834, 18.0],
+          [109.43822542102032, 18.297860074457856, 18.0],
+          [109.43760473459249, 18.296400318460628, 18.0],
+          [109.43674209222826, 18.294839397400517, 18.0],
+          [109.4361048398291, 18.292895293347564, 18.0],
+          [109.43541780454842, 18.28881990746226, 18.0]
+        ]
+      }
+    }
+  ]
+}

+ 2292 - 0
static/data/ld.json

@@ -0,0 +1,2292 @@
+{
+  "type": "FeatureCollection",
+  "features": [
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID": 144,
+        "SJXZQMC": "三亚市",
+        "XJXZQMC": "吉阳区/天涯区",
+        "XZMC": "吉阳区/天涯区",
+        "GHCGMC": "三亚抱坡片区控制性详细规划",
+        "BZSJ": "20220501",
+        "BZDW": "中规院(北京)规划设计有限公司",
+        "PZWH": "三府函[2023]476号",
+        "PFSJ": "20230620",
+        "SJWT": "",
+        "DLMK": "",
+        "DLJB": "支路",
+        "DLKD": 21.0,
+        "DLPD": 1.4900000095367432,
+        "DMLX": "G-G",
+        "SSQK": "规划",
+        "XZQDM": "460203/460204",
+        "BZ": "",
+        "SHAPE_Length": 360.6103682158047
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.49370993382679, 18.322682894209224, 18.0],
+          [109.49348019238785, 18.32266726631463, 18.0],
+          [109.49333833403144, 18.322652310402864, 18.0],
+          [109.49319747100835, 18.322630395018057, 18.0],
+          [109.4930579779161, 18.322601575587865, 18.0],
+          [109.49292022575885, 18.32256592800547, 18.0],
+          [109.49278457835432, 18.322523550335569, 18.0],
+          [109.49265139772357, 18.32247455343361, 18.0],
+          [109.49252103690448, 18.32241906862105, 18.0],
+          [109.49239384534171, 18.32235724256862, 18.0],
+          [109.49227015631023, 18.32228923729656, 18.0],
+          [109.4921503003901, 18.32221523784949, 18.0],
+          [109.49203459558484, 18.3221354377995, 18.0],
+          [109.49192335001669, 18.322050047773958, 18.0],
+          [109.49181686102797, 18.32195929971947, 18.0],
+          [109.49171540799475, 18.321863430699254, 18.0],
+          [109.49161926041157, 18.32176269653764, 18.0],
+          [109.49152867789158, 18.321657364145279, 18.0],
+          [109.49144389669168, 18.321547713224683, 18.0],
+          [109.49136514408568, 18.321434037976027, 18.0],
+          [109.49129262938098, 18.321316636863825, 18.0],
+          [109.49122654481711, 18.321195823703179, 18.0],
+          [109.49116706466723, 18.321071919132057, 18.0],
+          [109.49116515035735, 18.321067317533154, 18.0],
+          [109.49111434883139, 18.32094525061147, 18.0],
+          [109.49106853654856, 18.320816157542116, 18.0],
+          [109.49102974998951, 18.320684981883944, 18.0],
+          [109.49099809246059, 18.320552069861795, 18.0],
+          [109.49097364481013, 18.320417777934958, 18.0],
+          [109.49095647710672, 18.32028246085809, 18.0],
+          [109.49094663157124, 18.320146479356507, 18.0],
+          [109.49094413425473, 18.320010194156699, 18.0],
+          [109.4909532314936, 18.318960938132766, 18.0],
+          [109.49095327012118, 18.318956422609504, 18.0],
+          [109.4909555581302, 18.317419699203655, 18.0],
+          [109.4909524427728, 18.317313472993658, 18.0],
+          [109.49094279127337, 18.317207602335537, 18.0],
+          [109.4909283400754, 18.3171135224138, 18.0],
+          [109.49092664046289, 18.317102459050319, 18.0],
+          [109.4909040424436, 18.316998403020855, 18.0],
+          [109.4908750789622, 18.316895797541993, 18.0],
+          [109.49083984613844, 18.316794995675786, 18.0],
+          [109.49079846973646, 18.31669634622109, 18.0],
+          [109.49075109079175, 18.31660019371343, 18.0],
+          [109.49069787279771, 18.3165068664858, 18.0],
+          [109.4906390008072, 18.31641669116614, 18.0],
+          [109.49026226085181, 18.31587573889269, 18.0],
+          [109.49023001941795, 18.315829443501828, 18.0],
+          [109.48986316632052, 18.31530268608922, 18.0],
+          [109.48980429522837, 18.31521250928942, 18.0],
+          [109.48975107903095, 18.315119183019175, 18.0],
+          [109.48970370098454, 18.31502302707692, 18.0],
+          [109.48966232458256, 18.31492437831791, 18.0],
+          [109.48962709355543, 18.31482357700922, 18.0],
+          [109.48959812917572, 18.31472096938828, 18.0],
+          [109.4895755338514, 18.314616915338325, 18.0],
+          [109.48955938214258, 18.31451176962658, 18.0],
+          [109.48954973333812, 18.314405899813143, 18.0],
+          [109.48954661887902, 18.314299670900675, 18.0],
+          [109.48954766721296, 18.313600042173584, 18.0],
+          [109.48955212645002, 18.310616837268179, 18.0],
+          [109.48954750192293, 18.31061683129835, 18.0],
+          [109.48953788815276, 18.310484323462565, 18.0],
+          [109.4895214849157, 18.310352424447733, 18.0],
+          [109.4894983344325, 18.310221453214849, 18.0],
+          [109.48946849150046, 18.310091721050254, 18.0],
+          [109.48943202888306, 18.3099635435055, 18.0],
+          [109.48938903551356, 18.309837225898958, 18.0],
+          [109.48933960930832, 18.309713071844177, 18.0],
+          [109.48928387513313, 18.30959138069127, 18.0],
+          [109.48922196324374, 18.309472444968518, 18.0],
+          [109.4892195611487, 18.30946834708777, 18.0],
+          [109.4891540218622, 18.309356549529207, 18.0],
+          [109.48908021717677, 18.30924397496314, 18.0],
+          [109.4890007270539, 18.309134989068025, 18.0],
+          [109.48891573924152, 18.30902985537794, 18.0],
+          [109.48882545765713, 18.308928825487514, 18.0],
+          [109.48873010328636, 18.30883214331613, 18.0],
+          [109.48872945560102, 18.30883151818445, 18.0],
+          [109.48872816202705, 18.308830270479644, 18.0],
+          [109.48872686755472, 18.308829022774828, 18.0],
+          [109.48872557128574, 18.308827776775673, 18.0],
+          [109.48872427501679, 18.308826533335009, 18.0],
+          [109.48872297695121, 18.308825287335826, 18.0],
+          [109.48872167978395, 18.308824043042315, 18.0],
+          [109.48872038171834, 18.308822801307334, 18.0],
+          [109.48871908185613, 18.30882155871949, 18.0],
+          [109.48871778019728, 18.3088203178373, 18.0],
+          [109.48871647764013, 18.308819077807937, 18.0],
+          [109.48871517598129, 18.308817836925774, 18.0],
+          [109.48871387432243, 18.308816598602069, 18.0],
+          [109.48871257086694, 18.30881535942557, 18.0],
+          [109.48871126471653, 18.30881412110184, 18.0],
+          [109.48870995946442, 18.308812884483815, 18.0],
+          [109.48870865421233, 18.30881164871864, 18.0],
+          [109.48870734626526, 18.308810413806275, 18.0],
+          [109.48870603921651, 18.308809178893897, 18.0],
+          [109.48870473126948, 18.308807945687197, 18.0],
+          [109.48870342242411, 18.308806712480484, 18.0],
+          [109.4887021126804, 18.30880547927376, 18.0],
+          [109.4887008011401, 18.30880424691985, 18.0],
+          [109.48869948959977, 18.308803015418815, 18.0],
+          [109.48869817895778, 18.30880178647625, 18.0],
+          [109.48869555228389, 18.308799326885464, 18.0],
+          [109.48869423894694, 18.308798098795717, 18.0],
+          [109.48869292381339, 18.308796870706009, 18.0],
+          [109.4886916086798, 18.30879564432191, 18.0],
+          [109.48869029174959, 18.308794418790677, 18.0],
+          [109.48868897481938, 18.308793192406577, 18.0],
+          [109.48868765788918, 18.30879196772818, 18.0],
+          [109.48868633826405, 18.30879074390258, 18.0],
+          [109.48868501953719, 18.308789519224179, 18.0],
+          [109.48868370081036, 18.3087882962514, 18.0],
+          [109.48868238028689, 18.30878707413147, 18.0],
+          [109.48868105886509, 18.308785852864369, 18.0],
+          [109.48867973834162, 18.308784630744428, 18.0],
+          [109.48867841512323, 18.30878341203581, 18.0],
+          [109.4886770928031, 18.3087821907687, 18.0],
+          [109.48867576958472, 18.308780972060107, 18.0],
+          [109.48867444546799, 18.30877975335147, 18.0],
+          [109.48867179633622, 18.308777318492714, 18.0],
+          [109.48867046952454, 18.308776101489764, 18.0],
+          [109.48866781590118, 18.30877367089517, 18.0],
+          [109.48866648729288, 18.30877245474503, 18.0],
+          [109.48866515958291, 18.308771241153367, 18.0],
+          [109.48866383097459, 18.308770027561726, 18.0],
+          [109.48866250056966, 18.308768816528578, 18.0],
+          [109.48866117016472, 18.308767602084079, 18.0],
+          [109.48865983975979, 18.308766391050918, 18.0],
+          [109.48865850755819, 18.3087651808706, 18.0],
+          [109.48865717715326, 18.308763968984608, 18.0],
+          [109.48865584225678, 18.308762758804279, 18.0],
+          [109.48865451005521, 18.3087615486239, 18.0],
+          [109.48865317605699, 18.308760340149229, 18.0],
+          [109.4886518420588, 18.30875913252741, 18.0],
+          [109.4886505080606, 18.30875792405272, 18.0],
+          [109.48864783736927, 18.308755509661816, 18.0],
+          [109.48864650157445, 18.30875430289278, 18.0],
+          [109.48864516308469, 18.308753098682279, 18.0],
+          [109.48864248880006, 18.308750689408336, 18.0],
+          [109.48863981092221, 18.308748280134397, 18.0],
+          [109.48863847153409, 18.308747076776674, 18.0],
+          [109.4886371312477, 18.308745874271787, 18.0],
+          [109.48863444977659, 18.308743470114817, 18.0],
+          [109.48863310949018, 18.308742269315589, 18.0],
+          [109.48863176740716, 18.308741070222025, 18.0],
+          [109.48862908234277, 18.308738669476356, 18.0],
+          [109.48862639458342, 18.308736271289143, 18.0],
+          [109.48862505070376, 18.308735073048397, 18.0],
+          [109.48862370502748, 18.308733875660459, 18.0],
+          [109.48862236114782, 18.30873267827252, 18.0],
+          [109.48862101547151, 18.308731480884576, 18.0],
+          [109.48861966979522, 18.308730285202285, 18.0],
+          [109.48861697484935, 18.3087278938377, 18.0],
+          [109.48861562917307, 18.3087266981554, 18.0],
+          [109.48861428170017, 18.30872550247309, 18.0],
+          [109.48861293243059, 18.30872430849645, 18.0],
+          [109.48861158495767, 18.308723114519795, 18.0],
+          [109.48861023568809, 18.30872192310166, 18.0],
+          [109.48860888552022, 18.308720729124997, 18.0],
+          [109.48860618698112, 18.30871834458303, 18.0],
+          [109.48860483591494, 18.30871715231202, 18.0],
+          [109.48860213468088, 18.308714770328508, 18.0],
+          [109.48860078091976, 18.30871357976317, 18.0],
+          [109.48859942985355, 18.308712389197795, 18.0],
+          [109.48859807878738, 18.30871119948528, 18.0],
+          [109.48859672502623, 18.30871001062557, 18.0],
+          [109.48859537216342, 18.3087088200602, 18.0],
+          [109.48859401840227, 18.308707632053335, 18.0],
+          [109.48859266553946, 18.308706443193619, 18.0],
+          [109.48859130998167, 18.308705255186717, 18.0],
+          [109.48858995711889, 18.30870406803267, 18.0],
+          [109.4885886015611, 18.308702879172928, 18.0],
+          [109.48858589134389, 18.308700505717636, 18.0],
+          [109.48858453578613, 18.308699321122068, 18.0],
+          [109.4885818237723, 18.308696949372373, 18.0],
+          [109.48857910996184, 18.308694577622679, 18.0],
+          [109.48857775260741, 18.308693393027068, 18.0],
+          [109.48857639525304, 18.308692210137165, 18.0],
+          [109.48857367964591, 18.308689841798718, 18.0],
+          [109.4885723204949, 18.308688657203118, 18.0],
+          [109.48857096134387, 18.308687473460297, 18.0],
+          [109.48856960219286, 18.308686290570344, 18.0],
+          [109.48856824304186, 18.308685109386038, 18.0],
+          [109.4885668838908, 18.308683926496035, 18.0],
+          [109.48856552294314, 18.30868274275321, 18.0],
+          [109.48856416379214, 18.308681561568876, 18.0],
+          [109.4885628037428, 18.308680380384567, 18.0],
+          [109.48856144459174, 18.308679199200218, 18.0],
+          [109.4885600836441, 18.308678017163037, 18.0],
+          [109.48855872269644, 18.308676835978678, 18.0],
+          [109.48855463805684, 18.3086732958369, 18.0],
+          [109.4885532771092, 18.308672114652535, 18.0],
+          [109.4885505516206, 18.308669755695076, 18.0],
+          [109.48854919067297, 18.308668575363524, 18.0],
+          [109.48854782703039, 18.3086673984433, 18.0],
+          [109.48854646428609, 18.308666218111705, 18.0],
+          [109.48854510154179, 18.308665038632979, 18.0],
+          [109.48854373879752, 18.308663860859875, 18.0],
+          [109.4885423742566, 18.308662683086813, 18.0],
+          [109.4885410115123, 18.30866150360802, 18.0],
+          [109.48853964697138, 18.308660325834933, 18.0],
+          [109.4885382833288, 18.308659148061805, 18.0],
+          [109.48853691878786, 18.308657970288694, 18.0],
+          [109.48853555604359, 18.30865679251554, 18.0],
+          [109.48853419150267, 18.30865561644811, 18.0],
+          [109.48853282696175, 18.30865443867494, 18.0],
+          [109.48853146242083, 18.308653261754669, 18.0],
+          [109.48853009698159, 18.308652085687155, 18.0],
+          [109.48852873244067, 18.308650907914008, 18.0],
+          [109.48852600335886, 18.308648555779017, 18.0],
+          [109.48852463612298, 18.308647378005789, 18.0],
+          [109.48852190704116, 18.308645025870776, 18.0],
+          [109.48852053980531, 18.30864384980322, 18.0],
+          [109.48851917526439, 18.30864267373569, 18.0],
+          [109.48851780892685, 18.308641498520975, 18.0],
+          [109.48851644438591, 18.308640324159108, 18.0],
+          [109.48851507715007, 18.30863914809152, 18.0],
+          [109.48851371081251, 18.308637972023968, 18.0],
+          [109.48851234627158, 18.308636795956386, 18.0],
+          [109.48851097903574, 18.308635621594449, 18.0],
+          [109.4885096126982, 18.308634445526857, 18.0],
+          [109.48850824636064, 18.308633270312098, 18.0],
+          [109.48850687912479, 18.30863209595018, 18.0],
+          [109.48850551458387, 18.308630919882533, 18.0],
+          [109.4885041482463, 18.3086297455206, 18.0],
+          [109.48850278101046, 18.308628569452968, 18.0],
+          [109.4885014146729, 18.30862739509101, 18.0],
+          [109.48850004833536, 18.30862622158188, 18.0],
+          [109.48849868109947, 18.308625045514189, 18.0],
+          [109.4884959484244, 18.308622696790228, 18.0],
+          [109.48849458118854, 18.308621520722516, 18.0],
+          [109.48849321485098, 18.30862034721337, 18.0],
+          [109.48849184671683, 18.308619172851328, 18.0],
+          [109.48849047948093, 18.30861799678363, 18.0],
+          [109.48848911314339, 18.308616822421599, 18.0],
+          [109.48848774590755, 18.308615648059534, 18.0],
+          [109.48848637956999, 18.308614472844665, 18.0],
+          [109.48848501323244, 18.30861329848258, 18.0],
+          [109.48848364599658, 18.308612124120527, 18.0],
+          [109.48848227965904, 18.30861094805278, 18.0],
+          [109.48848091332148, 18.308609773690667, 18.0],
+          [109.48847954608564, 18.30860860018144, 18.0],
+          [109.48847817974809, 18.308607424113647, 18.0],
+          [109.48847681341053, 18.308606249751553, 18.0],
+          [109.48847544617465, 18.308605075389445, 18.0],
+          [109.48847407983713, 18.308603899321616, 18.0],
+          [109.48846997992617, 18.308600375382367, 18.0],
+          [109.48846861358862, 18.308599199314498, 18.0],
+          [109.48846724814938, 18.308598023246675, 18.0],
+          [109.48846588181182, 18.308596848884514, 18.0],
+          [109.4884645154743, 18.308595672816627, 18.0],
+          [109.48846315003505, 18.308594496748765, 18.0],
+          [109.48846178369749, 18.308593323239408, 18.0],
+          [109.48846041735998, 18.30859214717153, 18.0],
+          [109.48845905281905, 18.308590971103614, 18.0],
+          [109.48845768558317, 18.30858979503574, 18.0],
+          [109.48845632104228, 18.308588618967833, 18.0],
+          [109.48845495470472, 18.308587442899893, 18.0],
+          [109.48845358926548, 18.308586266831978, 18.0],
+          [109.48845222472458, 18.308585089058359, 18.0],
+          [109.48845086018366, 18.308583913843269, 18.0],
+          [109.48844949564273, 18.3085827377753, 18.0],
+          [109.4884481311018, 18.308581560001686, 18.0],
+          [109.48844676566259, 18.308580383933707, 18.0],
+          [109.48844403658078, 18.308578028386387, 18.0],
+          [109.48844267203985, 18.30857685231839, 18.0],
+          [109.48844130660062, 18.308575674544728, 18.0],
+          [109.48843994385632, 18.308574496771035, 18.0],
+          [109.4884385793154, 18.308573318997348, 18.0],
+          [109.48843312654162, 18.3085686061968, 18.0],
+          [109.48843176379735, 18.308567426717369, 18.0],
+          [109.48843040015473, 18.30856624723796, 18.0],
+          [109.48842903741047, 18.30856506946419, 18.0],
+          [109.48842767466617, 18.308563889984734, 18.0],
+          [109.4884263137185, 18.308562710505308, 18.0],
+          [109.48842495097424, 18.308561531025825, 18.0],
+          [109.48842359002656, 18.30856034898784, 18.0],
+          [109.4884222272823, 18.308559169508379, 18.0],
+          [109.48842086633464, 18.30855798832321, 18.0],
+          [109.48841950538696, 18.3085568088437, 18.0],
+          [109.48841678349166, 18.308554446473328, 18.0],
+          [109.48841542254402, 18.30855326443531, 18.0],
+          [109.48841406339298, 18.308552083250086, 18.0],
+          [109.48841270244535, 18.308550902064895, 18.0],
+          [109.48841134419264, 18.308549719173983, 18.0],
+          [109.48840998504159, 18.30854853628306, 18.0],
+          [109.48840862409392, 18.308547354244987, 18.0],
+          [109.48840726673955, 18.30854617135405, 18.0],
+          [109.48840590758855, 18.30854498846312, 18.0],
+          [109.48840454843749, 18.308543803013657, 18.0],
+          [109.48840318928649, 18.308542620122688, 18.0],
+          [109.4884018328304, 18.30854143552604, 18.0],
+          [109.48840047547599, 18.308540251782238, 18.0],
+          [109.4883991181216, 18.308539067185575, 18.0],
+          [109.48839640431115, 18.308536697139404, 18.0],
+          [109.48839369229731, 18.30853432368183, 18.0],
+          [109.48839233673952, 18.308533139085115, 18.0],
+          [109.4883896265223, 18.30853076562747, 18.0],
+          [109.48838827096455, 18.30852957676656, 18.0],
+          [109.48838691630509, 18.308528390464145, 18.0],
+          [109.48838285592002, 18.30852482473411, 18.0],
+          [109.48838014929606, 18.308522446159306, 18.0],
+          [109.48837879822986, 18.30852125559262, 18.0],
+          [109.48837744446874, 18.30852006502596, 18.0],
+          [109.48837609340257, 18.308518875312119, 18.0],
+          [109.48837474233636, 18.308517684745419, 18.0],
+          [109.48837339037186, 18.308516492473016, 18.0],
+          [109.4883720411023, 18.308515300200626, 18.0],
+          [109.48837069183276, 18.308514108781059, 18.0],
+          [109.48836934076656, 18.30851291650866, 18.0],
+          [109.48836799239531, 18.308511722530566, 18.0],
+          [109.48836664312577, 18.308510530258127, 18.0],
+          [109.48836529385619, 18.30850933628, 18.0],
+          [109.48836394638328, 18.308508142301866, 18.0],
+          [109.48835990576115, 18.308504556956085, 18.0],
+          [109.48835721261192, 18.308502163882698, 18.0],
+          [109.48835452125934, 18.308499769103606, 18.0],
+          [109.48835183349999, 18.308497374324486, 18.0],
+          [109.48835048962033, 18.3084961752292, 18.0],
+          [109.48834914574067, 18.30849497528109, 18.0],
+          [109.48834780186101, 18.308493776185839, 18.0],
+          [109.48834646067628, 18.30849257538483, 18.0],
+          [109.48834511859326, 18.30849137628955, 18.0],
+          [109.48834377651022, 18.308490174635748, 18.0],
+          [109.48834243712212, 18.308488972129056, 18.0],
+          [109.48834109503908, 18.308487771328055, 18.0],
+          [109.48833975475267, 18.308486567968506, 18.0],
+          [109.48833573928336, 18.308482957889873, 18.0],
+          [109.48833440079358, 18.30848175111895, 18.0],
+          [109.48833306320214, 18.3084805469065, 18.0],
+          [109.48833172650899, 18.308479341841236, 18.0],
+          [109.48833039071417, 18.30847813592312, 18.0],
+          [109.48832905491932, 18.308476929152165, 18.0],
+          [109.48832772002283, 18.308475720675508, 18.0],
+          [109.48832638422798, 18.30847451305167, 18.0],
+          [109.48832505022979, 18.308473304574997, 18.0],
+          [109.48832238403004, 18.308470885915935, 18.0],
+          [109.48831971872858, 18.308468466403999, 18.0],
+          [109.48831705791872, 18.308466042627804, 18.0],
+          [109.48831572751378, 18.308464829034017, 18.0],
+          [109.48831439710885, 18.308463617145916, 18.0],
+          [109.48831306939884, 18.30846240355211, 18.0],
+          [109.48831174079057, 18.308461189958295, 18.0],
+          [109.48831041218226, 18.308459974658775, 18.0],
+          [109.4883077585589, 18.30845754405974, 18.0],
+          [109.48830378261545, 18.308453892191243, 18.0],
+          [109.48830245849872, 18.308452672627486, 18.0],
+          [109.48830113348368, 18.308451453916537, 18.0],
+          [109.48829848974178, 18.308449013936124, 18.0],
+          [109.48829716742168, 18.3084477918138, 18.0],
+          [109.48829584689823, 18.308446570544314, 18.0],
+          [109.48829320674962, 18.308444125446788, 18.0],
+          [109.48829188802279, 18.308442901618745, 18.0],
+          [109.48829057109256, 18.30844167693783, 18.0],
+          [109.48828925146739, 18.308440453109804, 18.0],
+          [109.48828793453721, 18.308439226723214, 18.0],
+          [109.48828530427005, 18.30843677395, 18.0],
+          [109.48828398913646, 18.30843554671053, 18.0],
+          [109.48828267400292, 18.308434318618205, 18.0],
+          [109.48828136066597, 18.308433088820196, 18.0],
+          [109.48828004822734, 18.308431859022205, 18.0],
+          [109.488278736687, 18.30843062922417, 18.0],
+          [109.4882774251467, 18.30842939772045, 18.0],
+          [109.488276115403, 18.30842816621672, 18.0],
+          [109.488274804761, 18.308426933007309, 18.0],
+          [109.4882721879686, 18.308424465735617, 18.0],
+          [109.48827088002153, 18.308423230820507, 18.0],
+          [109.48826957476945, 18.308421995905364, 18.0],
+          [109.48826826682238, 18.308420760990218, 18.0],
+          [109.48826696157025, 18.308419523516528, 18.0],
+          [109.48826305030552, 18.308415807684076, 18.0],
+          [109.48826174864667, 18.308414567651807, 18.0],
+          [109.48826044698784, 18.30841332676674, 18.0],
+          [109.48825914712559, 18.308412085881643, 18.0],
+          [109.4882578472634, 18.308410844143667, 18.0],
+          [109.4882552493356, 18.308408357256373, 18.0],
+          [109.48825395306665, 18.308407113812725, 18.0],
+          [109.48825265500105, 18.30840586781054, 18.0],
+          [109.48825136142705, 18.308404621808334, 18.0],
+          [109.48825006515807, 18.308403374100405, 18.0],
+          [109.48824877068577, 18.308402126392516, 18.0],
+          [109.48824812389874, 18.308401502112149, 18.0],
+          [109.48815032341546, 18.308302209948164, 18.0],
+          [109.4880578741963, 18.308198343930095, 18.0],
+          [109.48797101159993, 18.308090169283984, 18.0],
+          [109.48788995571353, 18.30797795805904, 18.0],
+          [109.48781491314964, 18.307861995950416, 18.0],
+          [109.48774606985951, 18.30774257206514, 18.0],
+          [109.48768360460791, 18.30761999512622, 18.0],
+          [109.48762767190506, 18.3074945712989, 18.0],
+          [109.48757841458309, 18.30736661954186, 18.0],
+          [109.4875359575078, 18.307236462225878, 18.0],
+          [109.4875004093754, 18.30710443110404, 18.0],
+          [109.4874718582207, 18.30697085963614, 18.0],
+          [109.48745037680732, 18.306836083841337, 18.0],
+          [109.48743601993245, 18.30670044741556, 18.0],
+          [109.48742882352872, 18.3065642940558, 18.0],
+          [109.48742875615507, 18.306561659598715, 18.0],
+          [109.48742871034099, 18.30655990272542, 18.0],
+          [109.4874286690185, 18.306558148410685, 18.0],
+          [109.48742862589936, 18.30655639239021, 18.0],
+          [109.48742854684761, 18.306552880349185, 18.0],
+          [109.48742847138914, 18.306549370013806, 18.0],
+          [109.48742839952389, 18.3065458571198, 18.0],
+          [109.4874283653879, 18.30654410109918, 18.0],
+          [109.48742833304859, 18.306542345078574, 18.0],
+          [109.48742830160755, 18.306540589057947, 18.0],
+          [109.48742827106482, 18.30653883303727, 18.0],
+          [109.4874282414204, 18.30653707701661, 18.0],
+          [109.48742821267433, 18.30653532099589, 18.0],
+          [109.48742816057204, 18.306531808954476, 18.0],
+          [109.48742813541922, 18.30653005293371, 18.0],
+          [109.48742811116469, 18.306528296912967, 18.0],
+          [109.48742806624894, 18.30652478487138, 18.0],
+          [109.48742802492645, 18.306521272829725, 18.0],
+          [109.48742800606179, 18.30651951680888, 18.0],
+          [109.48742795485784, 18.30651424874622, 18.0],
+          [109.48742794228142, 18.306512492725277, 18.0],
+          [109.48742792701005, 18.306510736704359, 18.0],
+          [109.48742791353534, 18.3065089806834, 18.0],
+          [109.48742790275554, 18.306507224662409, 18.0],
+          [109.48742789107745, 18.306505468641409, 18.0],
+          [109.48742787311113, 18.306501954893663, 18.0],
+          [109.48742786502629, 18.306500198872635, 18.0],
+          [109.48742785783978, 18.306498442851557, 18.0],
+          [109.48742784706002, 18.30649493166222, 18.0],
+          [109.48742783987348, 18.306491417914264, 18.0],
+          [109.4874278344836, 18.306486149850739, 18.0],
+          [109.4874278344836, 18.30648439468238, 18.0],
+          [109.48742783807684, 18.306480880934197, 18.0],
+          [109.4874278407718, 18.306479124912948, 18.0],
+          [109.48742784436506, 18.306477368891654, 18.0],
+          [109.48742784975494, 18.306475613723238, 18.0],
+          [109.48742785604316, 18.306473855996207, 18.0],
+          [109.48742786143304, 18.306472099974877, 18.0],
+          [109.48742786951788, 18.306470343953504, 18.0],
+          [109.48742787670442, 18.306468587932164, 18.0],
+          [109.48742789646735, 18.30646507503652, 18.0],
+          [109.4874279054505, 18.306463319015078, 18.0],
+          [109.48742792880668, 18.306459807825037, 18.0],
+          [109.48742795575616, 18.306456294076356, 18.0],
+          [109.48742798629886, 18.30645278288617, 18.0],
+          [109.48742800067191, 18.306451026864605, 18.0],
+          [109.48742801863823, 18.306449269137347, 18.0],
+          [109.4874280357062, 18.306447513968615, 18.0],
+          [109.48742809230009, 18.3064422450509, 18.0],
+          [109.48742811385965, 18.306440489029258, 18.0],
+          [109.48742813452088, 18.30643873386044, 18.0],
+          [109.48742815697878, 18.306436977838759, 18.0],
+          [109.48742818033498, 18.306435221817038, 18.0],
+          [109.48742820279287, 18.306433464942456, 18.0],
+          [109.48742822704736, 18.306431708920728, 18.0],
+          [109.4874282522002, 18.306429953751818, 18.0],
+          [109.4874282764547, 18.306428197730044, 18.0],
+          [109.48742833035363, 18.306424684833556, 18.0],
+          [109.48742835640477, 18.306422928811739, 18.0],
+          [109.48742841389695, 18.306419417620888, 18.0],
+          [109.48742844174473, 18.306417662451837, 18.0],
+          [109.48742850283017, 18.306414148702314, 18.0],
+          [109.48742863218755, 18.306407124614464, 18.0],
+          [109.48742873459551, 18.30640185825405, 18.0],
+          [109.48742884239333, 18.306396589334989, 18.0],
+          [109.48742888012258, 18.306394834165716, 18.0],
+          [109.48742891875011, 18.306393078143594, 18.0],
+          [109.48742899420862, 18.3063895669521, 18.0],
+          [109.48742903463281, 18.30638781178276, 18.0],
+          [109.48742911368456, 18.30638429888548, 18.0],
+          [109.48742915410873, 18.306382542863259, 18.0],
+          [109.48742923675376, 18.306379032524406, 18.0],
+          [109.48742928077118, 18.306377276502137, 18.0],
+          [109.48742932209369, 18.306375521332677, 18.0],
+          [109.4874294101286, 18.306372010140849, 18.0],
+          [109.48742945324773, 18.306370254971325, 18.0],
+          [109.4874294990618, 18.30636849724322, 18.0],
+          [109.48742954397757, 18.306366742073665, 18.0],
+          [109.48742963560574, 18.306363230881656, 18.0],
+          [109.48742968052149, 18.306361475712067, 18.0],
+          [109.48742982335364, 18.306356208497449, 18.0],
+          [109.48742987006601, 18.30635445332778, 18.0],
+          [109.48743011710272, 18.306345674067715, 18.0],
+          [109.48743042432655, 18.306335141343057, 18.0],
+          [109.48743068932957, 18.30632636464062, 18.0],
+          [109.48743074412679, 18.30632460861777, 18.0],
+          [109.48743079712738, 18.306322853447776, 18.0],
+          [109.48743085192463, 18.306321098277743, 18.0],
+          [109.48743090762015, 18.30631934225488, 18.0],
+          [109.4874309624174, 18.30631758708482, 18.0],
+          [109.48743512610875, 18.306194578446566, 18.0],
+          [109.48743619959552, 18.30616285828513, 18.0],
+          [109.48752224652164, 18.303652490950193, 18.0],
+          [109.48755672386224, 18.302646566510498, 18.0],
+          [109.48760550417879, 18.30122330164751, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID": 146,
+        "SJXZQMC": "三亚市",
+        "XJXZQMC": "吉阳区/天涯区",
+        "XZMC": "吉阳区/天涯区",
+        "GHCGMC": "三亚抱坡片区控制性详细规划",
+        "BZSJ": "20220501",
+        "BZDW": "中规院(北京)规划设计有限公司",
+        "PZWH": "三府函[2023]476号",
+        "PFSJ": "20230620",
+        "SJWT": "",
+        "DLMK": "海润路",
+        "DLJB": "主干路",
+        "DLKD": 43.0,
+        "DLPD": 1.059999942779541,
+        "DMLX": "A-A",
+        "SSQK": "规划",
+        "XZQDM": "460203/460204",
+        "BZ": "",
+        "SHAPE_Length": 390.51395566903536
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.49366020309268, 18.32438328359727, 18.0],
+          [109.49368165486166, 18.324313363814409, 18.0],
+          [109.49370833123234, 18.324202895923464, 18.0],
+          [109.49372821094957, 18.324091130906849, 18.0],
+          [109.49374122753804, 18.323978449095315, 18.0],
+          [109.49374733877694, 18.323865231673417, 18.0],
+          [109.49374738908257, 18.32386297354944, 18.0],
+          [109.4937474384899, 18.323860716278145, 18.0],
+          [109.493747484304, 18.32385845815411, 18.0],
+          [109.49374752652483, 18.323856200882756, 18.0],
+          [109.493747566949, 18.323853942758665, 18.0],
+          [109.49374760557657, 18.32385168719281, 18.0],
+          [109.49374764061087, 18.323849429068628, 18.0],
+          [109.49374767295022, 18.323847171797185, 18.0],
+          [109.49374770439126, 18.323844913672944, 18.0],
+          [109.4937477313407, 18.323842655548675, 18.0],
+          [109.49374777805308, 18.323838140152806, 18.0],
+          [109.49374779781602, 18.32383588202845, 18.0],
+          [109.4937478130874, 18.323833623904077, 18.0],
+          [109.49374782925708, 18.323831366632438, 18.0],
+          [109.49374784093517, 18.32382910850798, 18.0],
+          [109.49374785710482, 18.323824592258999, 18.0],
+          [109.49374786159642, 18.32382233413448, 18.0],
+          [109.49374786339303, 18.323817818738083, 18.0],
+          [109.49374785979978, 18.323815560613473, 18.0],
+          [109.4937478544099, 18.3238133024888, 18.0],
+          [109.49374784812169, 18.323811044364129, 18.0],
+          [109.49374783734189, 18.323808786239434, 18.0],
+          [109.4937478247655, 18.323806528114696, 18.0],
+          [109.49374781039245, 18.323804269989908, 18.0],
+          [109.49374779332448, 18.32380201101236, 18.0],
+          [109.49374777356154, 18.32379975544583, 18.0],
+          [109.49374775110364, 18.323797496468186, 18.0],
+          [109.49374772774744, 18.32379523834332, 18.0],
+          [109.4937477016963, 18.3237929802184, 18.0],
+          [109.49374764240749, 18.323788465673986, 18.0],
+          [109.49374760916982, 18.323786207549018, 18.0],
+          [109.49374757323722, 18.323783948571188, 18.0],
+          [109.4937475364063, 18.323781692151674, 18.0],
+          [109.49374749688043, 18.323779434026574, 18.0],
+          [109.4937474546596, 18.323777177606965, 18.0],
+          [109.49374741154047, 18.323774918629068, 18.0],
+          [109.49374736482804, 18.323772662209409, 18.0],
+          [109.49374731631905, 18.323770404084216, 18.0],
+          [109.49374726601336, 18.323768147664507, 18.0],
+          [109.4937472139111, 18.32376588868647, 18.0],
+          [109.49374715911388, 18.323763632266699, 18.0],
+          [109.49374710341833, 18.323761374141367, 18.0],
+          [109.49374698304408, 18.323756860448915, 18.0],
+          [109.49374692195862, 18.323754603176267, 18.0],
+          [109.49374679080461, 18.323750088630896, 18.0],
+          [109.49374672073599, 18.32374783135816, 18.0],
+          [109.49374657880219, 18.323743317665345, 18.0],
+          [109.4937465033437, 18.323741061245277, 18.0],
+          [109.4937464269869, 18.32373880397243, 18.0],
+          [109.4937463497318, 18.323736547552298, 18.0],
+          [109.49374626888343, 18.323734290279395, 18.0],
+          [109.49374610359338, 18.323729776586228, 18.0],
+          [109.49374593111688, 18.323725264598484, 18.0],
+          [109.49374584038704, 18.32372300732543, 18.0],
+          [109.49374575055549, 18.323720752610645, 18.0],
+          [109.4937456562324, 18.323718495337507, 18.0],
+          [109.4937455628076, 18.32371624062267, 18.0],
+          [109.49374546668789, 18.323713983349493, 18.0],
+          [109.49374536877149, 18.32371172778183, 18.0],
+          [109.49374526726186, 18.323709471361345, 18.0],
+          [109.49374516754888, 18.32370721579361, 18.0],
+          [109.49374506424262, 18.323704960225848, 18.0],
+          [109.49374495913972, 18.323702703805279, 18.0],
+          [109.4937448522402, 18.323700448237465, 18.0],
+          [109.49374474444238, 18.32369819266961, 18.0],
+          [109.49374463574623, 18.323695937954488, 18.0],
+          [109.4937445225585, 18.323693682386567, 18.0],
+          [109.49374441206573, 18.323691426818635, 18.0],
+          [109.49374429708137, 18.323689171250665, 18.0],
+          [109.49374406351939, 18.323684660967389, 18.0],
+          [109.4937438227709, 18.32368014983124, 18.0],
+          [109.49374357842915, 18.323675641253268, 18.0],
+          [109.4937434517667, 18.323673385685099, 18.0],
+          [109.49374332600253, 18.3236711301169, 18.0],
+          [109.49374319754345, 18.3236688762542, 18.0],
+          [109.4937430699827, 18.323666621538718, 18.0],
+          [109.49374293793035, 18.32366436767596, 18.0],
+          [109.49374280677631, 18.323662112107607, 18.0],
+          [109.49374253907839, 18.323657604381926, 18.0],
+          [109.49374212675164, 18.323650841940475, 18.0],
+          [109.49374198481783, 18.323648588077498, 18.0],
+          [109.49374184378232, 18.323646334214499, 18.0],
+          [109.49374170095018, 18.32364408035148, 18.0],
+          [109.49374155721975, 18.323641826488424, 18.0],
+          [109.49374141259098, 18.323639572625348, 18.0],
+          [109.49374126526729, 18.323637318762235, 18.0],
+          [109.4937411188419, 18.323635065751838, 18.0],
+          [109.49374096972155, 18.323632811888659, 18.0],
+          [109.49374082149953, 18.323630558025469, 18.0],
+          [109.49374066878596, 18.323628304162236, 18.0],
+          [109.49374051786897, 18.323626052004508, 18.0],
+          [109.49374005433828, 18.32361929212009, 18.0],
+          [109.49373989803141, 18.323617038256715, 18.0],
+          [109.49373973992792, 18.323614786098845, 18.0],
+          [109.49373958092613, 18.323612532235399, 18.0],
+          [109.4937392611259, 18.32360802791951, 18.0],
+          [109.49373909853083, 18.323605774055979, 18.0],
+          [109.49373893503746, 18.32360352189796, 18.0],
+          [109.49373877064576, 18.32360126973993, 18.0],
+          [109.49373860715235, 18.323599017581868, 18.0],
+          [109.49373827477572, 18.323594511560093, 18.0],
+          [109.49373810768906, 18.323592259401918, 18.0],
+          [109.49373793790747, 18.32359000724372, 18.0],
+          [109.49373776992252, 18.323587755085499, 18.0],
+          [109.49373759834431, 18.323585502927246, 18.0],
+          [109.49373742856273, 18.323583250768956, 18.0],
+          [109.49373725518785, 18.323580998610646, 18.0],
+          [109.49373708360963, 18.32357874815783, 18.0],
+          [109.4937369102348, 18.32357649599946, 18.0],
+          [109.4937367350633, 18.323574243841049, 18.0],
+          [109.49373656168847, 18.32357199168262, 18.0],
+          [109.49373638472037, 18.32356973952419, 18.0],
+          [109.49373620865056, 18.32356748907124, 18.0],
+          [109.49373603168243, 18.323565236912704, 18.0],
+          [109.49373585291771, 18.3235629864597, 18.0],
+          [109.49373567325464, 18.323560734301127, 18.0],
+          [109.49373531572515, 18.32355623168941, 18.0],
+          [109.49373513426547, 18.323553979530744, 18.0],
+          [109.49373495370408, 18.323551729077573, 18.0],
+          [109.49373458719146, 18.323547226465658, 18.0],
+          [109.49373440483346, 18.323544976012415, 18.0],
+          [109.49373422157714, 18.323542723853604, 18.0],
+          [109.49373403742252, 18.323540473400283, 18.0],
+          [109.49373385236959, 18.323538220388668, 18.0],
+          [109.4937336673166, 18.323535969935287, 18.0],
+          [109.49373329361744, 18.323531469028475, 18.0],
+          [109.49373310766619, 18.32352921686947, 18.0],
+          [109.49373292081661, 18.323526966416, 18.0],
+          [109.49373216623177, 18.323517964601785, 18.0],
+          [109.49373197578893, 18.323515714148145, 18.0],
+          [109.49373178714272, 18.323513461988964, 18.0],
+          [109.49373140625704, 18.323508960228794, 18.0],
+          [109.49373121401757, 18.323506709775054, 18.0],
+          [109.49373102357473, 18.323504459321279, 18.0],
+          [109.49373083133527, 18.32350220886747, 18.0],
+          [109.49373064089241, 18.323499958413664, 18.0],
+          [109.49373025641349, 18.323495457505908, 18.0],
+          [109.49373006147907, 18.323493207051976, 18.0],
+          [109.49372967700013, 18.323488706144049, 18.0],
+          [109.49372948296403, 18.323486457395597, 18.0],
+          [109.49372929072455, 18.32348420694155, 18.0],
+          [109.49372909579015, 18.323481955634713, 18.0],
+          [109.49372890175404, 18.32347970518062, 18.0],
+          [109.49372870951456, 18.3234774547265, 18.0],
+          [109.49372832144235, 18.323472953818155, 18.0],
+          [109.49372812650793, 18.323470703363925, 18.0],
+          [109.49372773843573, 18.323466202455444, 18.0],
+          [109.49372754170469, 18.323463953706676, 18.0],
+          [109.49372676556027, 18.323454951036405, 18.0],
+          [109.49372657062587, 18.323452700581947, 18.0],
+          [109.49372618255366, 18.32344819967296, 18.0],
+          [109.49372598851756, 18.323445950923984, 18.0],
+          [109.49372579358315, 18.323443700469416, 18.0],
+          [109.49372521147483, 18.323436948252789, 18.0],
+          [109.49372501654043, 18.323434697798093, 18.0],
+          [109.49372462846822, 18.323430196888645, 18.0],
+          [109.49372443622876, 18.32342794643386, 18.0],
+          [109.49372424129433, 18.32342569768463, 18.0],
+          [109.49372404725823, 18.32342344722979, 18.0],
+          [109.49372385501877, 18.323421196774939, 18.0],
+          [109.49372366098267, 18.323418946320034, 18.0],
+          [109.49372327650372, 18.323414444557434, 18.0],
+          [109.49372308156932, 18.323412194102447, 18.0],
+          [109.49372250485091, 18.323405442737369, 18.0],
+          [109.49372231440805, 18.32340319228227, 18.0],
+          [109.49372192992911, 18.32339869137198, 18.0],
+          [109.49372173948628, 18.32339644091681, 18.0],
+          [109.49372154634847, 18.32339419046159, 18.0],
+          [109.49372078457712, 18.323385187787737, 18.0],
+          [109.49372059593091, 18.323382937332373, 18.0],
+          [109.49372040548806, 18.323380686876985, 18.0],
+          [109.49372021684187, 18.323378434716024, 18.0],
+          [109.49372002639902, 18.32337618426058, 18.0],
+          [109.49371983865112, 18.32337393380511, 18.0],
+          [109.49371965000494, 18.323371683349604, 18.0],
+          [109.49371946315533, 18.323369432894088, 18.0],
+          [109.49371927450915, 18.323367182438529, 18.0],
+          [109.49371908765956, 18.323364929424625, 18.0],
+          [109.49371889901336, 18.323362678969006, 18.0],
+          [109.49371871216377, 18.323360428513383, 18.0],
+          [109.49371852800913, 18.3233581780577, 18.0],
+          [109.49371834115957, 18.323355925896466, 18.0],
+          [109.49371815610658, 18.323353675440726, 18.0],
+          [109.49371796925702, 18.323351424984947, 18.0],
+          [109.49371778510239, 18.323349174529147, 18.0],
+          [109.49371760004947, 18.32334692236779, 18.0],
+          [109.49371741679312, 18.32334467191196, 18.0],
+          [109.49371723263848, 18.32334241975055, 18.0],
+          [109.49371686612585, 18.32333791883868, 18.0],
+          [109.49371668556447, 18.323335666677168, 18.0],
+          [109.49371650230818, 18.323333416221165, 18.0],
+          [109.49371632174679, 18.32333116405961, 18.0],
+          [109.4937161402871, 18.32332891360355, 18.0],
+          [109.49371595972572, 18.323326660589158, 18.0],
+          [109.49371578006266, 18.323324410985824, 18.0],
+          [109.49371560129795, 18.323322157971366, 18.0],
+          [109.4937154225332, 18.323319907515189, 18.0],
+          [109.49371524287014, 18.32331765535344, 18.0],
+          [109.49371488893391, 18.323313152735439, 18.0],
+          [109.49371471106748, 18.32331090057361, 18.0],
+          [109.49371453409937, 18.323308648411737, 18.0],
+          [109.49371400858493, 18.32330189363152, 18.0],
+          [109.49371383521009, 18.32329964146954, 18.0],
+          [109.49371366093692, 18.323297389307539, 18.0],
+          [109.49371348756208, 18.32329513885104, 18.0],
+          [109.49371331598387, 18.323292886688969, 18.0],
+          [109.493713142609, 18.323290634526886, 18.0],
+          [109.49371297282741, 18.32328838236478, 18.0],
+          [109.49371280214753, 18.323286130202644, 18.0],
+          [109.49371246258431, 18.323281625878239, 18.0],
+          [109.49371212661441, 18.32327712155373, 18.0],
+          [109.49371195952777, 18.323274869391424, 18.0],
+          [109.49371162715112, 18.3232703633612, 18.0],
+          [109.4937114618611, 18.323268111198816, 18.0],
+          [109.49371129746942, 18.3232658590364, 18.0],
+          [109.49371113397602, 18.323263606873959, 18.0],
+          [109.49371096958432, 18.323261354711485, 18.0],
+          [109.49371080788757, 18.32325910084344, 18.0],
+          [109.49371064529254, 18.323256848680918, 18.0],
+          [109.49371032549226, 18.32325234265021, 18.0],
+          [109.49371016469385, 18.323250090487599, 18.0],
+          [109.49370984848687, 18.32324558530951, 18.0],
+          [109.49370937956629, 18.323238825410227, 18.0],
+          [109.49370907054582, 18.32323431937906, 18.0],
+          [109.49370876511864, 18.32322981334778, 18.0],
+          [109.49370831236773, 18.32322305174234, 18.0],
+          [109.4937081641457, 18.323220799579347, 18.0],
+          [109.493708016822, 18.32321854571077, 18.0],
+          [109.49370787039659, 18.32321629269497, 18.0],
+          [109.4937077230729, 18.32321403882633, 18.0],
+          [109.49370757844413, 18.323211784957679, 18.0],
+          [109.49370743291704, 18.323209531089, 18.0],
+          [109.49370729008493, 18.32320727722028, 18.0],
+          [109.49370714635447, 18.32320502335153, 18.0],
+          [109.49370686428348, 18.323200515613956, 18.0],
+          [109.49370658580576, 18.323196007023467, 18.0],
+          [109.49370644836348, 18.323193753154585, 18.0],
+          [109.49370631002293, 18.32319149928567, 18.0],
+          [109.49370617527566, 18.32318924541671, 18.0],
+          [109.49370603963004, 18.323186989842204, 18.0],
+          [109.49370577193212, 18.32318248125138, 18.0],
+          [109.49370563987974, 18.32318022738231, 18.0],
+          [109.49370551052235, 18.323177973513216, 18.0],
+          [109.49370525001092, 18.32317346236386, 18.0],
+          [109.49370512245014, 18.323171209347437, 18.0],
+          [109.49370499578768, 18.323168953772684, 18.0],
+          [109.49370487002355, 18.323166699903437, 18.0],
+          [109.49370462208852, 18.323162188753785, 18.0],
+          [109.49370449901936, 18.323159935737235, 18.0],
+          [109.49370437684846, 18.323157680162344, 18.0],
+          [109.4937042564742, 18.323155424587389, 18.0],
+          [109.49370401931897, 18.323150914290218, 18.0],
+          [109.49370378575699, 18.32314640314017, 18.0],
+          [109.49370367167096, 18.323144147565068, 18.0],
+          [109.49370344529553, 18.323139637267614, 18.0],
+          [109.4937033348027, 18.323137381692449, 18.0],
+          [109.49370322341165, 18.323135126970024, 18.0],
+          [109.49370311471549, 18.323132871394795, 18.0],
+          [109.49370300691764, 18.323130615819556, 18.0],
+          [109.49370290181474, 18.323128361097024, 18.0],
+          [109.49370279491525, 18.323126103816184, 18.0],
+          [109.49370258830273, 18.323121593518218, 18.0],
+          [109.4937024867931, 18.323119336237288, 18.0],
+          [109.4937022873671, 18.323114825939159, 18.0],
+          [109.49370218945075, 18.323112568658137, 18.0],
+          [109.49370209333098, 18.323110313082635, 18.0],
+          [109.4937019981096, 18.323108056654325, 18.0],
+          [109.49370180946338, 18.323103544650374, 18.0],
+          [109.49370171783521, 18.323101287369217, 18.0],
+          [109.4937016280037, 18.32309903179351, 18.0],
+          [109.49370153907049, 18.32309677536506, 18.0],
+          [109.49370145103556, 18.323094518083815, 18.0],
+          [109.49370136479732, 18.32309226336081, 18.0],
+          [109.4937012803557, 18.323090006079505, 18.0],
+          [109.49370111506565, 18.32308549236954, 18.0],
+          [109.4937009533689, 18.32308097865944, 18.0],
+          [109.49370087611379, 18.323078722230738, 18.0],
+          [109.49370079975701, 18.323076464949254, 18.0],
+          [109.4937007242985, 18.323074208520514, 18.0],
+          [109.49370064973836, 18.32307195123893, 18.0],
+          [109.49370057787312, 18.32306969481013, 18.0],
+          [109.49370043593932, 18.32306518109963, 18.0],
+          [109.49370030119202, 18.323060667389027, 18.0],
+          [109.49370023741162, 18.323058410960046, 18.0],
+          [109.4937001718346, 18.323056151972748, 18.0],
+          [109.49370010985087, 18.323053895543706, 18.0],
+          [109.49369936784244, 18.322898192489594, 18.0],
+          [109.49370565065954, 18.32274260441947, 18.0],
+          [109.49371894752237, 18.322587418717896, 18.0],
+          [109.49373923507476, 18.322432924475959, 18.0],
+          [109.49376647289248, 18.322279407374709, 18.0],
+          [109.49376681874385, 18.322277683919095, 18.0],
+          [109.49376716639186, 18.32227595790517, 18.0],
+          [109.49376751403988, 18.322274233596766, 18.0],
+          [109.49376786438285, 18.322272509288348, 18.0],
+          [109.49376821382748, 18.322270784979879, 18.0],
+          [109.49376856506878, 18.32226906237697, 18.0],
+          [109.49376891720839, 18.322267338068504, 18.0],
+          [109.49376927024628, 18.322265614612765, 18.0],
+          [109.49376962418249, 18.322263890304268, 18.0],
+          [109.49376997722038, 18.32226216770128, 18.0],
+          [109.49377033295325, 18.322260445098288, 18.0],
+          [109.49377068778779, 18.322258720789728, 18.0],
+          [109.49377140284675, 18.322255276436406, 18.0],
+          [109.49377176127455, 18.32225355383334, 18.0],
+          [109.49377247992678, 18.322250109479904, 18.0],
+          [109.49377320217227, 18.32224666512645, 18.0],
+          [109.49377356509162, 18.322244942523278, 18.0],
+          [109.49377392801103, 18.322243222478435, 18.0],
+          [109.49377429272701, 18.322241499875255, 18.0],
+          [109.49377465744303, 18.322239779830349, 18.0],
+          [109.49377502215903, 18.32223805722714, 18.0],
+          [109.49377538867167, 18.322236336329448, 18.0],
+          [109.49377575608261, 18.32223461628453, 18.0],
+          [109.49377612439189, 18.322232896239567, 18.0],
+          [109.49377649090451, 18.322231173636273, 18.0],
+          [109.49377686190874, 18.3222294535913, 18.0],
+          [109.49377723201465, 18.322227734399069, 18.0],
+          [109.49377760212052, 18.322226014354027, 18.0],
+          [109.49377797312475, 18.322224293456217, 18.0],
+          [109.49377834502728, 18.322222573411179, 18.0],
+          [109.4937787178281, 18.32222085507164, 18.0],
+          [109.49377909152727, 18.32221913417376, 18.0],
+          [109.49377946612474, 18.322217415834225, 18.0],
+          [109.49377984072221, 18.32221569578912, 18.0],
+          [109.493780216218, 18.322213976596755, 18.0],
+          [109.49378059261213, 18.322212258257126, 18.0],
+          [109.49378097080283, 18.32221053821197, 18.0],
+          [109.49378134719696, 18.322208819019548, 18.0],
+          [109.49378172718433, 18.322207100679866, 18.0],
+          [109.49378210447674, 18.3222053823402, 18.0],
+          [109.4937824844641, 18.32220366400053, 18.0],
+          [109.49378286445145, 18.32220194736632, 18.0],
+          [109.49378324623544, 18.32220022817383, 18.0],
+          [109.49378362801945, 18.32219850983409, 18.0],
+          [109.49378400980345, 18.32219679319988, 18.0],
+          [109.49378439338408, 18.32219507486008, 18.0],
+          [109.49378477786303, 18.32219335652029, 18.0],
+          [109.49378516144366, 18.322191639886044, 18.0],
+          [109.4937855468209, 18.32218992239898, 18.0],
+          [109.49378593219817, 18.322188204059139, 18.0],
+          [109.49378631757543, 18.322186487424817, 18.0],
+          [109.49378670385097, 18.322184770790487, 18.0],
+          [109.49378709102489, 18.322183054156136, 18.0],
+          [109.4937874799954, 18.322181337521756, 18.0],
+          [109.49378786806757, 18.322179620887373, 18.0],
+          [109.49378825703814, 18.322177904252994, 18.0],
+          [109.49378864690697, 18.322176187618547, 18.0],
+          [109.4937890376741, 18.322174472689669, 18.0],
+          [109.49378942933957, 18.32217275605522, 18.0],
+          [109.4937898201067, 18.322171039420753, 18.0],
+          [109.49379021177218, 18.3221693244918, 18.0],
+          [109.49379060433594, 18.32216760785729, 18.0],
+          [109.49379139126013, 18.32216417799935, 18.0],
+          [109.49379178562056, 18.322162461364767, 18.0],
+          [109.49379217908265, 18.32216074728853, 18.0],
+          [109.493792576138, 18.322159032359506, 18.0],
+          [109.49379297049839, 18.322157317430429, 18.0],
+          [109.49379416166447, 18.32215217264317, 18.0],
+          [109.49379456051645, 18.322150458566815, 18.0],
+          [109.49379495757181, 18.32214874363767, 18.0],
+          [109.49379535642382, 18.322147028708515, 18.0],
+          [109.49379575707242, 18.32214531377935, 18.0],
+          [109.4937961559244, 18.322143600555664, 18.0],
+          [109.49379655657305, 18.322141886479256, 18.0],
+          [109.49379695722165, 18.322140173255588, 18.0],
+          [109.49379735966687, 18.322138458326316, 18.0],
+          [109.49379776031552, 18.322136745102595, 18.0],
+          [109.49379816276076, 18.322135031026119, 18.0],
+          [109.49379856520598, 18.322133317802373, 18.0],
+          [109.49379896944788, 18.32213160457861, 18.0],
+          [109.49379937279145, 18.322129890502049, 18.0],
+          [109.4938001812752, 18.322126464054454, 18.0],
+          [109.49380058731372, 18.322124751683373, 18.0],
+          [109.4938009924539, 18.322123038459524, 18.0],
+          [109.4938013984924, 18.322121325235668, 18.0],
+          [109.4938018045309, 18.32211961286454, 18.0],
+          [109.49380221146773, 18.32211789964064, 18.0],
+          [109.49380261750626, 18.32211618641674, 18.0],
+          [109.49380302534137, 18.32211447575114, 18.0],
+          [109.49380343407485, 18.322112762527156, 18.0],
+          [109.49380384190997, 18.322111050155994, 18.0],
+          [109.49380425064345, 18.32210933863755, 18.0],
+          [109.49380466027519, 18.32210762626631, 18.0],
+          [109.4938050708053, 18.3221059130423, 18.0],
+          [109.49380548043708, 18.322104202376605, 18.0],
+          [109.49380589096714, 18.32210248915255, 18.0],
+          [109.49380630149722, 18.322100777634036, 18.0],
+          [109.493806711129, 18.32209906696826, 18.0],
+          [109.4938071234557, 18.322097353744156, 18.0],
+          [109.4938075348841, 18.322095643078379, 18.0],
+          [109.49380794721084, 18.322093931559789, 18.0],
+          [109.49380835953754, 18.32209221918839, 18.0],
+          [109.49380877276256, 18.322090507669768, 18.0],
+          [109.4938091850893, 18.322088797003898, 18.0],
+          [109.49380959921263, 18.32208708633803, 18.0],
+          [109.493810013336, 18.322085374819357, 18.0],
+          [109.49381042656103, 18.322083664153455, 18.0],
+          [109.49381084248098, 18.322081952634716, 18.0],
+          [109.49381125660435, 18.322080241968775, 18.0],
+          [109.49381167252429, 18.32207853045006, 18.0],
+          [109.49381250436427, 18.322075109118069, 18.0],
+          [109.49381291938593, 18.32207339930482, 18.0],
+          [109.49381333530589, 18.3220716886388, 18.0],
+          [109.49381375122587, 18.322069977119978, 18.0],
+          [109.4938141689425, 18.322068266453898, 18.0],
+          [109.49381458665909, 18.32206655749337, 18.0],
+          [109.49381500437569, 18.322064845974489, 18.0],
+          [109.49381542209231, 18.322063137013914, 18.0],
+          [109.4938158398089, 18.322061426347785, 18.0],
+          [109.49381625752551, 18.32205971482887, 18.0],
+          [109.49381667524213, 18.32205800586826, 18.0],
+          [109.49381709475537, 18.322056294349257, 18.0],
+          [109.49381751426859, 18.322054585388636, 18.0],
+          [109.4938179319852, 18.322052876427965, 18.0],
+          [109.49381835149846, 18.322051165761719, 18.0],
+          [109.4938187710117, 18.322049455948244, 18.0],
+          [109.4938191905249, 18.32204774528199, 18.0],
+          [109.49381961183477, 18.322046036321223, 18.0],
+          [109.49382003134802, 18.322044326507723, 18.0],
+          [109.4938204526579, 18.32204261754694, 18.0],
+          [109.49382087217114, 18.32204090688062, 18.0],
+          [109.4938212943793, 18.32203919706703, 18.0],
+          [109.49382255830892, 18.322034070184516, 18.0],
+          [109.4938229796188, 18.32203236037087, 18.0],
+          [109.49382340092868, 18.322030649704418, 18.0],
+          [109.49382382223854, 18.322028940743516, 18.0],
+          [109.49382424624334, 18.32202723178258, 18.0],
+          [109.49382466755321, 18.322025521968894, 18.0],
+          [109.49382509065971, 18.322023813007918, 18.0],
+          [109.49382551196958, 18.322022104046959, 18.0],
+          [109.49382593597437, 18.322020395085955, 18.0],
+          [109.49382635908089, 18.322018685272164, 18.0],
+          [109.49382678039075, 18.322016976311159, 18.0],
+          [109.49382720349725, 18.32201526735013, 18.0],
+          [109.49382762750207, 18.322013558389047, 18.0],
+          [109.49382805060859, 18.3220118485752, 18.0],
+          [109.4938284755117, 18.322010141319649, 18.0],
+          [109.4938288986182, 18.32200843235856, 18.0],
+          [109.493829322623, 18.322006723397409, 18.0],
+          [109.4938297457295, 18.32200501443629, 18.0],
+          [109.493830168836, 18.322003304622354, 18.0],
+          [109.49383059463746, 18.322001595661189, 18.0],
+          [109.49383101774396, 18.321999886699975, 18.0],
+          [109.49383144264708, 18.321998179444326, 18.0],
+          [109.49383186575359, 18.32199647048311, 18.0],
+          [109.49383229155501, 18.32199476066909, 18.0],
+          [109.49383271466151, 18.32199305170781, 18.0],
+          [109.49383313956467, 18.32199134274655, 18.0],
+          [109.4938335653661, 18.32198963549081, 18.0],
+          [109.49383398847259, 18.32198792652948, 18.0],
+          [109.49383441337571, 18.321986216715368, 18.0],
+          [109.49383483917718, 18.321984507754036, 18.0],
+          [109.49383526228367, 18.321982800498238, 18.0],
+          [109.4938356871868, 18.32198109153685, 18.0],
+          [109.49383611298822, 18.321979382575458, 18.0],
+          [109.49383653789139, 18.321977672761269, 18.0],
+          [109.49383696099788, 18.3219759655054, 18.0],
+          [109.49383738679932, 18.321974256543933, 18.0],
+          [109.49383823660557, 18.321970838620989, 18.0],
+          [109.49383866240703, 18.321969130512288, 18.0],
+          [109.49383908551353, 18.321967421550764, 18.0],
+          [109.49383951041665, 18.321965712589244, 18.0],
+          [109.49383993621811, 18.321964003627668, 18.0],
+          [109.49384036112123, 18.321962296371667, 18.0],
+          [109.49384078602437, 18.3219605865573, 18.0],
+          [109.49384121002916, 18.321958877595713, 18.0],
+          [109.4938416349323, 18.3219571686341, 18.0],
+          [109.49384205983542, 18.321955461378019, 18.0],
+          [109.49384248563686, 18.32195375241638, 18.0],
+          [109.49384290874338, 18.321952042601937, 18.0],
+          [109.4938433336465, 18.32195033364024, 18.0],
+          [109.49384375944796, 18.321948626384093, 18.0],
+          [109.49384418255446, 18.321946917422399, 18.0],
+          [109.49384460745758, 18.321945208460649, 18.0],
+          [109.493845033259, 18.32194349864615, 18.0],
+          [109.4938454563655, 18.321941789684357, 18.0],
+          [109.49384588126863, 18.321940082428136, 18.0],
+          [109.49384630707009, 18.321938373466315, 18.0],
+          [109.49384673017659, 18.321936664504514, 18.0],
+          [109.49384715507972, 18.321934954689895, 18.0],
+          [109.49384757908455, 18.321933245728049, 18.0],
+          [109.49384800219102, 18.32193153847172, 18.0],
+          [109.49384842709418, 18.32192982950985, 18.0],
+          [109.49384885020067, 18.321928120547964, 18.0],
+          [109.4938492760021, 18.321926410733256, 18.0],
+          [109.4938501222151, 18.321922992809364, 18.0],
+          [109.49385054621993, 18.32192128555295, 18.0],
+          [109.49385096932643, 18.321919576590945, 18.0],
+          [109.49385139422955, 18.321917866776169, 18.0],
+          [109.49385181733605, 18.321916157814174, 18.0],
+          [109.49385224134086, 18.321914448852128, 18.0],
+          [109.49385266444735, 18.32191273989006, 18.0],
+          [109.49385308755385, 18.32191103007521, 18.0],
+          [109.49385351066035, 18.321909321113137, 18.0],
+          [109.49385393286855, 18.321907612151056, 18.0],
+          [109.49385435597505, 18.32190590318891, 18.0],
+          [109.49385477908156, 18.321904193373997, 18.0],
+          [109.49385520218802, 18.321902484411856, 18.0],
+          [109.49385562439622, 18.32190077544969, 18.0],
+          [109.49385604750272, 18.32189906648749, 18.0],
+          [109.4938564688126, 18.321897356672499, 18.0],
+          [109.4938568919191, 18.32189564771029, 18.0],
+          [109.49385773453882, 18.32189222978579, 18.0],
+          [109.49385815674701, 18.321890519970734, 18.0],
+          [109.4938585798535, 18.321888811008458, 18.0],
+          [109.49385900116337, 18.32188710204613, 18.0],
+          [109.49385942247324, 18.321885391378268, 18.0],
+          [109.49385984378312, 18.32188368156315, 18.0],
+          [109.49386026599129, 18.321881972600808, 18.0],
+          [109.49386068550453, 18.321880263638407, 18.0],
+          [109.4938611068144, 18.321878554676034, 18.0],
+          [109.49386152812429, 18.3218768431553, 18.0],
+          [109.49386194763749, 18.321875134192849, 18.0],
+          [109.49386236894736, 18.321873425230426, 18.0],
+          [109.4938627884606, 18.321871715415179, 18.0],
+          [109.49386320797385, 18.321870004747188, 18.0],
+          [109.49386362928373, 18.321868295784659, 18.0],
+          [109.49386404879697, 18.321866585969376, 18.0],
+          [109.49386446831017, 18.32186487530131, 18.0],
+          [109.49386488872175, 18.321863166338749, 18.0],
+          [109.49386530823496, 18.321861454817868, 18.0],
+          [109.49386572595158, 18.321859745855297, 18.0],
+          [109.49386614546482, 18.321858036892718, 18.0],
+          [109.49386656497808, 18.321856325371784, 18.0],
+          [109.49386698269464, 18.321854616409135, 18.0],
+          [109.49386740041126, 18.321852905740955, 18.0],
+          [109.4938678199245, 18.321851194219965, 18.0],
+          [109.49386823764114, 18.32184948525726, 18.0],
+          [109.49386865445942, 18.32184777458903, 18.0],
+          [109.49386907217604, 18.321846064773543, 18.0],
+          [109.49386948989262, 18.32184435410527, 18.0],
+          [109.49386990581262, 18.321842643436967, 18.0],
+          [109.49387032352922, 18.32184093362143, 18.0],
+          [109.4938707412458, 18.321839222953107, 18.0],
+          [109.4938711571658, 18.321837511431978, 18.0],
+          [109.49387157308574, 18.32183580246915, 18.0],
+          [109.49387199080238, 18.32183409180078, 18.0],
+          [109.49387240672236, 18.321832380279614, 18.0],
+          [109.49387282174402, 18.32183066961118, 18.0],
+          [109.49387323586734, 18.321828958089975, 18.0],
+          [109.49387406770733, 18.32182553675306, 18.0],
+          [109.49387448183066, 18.321823825231794, 18.0],
+          [109.49387489505568, 18.321822116268856, 18.0],
+          [109.49387531097568, 18.321820404747564, 18.0],
+          [109.493875725099, 18.321818692373478, 18.0],
+          [109.49387613922237, 18.32181698085214, 18.0],
+          [109.49387655065077, 18.321815270183579, 18.0],
+          [109.4938769647741, 18.32181355951498, 18.0],
+          [109.49387737889747, 18.321811847993609, 18.0],
+          [109.49387779122417, 18.321810137324996, 18.0],
+          [109.49387820265257, 18.321808425803586, 18.0],
+          [109.49387861497927, 18.32180671342937, 18.0],
+          [109.49387902730601, 18.32180500190792, 18.0],
+          [109.49387943873441, 18.32180329123925, 18.0],
+          [109.49387985106111, 18.321801578012236, 18.0],
+          [109.4938802624895, 18.32179986734348, 18.0],
+          [109.49388067301959, 18.321798155821985, 18.0],
+          [109.4938810835497, 18.321796443447693, 18.0],
+          [109.49388149318146, 18.321794731926138, 18.0],
+          [109.49388190371154, 18.321793019551785, 18.0],
+          [109.4938823133433, 18.3217913080302, 18.0],
+          [109.4938827238734, 18.321789594803059, 18.0],
+          [109.49388313170855, 18.321787884134197, 18.0],
+          [109.4938835422386, 18.321786170907026, 18.0],
+          [109.49388395007377, 18.321784458532624, 18.0],
+          [109.49388435880721, 18.321782747010958, 18.0],
+          [109.49388476664235, 18.321781034636478, 18.0],
+          [109.49388517268085, 18.321779321409229, 18.0],
+          [109.49388558141433, 18.321777608181966, 18.0],
+          [109.49388598745282, 18.321775895807453, 18.0],
+          [109.49388639618626, 18.321774184285688, 18.0],
+          [109.49388680222478, 18.321772471911154, 18.0],
+          [109.4938872082633, 18.321770758683824, 18.0],
+          [109.49388761340349, 18.321769045456486, 18.0],
+          [109.49388801944198, 18.321767333081877, 18.0],
+          [109.49388842368387, 18.321765619854494, 18.0],
+          [109.49388882792573, 18.321763904921544, 18.0],
+          [109.49388923306593, 18.321762192546879, 18.0],
+          [109.49389004154968, 18.32175876609199, 18.0],
+          [109.49389044399494, 18.32175705371728, 18.0],
+          [109.49389084644018, 18.321755338784237, 18.0],
+          [109.49389125158037, 18.32175362555674, 18.0],
+          [109.49389165222901, 18.321751913181978, 18.0],
+          [109.49389205467425, 18.321750198248894, 18.0],
+          [109.49389245711952, 18.32174848502135, 18.0],
+          [109.4938928577681, 18.321746770088216, 18.0],
+          [109.49389325841672, 18.32174505771339, 18.0],
+          [109.49389405971395, 18.32174162784706, 18.0],
+          [109.49389445856595, 18.32173991461943, 18.0],
+          [109.49389485921458, 18.321738200538986, 18.0],
+          [109.49389565691854, 18.321734770672515, 18.0],
+          [109.4938960557705, 18.321733057444818, 18.0],
+          [109.49389645282587, 18.321731342511538, 18.0],
+          [109.49389685167788, 18.32172962843101, 18.0],
+          [109.4938972478349, 18.3217279134977, 18.0],
+          [109.49389764489024, 18.321726198564347, 18.0],
+          [109.493898040149, 18.321724483631, 18.0],
+          [109.49389843720435, 18.321722768697648, 18.0],
+          [109.49389883246308, 18.321721052058718, 18.0],
+          [109.49389922682346, 18.321719337125339, 18.0],
+          [109.49389962208218, 18.321717623044674, 18.0],
+          [109.49390001734092, 18.32171590811125, 18.0],
+          [109.49390040990471, 18.321714191472233, 18.0],
+          [109.4939011968289, 18.321710761605297, 18.0],
+          [109.49390158939268, 18.32170904496625, 18.0],
+          [109.49390198285477, 18.321707330032735, 18.0],
+          [109.49390237362189, 18.321705613393634, 18.0],
+          [109.49390276528736, 18.321703896754529, 18.0],
+          [109.49390315695284, 18.321702181820969, 18.0],
+          [109.49390354772001, 18.321700465181804, 18.0],
+          [109.49390393758881, 18.32169874854266, 18.0],
+          [109.49390432655936, 18.32169703190349, 18.0],
+          [109.49390471552987, 18.321695316969867, 18.0],
+          [109.49390510539871, 18.321693600330634, 18.0],
+          [109.49390587974647, 18.32169016705218, 18.0],
+          [109.49390626781869, 18.32168845041291, 18.0],
+          [109.49390665499256, 18.321686733773644, 18.0],
+          [109.49390704216644, 18.321685015428814, 18.0],
+          [109.49390742844203, 18.32168329878947, 18.0],
+          [109.49390819919654, 18.321679865510825, 18.0],
+          [109.49390858277717, 18.321678147165917, 18.0],
+          [109.49390896635781, 18.321676430526517, 18.0],
+          [109.49390934993842, 18.3216747113288, 18.0],
+          [109.49390973441735, 18.321672994689395, 18.0],
+          [109.49391011620135, 18.321671276344426, 18.0],
+          [109.49391049978198, 18.321669559704959, 18.0],
+          [109.49391088156598, 18.321667841359948, 18.0],
+          [109.49391126155335, 18.32166612301493, 18.0],
+          [109.49391164333734, 18.3216644038171, 18.0],
+          [109.4939120233247, 18.321662687177569, 18.0],
+          [109.49395020531756, 18.321476220626719, 18.0],
+          [109.49398250244693, 18.321288741626757, 18.0],
+          [109.49400888866178, 18.321100422435867, 18.0],
+          [109.49401003850535, 18.321089793392067, 18.0],
+          [109.49402933611427, 18.320911429343494, 18.0],
+          [109.49420355538048, 18.319024225374699, 18.0],
+          [109.4942319502283, 18.31868388775086, 18.0],
+          [109.49423518955321, 18.318645064418356, 18.0],
+          [109.49434904293064, 18.31711813264582, 18.0],
+          [109.49450397626599, 18.31504016598721, 18.0],
+          [109.49450516473712, 18.315024222715747, 18.0],
+          [109.49450530038276, 18.315024188603368, 18.0],
+          [109.49450531206084, 18.31502407347412, 18.0],
+          [109.4945205142504, 18.314887854170935, 18.0],
+          [109.49454290565714, 18.31475254215124, 18.0],
+          [109.49457242699237, 18.31461848451136, 18.0],
+          [109.4946090063907, 18.3144860232319, 18.0],
+          [109.49465254863084, 18.31435549688313, 18.0],
+          [109.49470293962672, 18.314227239772266, 18.0],
+          [109.49476005541077, 18.314101578532143, 18.0],
+          [109.49482374776105, 18.31397883467949, 18.0],
+          [109.49489385228584, 18.313859322056456, 18.0],
+          [109.494970192017, 18.31374334683063, 18.0],
+          [109.49505257202013, 18.313631205789176, 18.0],
+          [109.49509038570369, 18.31358240337022, 18.0],
+          [109.49514722211174, 18.3135033515241, 18.0],
+          [109.49519806675682, 18.313420661523187, 18.0],
+          [109.49524266721234, 18.313334746978894, 18.0],
+          [109.49528080069617, 18.313246036853984, 18.0],
+          [109.49531227407045, 18.313154974609849, 18.0],
+          [109.495336932825, 18.31306201564812, 18.0],
+          [109.4953546529923, 18.31296762475251, 18.0],
+          [109.49536534653743, 18.312872274382849, 18.0],
+          [109.49536895686656, 18.31277644041149, 18.0],
+          [109.49536947249952, 18.311979886323877, 18.0],
+          [109.49537035015355, 18.31062469098992, 18.0],
+          [109.49537035105189, 18.310624690989927, 18.0],
+          [109.49537185393337, 18.308299798962325, 18.0],
+          [109.49537358768186, 18.308039850652489, 18.0],
+          [109.49537845385574, 18.307779940330489, 18.0],
+          [109.49538804696467, 18.307392378082235, 18.0],
+          [109.49538804606634, 18.3073923772294, 18.0],
+          [109.49541092525831, 18.306467961086253, 18.0],
+          [109.49541667088288, 18.306126783449213, 18.0],
+          [109.49541701763256, 18.305785563350179, 18.0],
+          [109.495416830783, 18.305758394801367, 18.0],
+          [109.49540563328299, 18.30413249830347, 18.0],
+          [109.49545100269642, 18.30414394372552, 18.0],
+          [109.49543853587692, 18.302708827743357, 18.0],
+          [109.49542615709227, 18.301284093884708, 18.0],
+          [109.4954135106097, 18.299828467077825, 18.0],
+          [109.49540989489069, 18.29941240490149, 18.0],
+          [109.49540553536663, 18.29891053772432, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID": 7,
+        "SJXZQMC": "三亚市",
+        "XJXZQMC": "吉阳区/天涯区",
+        "XZMC": "吉阳区/天涯区",
+        "GHCGMC": "三亚抱坡片区控制性详细规划",
+        "BZSJ": "20220501",
+        "BZDW": "中规院(北京)规划设计有限公司",
+        "PZWH": "三府函[2023]476号",
+        "PFSJ": "20230620",
+        "SJWT": "",
+        "DLMK": "文新路",
+        "DLJB": "次干路",
+        "DLKD": 30.0,
+        "DLPD": 0.7099999785423279,
+        "DMLX": "D-D",
+        "SSQK": "规划",
+        "XZQDM": "460203/460204",
+        "BZ": "",
+        "SHAPE_Length": 221.40944271254706
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.48317655290991, 18.30118817588843, 18.0],
+          [109.48747535626045, 18.301222270518758, 18.0],
+          [109.48760550417879, 18.30122330164751, 18.0],
+          [109.48915669075692, 18.30123557881718, 18.0],
+          [109.4906489209029, 18.301247378374723, 18.0],
+          [109.49155190383324, 18.30125451269301, 18.0],
+          [109.49308545738063, 18.301266619285, 18.0],
+          [109.49343726369705, 18.301269247852468, 18.0],
+          [109.49542615709227, 18.301284093884708, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID": 201,
+        "SJXZQMC": "三亚市",
+        "XJXZQMC": "吉阳区/天涯区",
+        "XZMC": "吉阳区/天涯区",
+        "GHCGMC": "三亚抱坡片区控制性详细规划",
+        "BZSJ": "20220501",
+        "BZDW": "中规院(北京)规划设计有限公司",
+        "PZWH": "三府函[2023]476号",
+        "PFSJ": "20230620",
+        "SJWT": "",
+        "DLMK": "",
+        "DLJB": "支路",
+        "DLKD": 21.0,
+        "DLPD": 0.5400000214576721,
+        "DMLX": "G-G",
+        "SSQK": "规划",
+        "XZQDM": "460203/460204",
+        "BZ": "",
+        "SHAPE_Length": 91.60209381264856
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.49013035672707, 18.31895982012501, 18.0],
+          [109.4909532314936, 18.318960938132766, 18.0],
+          [109.49252611238583, 18.31896306584386, 18.0],
+          [109.4926448013944, 18.31896322531559, 18.0],
+          [109.49278030237356, 18.3189598397392, 18.0],
+          [109.49291540450072, 18.318949327396124, 18.0],
+          [109.49304969634749, 18.318931718132779, 18.0],
+          [109.49318276468883, 18.318907069083914, 18.0],
+          [109.4942319502283, 18.31868388775086, 18.0],
+          [109.49423367858691, 18.318683520197778, 18.0],
+          [109.49513501760026, 18.31847271430065, 18.0],
+          [109.49522730242772, 18.318448164963145, 18.0],
+          [109.4953174025524, 18.318417076407788, 18.0],
+          [109.49540480503629, 18.318379620895234, 18.0],
+          [109.49548902299247, 18.318336010766829, 18.0],
+          [109.49556957941559, 18.31828649332798, 18.0],
+          [109.49564601975807, 18.31823134573158, 18.0],
+          [109.49571791732017, 18.318170878389208, 18.0],
+          [109.49578486247006, 18.318105430707406, 18.0],
+          [109.49584648420361, 18.31803537364616, 18.0],
+          [109.49590242948288, 18.317961102043964, 18.0],
+          [109.49595238569414, 18.317883030353874, 18.0],
+          [109.49599607346134, 18.317801602877379, 18.0],
+          [109.49603324305288, 18.317717273297288, 18.0],
+          [109.49607634961009, 18.317617358818045, 18.0],
+          [109.49612563388152, 18.31752008368823, 18.0],
+          [109.49618091979736, 18.317425798412168, 18.0],
+          [109.4962420124232, 18.317334838144285, 18.0],
+          [109.49630868807856, 18.317247530364523, 18.0],
+          [109.49638071140477, 18.317164187202736, 18.0],
+          [109.49645782458538, 18.31708510458605, 18.0],
+          [109.49653974914267, 18.317010569913707, 18.0],
+          [109.49662619492077, 18.316940846706875, 18.0],
+          [109.4967168511026, 18.316876185694615, 18.0],
+          [109.49681139249808, 18.316816817138727, 18.0],
+          [109.49690948223886, 18.31676295424491, 18.0],
+          [109.4979760402976, 18.316217161688017, 18.0],
+          [109.49806025376225, 18.3161700238183, 18.0],
+          [109.49814044816428, 18.316116877078604, 18.0],
+          [109.49821615817644, 18.31605803529536, 18.0],
+          [109.49828694003092, 18.315993840437409, 18.0],
+          [109.49835237960443, 18.315924668585816, 18.0],
+          [109.49841209421465, 18.31585092225873, 18.0],
+          [109.49846573351856, 18.315773034675613, 18.0],
+          [109.49851298669911, 18.315691458670956, 18.0],
+          [109.49855357617693, 18.315606675222424, 18.0],
+          [109.49858726569505, 18.31551917724775, 18.0],
+          [109.49861385582743, 18.315429476427267, 18.0],
+          [109.4986331920639, 18.31533809552878, 18.0],
+          [109.49864516391173, 18.315245573524494, 18.0],
+          [109.49864969860728, 18.315152447682139, 18.0],
+          [109.49865608652725, 18.314411754370636, 18.0],
+          [109.49867682952548, 18.31200593413825, 18.0],
+          [109.49868851211574, 18.310650815763, 18.0],
+          [109.49870244318919, 18.30903475067346, 18.0],
+          [109.49871654853578, 18.307398292576207, 18.0],
+          [109.4987165620105, 18.307396783889904, 18.0],
+          [109.49873045804964, 18.305784477665847, 18.0],
+          [109.49874059104605, 18.30460862039877, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID": 53,
+        "SJXZQMC": "三亚市",
+        "XJXZQMC": "吉阳区/天涯区",
+        "XZMC": "吉阳区/天涯区",
+        "GHCGMC": "三亚抱坡片区控制性详细规划",
+        "BZSJ": "20220501",
+        "BZDW": "中规院(北京)规划设计有限公司",
+        "PZWH": "三府函[2023]476号",
+        "PFSJ": "20230620",
+        "SJWT": "",
+        "DLMK": "鹿城大道",
+        "DLJB": "主干路",
+        "DLKD": 58.0,
+        "DLPD": 1.0700000524520875,
+        "DMLX": "B-B",
+        "SSQK": "现状",
+        "XZQDM": "460203/460204",
+        "BZ": "",
+        "SHAPE_Length": 222.75015821084137
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.48553344026297, 18.30560391624163, 18.0],
+          [109.4855748301397, 18.30561487458581, 18.0],
+          [109.48567744110136, 18.305643812832608, 18.0],
+          [109.4857609691514, 18.305667807071218, 18.0],
+          [109.48586288212208, 18.305698912414618, 18.0],
+          [109.48594592238693, 18.305724404259398, 18.0],
+          [109.48639833552358, 18.305867786221719, 18.0],
+          [109.4869653269781, 18.30604747746011, 18.0],
+          [109.48713665456738, 18.30610177437868, 18.0],
+          [109.4871934020422, 18.306119761055404, 18.0],
+          [109.4873810268674, 18.306177833531604, 18.0],
+          [109.48743512610875, 18.306194578446566, 18.0],
+          [109.48757117056863, 18.30623668549568, 18.0],
+          [109.48795061624969, 18.306348550738094, 18.0],
+          [109.48813987061884, 18.306401585341466, 18.0],
+          [109.48833166452522, 18.30645533120688, 18.0],
+          [109.48852167707243, 18.306505830250406, 18.0],
+          [109.48871423993674, 18.306557008148699, 18.0],
+          [109.48890497472947, 18.3066049614027, 18.0],
+          [109.48909826792408, 18.306653559398499, 18.0],
+          [109.48910968012143, 18.306656346514417, 18.0],
+          [109.48943405727897, 18.306735585702385, 18.0],
+          [109.48985861096371, 18.30683929737917, 18.0],
+          [109.49045275399767, 18.306984431876065, 18.0],
+          [109.49095813000685, 18.307107883434488, 18.0],
+          [109.49106502772905, 18.30713275760971, 18.0],
+          [109.49117881013953, 18.3071590952688, 18.0],
+          [109.49128627290206, 18.30718163433869, 18.0],
+          [109.49140071737094, 18.307205216438704, 18.0],
+          [109.49147355816405, 18.30721883897832, 18.0],
+          [109.49150869217313, 18.30722540931821, 18.0],
+          [109.49162372144525, 18.30724622392135, 18.0],
+          [109.49173214989668, 18.307264060378043, 18.0],
+          [109.4918476948018, 18.30728209128211, 18.0],
+          [109.49195652030859, 18.307297561083318, 18.0],
+          [109.49207250448986, 18.30731279890867, 18.0],
+          [109.49220168941422, 18.307328034174139, 18.0],
+          [109.49231804010815, 18.307340468687849, 18.0],
+          [109.49244760681653, 18.307352368465464, 18.0],
+          [109.49256003007602, 18.307361694349514, 18.0],
+          [109.4926898860419, 18.307370248406394, 18.0],
+          [109.49280251232067, 18.30737695860747, 18.0],
+          [109.49293256411929, 18.307382163533228, 18.0],
+          [109.49304532694194, 18.307386250376305, 18.0],
+          [109.49317547665695, 18.307388103612934, 18.0],
+          [109.49328831403979, 18.307389566245616, 18.0],
+          [109.49338941942502, 18.30738970355395, 18.0],
+          [109.49538804606634, 18.3073923772294, 18.0],
+          [109.49703840665183, 18.30739456989908, 18.0],
+          [109.4987165620105, 18.307396783889904, 18.0],
+          [109.4987606432398, 18.307396843589179, 18.0],
+          [109.50021559419985, 18.30739875055505, 18.0],
+          [109.50168889414786, 18.307400671166464, 18.0],
+          [109.50168889414786, 18.307400672019285, 18.0],
+          [109.50477067073124, 18.307404652256119, 18.0],
+          [109.50756781072697, 18.30740822227344, 18.0],
+          [109.50782312001553, 18.307408545502417, 18.0],
+          [109.50944775824117, 18.307410599157828, 18.0],
+          [109.51063757054676, 18.307412094198499, 18.0],
+          [109.51203720414994, 18.307413841681844, 18.0],
+          [109.51209467566683, 18.30741465359208, 18.0],
+          [109.51543255385289, 18.30746178617009, 18.0],
+          [109.51820856277819, 18.307500938650877, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID": 187,
+        "SJXZQMC": "三亚市",
+        "XJXZQMC": "吉阳区/天涯区",
+        "XZMC": "吉阳区/天涯区",
+        "GHCGMC": "三亚抱坡片区控制性详细规划",
+        "BZSJ": "20220501",
+        "BZDW": "中规院(北京)规划设计有限公司",
+        "PZWH": "三府函[2023]476号",
+        "PFSJ": "20230620",
+        "SJWT": "",
+        "DLMK": "",
+        "DLJB": "支路",
+        "DLKD": 20.0,
+        "DLPD": 0.4000000059604645,
+        "DMLX": "H-H",
+        "SSQK": "规划",
+        "XZQDM": "460203/460204",
+        "BZ": "",
+        "SHAPE_Length": 416.67828950221868
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.51543255385289, 18.30746178617009, 18.0],
+          [109.5154048489112, 18.30824315570946, 18.0],
+          [109.51538361004296, 18.30863350313767, 18.0],
+          [109.51534166590572, 18.30915987318614, 18.0],
+          [109.51532779591774, 18.309333911813235, 18.0],
+          [109.51527564691883, 18.309801453732143, 18.0],
+          [109.51525042042904, 18.31008676096924, 18.0],
+          [109.51523115515946, 18.31037249159386, 18.0],
+          [109.51521786458483, 18.310658533030265, 18.0],
+          [109.51521054780685, 18.310944770144883, 18.0],
+          [109.5152092111137, 18.311231090363415, 18.0],
+          [109.51522267865644, 18.311590131478785, 18.0],
+          [109.51522861652046, 18.311949356912515, 18.0],
+          [109.51522702021421, 18.3123086250948, 18.0],
+          [109.5152238464663, 18.312672408218849, 18.0],
+          [109.51522518226112, 18.31303620422356, 18.0],
+          [109.51523102400542, 18.313399955970099, 18.0],
+          [109.51524027844948, 18.313725103395475, 18.0],
+          [109.51524027844948, 18.31372512471585, 18.0],
+          [109.51524137439414, 18.31376361825948, 18.0],
+          [109.51524788897656, 18.31385599693008, 18.0],
+          [109.51526099539658, 18.313947736793187, 18.0],
+          [109.51528062628049, 18.31403840717856, 18.0],
+          [109.51530669628835, 18.3141275833866, 18.0],
+          [109.51533907875768, 18.314214854363539, 18.0],
+          [109.5153776245682, 18.314299808203577, 18.0],
+          [109.51542215495516, 18.314382050057934, 18.0],
+          [109.51547245971274, 18.314461197870587, 18.0],
+          [109.51566446202834, 18.31474123729138, 18.0],
+          [109.5168183129765, 18.316003393554824, 18.0],
+          [109.51689321270826, 18.31609068149489, 18.0],
+          [109.51696225811929, 18.31618226922734, 18.0],
+          [109.51702518420663, 18.316277796009609, 18.0],
+          [109.51708173764534, 18.3163768874547, 18.0],
+          [109.51713170463639, 18.31647915979551, 18.0],
+          [109.5171748866521, 18.316584212209585, 18.0],
+          [109.51721111660584, 18.31669163449447, 18.0],
+          [109.5172402498688, 18.31680100877341, 18.0],
+          [109.51726217774488, 18.316911907789899, 18.0],
+          [109.51727681130088, 18.317023897465949, 18.0],
+          [109.51728409214624, 18.317136541166414, 18.0],
+          [109.51728399602652, 18.31724940055154, 18.0],
+          [109.51727652024671, 18.31736203301886, 18.0],
+          [109.51723540345783, 18.317776138394703, 18.0],
+          [109.51723536932188, 18.317776486335423, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID": 189,
+        "SJXZQMC": "三亚市",
+        "XJXZQMC": "吉阳区/天涯区",
+        "XZMC": "吉阳区/天涯区",
+        "GHCGMC": "三亚抱坡片区控制性详细规划",
+        "BZSJ": "20220501",
+        "BZDW": "中规院(北京)规划设计有限公司",
+        "PZWH": "三府函[2023]476号",
+        "PFSJ": "20230620",
+        "SJWT": "",
+        "DLMK": "",
+        "DLJB": "支路",
+        "DLKD": 20.0,
+        "DLPD": 0.36000001430511477,
+        "DMLX": "H-H",
+        "SSQK": "规划",
+        "XZQDM": "460203/460204",
+        "BZ": "",
+        "SHAPE_Length": 282.54853788921317
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.51881630630554, 18.31280923306219, 18.0],
+          [109.51871882382585, 18.31281843414057, 18.0],
+          [109.51861688570236, 18.31283406377734, 18.0],
+          [109.51851612527023, 18.312855568490563, 18.0],
+          [109.51841691533022, 18.312882868965699, 18.0],
+          [109.51831961970011, 18.312915862008926, 18.0],
+          [109.51822460040093, 18.312954429074997, 18.0],
+          [109.51813220058912, 18.312998428592154, 18.0],
+          [109.51813162117576, 18.31299872622611, 18.0],
+          [109.51813046594234, 18.31299932064126, 18.0],
+          [109.51812930891224, 18.312999915056378, 18.0],
+          [109.51812815457709, 18.313000511177124, 18.0],
+          [109.51812699934362, 18.313001107297894, 18.0],
+          [109.51812584411019, 18.31300170512428, 18.0],
+          [109.51812468887673, 18.313002304656317, 18.0],
+          [109.51812353633822, 18.31300290333553, 18.0],
+          [109.51812238290141, 18.313003502867536, 18.0],
+          [109.51812122946457, 18.3130041041052, 18.0],
+          [109.51812007692607, 18.313004706195679, 18.0],
+          [109.51811892528588, 18.313005309138988, 18.0],
+          [109.51811777364567, 18.313005912935098, 18.0],
+          [109.51811662290378, 18.313006516731187, 18.0],
+          [109.51811547126361, 18.31300712138012, 18.0],
+          [109.51811432231836, 18.31300772688189, 18.0],
+          [109.51811317247477, 18.313008334089259, 18.0],
+          [109.51811202352956, 18.31300894129666, 18.0],
+          [109.51811087368597, 18.313009548504007, 18.0],
+          [109.51810972653738, 18.31301015741705, 18.0],
+          [109.51810857849041, 18.313010766330046, 18.0],
+          [109.51810743134183, 18.3130113769487, 18.0],
+          [109.51810628329487, 18.31301198756733, 18.0],
+          [109.51810513614628, 18.313012599891626, 18.0],
+          [109.51810398989594, 18.313013212215919, 18.0],
+          [109.51810284454398, 18.31301382454021, 18.0],
+          [109.51810169919198, 18.31301443942293, 18.0],
+          [109.5181005547383, 18.31301505345285, 18.0],
+          [109.51809826583097, 18.313016285776756, 18.0],
+          [109.5180971213773, 18.313016902365136, 18.0],
+          [109.51809597782193, 18.3130175198063, 18.0],
+          [109.51809483606322, 18.313018138100298, 18.0],
+          [109.51809369340617, 18.313018755541479, 18.0],
+          [109.51809140988871, 18.31301999554076, 18.0],
+          [109.51809026812998, 18.313020617246, 18.0],
+          [109.5180891281679, 18.313021238951284, 18.0],
+          [109.51808798730748, 18.313021860656549, 18.0],
+          [109.5180845674212, 18.313023730889225, 18.0],
+          [109.51808229109025, 18.313024981122294, 18.0],
+          [109.5180811529248, 18.31302560794446, 18.0],
+          [109.51808001475934, 18.313026233060979, 18.0],
+          [109.51807887839051, 18.313026862441608, 18.0],
+          [109.51807774022501, 18.313027489263776, 18.0],
+          [109.5180766038562, 18.313028117791569, 18.0],
+          [109.51807546748737, 18.313028747172184, 18.0],
+          [109.51807319654634, 18.313030006786194, 18.0],
+          [109.51807206197414, 18.313030638725274, 18.0],
+          [109.51807092560527, 18.31303126981149, 18.0],
+          [109.51806979103307, 18.313031901750575, 18.0],
+          [109.51806865825749, 18.31303253454246, 18.0],
+          [109.51806752368529, 18.313033167334305, 18.0],
+          [109.51806525633754, 18.313034435476525, 18.0],
+          [109.51806186070576, 18.31303634238031, 18.0],
+          [109.51806072793019, 18.313036980289089, 18.0],
+          [109.51805959695125, 18.313037616492204, 18.0],
+          [109.5180584659723, 18.313038254400973, 18.0],
+          [109.51805733589169, 18.313038892309739, 18.0],
+          [109.51805620491274, 18.31303953192414, 18.0],
+          [109.51805507573042, 18.313040171538533, 18.0],
+          [109.51805394475147, 18.31304081115296, 18.0],
+          [109.51805281646749, 18.313041450767348, 18.0],
+          [109.51805168728517, 18.313042090381726, 18.0],
+          [109.51805055810284, 18.31304273255458, 18.0],
+          [109.51804830243317, 18.31304401690029, 18.0],
+          [109.51804717325085, 18.313044660778738, 18.0],
+          [109.51804604676349, 18.313045303804416, 18.0],
+          [109.51804491937782, 18.313045947682889, 18.0],
+          [109.51804379199216, 18.31304659070854, 18.0],
+          [109.51804266550475, 18.313047236292645, 18.0],
+          [109.51804041253003, 18.313048526608058, 18.0],
+          [109.5180392878393, 18.313049173044964, 18.0],
+          [109.51803816225024, 18.31304982033469, 18.0],
+          [109.51803703755951, 18.31305046762441, 18.0],
+          [109.51803591197047, 18.31305111406135, 18.0],
+          [109.51803478727975, 18.313051761351067, 18.0],
+          [109.5180336634873, 18.313052410346434, 18.0],
+          [109.51803253879658, 18.313053059341823, 18.0],
+          [109.51803141500413, 18.313053707484344, 18.0],
+          [109.51803029211003, 18.313054358185334, 18.0],
+          [109.51802916831764, 18.313055007180709, 18.0],
+          [109.51802804542354, 18.313055657881699, 18.0],
+          [109.51802692163109, 18.313056308582668, 18.0],
+          [109.51802580053361, 18.31305696098933, 18.0],
+          [109.5180246776395, 18.3130576116903, 18.0],
+          [109.51802355564372, 18.31305826409691, 18.0],
+          [109.51802243454626, 18.313058916503544, 18.0],
+          [109.51802131255048, 18.313059568910153, 18.0],
+          [109.518020191453, 18.31306022302241, 18.0],
+          [109.51801907035552, 18.313060875429014, 18.0],
+          [109.51801794835972, 18.313061530394085, 18.0],
+          [109.51801682905887, 18.313062184506309, 18.0],
+          [109.51801570796141, 18.313062838618565, 18.0],
+          [109.51801458776224, 18.313063494436436, 18.0],
+          [109.51801346846139, 18.313064148548678, 18.0],
+          [109.51801234916057, 18.313064805219367, 18.0],
+          [109.51801122896139, 18.31306546103725, 18.0],
+          [109.51801010966054, 18.313066116855106, 18.0],
+          [109.51800899035972, 18.313066773525774, 18.0],
+          [109.51800787195717, 18.3130674310493, 18.0],
+          [109.51800675265634, 18.31306808942561, 18.0],
+          [109.51800563515214, 18.313068745243475, 18.0],
+          [109.51800451585129, 18.31306940276695, 18.0],
+          [109.51800339744877, 18.313070062848927, 18.0],
+          [109.51800227994454, 18.313070720372385, 18.0],
+          [109.51800116244032, 18.31307138045435, 18.0],
+          [109.5180000449361, 18.313072037977805, 18.0],
+          [109.5179989283302, 18.313072698059768, 18.0],
+          [109.51799781082602, 18.313073358141695, 18.0],
+          [109.51799669332179, 18.313074017370825, 18.0],
+          [109.5179955776142, 18.31307467915838, 18.0],
+          [109.51799446010998, 18.313075338387493, 18.0],
+          [109.51799334350409, 18.313076000175049, 18.0],
+          [109.51799222779653, 18.31307666025695, 18.0],
+          [109.51799111208894, 18.313077321191707, 18.0],
+          [109.51798888067377, 18.313078644766816, 18.0],
+          [109.51798776496617, 18.313079308260027, 18.0],
+          [109.51798664836029, 18.313079969194715, 18.0],
+          [109.51798553444933, 18.313080632687929, 18.0],
+          [109.51798441874175, 18.313081294475454, 18.0],
+          [109.51798330303416, 18.313081957968654, 18.0],
+          [109.51798218912323, 18.313082620609007, 18.0],
+          [109.51798107521225, 18.31308328410217, 18.0],
+          [109.51797995950466, 18.313083947595353, 18.0],
+          [109.51797884559373, 18.313084612794147, 18.0],
+          [109.51797661777182, 18.313085939780465, 18.0],
+          [109.51797550296256, 18.313086604979295, 18.0],
+          [109.51797438905159, 18.31308727017807, 18.0],
+          [109.51797327514066, 18.3130879328184, 18.0],
+          [109.51797104731873, 18.313089263215976, 18.0],
+          [109.51796993520442, 18.313089928414767, 18.0],
+          [109.51796882129345, 18.313090595319208, 18.0],
+          [109.51796770738251, 18.313091260517959, 18.0],
+          [109.51796659526818, 18.31309192571676, 18.0],
+          [109.51796548135724, 18.313092592621154, 18.0],
+          [109.5179643692429, 18.313093257819938, 18.0],
+          [109.51796325533197, 18.31309392472436, 18.0],
+          [109.51796214321763, 18.313094589923109, 18.0],
+          [109.51796103110333, 18.313095257680325, 18.0],
+          [109.517959918989, 18.313095924584745, 18.0],
+          [109.51795880507805, 18.313096591489147, 18.0],
+          [109.5179521323921, 18.31310059291548, 18.0],
+          [109.51795102027779, 18.31310126152547, 18.0],
+          [109.51794990816346, 18.313101929282685, 18.0],
+          [109.51794879604916, 18.313102596187045, 18.0],
+          [109.51794768393484, 18.313103264797058, 18.0],
+          [109.5179465718205, 18.313103931701439, 18.0],
+          [109.51794546150284, 18.313104600311424, 18.0],
+          [109.51794434938849, 18.313105267215808, 18.0],
+          [109.51794323727418, 18.313105935825804, 18.0],
+          [109.51794212515984, 18.31310660358298, 18.0],
+          [109.51794101484217, 18.313107272192988, 18.0],
+          [109.51793990272785, 18.31310794080299, 18.0],
+          [109.51793879061352, 18.313108607707318, 18.0],
+          [109.51793767849921, 18.31310927631731, 18.0],
+          [109.5179365681815, 18.31310994492731, 18.0],
+          [109.51793545606719, 18.31311061268446, 18.0],
+          [109.51793434395285, 18.31311128129446, 18.0],
+          [109.51793323363518, 18.3131119499044, 18.0],
+          [109.51793212152086, 18.313112618514386, 18.0],
+          [109.51793100940653, 18.313113285418728, 18.0],
+          [109.51792989908886, 18.313113954881506, 18.0],
+          [109.51792767486019, 18.313115292101445, 18.0],
+          [109.51792656454249, 18.313115959005754, 18.0],
+          [109.51792545242819, 18.31311662761572, 18.0],
+          [109.5179243421105, 18.31311729622568, 18.0],
+          [109.51792322999616, 18.313117965688446, 18.0],
+          [109.51792211788185, 18.313118632592766, 18.0],
+          [109.51792100756414, 18.3131193012027, 18.0],
+          [109.51791989544984, 18.313119969812658, 18.0],
+          [109.51791878333549, 18.313120636716964, 18.0],
+          [109.5179176712212, 18.313121305326907, 18.0],
+          [109.51791656090352, 18.313121974789664, 18.0],
+          [109.51791544878917, 18.31312264169396, 18.0],
+          [109.51791211514113, 18.313124645818126, 18.0],
+          [109.51791100302684, 18.313125315280847, 18.0],
+          [109.51790989091254, 18.31312598218515, 18.0],
+          [109.51790877879819, 18.313126650795028, 18.0],
+          [109.5179076684805, 18.313127317699338, 18.0],
+          [109.51790655636617, 18.31312798630926, 18.0],
+          [109.51790433213752, 18.313129320117793, 18.0],
+          [109.51790322002322, 18.313129989580508, 18.0],
+          [109.51789988368027, 18.313131990293305, 18.0],
+          [109.51789877156593, 18.313132658903205, 18.0],
+          [109.51789321099432, 18.31313599342446, 18.0],
+          [109.51789209708336, 18.31313666118153, 18.0],
+          [109.51789098496904, 18.313137328085757, 18.0],
+          [109.5178898728547, 18.31313799328437, 18.0],
+          [109.5178887607404, 18.31313866018862, 18.0],
+          [109.51788764593114, 18.313139327092839, 18.0],
+          [109.51788653381679, 18.313139993997078, 18.0],
+          [109.51788542170249, 18.31314065919565, 18.0],
+          [109.51788430779152, 18.31314132609989, 18.0],
+          [109.51788319567722, 18.31314199129848, 18.0],
+          [109.51788208176625, 18.313142656497058, 18.0],
+          [109.51788096965194, 18.313143323401268, 18.0],
+          [109.51787874183005, 18.313144653798426, 18.0],
+          [109.5178776297157, 18.313145318997017, 18.0],
+          [109.51787317407191, 18.31314797979127, 18.0],
+          [109.51787206195759, 18.313148644989803, 18.0],
+          [109.51787094804662, 18.313149309335548, 18.0],
+          [109.51786760361883, 18.31315130151994, 18.0],
+          [109.51786648970786, 18.313151966718509, 18.0],
+          [109.51786426188596, 18.31315329370432, 18.0],
+          [109.5178631461784, 18.313153957197217, 18.0],
+          [109.51786203226743, 18.313154619837296, 18.0],
+          [109.51786091655987, 18.31315528333018, 18.0],
+          [109.5178598026489, 18.313155946823089, 18.0],
+          [109.51785868694131, 18.313156608610325, 18.0],
+          [109.51785757213203, 18.313157272103245, 18.0],
+          [109.51785645642448, 18.3131579347433, 18.0],
+          [109.51785422500929, 18.31315925831777, 18.0],
+          [109.51785310930173, 18.313159921810656, 18.0],
+          [109.51785199539076, 18.31316058274509, 18.0],
+          [109.51785087788655, 18.313161244532329, 18.0],
+          [109.51784976128065, 18.313161906319569, 18.0],
+          [109.51784864557308, 18.313162565548333, 18.0],
+          [109.5178464141579, 18.313163889122785, 18.0],
+          [109.5178452966537, 18.31316454835157, 18.0],
+          [109.51784418094612, 18.313165208433149, 18.0],
+          [109.51784306254359, 18.313165869367553, 18.0],
+          [109.517841946836, 18.313166529449125, 18.0],
+          [109.51784082933178, 18.31316718953071, 18.0],
+          [109.51783971182759, 18.31316784875945, 18.0],
+          [109.51783859342504, 18.313168507135388, 18.0],
+          [109.51783747771747, 18.313169166364149, 18.0],
+          [109.51783636021325, 18.313169826445724, 18.0],
+          [109.51783524091239, 18.313170483968816, 18.0],
+          [109.51783412250988, 18.313171142344748, 18.0],
+          [109.51783300500566, 18.31317179986785, 18.0],
+          [109.51783188750143, 18.313172458243764, 18.0],
+          [109.51783076820063, 18.31317311576688, 18.0],
+          [109.51782964979806, 18.313173773289987, 18.0],
+          [109.51782853049724, 18.313174429960257, 18.0],
+          [109.51782741299302, 18.313175087483328, 18.0],
+          [109.51782629369217, 18.313175744153598, 18.0],
+          [109.51782517349302, 18.313176399971053, 18.0],
+          [109.51782293489132, 18.313177711605954, 18.0],
+          [109.51782181469217, 18.313178368276199, 18.0],
+          [109.51782069539132, 18.313179022388018, 18.0],
+          [109.51781957609048, 18.313179678205427, 18.0],
+          [109.51781845409471, 18.31318033231726, 18.0],
+          [109.51781733479385, 18.313180987281869, 18.0],
+          [109.51781621369638, 18.313181641393649, 18.0],
+          [109.51781509349724, 18.313182295505457, 18.0],
+          [109.51781397239975, 18.31318294961723, 18.0],
+          [109.51781285040394, 18.313183602023395, 18.0],
+          [109.51781172930648, 18.31318425613517, 18.0],
+          [109.51781060820899, 18.313184908541296, 18.0],
+          [109.51780948621321, 18.313185561800255, 18.0],
+          [109.51780836511573, 18.313186214206409, 18.0],
+          [109.5178072413233, 18.3131868640541, 18.0],
+          [109.51780612022586, 18.31318751731302, 18.0],
+          [109.51780499733175, 18.313188167160719, 18.0],
+          [109.51780387533595, 18.313188817861194, 18.0],
+          [109.51780275244184, 18.313189468561704, 18.0],
+          [109.51780162864944, 18.313190119262175, 18.0],
+          [109.51780050575533, 18.313190769962657, 18.0],
+          [109.51779938196289, 18.313191418957524, 18.0],
+          [109.51779825906879, 18.313192069658, 18.0],
+          [109.51779713347972, 18.313192718652826, 18.0],
+          [109.51779601058562, 18.31319336679486, 18.0],
+          [109.51779263651342, 18.313195312073707, 18.0],
+          [109.5177915118227, 18.313195958510094, 18.0],
+          [109.51779038623363, 18.31319660579928, 18.0],
+          [109.51778926154289, 18.31319725308845, 18.0],
+          [109.51778813595387, 18.31319789781918, 18.0],
+          [109.51778588387744, 18.313199190691923, 18.0],
+          [109.51778475649175, 18.313199835422627, 18.0],
+          [109.51778363180103, 18.31320048100616, 18.0],
+          [109.51778250441532, 18.313201125736904, 18.0],
+          [109.51778137702964, 18.3132017696148, 18.0],
+          [109.51778025054228, 18.313202412639869, 18.0],
+          [109.51777912135995, 18.313203055664919, 18.0],
+          [109.5177779948726, 18.313203699542819, 18.0],
+          [109.51777686748695, 18.313204342567905, 18.0],
+          [109.51777573830462, 18.31320498388732, 18.0],
+          [109.5177746100206, 18.313205626059565, 18.0],
+          [109.51777348263494, 18.313206267378996, 18.0],
+          [109.51777122247367, 18.31320755087064, 18.0],
+          [109.51777009418969, 18.313208190484415, 18.0],
+          [109.51776896500738, 18.313208830098217, 18.0],
+          [109.51776783402842, 18.31320946971199, 18.0],
+          [109.51776670574444, 18.31321010932574, 18.0],
+          [109.51776557476549, 18.313210747233886, 18.0],
+          [109.51776444378655, 18.313211386847646, 18.0],
+          [109.51776218182866, 18.313212662663895, 18.0],
+          [109.51776104995142, 18.31321329886638, 18.0],
+          [109.51775991897248, 18.313213935068867, 18.0],
+          [109.5177587861969, 18.31321457297702, 18.0],
+          [109.51775765521795, 18.313215207473865, 18.0],
+          [109.51775652244239, 18.313215843676344, 18.0],
+          [109.5177553896668, 18.31321647817314, 18.0],
+          [109.51775425778952, 18.31321711437562, 18.0],
+          [109.51775199044175, 18.313218380810857, 18.0],
+          [109.51775085586955, 18.3132190153077, 18.0],
+          [109.51774858852179, 18.313220280037247, 18.0],
+          [109.51774518300856, 18.31322217414672, 18.0],
+          [109.51774291206749, 18.313223435464946, 18.0],
+          [109.51774063932983, 18.31322469251914, 18.0],
+          [109.517739502961, 18.31322532189901, 18.0],
+          [109.51773836659217, 18.313225950426089, 18.0],
+          [109.51773723022335, 18.313226578100357, 18.0],
+          [109.51773381572694, 18.313228458564646, 18.0],
+          [109.51773267756146, 18.313229083680448, 18.0],
+          [109.517731539396, 18.313229709649034, 18.0],
+          [109.51773040123055, 18.31323033476484, 18.0],
+          [109.51772926126847, 18.313230958174996, 18.0],
+          [109.51772869083824, 18.313231271159279, 18.0],
+          [109.5176017651768, 18.313296716420063, 18.0],
+          [109.51747152113872, 18.313355917325386, 18.0],
+          [109.51733829559218, 18.3134087169633, 18.0],
+          [109.51720243169368, 18.3134549814474, 18.0],
+          [109.51706428158275, 18.313494591388499, 18.0],
+          [109.51692420099229, 18.3135274410419, 18.0],
+          [109.5167825546383, 18.313553450246667, 18.0],
+          [109.51663970723675, 18.31357254736933, 18.0],
+          [109.51524027844948, 18.313725103395475, 18.0],
+          [109.51524027844948, 18.31372512471585, 18.0],
+          [109.51306563950463, 18.313736982266666, 18.0],
+          [109.5105275044666, 18.313750788500579, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID": 199,
+        "SJXZQMC": "三亚市",
+        "XJXZQMC": "吉阳区/天涯区",
+        "XZMC": "吉阳区/天涯区",
+        "GHCGMC": "三亚抱坡片区控制性详细规划",
+        "BZSJ": "20220501",
+        "BZDW": "中规院(北京)规划设计有限公司",
+        "PZWH": "三府函[2023]476号",
+        "PFSJ": "20230620",
+        "SJWT": "",
+        "DLMK": "育岭前路",
+        "DLJB": "主干路",
+        "DLKD": 43.0,
+        "DLPD": 1.690000057220459,
+        "DMLX": "A-A",
+        "SSQK": "规划",
+        "XZQDM": "460203/460204",
+        "BZ": "",
+        "SHAPE_Length": 158.25412337760805
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.51860273723664, 18.318135850728166, 18.0],
+          [109.51848357391757, 18.31809134595713, 18.0],
+          [109.51827646193894, 18.318021467977066, 18.0],
+          [109.51806703500178, 18.317958190601954, 18.0],
+          [109.51785552756648, 18.317901585473849, 18.0],
+          [109.51764216780502, 18.317851711442218, 18.0],
+          [109.51742719646596, 18.317808626502939, 18.0],
+          [109.51723536932188, 18.317776486335423, 18.0],
+          [109.51721084441629, 18.317772377564894, 18.0],
+          [109.51614225257174, 18.317610739410328, 18.0],
+          [109.51546757018268, 18.317506689656037, 18.0],
+          [109.51479355524185, 18.317398761315187, 18.0],
+          [109.51306104282532, 18.317116198497457, 18.0],
+          [109.51166598074866, 18.31688866130973, 18.0],
+          [109.51144903311597, 18.316850506170085, 18.0],
+          [109.51123319400434, 18.31680699202281, 18.0],
+          [109.51112532071176, 18.316782439037817, 18.0],
+          [109.51101860804252, 18.316758149564817, 18.0],
+          [109.51080541896099, 18.316704014609177, 18.0],
+          [109.51059377228678, 18.316644617851805, 18.0],
+          [109.51038380725879, 18.31658000192735, 18.0],
+          [109.50804289284979, 18.31582745902349, 18.0],
+          [109.50775706060448, 18.315738778318655, 18.0],
+          [109.50746932662571, 18.315655899209785, 18.0],
+          [109.50717981847427, 18.31557886008158, 18.0],
+          [109.50688866550755, 18.315507699318123, 18.0],
+          [109.50659600067618, 18.315442441658094, 18.0],
+          [109.50520976993707, 18.315148101768484, 18.0],
+          [109.50488735290348, 18.315082197543569, 18.0],
+          [109.50456388394272, 18.31502118074451, 18.0],
+          [109.50427488154279, 18.314971195870379, 18.0],
+          [109.5042394412082, 18.314965066727074, 18.0],
+          [109.50391411093817, 18.314913870846629, 18.0],
+          [109.50181452174371, 18.31459975847711, 18.0],
+          [109.501468122387, 18.31455141173269, 18.0],
+          [109.50112075374813, 18.314509879795286, 18.0],
+          [109.50077256494736, 18.314475179726008, 18.0],
+          [109.50042370241013, 18.31444732432116, 18.0],
+          [109.50007431615509, 18.31442632637624, 18.0],
+          [109.49972455081103, 18.31441219698033, 18.0],
+          [109.4993745537016, 18.314404940399105, 18.0],
+          [109.49902447574381, 18.314404557486307, 18.0],
+          [109.49867446426133, 18.314411051653207, 18.0],
+          [109.49865608652725, 18.314411754370636, 18.0],
+          [109.49832466478127, 18.314424418634958, 18.0],
+          [109.49797522911894, 18.31444465416591, 18.0],
+          [109.49762630280131, 18.314471746304329, 18.0],
+          [109.49727803315217, 18.314505688224448, 18.0],
+          [109.49697672832443, 18.314541044952695, 18.0],
+          [109.4969305665969, 18.31454646201322, 18.0],
+          [109.49658405135753, 18.31459405146236, 18.0],
+          [109.49623863475775, 18.314648437804409, 18.0],
+          [109.49589446322293, 18.3147095963015, 18.0],
+          [109.49555167958526, 18.31477750050923, 18.0],
+          [109.4952104320667, 18.314852124835448, 18.0],
+          [109.49510406614714, 18.314876487917596, 18.0],
+          [109.49479758792167, 18.31494940828716, 18.0],
+          [109.49450530038276, 18.315024188603368, 18.0],
+          [109.49450529948442, 18.31502418945619, 18.0],
+          [109.49450516563545, 18.315024222715747, 18.0],
+          [109.49449249938994, 18.315027462538727, 18.0],
+          [109.49418889667169, 18.315110627639489, 18.0],
+          [109.4938868678018, 18.31519887543942, 18.0],
+          [109.49367665753374, 18.315258592496059, 18.0],
+          [109.49346449073497, 18.315311626075819, 18.0],
+          [109.49325060006922, 18.31535791648836, 18.0],
+          [109.49303522179332, 18.315397415129035, 18.0],
+          [109.4928185912659, 18.315430075950866, 18.0],
+          [109.49260094833721, 18.315455865698316, 18.0],
+          [109.49212062095143, 18.315505077789266, 18.0],
+          [109.49188411250342, 18.315532189376243, 18.0],
+          [109.49164839547116, 18.315564983210547, 18.0],
+          [109.4914136162801, 18.315603437968706, 18.0],
+          [109.49117992674543, 18.31564752721003, 18.0],
+          [109.49094747239431, 18.31569722449316, 18.0],
+          [109.49071640414368, 18.315752497406686, 18.0],
+          [109.49048686662228, 18.31581331098023, 18.0],
+          [109.49026226264845, 18.31587573889269, 18.0],
+          [109.49026226085181, 18.31587573889269, 18.0],
+          [109.48930376113857, 18.31613569249316, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID": 195,
+        "SJXZQMC": "三亚市",
+        "XJXZQMC": "吉阳区/天涯区",
+        "XZMC": "吉阳区/天涯区",
+        "GHCGMC": "三亚抱坡片区控制性详细规划",
+        "BZSJ": "20220501",
+        "BZDW": "中规院(北京)规划设计有限公司",
+        "PZWH": "三府函[2023]476号",
+        "PFSJ": "20230620",
+        "SJWT": "",
+        "DLMK": "站北路",
+        "DLJB": "次干路",
+        "DLKD": 25.0,
+        "DLPD": 1.0399999618530274,
+        "DMLX": "E-E",
+        "SSQK": "规划",
+        "XZQDM": "460203/460204",
+        "BZ": "",
+        "SHAPE_Length": 210.51642789397173
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.48760550417879, 18.30122330164751, 18.0],
+          [109.48762644121314, 18.300476193937177, 18.0],
+          [109.48763195686898, 18.30040631737673, 18.0],
+          [109.48764453507958, 18.300337280876627, 18.0],
+          [109.48766405367407, 18.3002697317754, 18.0],
+          [109.48769033029444, 18.30020430632506, 18.0],
+          [109.48772312149726, 18.300141620309334, 18.0],
+          [109.48776211197384, 18.30008226307334, 18.0],
+          [109.48780693970316, 18.300026793259076, 18.0],
+          [109.48785718337533, 18.299975731129228, 18.0],
+          [109.48791236778154, 18.29992955856702, 18.0],
+          [109.48797197459389, 18.299888709694316, 18.0],
+          [109.4880354450603, 18.299853567459839, 18.0],
+          [109.48810218000445, 18.299824462786135, 18.0],
+          [109.48817155240227, 18.29980167115798, 18.0],
+          [109.48824291007687, 18.29978540324028, 18.0],
+          [109.48831558198673, 18.29977581767141, 18.0],
+          [109.48838888361557, 18.299772999740957, 18.0],
+          [109.49066153594444, 18.29979097342871, 18.0],
+          [109.4934591008433, 18.299813060575809, 18.0],
+          [109.4954135106097, 18.299828467077825, 18.0],
+          [109.50414347777965, 18.29989703981182, 18.0],
+          [109.50433890806633, 18.29990178781654, 18.0],
+          [109.50453404909553, 18.299912964006816, 18.0],
+          [109.50472867179677, 18.299930554735256, 18.0],
+          [109.50492254530305, 18.29995454123645, 18.0],
+          [109.50505705005055, 18.299975704689837, 18.0],
+          [109.50511543784909, 18.29998489109817, 18.0],
+          [109.50530712216104, 18.300021573613276, 18.0],
+          [109.50549736916854, 18.30006454016344, 18.0],
+          [109.50568595429277, 18.300113742129605, 18.0],
+          [109.5106880468826, 18.301507620887074, 18.0],
+          [109.51219865027109, 18.301928535148499, 18.0],
+          [109.51219949917905, 18.30192880721528, 18.0],
+          [109.51267084610694, 18.30208021103346, 18.0],
+          [109.51314509638982, 18.302225927765848, 18.0],
+          [109.51362131847476, 18.302365655510206, 18.0],
+          [109.51409942702182, 18.302499372106334, 18.0],
+          [109.51457934028423, 18.302627054540669, 18.0],
+          [109.51506097651539, 18.302748678946214, 18.0],
+          [109.51554425217194, 18.302864226572596, 18.0],
+          [109.5160290801173, 18.302973674404496, 18.0],
+          [109.51651537680817, 18.303077007101839, 18.0],
+          [109.51668901127111, 18.303112988757488, 18.0],
+          [109.5168635647106, 18.30314465745259, 18.0],
+          [109.51721841451919, 18.303208982446063, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID": 129,
+        "SJXZQMC": "三亚市",
+        "XJXZQMC": "吉阳区/天涯区",
+        "XZMC": "吉阳区/天涯区",
+        "GHCGMC": "三亚抱坡片区控制性详细规划",
+        "BZSJ": "20220501",
+        "BZDW": "中规院(北京)规划设计有限公司",
+        "PZWH": "三府函[2023]476号",
+        "PFSJ": "20230620",
+        "SJWT": "",
+        "DLMK": "抱坡中路",
+        "DLJB": "次干路",
+        "DLKD": 18.0,
+        "DLPD": 1.4800000190734864,
+        "DMLX": "F-F",
+        "SSQK": "规划",
+        "XZQDM": "460203/460204",
+        "BZ": "",
+        "SHAPE_Length": 901.4272732521768
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.50427488154279, 18.314971195870379, 18.0],
+          [109.50515595546165, 18.31133849294395, 18.0],
+          [109.5051749718979, 18.311246641683334, 18.0],
+          [109.50518772258504, 18.31115380535705, 18.0],
+          [109.50519415092923, 18.311060375412059, 18.0],
+          [109.50519423177761, 18.310966744148908, 18.0],
+          [109.50518796423185, 18.31087330472186, 18.0],
+          [109.50501450314376, 18.309159603689208, 18.0],
+          [109.50477067073124, 18.307404652256119, 18.0],
+          [109.5047372785555, 18.30740460961374, 18.0],
+          [109.50465460929485, 18.30680960200146, 18.0],
+          [109.50464554619197, 18.306719048935187, 18.0],
+          [109.5046434468291, 18.306628105215919, 18.0],
+          [109.50464832288449, 18.306537259526779, 18.0],
+          [109.50466014830688, 18.306446996287666, 18.0],
+          [109.50467885841764, 18.306357805036613, 18.0],
+          [109.50470435350371, 18.306270159108459, 18.0],
+          [109.50473649702119, 18.306184531838917, 18.0],
+          [109.5047751173919, 18.306101382066126, 18.0],
+          [109.50556234880462, 18.304561191101528, 18.0],
+          [109.50560522539311, 18.304469469292383, 18.0],
+          [109.50564143288895, 18.304375159851735, 18.0],
+          [109.50567080240886, 18.304278708822414, 18.0],
+          [109.50569319471394, 18.304180562248054, 18.0],
+          [109.50570850829459, 18.30408118237773, 18.0],
+          [109.50571666859067, 18.303981035725806, 18.0],
+          [109.50571763787284, 18.30388058966059, 18.0],
+          [109.5057114116496, 18.30378031752156, 18.0],
+          [109.50569801956536, 18.303680684120598, 18.0],
+          [109.50507819549402, 18.300056214318393, 18.0],
+          [109.50505705005055, 18.299975704689837, 18.0]
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": {
+        "SmUserID": 0,
+        "OBJECTID": 200,
+        "SJXZQMC": "三亚市",
+        "XJXZQMC": "吉阳区/天涯区",
+        "XZMC": "吉阳区/天涯区",
+        "GHCGMC": "三亚抱坡片区控制性详细规划",
+        "BZSJ": "20220501",
+        "BZDW": "中规院(北京)规划设计有限公司",
+        "PZWH": "三府函[2023]476号",
+        "PFSJ": "20230620",
+        "SJWT": "",
+        "DLMK": "抱坡路",
+        "DLJB": "主干路",
+        "DLKD": 38.0,
+        "DLPD": 1.899999976158142,
+        "DMLX": "C-C",
+        "SSQK": "规划",
+        "XZQDM": "460203/460204",
+        "BZ": "",
+        "SHAPE_Length": 155.32087453652293
+      },
+      "geometry": {
+        "type": "LineString",
+        "coordinates": [
+          [109.51225505189452, 18.30141646718246, 18.0],
+          [109.51224402417611, 18.30146744274716, 18.0],
+          [109.51222260654309, 18.301598551090359, 18.0],
+          [109.51220793256293, 18.301730504533347, 18.0],
+          [109.51220004086317, 18.30186298665786, 18.0],
+          [109.51219949917905, 18.30192880721528, 18.0],
+          [109.51219894941008, 18.301995678487967, 18.0],
+          [109.5122046573054, 18.30212826019581, 18.0],
+          [109.5122905856539, 18.30337757552914, 18.0],
+          [109.51238494109809, 18.304749442999026, 18.0],
+          [109.51246119369267, 18.305858082442659, 18.0],
+          [109.5124667569592, 18.30598287975467, 18.0],
+          [109.51246629163191, 18.30610778870057, 18.0],
+          [109.51245980040565, 18.306232544895729, 18.0],
+          [109.51244729675521, 18.306356881397777, 18.0],
+          [109.51242880673174, 18.30648053552935, 18.0],
+          [109.51240213125935, 18.30661314194828, 18.0],
+          [109.51236857199699, 18.306744312065964, 18.0],
+          [109.51232821338623, 18.30687372350845, 18.0],
+          [109.51228115244511, 18.307001054755685, 18.0],
+          [109.51222751224288, 18.307125986846964, 18.0],
+          [109.51209467566683, 18.30741465359208, 18.0],
+          [109.51135172401114, 18.309029153491467, 18.0],
+          [109.51071226725927, 18.31041872107039, 18.0],
+          [109.5105385501513, 18.31079621144262, 18.0],
+          [109.51048067798576, 18.310930228548089, 18.0],
+          [109.51042930063974, 18.311066639440626, 18.0],
+          [109.51038452321608, 18.3112051558586, 18.0],
+          [109.51034644363118, 18.311345486982824, 18.0],
+          [109.51031513734354, 18.311487338583544, 18.0],
+          [109.51029067532001, 18.31163041216792, 18.0],
+          [109.51027310606969, 18.311774406685527, 18.0],
+          [109.51026246732178, 18.311919018528469, 18.0],
+          [109.51025877973754, 18.312063943237058, 18.0],
+          [109.51026205499508, 18.312208878911, 18.0],
+          [109.51027228051795, 18.312353517681339, 18.0],
+          [109.51028944103484, 18.312497555944267, 18.0],
+          [109.51031349612151, 18.312640693508173, 18.0],
+          [109.5105275044666, 18.313750788500579, 18.0],
+          [109.51084750503205, 18.315410655819116, 18.0],
+          [109.51101397183735, 18.316274122985978, 18.0],
+          [109.51104489274774, 18.31642709450432, 18.0],
+          [109.51107857328268, 18.31657953288637, 18.0],
+          [109.51112532071176, 18.316782439037817, 18.0],
+          [109.512092664339, 18.32098107677135, 18.0],
+          [109.51211099222377, 18.32104028103726, 18.0],
+          [109.51211370872088, 18.321049055186177, 18.0],
+          [109.51211663670645, 18.321058510915678, 18.0],
+          [109.51211976315551, 18.321068605356808, 18.0],
+          [109.51212307504301, 18.321079295640585, 18.0],
+          [109.51212655934397, 18.321090538898067, 18.0],
+          [109.51213020303334, 18.321102292260279, 18.0],
+          [109.51213399308614, 18.321114512858235, 18.0],
+          [109.51213791647729, 18.32112715782301, 18.0],
+          [109.51214196018184, 18.321140184285658, 18.0],
+          [109.51214611117475, 18.321153549377173, 18.0],
+          [109.512150356431, 18.321167210228628, 18.0],
+          [109.51215468292559, 18.32118112397103, 18.0],
+          [109.51215907763347, 18.321195247735447, 18.0],
+          [109.51216352752965, 18.32120953865292, 18.0],
+          [109.51216801958913, 18.321223953854465, 18.0],
+          [109.51217254078685, 18.321238450471126, 18.0],
+          [109.51217707809787, 18.32125298563396, 18.0],
+          [109.51218161849708, 18.321267516473989, 18.0],
+          [109.51218614895952, 18.321282000122264, 18.0],
+          [109.51219065887705, 18.321296400906868, 18.0],
+          [109.51219514730919, 18.321310711944045, 18.0],
+          [109.51219961573232, 18.321324933547098, 18.0],
+          [109.51220406562287, 18.32133906602933, 18.0],
+          [109.51220849845719, 18.32135310970407, 18.0],
+          [109.51221291571173, 18.321367064884588, 18.0],
+          [109.51221731886283, 18.321380931884204, 18.0],
+          [109.51222170938692, 18.321394711016194, 18.0],
+          [109.51222608876039, 18.321408402593894, 18.0],
+          [109.51223045845961, 18.32142200693058, 18.0],
+          [109.51223481996107, 18.321435524339564, 18.0],
+          [109.51223917474107, 18.321448955134163, 18.0],
+          [109.51224352427606, 18.321462299627645, 18.0],
+          [109.51224787004239, 18.32147555813336, 18.0],
+          [109.51225221351649, 18.321488730964569, 18.0],
+          [109.51225655617479, 18.321501818434578, 18.0],
+          [109.51226089949363, 18.321514820856714, 18.0],
+          [109.51226524494942, 18.321527738544249, 18.0],
+          [109.51226959401859, 18.321540571810489, 18.0],
+          [109.5122739481775, 18.321553320968765, 18.0],
+          [109.51227830675892, 18.321565982032909, 18.0],
+          [109.51228266052105, 18.321578533818938, 18.0],
+          [109.51228699807843, 18.321590950843445, 18.0],
+          [109.51229130804559, 18.321603207623, 18.0],
+          [109.51229557903712, 18.321615278674213, 18.0],
+          [109.51229979966755, 18.321627138513646, 18.0],
+          [109.51230395855142, 18.321638761657839, 18.0],
+          [109.51230804430327, 18.321650122623426, 18.0],
+          [109.51231204553767, 18.321661195926976, 18.0],
+          [109.51231595086914, 18.321671956085046, 18.0],
+          [109.5123197489123, 18.32168237761423, 18.0],
+          [109.51232342828162, 18.321692435031097, 18.0],
+          [109.51232697759167, 18.321702102852258, 18.0],
+          [109.51233038545702, 18.32171135559426, 18.0],
+          [109.51233364049223, 18.321720167773667, 18.0],
+          [109.51233673131174, 18.321728513907098, 18.0],
+          [109.51233964653028, 18.321736368511134, 18.0],
+          [109.51234237476224, 18.321743706102319, 18.0],
+          [109.51234490462226, 18.32175050119726, 18.0],
+          [109.51234722472482, 18.321756728312516, 18.0],
+          [109.51236196758303, 18.321796292506315, 18.0],
+          [109.51240321552592, 18.32188490700171, 18.0],
+          [109.51248861117347, 18.322046128420909, 18.0],
+          [109.512582335102, 18.32220307388085, 18.0],
+          [109.51268415285125, 18.32235534770638, 18.0],
+          [109.5127936350265, 18.322502334208, 18.0],
+          [109.5130307902615, 18.322783749781377, 18.0],
+          [109.51312990498005, 18.322895417573986, 18.0]
+        ]
+      }
+    }
+  ]
+}

+ 637 - 0
static/data/light.json

@@ -0,0 +1,637 @@
+{
+  "type": "FeatureCollection",
+  "features": [
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.4952915557808, 18.312669163282729, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49550313074357, 18.312669163282729, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49522407180112, 18.30943711221325, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49548743945788, 18.30942861648239, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49525550600532, 18.306645415051756, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49551377622355, 18.306625025297686, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49529942453667, 18.30229810476759, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49556279219341, 18.302306600498456, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49532665866392, 18.298804431914065, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49562027112252, 18.298826180985075, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48291978045096, 18.324356904160636, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48287301124866, 18.324111922624796, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48465024093595, 18.324270047070656, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48463465120185, 18.32402061132507, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48709117397377, 18.323799401523844, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48709117397377, 18.32417348554519, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48463465120185, 18.32402061132507, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48941347724748, 18.324041131573567, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49005376989799, 18.32391933677592, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49257530281807, 18.324544133213317, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49277104445715, 18.324183098634575, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49815512893412, 18.32529756860914, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49793328840984, 18.32563250430267, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48975789215899, 18.32233860548068, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48973701305083, 18.32151040085667, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48941180222502, 18.319649962239695, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48954097430756, 18.319600965932524, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.4888789434606, 18.31826266729671, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48899252580904, 18.318200308360315, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48809878688425, 18.316977606906876, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.4881932161308, 18.31687961429254, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.4870716491625, 18.315494138006874, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48720972966453, 18.315445141699706, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48564590240572, 18.313412483718119, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48579623198452, 18.313362373858515, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.4843864950995, 18.310754685718185, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48453971991464, 18.31075112235039, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48385632626018, 18.30851503337286, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48399886097194, 18.30850167074363, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51289848601518, 18.323254494267869, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51328928963487, 18.323526357655479, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51239818890638, 18.32203465887982, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51103923969954, 18.316813975228965, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51123498133862, 18.31677482690115, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51069995419181, 18.31515669601811, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.5109217947161, 18.315117547690297, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.5103069512398, 18.313098300432267, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51052444194989, 18.313098300432267, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51056951604999, 18.310447789574114, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51083050490209, 18.31052173641554, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51126684563919, 18.309007729209957, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51144083820725, 18.309055577166175, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51201863286322, 18.30741129642354, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.5122274239449, 18.30747045389668, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51230505290408, 18.305083917460377, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51251008574627, 18.305085726983088, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51207067784644, 18.301907011627724, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.5123697275728, 18.30200488244726, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51286700988655, 18.299460771272864, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51265821880486, 18.299391174245636, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48345042700076, 18.304992601892619, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48371562429812, 18.30498585968061, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48371562429812, 18.30498585968061, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.4832601987512, 18.303292520510025, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48354554656284, 18.303275121253216, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48298967429078, 18.300836085278129, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.4832402235888, 18.300808246467239, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49653457398054, 18.31394199644436, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49665428086738, 18.313774963579016, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51606171712555, 18.320682835258859, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51584966368323, 18.32045990728102, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51438297769853, 18.32165386331355, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.5150484992714, 18.32184960495263, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51156327860812, 18.31928436999301, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51181991764602, 18.319245221665196, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51825900510105, 18.318451875449705, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.51841192825657, 18.318672764452136, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.52038293781672, 18.31722849020547, 18.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.52050444868024, 18.317425693599608, 18.0]
+      }
+    }
+  ]
+}

+ 911 - 0
static/data/lightPoint3D.json

@@ -0,0 +1,911 @@
+{
+  "type": "FeatureCollection",
+  "features": [
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48533955996752, 18.29971456677758, 67.07950882054866
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48566280097848, 18.29971642295441, 67.10717929620296
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48542066126719, 18.299708634331304, 11.793789722956717
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48621351077107, 18.29977067136518, 12.608738311566413
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48602526418795, 18.299789148813387, 66.93213618639857
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48641948472846, 18.299818034892068, 65.89118660148233
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48654551004468, 18.300260063804588, 65.86455057002604
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.48610154783147, 18.3002717893634, 65.78936808183789]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48630964936614, 18.30023430479176, 16.470917830243708
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.4856286034029, 18.30017889764611, 12.177436603233219
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48577030851101, 18.300213932854704, 67.06563028506935
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48548818981392, 18.300209411006646, 67.11795275006443
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48563234155277, 18.300702489446885, 67.70779564697296
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48611698671357, 18.300704995201146, 67.71969223581255
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48664642780395, 18.30070455573071, 67.86792810820043
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48686045638773, 18.30066301361014, 12.09902950655669
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48714028691437, 18.300705548147439, 67.64813079312444
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48723922057657, 18.30039756850865, 29.56006047781557
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48721740038971, 18.30011103529047, 27.95620163436979
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49113716028168, 18.31223807116608, 77.6639886572957]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49087798993641, 18.312451517127007, 77.64675774797797
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49005808457243, 18.312217254414859, 84.59794699121267
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49013023029019, 18.312495744576326, 85.10212025605142
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49066034389023, 18.312104476219458, 20.643644521012904
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49114963718499, 18.312824169580489, 78.99285318050534
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49088383723664, 18.312751287855865, 77.43516237847507
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49018486823178, 18.312876741645057, 82.19582248851657
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.48995867481236, 18.312649715417306, 81.31187427323312
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49051452581984, 18.31291358018712, 21.9850055212155]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49044313657439, 18.313166472307004, 87.32944072317332
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49102179573592, 18.31308346571872, 79.24580027535558
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49017361789983, 18.313143204471645, 82.36161707248539
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49789205386009, 18.32227425135399, 125.30643489118666
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49698529531116, 18.321948982586, 124.78961393982172]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49604511869409, 18.321893698566915, 123.01976026687771
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49526338563278, 18.321854062499925, 124.11166492849589
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49479198504324, 18.32272870316442, 123.47977787349373
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49564325382899, 18.32279808956578, 123.57412046659738
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49653899519918, 18.323080831474578, 125.20199505332858
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.4965060102611, 18.323696485826934, 117.5302168475464
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49599912481159, 18.324093265655319, 119.2028918126598
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49544563344611, 18.323741813898768, 118.18253428116441
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.494854309565, 18.32338175111941, 113.87192432302982]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49644567506619, 18.321805978872236, 29.865134469233455
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.4954513683397, 18.32177986590439, 25.16865000501275]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49809217995345, 18.32214330555346, 32.86343419738114
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.4944223695361, 18.32266214161504, 33.38558042887598]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49445997811304, 18.322275293497733, 29.355146420188249
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49453443682948, 18.32304262790196, 25.39480515010655
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49454225311172, 18.32342812894726, 108.89045428670943
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49436848495643, 18.323392524243773, 24.220446296036245
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.49496859874302, 18.323799257776768, 30.362583886832]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49574507761449, 18.324348610584364, 28.37287377845496
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49567038404568, 18.324200438228528, 116.31234948150814
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.49572575494172, 18.3010318262343, 14.070195144042373
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55022756806494, 18.27992271049634, 59.37664847634733
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55053701921169, 18.28004756320382, 59.94279633183032
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55049612415609, 18.27996188279594, 3.5153123373165728
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55001439796127, 18.279686998287685, 21.304833746515216
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54955580724656, 18.279649244431526, 24.734725969843568
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55032758414782, 18.281149942445766, 5.695841359905899
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55041793861484, 18.280776781005824, 73.13391789793968
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55011726076677, 18.281297535276147, 76.30899563338608
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.55076516356952, 18.2816093692426, 68.96799751743674]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55006926618282, 18.282304485366969, 68.96980444621295
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.54927016473197, 18.2818787038102, 76.4677181309089]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54960475203289, 18.281251114569174, 12.939948101527989
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55012416954662, 18.280676682409437, 9.944005113095045
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54860973288902, 18.281722642648935, 76.28992516640574
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54821611179682, 18.282029072762226, 71.39403964392841
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54778596758469, 18.282314682619999, 71.40007966384292
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.54738183492985, 18.282604300526967, 71.423041860573]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.5467441406224, 18.282831078750456, 12.834189188666642
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54661648564788, 18.28298728991272, 76.23285932373256
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.5464919314091, 18.28350958008253, 76.86093937791884]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54659867427282, 18.284155487604339, 12.932214232161642
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54661538669406, 18.284236201043144, 76.32171110715717
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54714303608029, 18.284735295848948, 76.25088777765632
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54713115399074, 18.284857175363177, 5.783011823892593
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54786228451612, 18.28485324082026, -0.850695775821805
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55156524795332, 18.280870256815253, -9.313225746154786e-10
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55155705754292, 18.28084671156979, 23.133053047582508
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.5512441882347, 18.280403728304657, 23.99927006661892
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.55089596593692, 18.281387284446205, 10.227710615843535
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.55049854101746, 18.2817429936452, 1.809004438109696]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.54963832025622, 18.28280354099316, 0.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54920306188252, 18.283203066116589, 59.2319015879184
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54883015967626, 18.28351125346496, 67.12575629726052
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54841400576029, 18.284053109003879, 0.3767125327140093
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.5488409966105, 18.283489685321407, 0.0]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.54811637696875, 18.28450803532883, 59.6072025988251]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54769465740242, 18.28296411598605, 5.319579953327775
+        ]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [109.54843172614481, 18.282258004936389, 5.3014623997733]
+      }
+    },
+    {
+      "type": "Feature",
+      "properties": { "SmUserID": 0 },
+      "geometry": {
+        "type": "Point",
+        "coordinates": [
+          109.54911069057367, 18.282424365741979, 5.393630614504218
+        ]
+      }
+    }
+  ]
+}

BIN
static/images/zt/Nightscape/BlackMarble_2016-1.jpg


BIN
static/images/zt/Nightscape/Texture01.jpg


BIN
static/images/zt/Nightscape/Texture02.jpg


BIN
static/images/zt/Nightscape/Texture03.jpg


BIN
static/images/zt/Nightscape/Texture04.jpg


BIN
static/images/zt/Nightscape/Texture05.jpg


BIN
static/images/zt/Nightscape/blmq.jpg


Some files were not shown because too many files changed in this diff