From 703703929e97b94ca1c1c5e35a578e5fe9d4cfea Mon Sep 17 00:00:00 2001
From: suerprisePlus <15810472099@163.com>
Date: 星期一, 30 九月 2024 09:58:04 +0800
Subject: [PATCH] 代码修改

---
 src/assets/js/mapSdk/mapServe.js |  150 ++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 114 insertions(+), 36 deletions(-)

diff --git a/src/assets/js/mapSdk/mapServe.js b/src/assets/js/mapSdk/mapServe.js
index 541dd94..8a2dc92 100644
--- a/src/assets/js/mapSdk/mapServe.js
+++ b/src/assets/js/mapSdk/mapServe.js
@@ -1,11 +1,14 @@
-import mapConfig from './mapConfig';
+import mapConfig from './mapConfig.js';
 import { zhangzitou_selectAll } from '@/api/mapView/map.js';
 import WKT from 'terraformer-wkt-parser';
+import store from '@/store';
+ 
 // 鏈嶅姟鍔犺浇
 const mapServer = {
     serveType: null,
     layerList: [],
     addLayer(res) {
+        
         const obj = this.getLayerChecked(res);
         if (obj) return;
         this.serveType = res.serveType;
@@ -33,31 +36,16 @@
             const pois = response.data.result.pois;
             const cnName = res.cnName + '_' + res.id;
             const modelLayer = new Cesium.PrimitiveCollection();
-           modelLayer.name = cnName;
-            Viewer.scene.primitives.add(modelLayer);
+            modelLayer.name = cnName;
+            window.Viewer.scene.primitives.add(modelLayer);
             pois.map((item) => {
-                var geom = WKT.parse(item.geom);
-                var style = {
-                    longitude: geom.coordinates[0],
-                    latitude: geom.coordinates[1],
-                    altitude: 0,
-                    heading: 0,
-                    pitch: 0,
-                    roll: 0,
-                };
-                const modelMatrix = mapConfig.getModelMatrix(style);
-                const url =  '/glb/' + item.type + '.glb';
-                modelLayer.add(
-                    Cesium.Model.fromGltf({
-                        id: item.id,
-                        url: url,
-                        scale: 1,
-                        minimumPixelSize: 20,
-                        maximumScale: 20,
-                        modelMatrix: modelMatrix,
-                        primitive: item,
-                    })
-                );
+                var geom = WKT.parse(item.geom).coordinates;
+                const terrain = config.terrain;
+                if (terrain.isShow && terrain.isUrl) {
+                    this.addTerrainGLB(item, geom, modelLayer);
+                } else {
+                    this.addGLB(item, geom, modelLayer);
+                }
             });
             this.layerList.push({
                 id: res.id,
@@ -67,10 +55,61 @@
             });
         });
     },
