From d91f0dfcd2ef95fb3624d94ade24fe69a9169a58 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期日, 04 二月 2024 15:15:00 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.20.92:8888/r/P2022036_Web2 --- src/components/preview_map.vue | 550 +++++++++++++++++++++++-------------------------------- 1 files changed, 230 insertions(+), 320 deletions(-) diff --git a/src/components/preview_map.vue b/src/components/preview_map.vue index 2060f0b..ad224cc 100644 --- a/src/components/preview_map.vue +++ b/src/components/preview_map.vue @@ -1,154 +1,71 @@ <template> - <div - id="mapdiv" - class="previewBox" - > - <div - v-if="modelLayer" - class="modelLayer box_divm" - > + <div id="mapdiv" class="previewBox"> + <div v-if="modelLayer" class="modelLayer box_divm"> <div class="modelBox"> - <div - style="float:right" - :title="$t('synthesis.undergroundMode')" - @click="setUndergroundMode" - > + <div style="float:right" :title="$t('synthesis.undergroundMode')" @click="setUndergroundMode"> <i class="el-icon-sunrise "></i> </div> </div> <div class="modelBox"> - <el-tree - :data="treeData" - show-checkbox - node-key="id" - ref="tree" - :default-expanded-keys="[1]" - :props="defaultProps" - @node-click="handleNodeClick" - @check="handleCheckChange" - @node-contextmenu="rightClick" - > + <el-tree :data="treeData" show-checkbox node-key="id" ref="tree" :default-expanded-keys="[1]" + :props="defaultProps" @node-click="handleNodeClick" @check="handleCheckChange" @node-contextmenu="rightClick"> </el-tree> </div> </div> - <div - v-if="editModelFlag" - class="modelLayer box_divm" - > - <el-form - ref="form" - :model="modelForm" - label-width="80px" - > + <div v-if="editModelFlag" class="modelLayer box_divm"> + <el-form ref="form" :model="modelForm" label-width="80px"> <el-form-item> - <el-button - size="small" - v-if="$store.state.previewLayer.type == 'mpt'" - @click="setcropping" - >瑁佸壀</el-button> - <el-button - size="small" - v-if="$store.state.previewLayer.type != 'mpt'" - @click="locateTo" - >瀹氫綅</el-button> - <el-button - size="small" - v-if="$store.state.previewLayer.type != 'mpt'" - @click="showTileset" - >鏄鹃殣</el-button> - <el-button - size="small" - v-if="$store.state.previewLayer.type != 'mpt'" - @click="setUndergroundMode" - >鍦颁笅</el-button> - <el-button - v-if="$store.state.previewLayer.type != '3dml' && + <el-button size="small" v-if="$store.state.previewLayer.stype != 'yl'" + @click="dialogLayerVisible = true">鍥惧眰</el-button> + <el-button size="small" v-if="$store.state.previewLayer.type == 'mpt'" @click="setcropping">瑁佸壀</el-button> + <el-button size="small" v-if="$store.state.previewLayer.type != 'mpt'" @click="locateTo">瀹氫綅</el-button> + <el-button size="small" v-if="$store.state.previewLayer.type != 'mpt'" @click="showTileset">鏄鹃殣</el-button> + + <el-button size="small" v-if="$store.state.previewLayer.type != 'mpt'" + @click="setUndergroundMode">鍦颁笅</el-button> + <br /> + <el-button v-if="$store.state.previewLayer.type != '3dml' && $store.state.previewLayer.type != 'cpt' && - $store.state.previewLayer.type != 'mpt'" - size="small" - @click="pickupCoords" - >鎷惧彇</el-button> - <el-button - v-if="$store.state.previewLayer.type != '3dml' && + $store.state.previewLayer.type != 'mpt'" size="small" @click="pickupCoords">鎷惧彇</el-button> + <el-button v-if="$store.state.previewLayer.type != '3dml' && $store.state.previewLayer.type != 'cpt' && - $store.state.previewLayer.type != 'mpt'" - size="small" - @click="reload" - > + $store.state.previewLayer.type != 'mpt'" size="small" @click="reload"> 閲嶈浇 </el-button> - <el-button - v-if="modelForm.modelid == null && $store.state.previewLayer.type != '3dml' && + <el-button v-if="modelForm.modelid == null && $store.state.previewLayer.type != '3dml' && $store.state.previewLayer.type != 'cpt' && - $store.state.previewLayer.type != 'mpt'" - size="small" - @click="getModeKeyId" - >妯″瀷涓婚敭</el-button> - <el-button - v-if="$store.state.previewLayer.type != '3dml' && + $store.state.previewLayer.type != 'mpt'" size="small" @click="getModeKeyId">妯″瀷涓婚敭</el-button> + <el-button v-if="$store.state.previewLayer.type != '3dml' && $store.state.previewLayer.type != 'cpt' - " - size="small" - @click="resave" - >淇濆瓨</el-button> + " size="small" @click="resave">淇濆瓨</el-button> </el-form-item> - <el-form-item - label="缁忓害:" - v-if="$store.state.previewLayer.type != '3dml' && + <el-form-item label="缁忓害:" v-if="$store.state.previewLayer.type != '3dml' && $store.state.previewLayer.type != 'cpt' && - $store.state.previewLayer.type != 'mpt'" - > - <el-input - size="small" - v-model="modelForm.lon" - ></el-input> + $store.state.previewLayer.type != 'mpt'"> + <el-input size="small" v-model="modelForm.lon"></el-input> </el-form-item> - <el-form-item - label="绾害:" - v-if="$store.state.previewLayer.type != '3dml' && + <el-form-item label="绾害:" v-if="$store.state.previewLayer.type != '3dml' && $store.state.previewLayer.type != 'cpt' && - $store.state.previewLayer.type != 'mpt'" - > - <el-input - size="small" - v-model="modelForm.lat" - ></el-input> + $store.state.previewLayer.type != 'mpt'"> + <el-input size="small" v-model="modelForm.lat"></el-input> </el-form-item> - <el-form-item - label="楂樺害:" - v-if="$store.state.previewLayer.type != '3dml' && + <el-form-item label="楂樺害:" v-if="$store.state.previewLayer.type != '3dml' && $store.state.previewLayer.type != 'cpt' && - $store.state.previewLayer.type != 'mpt'" - > - <el-input - size="small" - v-model="modelForm.height" - ></el-input> + $store.state.previewLayer.type != 'mpt'"> + <el-input size="small" v-model="modelForm.height"></el-input> </el-form-item> - <el-form-item - label="瑙掑害:" - v-if="$store.state.previewLayer.type != '3dml' && + <el-form-item label="瑙掑害:" v-if="$store.state.previewLayer.type != '3dml' && $store.state.previewLayer.type != 'cpt' && - $store.state.previewLayer.type != 'mpt'" - > - <el-input - size="small" - v-model="modelForm.yaw" - ></el-input> + $store.state.previewLayer.type != 'mpt'"> + <el-input size="small" v-model="modelForm.yaw"></el-input> </el-form-item> - <el-form-item - label="姣斾緥:" - v-if="$store.state.previewLayer.type == 'las'" - > - <el-input - size="small" - v-model="modelForm.scale" - ></el-input> + <el-form-item label="姣斾緥:" v-if="$store.state.previewLayer.type == 'las'"> + <el-input size="small" v-model="modelForm.scale"></el-input> </el-form-item> <!-- <el-form-item label="閫忔槑搴�:"> @@ -161,46 +78,20 @@ </el-form> </div> - <el-dialog - :title="formInline.title" - :visible.sync="dialogVisible" - :modal="false" - :modal-append-to-body="false" - :close-on-click-modal="false" - :before-close="handleClose" - width="30%" - > + <el-dialog :title="formInline.title" :visible.sync="dialogVisible" :modal="false" :modal-append-to-body="false" + :close-on-click-modal="false" :before-close="handleClose" width="30%"> <div style="height:63vh"> - <el-tabs - v-model="activeName" - @tab-click="handleClick" - > - <el-tab-pane - label="灞炴��" - name="first" - v-if="serveType" - > - <el-form - ref="form" - :model="formInline" - label-width="80px" - > + <el-tabs v-model="activeName" @tab-click="handleClick"> + <el-tab-pane label="灞炴��" name="first" v-if="serveType"> + <el-form ref="form" :model="formInline" label-width="80px"> <el-form-item :label="$t('common.name')"> <el-input v-model="formInline.name"></el-input> </el-form-item> <el-form-item :label="$t('common.type')"> - <el-select - v-model="formInline.type" - style="width:100%" - > - <el-option - v-for="item in options" - :key="item.value" - :label="item.label" - :value="item.value" - > + <el-select v-model="formInline.type" style="width:100%"> + <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> @@ -211,113 +102,47 @@ </el-form-item> <el-form-item> - <el-button - v-show="isShowModel" - type="success" - plain - size="small" - @click="InsertData" - >{{ + <el-button v-show="isShowModel" type="success" plain size="small" @click="InsertData">{{ $t('common.increase') }}</el-button> - <el-button - v-show="!isShowModel" - type="info" - plain - size="small" - @click="EditData" - >{{ $t('common.update') + <el-button v-show="!isShowModel" type="info" plain size="small" @click="EditData">{{ $t('common.update') }}</el-button> </el-form-item> </el-form> </el-tab-pane> - <el-tab-pane - label="闄勪欢" - name="second" - > - <el-form - :model="fromfile" - class="demo-form-inline" - > + <el-tab-pane label="闄勪欢" name="second"> + <el-form :model="fromfile" class="demo-form-inline"> <el-form-item> - <el-input - v-model="fromfile.file" - style="width: 300px; margin-right: 20px" - :placeholder="$t('common.choose')" - disabled - ></el-input> - <input - name="file1" - type="file" - id="insertFile" - multiple="multiple" - style="display: none" - @change="insertFile()" - /> - <el-link - @click="getInsertFile()" - :underline="false" - ><i class="el-icon-folder-opened"></i></el-link> + <el-input v-model="fromfile.file" style="width: 300px; margin-right: 20px" + :placeholder="$t('common.choose')" disabled></el-input> + <input name="file1" type="file" id="insertFile" multiple="multiple" style="display: none" + @change="insertFile()" /> + <el-link @click="getInsertFile()" :underline="false"><i class="el-icon-folder-opened"></i></el-link> </el-form-item> <el-form-item> <el-row> <el-col :span="3"> - <el-link - class="elLink" - :underline="false" - @click="setAttachInsert" - >{{ $t('common.append') + <el-link class="elLink" :underline="false" @click="setAttachInsert">{{ $t('common.append') }}</el-link> </el-col> <el-col :span="3"> - <el-link - class="elLink" - :underline="false" - @click="setAttachDel" - >{{ $t('common.delete') }}</el-link> + <el-link class="elLink" :underline="false" @click="setAttachDel">{{ $t('common.delete') }}</el-link> </el-col> </el-row> </el-form-item> </el-form> - <el-table - :data="tableData" - ref="filterTable" - height="calc(100% - 130px)" - border - style="width: 100%" - @selection-change="handleAttatchChange" - > - <el-table-column - type="selection" - width="70" - /> - <el-table-column - width="60" - type="index" - :label="$t('common.index')" - /> - <el-table-column - prop="name" - :label="$t('common.name')" - /> + <el-table :data="tableData" ref="filterTable" height="calc(100% - 130px)" border style="width: 100%" + @selection-change="handleAttatchChange"> + <el-table-column type="selection" width="70" /> + <el-table-column width="60" type="index" :label="$t('common.index')" /> + <el-table-column prop="name" :label="$t('common.name')" /> - <el-table-column - prop="sizes" - :label="$t('common.size')" - :formatter="statSizeChange" - /> - <el-table-column - align="center" - :label="$t('common.operate')" - min-width="100" - > + <el-table-column prop="sizes" :label="$t('common.size')" :formatter="statSizeChange" /> + <el-table-column align="center" :label="$t('common.operate')" min-width="100"> <template slot-scope="scope"> - <el-link - v-if="matchState(scope, /[]/)" - @click="setAttatchDetail(scope.$index, scope.row)" - class="elLink" - >{{ $t('common.see') }}</el-link> + <el-link v-if="matchState(scope, /[]/)" @click="setAttatchDetail(scope.$index, scope.row)" + class="elLink">{{ $t('common.see') }}</el-link> </template> </el-table-column> @@ -340,83 +165,61 @@ <map-sdk v-if='showMapVisible'></map-sdk> </div> </el-dialog> --> - <el-dialog - title="棰勮" - :append-to-body="false" - :visible.sync="dialog.dialogVisible" - width="70%" - :close-on-click-modal="false" - > - <div - v-if="dialog.isPdf" - class="pdfClass" - > - <iframe - :src="dialog.src" - type="application/x-google-chrome-pdf" - width="100%" - height="100%" - > + <el-dialog title="棰勮" :append-to-body="false" :visible.sync="dialog.dialogVisible" width="70%" + :close-on-click-modal="false"> + <div v-if="dialog.isPdf" class="pdfClass"> + <iframe :src="dialog.src" type="application/x-google-chrome-pdf" width="100%" height="100%"> </iframe> </div> - <div - v-if="dialog.isJpg" - class="pdfClass" - > + <div v-if="dialog.isJpg" class="pdfClass"> - <el-image - style="width:100%; height:100%" - :src="dialog.src" - :preview-src-list="[dialog.src]" - > + <el-image style="width:100%; height:100%" :src="dialog.src" :preview-src-list="[dialog.src]"> </el-image> </div> </el-dialog> - <div - v-show="modelKeyFlag" - class="modelLayer box_divm" - v-drag - > - <el-form - ref="form" - :model="modelForm" - label-width="80px" - > + + <div v-show="dialogLayerVisible" class="levelLayer box_divm"> + <div class="levelTitle"> + <div> + 鍥惧眰鍒楄〃 + </div> + <div @click="dialogLayerVisible = false"> + <i class="el-icon-close"></i> + </div> + </div> + <div class="layerContent"> + <div v-for="(item, index) in layerTree" class="contLayer"> + <div> <el-checkbox v-model="item.checked" @change="setLayerTreeChange(item)">{{ item.cnName }}</el-checkbox> + </div> + <div> + + <el-button icon="el-icon-map-location" size="mini" @click="setLayerTreeLocation(item)"></el-button> + </div> + </div> + </div> + + </div> + <div v-show="modelKeyFlag" class="modelLayer box_divm" v-drag> + <el-form ref="form" :model="modelForm" label-width="80px"> <el-form-item label="涓婚敭ID"> <el-select v-model="modelLayerId"> - <el-option - v-for="item in optionKey" - :key="item.value" - :label="item.label" - :value="item.value" - > + <el-option v-for="item in optionKey" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item> - <el-button - type="primary" - size="small" - @click="setSureKeyModelKey" - >{{ $t('common.confirm') }}</el-button> + <el-button type="primary" size="small" @click="setSureKeyModelKey">{{ $t('common.confirm') }}</el-button> </el-form-item> </el-form> </div> <undergroundModel ref="undergroundModel" /> - <el-card - class="box-card" - ref="card" - :style="{ ...rightClickMenuStyle }" - v-show="menuVisible" - > - <div - class="edit" - @click="setShowFile" - > + <el-card class="box-card" ref="card" :style="{ ...rightClickMenuStyle }" v-show="menuVisible"> + <div class="edit" @click="setShowFile"> <i class="el-icon-tickets"></i> 闄勪欢 </div> </el-card> + </div> </template> @@ -454,6 +257,7 @@ }, childOption: [], dialogVisible: false, + dialogLayerVisible: false, isShowModel: false, tableData: [], formInline: { @@ -525,13 +329,87 @@ menuVisible: false, rightClickMenuStyle: {}, // 鍙抽敭鑿滃崟鏍峰紡 serveType: true, - layerData: "lf.sys_style" + layerData: "lf.sys_style", + layerTree: null } }, mounted() { this.init3DMap(); + this.getLayers(); }, methods: { + async getLayers() { + const data = await perms_selectLayers(); + if (data.code != 200) { + return this.$message.error("鍥惧眰鍒楄〃鏌ヨ澶辫触"); + } + + var layer = data.result.filter(res => { + if (res.type == 2) { + if (res.serveType == 'WMTS' || res.serveType == 'TMS') { + res.checked = false; + return res + } + } + }) + this.layerTree = layer + }, + setLayerTreeChange(res) { + if (res.checked) { + this.setAddTreeLayers(res) + } else { + this.setRemoveTreeLayers(res) + } + }, + async setLayerTreeLocation(res) { + if (res.pubid) { + let data = await comprehensive_selectPubById({ id: res.pubid }); + if (data.result && data.result.geom) { + let wkt = this.$wkt.parse(data.result.geom); + let height = this.getHeight(wkt.coordinates[2]); + Viewer.camera.flyTo({ + destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], sceneConfig.extureHeight), // 2000 + }); + } + } + }, + async setAddTreeLayers(res) { + var url = res.url.indexOf("{host}") > -1 ? res.url.replace("{host}", iisHost) : res.url; + + var layer = Viewer.imageryLayers.addImageryProvider( + new Cesium.UrlTemplateImageryProvider({ + url: url, + maximumLevel: 18, + }) + ); + layer.name = res.cnName + '_' + res.id + }, + setRemoveTreeLayers(res) { + var name = res.cnName + '_' + res.id; + var layers = Viewer.imageryLayers._layers; + for (var i in layers) { + if (layers[i].name == name) { + Viewer.imageryLayers.remove(layers[i]) + } + } + }, + setTreeData(source) { + let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕 + return cloneData.filter((father) => { + // 寰幆鎵�鏈夐」 + let branchArr = cloneData.filter((child) => father.id == child.pid); // 瀵规瘮ID锛屽垎鍒笂涓嬬骇鑿滃崟锛屽苟杩斿洖鏁版嵁 + if (branchArr.length > 0) { + branchArr.sort(function (a, b) { + + return a.orderNum - b.orderNum + }) + } + branchArr.length > 0 ? (father.children = branchArr) : ""; // 缁欑埗绾ф坊鍔犱竴涓猚hildren灞炴�э紝骞惰祴鍊� + // 灞炰簬鍚屼竴瀵硅薄闂锛屼緥濡傦細浠� a=b銆乧=1 锛岀劧鍚庡啀浠� b.c=c 锛� 閭d箞 a.c=b.c=c=1 锛涘悓鐞嗭紝鍚庣画浠� c.d=2 ,閭d箞 a.c.d 涔熸槸=2锛� + // 鐢辨寰幆澶氭鍚庯紝灏辫兘褰㈡垚鐩稿簲鐨勬爲褰㈡暟鎹粨鏋� + return father.pid == 0; // 杩斿洖涓�绾ц彍鍗� + }); + }, // 榧犳爣鍙冲嚮浜嬩欢 rightClick(event, object, node, element) { if (object.type == 1 || node.data.children != null) return; @@ -1138,26 +1016,26 @@ Viewer.scene.globe.depthTestAgainstTerrain = true; // window.elevationTool = new SmartEarth.ElevationTool(window.sg); // elevationTool.setContourColor("#F1D487"); - var option = { - url: window.sceneConfig.SGUrl, - layerName: window.sceneConfig.mptName, - requestVertexNormals: true, - }; - window.terrainLayer = sgworld.Creator.sfsterrainprovider("", option, "", true, ""); - window.terrainFlag = '2' + window.terrainLayer = new Cesium.CesiumTerrainProvider({ + // url: LFData + '/3d/terrain/dem20230321' + url: demLayer + }); + Viewer.terrainProvider = window.terrainLayer + + window.terrainFlag = '1' // window.terrainLayer = new Cesium.CesiumTerrainProvider({ - // url: demLayer + // url: demLayer // }); // Viewer.terrainProvider = window.terrainLayer - if (this.$store.state.previewLayer) { var res = this.$store.state.previewLayer; var type = res.type; + console.log(type) res.ulr = res.url.replace("{host}", iisHost); if (type == 'DEM') { - window.terrainLayer.deleteObject(); - // Viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(); + // window.terrainLayer.deleteObject(); + Viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(); // window.terrainLayer = null; window.terrainLayer = null; window.terrainLayer = new Cesium.CesiumTerrainProvider({ @@ -1172,12 +1050,15 @@ roll: 0.0 } });*/ + + if (res.geom) { + var wkt = this.$wkt.parse(res.geom); + var height = this.getHeight(wkt.coordinates[2]); + Viewer.camera.flyTo({ + destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], height), + }); + } - var wkt = this.$wkt.parse(res.geom); - var height = this.getHeight(wkt.coordinates[2]); - Viewer.camera.flyTo({ - destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], height), - }); } else if (type == 'DOM') { var wkt = this.$wkt.parse(res.geom); var height = this.getHeight(wkt.coordinates[2]) @@ -1253,8 +1134,8 @@ }, async resave() { - - if (this.$store.state.previewLayer.type != "mpt") { + var type = this.$store.state.previewLayer.type; + if (type && type != "mpt" && type != "mpt") { if (!this.modelForm.modelid) { return this.$message('鏈�夋嫨妯″瀷涓婚敭ID'); } @@ -1280,7 +1161,7 @@ this.reload(); }, reload() { - debugger + sgworld.Analysis.UndergroundMode(this.app.under, this.modelForm.alpha) var json = JSON.stringify(this.modelForm); var modelScale = this.modelForm.scale @@ -1577,7 +1458,8 @@ if (level > 0 && level < 23) { return this.levelArray[level] } - return this.levelArray[this.levelArray.length - 1] + var res = 7 + return this.levelArray[res] }, }, @@ -1606,6 +1488,34 @@ } } + .levelLayer { + position: absolute; + z-index: 40; + padding: 10px 20px; + max-height: 450px; + overflow: auto; + border: 1px solid #409eff; + top: 20%; + left: 50%; + transform: translate(-50%, 0%); + + .levelTitle { + width: 100%; + display: flex; + justify-content: space-between; + font-size: 16px; + font-family: Source Han Sans CN; + } + + .contLayer { + margin: 10px 0px; + font-size: 14px; + font-family: Source Han Sans CN; + display: flex; + justify-content: space-between; + } + } + .pdfClass { height: 70vh; width: 100%; @@ -1613,8 +1523,7 @@ } .el-icon-sunrise { - background: url("../assets/img/synthesis/images/3鐧藉簳_157.png") center - center no-repeat; + background: url("../assets/img/synthesis/images/3鐧藉簳_157.png") center center no-repeat; background-size: 24px; } @@ -1622,6 +1531,7 @@ content: "11"; visibility: hidden; } + .box-card { position: fixed; display: block; -- Gitblit v1.9.3