+    addTerrainGLB(item, geom, modelLayer) {
+        var positions = [Cesium.Cartographic.fromDegrees(geom[0], geom[1])];
+        var promise = Cesium.sampleTerrainMostDetailed(window.Viewer.terrainProvider, positions);
+        promise.then((updatedPositions) => {
+            var terrainHeight = updatedPositions[0].height;
+            var style = {
+                longitude: geom[0],
+                latitude: geom[1],
+                altitude: terrainHeight,
+                heading: 0,
+                pitch: 0,
+                roll: 0,
+            };
+            const modelMatrix = mapConfig.getModelMatrix(style);
+            const url = '/glb/' + item.type + '.glb';
+            modelLayer.add(
+                Cesium.Model.fromGltf({
+                    id: item,
+                    url: url,
+                    scale: 1,
+                    minimumPixelSize: 20,
+                    maximumScale: 20,
+                    modelMatrix: modelMatrix,
+                    primitive: item,
+                })
+            );
+        });
+    },
+    addGLB(item, geom, modelLayer) {
+        var style = {
+            longitude: geom[0],
+            latitude: geom[1],
+            altitude: 0,
+            heading: 0,
+            pitch: 0,
+            roll: 0,
+        };
+        const modelMatrix = mapConfig.getModelMatrix(style);
+        const url = '/glb/' + item.type + '.glb';
+        modelLayer.add(
+            Cesium.Model.fromGltf({
+                id: item,
+                url: url,
+                scale: 1,
+                minimumPixelSize: 20,
+                maximumScale: 20,
+                modelMatrix: modelMatrix,
+                primitive: item,
+            })
+        );
+    },
 
     addTdLayer(res) {
         const url = res.url + config.tdToken;
-        Viewer.imageryLayers.addImageryProvider(
+        window.Viewer.imageryLayers.addImageryProvider(
             new Cesium.UrlTemplateImageryProvider({
                 url: url,
             })
@@ -87,7 +126,7 @@
     },
     addWMSLayer(res) {
         const serverUrl = config.geoServer;
-        const that = this;
+        const that = this;  
         var getFeatureInfoFormat = new Cesium.GetFeatureInfoFormat('html', null, function (html) {
             that.getFeatureInfo(html);
         });
@@ -109,7 +148,7 @@
             tileHeight: 512,
         });
 
-        const imageLayer = Viewer.imageryLayers.addImageryProvider(layer);
+        const imageLayer = window.Viewer.imageryLayers.addImageryProvider(layer);
         const cnName = res.cnName + '_' + res.id;
         imageLayer.name = cnName;
         imageLayer.id = res.id;
@@ -126,7 +165,7 @@
         if (res.bak) {
             height = JSON.parse(res.bak).height;
         }
-        var model = earthCtrl.factory.create3DTilesets({
+        var model = window.earthCtrl.factory.create3DTilesets({
             url: url,
             option: {
                 height: height,
@@ -135,7 +174,9 @@
         });
         const cnName = res.cnName + '_' + res.id;
         model.item.readyPromise.then((item) => {
-            mapConfig.userSceneFlyTo(item);
+            if (res.id != 'baseModel') {
+                mapConfig.userSceneFlyTo(item);
+            }
             this.layerList.push({
                 id: res.id,
                 name: cnName,
@@ -144,26 +185,63 @@
             });
         });
     },
-    setTilesetArgs() {},
     removeLayer(res) {
         const cnName = res.cnName + '_' + res.id;
         this.layerList.map((item, index) => {
             if (cnName == item.name && res.id == item.id) {
                 if (item.serveType == 'WMS') {
-                    Viewer.imageryLayers.remove(item.layer);
+                    window.Viewer.imageryLayers.remove(item.layer);
                     this.layerList.splice(index, 1);
                 } else if (item.serveType == 'Tileset') {
                     item.layer.deleteObject();
                     this.layerList.splice(index, 1);
-                }else if (item.serveType == 'WFS') {
-                    Viewer.scene.primitives.remove(item.layer)
+                } else if (item.serveType == 'WFS') {
+                    window.Viewer.scene.primitives.remove(item.layer);
                     this.layerList.splice(index, 1);
                 }
             }
         });
     },
-    async getFeatureInfo(res) {
-        console.log(res);
+    async getFeatureInfo(html) {
+        var start = html.indexOf('<caption class="featureInfo">') + '<caption class="featureInfo">'.length;
+        var end = html.indexOf('</caption>');
+        var tab = html.substr(start, end - start);
+        var std = html
+            .substr(html.indexOf('<th>'), html.lastIndexOf('</th>') - html.indexOf('<th>') + 5)
+            .replaceAll(' ', '')
+            .replaceAll('\n', '')
+            .split('</th>');
+        var str = html
+            .substr(html.indexOf('<td>'), html.lastIndexOf('</td>') - html.indexOf('<td>') + 5)
+            .replaceAll(' ', '')
+            .replaceAll('\n', '')
+            .split('</td>');
+        var arr = [];
+        for (var i in std) {
+            var name, val;
+            name = std[i];
+            val = str[i];
+            if (name == '') {
+                continue;
+            }
+            if (name.indexOf('<th>') > -1) {
+                name = name.replaceAll('<th>', '');
+            }
+            if (val.indexOf('<td>') > -1) {
+                val = val.replaceAll('<td>', '');
+            }
+            if (name != '>') {
+                arr.push({
+                    name: name,
+                    val: val,
+                });
+            }
+        }
+        store.dispatch('mapLayers/changeMapInfo', []);
+        if (arr.length > 0) {
+            // this.$store.geet.mapInfo = arr;
+            store.dispatch('mapLayers/changeMapInfo', arr);
+        }
     },
 };
 export default mapServer;

--
Gitblit v1.9.3