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 | 1320 ++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 1,071 insertions(+), 249 deletions(-) diff --git a/src/components/preview_map.vue b/src/components/preview_map.vue index 40c1fc6..ad224cc 100644 --- a/src/components/preview_map.vue +++ b/src/components/preview_map.vue @@ -1,66 +1,97 @@ - <template> - <div - id="mapdiv" - class="previewBox" - > - <div - v-if="modelLayer" - class="modelLayer box_divm" - > - <el-tree - :data="treeData" - show-checkbox - node-key="id" - ref="tree" - :default-expanded-keys="[2, 3]" - :default-checked-keys="[5]" - :props="defaultProps" - @node-click="handleNodeClick" - @check="handleCheckChange" - > - </el-tree> + <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"> + <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> + </div> + </div> + <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.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 != 'cpt' && + $store.state.previewLayer.type != 'mpt'" size="small" @click="reload"> + 閲嶈浇 + </el-button> + <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 != 'cpt' + " size="small" @click="resave">淇濆瓨</el-button> + + </el-form-item> + <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> + + </el-form-item> + <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> + + </el-form-item> + <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> + + </el-form-item> + <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> + + </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> + <!-- <el-form-item label="閫忔槑搴�:"> + <el-input + size="small" + v-model="modelForm.alpha" + ></el-input> + + </el-form-item> --> + </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" - > - <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> @@ -71,110 +102,47 @@ </el-form-item> <el-form-item> - <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> + <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> </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> + <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> @@ -186,9 +154,75 @@ </div> </el-dialog> + <!-- <el-dialog + :title=" $t('synthesis.rangequery')" + :visible.sync="dialogMapVisible" + width="90%" + top="10vh" + :before-close="handleMapClose" + > + <div style="height:700px"> + <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%"> + </iframe> + </div> + <div v-if="dialog.isJpg" class="pdfClass"> + + <el-image style="width:100%; height:100%" :src="dialog.src" :preview-src-list="[dialog.src]"> + </el-image> + + </div> + </el-dialog> + + <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> + </el-select> + </el-form-item> + <el-form-item> + <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"> + <i class="el-icon-tickets"></i> 闄勪欢 + </div> + </el-card> + </div> </template> - + <script> import { perms_selectLayers, @@ -196,10 +230,18 @@ comprehensive_insertModel, comprehensive_updateModel, comprehensive_selectFiles, - dataQuery_deletes + dataQuery_deletes, + publish_update, + comprehensive_selectPubById, + resSelectCountForRole } from '../api/api.js'; import { getToken } from '@/utils/auth'; +import undergroundModel from '../views/Tools/undergroundModel.vue' + export default { + components: { + undergroundModel + }, data() { return { levelArray: [ @@ -215,6 +257,7 @@ }, childOption: [], dialogVisible: false, + dialogLayerVisible: false, isShowModel: false, tableData: [], formInline: { @@ -225,7 +268,8 @@ info: '', icon: '', bak: '', - Id: '' + Id: '', + }, options: [ { @@ -258,12 +302,177 @@ isJpg: false, src: '' }, + modelType: ['ifc', 'fbx', 'rvt', '3dml', 'cpt', 'osgb', 'las', 'laz'], + editModelFlag: false, + modelForm: { + lon: 119, + lat: 39, + height: 0, + yaw: 0, + alpha: 1, + modelid: null, + west: null, + south: null, + east: null, + north: null, + scale: 1 + }, + app: { + tileset: null, + isBusy: false, + under: false, + handler: null + }, + modelLayerId: null, + optionKey: [], + modelKeyFlag: false, + menuVisible: false, + rightClickMenuStyle: {}, // 鍙抽敭鑿滃崟鏍峰紡 + serveType: true, + 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; + if (object.serveType != "TMS" && object.serveType != "DEM") return + + this.menuVisible = true + var type; + if (object.serveType == "TMS") { + type = 'dom_' + this.layerData = "DOM" + } else if (object.serveType == "DEM") { + type = 'dem_' + this.layerData = "DEM" + } + this.serveType = false + this.activeName = 'second' + this.formInline.Id = type + object.id; + this.layerID = type + object.id; + this.$refs.card.$el.style.left = event.pageX + 20 + "px"; + this.$refs.card.$el.style.top = event.pageY + "px"; + + }, + setShowFile() { + + this.dialogVisible = true; + this.getAttacthFlieList(); + this.menuVisible = false + }, + //瑁佸壀 + setcropping() { + var that = this; + sgworld.Creator.SimpleGraphic.clear() + sgworld.Creator.SimpleGraphic.edit(false, { editProp: false }); + sgworld.Creator.createSimpleGraphic( + "rectangle", {}, + function (entity) { + that.modelForm.east = Cesium.Math.toDegrees( + entity.rectangle.coordinates.getValue().east + ); + that.modelForm.north = Cesium.Math.toDegrees( + entity.rectangle.coordinates.getValue().north + ); + that.modelForm.west = Cesium.Math.toDegrees( + entity.rectangle.coordinates.getValue().west + ); + that.modelForm.south = Cesium.Math.toDegrees( + entity.rectangle.coordinates.getValue().south + ); + + } + ); + }, + setUndergroundMode() { + if (window.UndergroundMode) { + this.$refs && + this.$refs.undergroundModel && + this.$refs.undergroundModel.close(); + } else { + this.$refs && + this.$refs.undergroundModel && + this.$refs.undergroundModel.open("鍦颁笅妯″紡", null,); + } + }, refreshAttatchDetail() { this.dialog.src = ""; this.dialog.dialogVisible = false; @@ -274,12 +483,23 @@ setAttatchDetail(index, row) { this.refreshAttatchDetail() var name = row.name; - if (name.indexOf('.pdf') != -1) { + if (name.indexOf('.pdf') != -1 || name.indexOf('.PDF') != -1) { this.dialog.dialogVisible = true; this.dialog.isPdf = true; var url = BASE_URL + "/comprehensive/downloadForView?guid=" + row.guid + "&token=" + getToken(); this.dialog.src = url - } else if (name.indexOf('.jpg') != -1 || name.indexOf('.gif') != -1 || name.indexOf('.png') != -1 || name.indexOf('.jpeg') != -1) { + } else if ( + name.indexOf('.jpg') != -1 + || name.indexOf('.gif') != -1 + || name.indexOf('.png') != -1 + || name.indexOf('.jpeg') != -1 + || name.indexOf('.JPG') != -1 + || name.indexOf('.GIF') != -1 + || name.indexOf('.PNG') != -1 + || name.indexOf('.JPEG') != -1 + || name.indexOf('.BMP') != -1 + || name.indexOf('.bmp') != -1 + ) { this.dialog.dialogVisible = true; this.dialog.isJpg = true; var url = BASE_URL + "/comprehensive/downloadForView?guid=" + row.guid + "&token=" + getToken(); @@ -313,7 +533,7 @@ } - $.ajax(BASE_URL + "/comprehensive/uploadFiles?token=" + token + "&tabName=lf.sys_style&eventid=" + this.layerID, + $.ajax(BASE_URL + "/comprehensive/uploadFiles?token=" + token + "&tabName=" + this.layerData + "&eventid=" + this.layerID, { type: "post", data: formData, @@ -352,7 +572,20 @@ matchState(state = "", reg) { var row = state.row; var name = row.name; - if (name.indexOf('.pdf') != -1 || name.indexOf('.jpg') != -1 || name.indexOf('.gif') != -1 || name.indexOf('.png') != -1 || name.indexOf('.jpeg') != -1) { + if ( + name.indexOf('.jpg') != -1 + || name.indexOf('.gif') != -1 + || name.indexOf('.png') != -1 + || name.indexOf('.jpeg') != -1 + || name.indexOf('.JPG') != -1 + || name.indexOf('.GIF') != -1 + || name.indexOf('.PNG') != -1 + || name.indexOf('.JPEG') != -1 + || name.indexOf('.BMP') != -1 + || name.indexOf('.bmp') != -1 + || name.indexOf('.pdf') != -1 + || name.indexOf('.PDF') != -1 + ) { return true; } @@ -375,10 +608,9 @@ }, //闄勪欢鍒楄〃鏌ヨ async getAttacthFlieList() { - debugger var obj = { eventid: this.layerID, - tabName: "lf.sys_style" + tabName: this.layerData }; const res = await comprehensive_selectFiles(obj); if (res.code != 200) { @@ -394,14 +626,24 @@ }, async EditData() { const data = await comprehensive_updateModel(this.formInline) + + if (data.code != 200) { this.$message.error('淇敼澶辫触'); - } else { - this.$message({ - message: '淇敼鎴愬姛', - type: 'success' - }); + return } + + + this.$message({ + message: '淇敼鎴愬姛', + type: 'success' + }); + + var that = this; + that.dialogVisible = false; + this.formInline.title = this.formInline.name + that.dialogVisible = true; + this.startModelData(); }, async InsertData() { @@ -416,16 +658,24 @@ const data = await comprehensive_insertModel(std) if (data.code != 200) { this.$message.error('娣诲姞澶辫触'); - } else { - this.$message({ - message: '娣诲姞鎴愬姛', - type: 'success' - }); } + this.$message({ + message: '娣诲姞鎴愬姛', + type: 'success' + }); + + var that = this; + that.dialogVisible = false; + this.formInline.title = this.formInline.name + that.dialogVisible = true; this.startModelData(); + + }, handleClose() { + this.layerData = "lf.sys_style" + this.serveType = true; this.dialogVisible = false; this.formInline = { title: '', @@ -437,15 +687,45 @@ bak: '', Id: '' } + this.activeName = "first" }, - setShowModelInfo(result) { + async setShowModelInfo(result) { + var modelKey = 'id'; - this.formInline.title = result.getProperty("name") - this.formInline.Id = result.getProperty("id"); - this.layerID = result.getProperty("id"); + if (result.tileset) { + if (result.tileset.pubid && parseInt(result.tileset.pubid) > 0) { + const data = await comprehensive_selectPubById({ id: result.tileset.pubid }) + + if (data.code != 200) { + return + } else { + modelKey = JSON.parse(data.result.json).modelid + } + if (!modelKey) { + return this.$message('娌℃湁妯″瀷涓婚敭ID,鏃犳硶鏌ヨ鏁版嵁'); + } + this.formInline.Id = result.getProperty(modelKey); + this.layerID = result.getProperty(modelKey); + + } + } else { + var id = '3dml' + result.primitive.id; + this.formInline.Id = id; + this.layerID = id; + } + this.formInline.layerId = result.primitive.layerId; this.formInline.layerName = result.primitive.id; + + // this.formInline.title = result.getProperty("name") + if (!this.formInline.Id) { + this.formInline.Id = "noAuto_" + this.formInline.layerId; + } + if (!this.layerID) { + this.layerID = "noAuto_" + this.formInline.layerId; + } + this.startModelData(); this.dialogVisible = true; @@ -459,19 +739,27 @@ if (data.code != 200) { return; } - if (data.result == null) { this.isShowModel = true; this.formInline.name = this.formInline.title; } else { this.isShowModel = false; this.formInline = data.result; - this.formInline.title = this.formInline.name; - } }, - setChangeTileset(result) { + setChangeTileset(result, check) { + + var nodes = this.$refs.tree.getCheckedNodes(); + var str = []; + for (var i = 0; i < nodes.length; i++) { + var node = this.$refs.tree.getNode(nodes[i]).data.serveType; + if (node != 'DEM') { + str.push(nodes[i]) + } + } + str.push(result[0].id) + this.$refs.tree.setCheckedKeys(str) var value = this.$refs.tree.getCheckedNodes(); var std = []; for (var i in value) { @@ -482,40 +770,151 @@ if (std.indexOf(tile.id) != -1) { this.setAddLayers(tile) } else { - for (var j in Viewer.scene.primitives._primitives) { - if (Viewer.scene.primitives._primitives[j].id == tile.cnName) { - Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[j]) + if (tile.serveType == 'DEM') { + + if (window.terrainFlag == '2') { + window.terrainLayer.deleteObject(); + } else if (window.terrainFlag == '1') { + Viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(); + } + + // + var option = { + url: window.sceneConfig.SGUrl, + layerName: window.sceneConfig.mptName, + requestVertexNormals: true, + }; + window.terrainLayer = sgworld.Creator.sfsterrainprovider("", option, "", true, ""); + } else if (tile.serveType == 'TMS') { + for (let i = 0; i < window.Viewer.imageryLayers._layers.length; i++) { + if (window.Viewer.imageryLayers._layers[i].name == result.cnName) { + window.Viewer.imageryLayers.remove(window.Viewer.imageryLayers._layers[i]); + break; + } + } + } else { + for (var j in Viewer.scene.primitives._primitives) { + if (Viewer.scene.primitives._primitives[j].id == tile.cnName) { + Viewer.scene.primitives.remove(Viewer.scene.primitives._primitives[j]) + } } } } } }, - setAddLayers(res) { - if (res.serveType == "Tileset") { + setAddLayers(rs) { + + if (rs.serveType == "Tileset" || rs.serveType == "3DML") { var url; - if (res.url.indexOf("{host}") != -1) { - url = res.url.replace("{host}", iisHost); + if (rs.url.indexOf("{host}") != -1) { + url = rs.url.replace("{host}", iisHost); } else { - url = modelUrl + "/" + res.url + url = modelUrl + "/" + rs.url } + var tileset = Viewer.scene.primitives.add( new Cesium.Cesium3DTileset({ - name: res.cnName, + name: rs.cnName, url: url, //192.168.20.106,to4 - maximumScreenSpaceError: 64, // 鏈�澶у睆骞曠┖闂撮敊璇細16 + maximumScreenSpaceError: url.indexOf("/pnts/") > -1 ? 16 : 64, // 鏈�澶у睆骞曠┖闂撮敊璇細16 maximumMemoryUsage: 768, // 鏈�澶у唴瀛橈細512 dynamicScreenSpaceError: true, // 鍑忓皯绂荤浉鏈鸿緝杩滅殑灞忓箷绌洪棿閿欒锛歠alse skipLevelOfDetail: true, // 鍦ㄩ亶鍘嗘椂鍊欒烦杩囪鎯咃細false }) ); + var that = this; tileset.readyPromise.then((tileset) => { - tileset.id = res.cnName; - tileset.layerId = res.id; - this.tileSet(tileset, parseFloat(res.elev)) - Viewer.flyTo(tileset); + tileset.id = rs.cnName; + tileset.layerId = rs.id; + tileset.pubid = rs.pubid; + if (rs.serveType != '3DML') { + that.getArgsTileset(tileset, rs); + } + }); + } else if (rs.serveType == "DEM") { + + if (window.terrainFlag == '2') { + window.terrainLayer.deleteObject(); + } else if (window.terrainFlag == '1') { + Viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider(); + + } + var url = rs.url; + if (rs.url.indexOf("{host}") != -1) { + url = rs.url.replace("{host}", iisHost); + } + window.terrainLayer = null; + window.terrainFlag = '1' + + window.terrainLayer = new Cesium.CesiumTerrainProvider({ + url: url + }); + Viewer.terrainProvider = window.terrainLayer + } else if (rs.serveType == "TMS") { + var url = rs.url; + if (rs.url.indexOf("{host}") != -1) { + url = rs.url.replace("{host}", iisHost); + } + var layer = Viewer.imageryLayers.addImageryProvider( + new Cesium.UrlTemplateImageryProvider({ + url: url, + maximumLevel: 18, + }) + ); + layer.name = rs.cnName; } }, + + async getArgsTileset(tileset, rs) { + + if (rs.pubid > 0) { + + const data = await comprehensive_selectPubById({ id: rs.pubid }) + + if (data.code != 200) { + + } else { + + if (rs.serveType == '3DML') { + this.tileSet(tileset, parseFloat(rs.elev)) + } else { + this.reloadTile(tileset, data.result.json) + } + + + } + } else { + this.tileSet(tileset, parseFloat(rs.elev)) + + } + }, + tileSet(tileset, height) { + //3dtile妯″瀷鐨勮竟鐣岀悆浣� + var boundingSphere = tileset.boundingSphere; + //杩崱灏旂┖闂寸洿瑙掑潗鏍�=>鍦扮悊鍧愭爣锛堝姬搴﹀埗锛� + var cartographic_original = Cesium.Cartographic.fromCartesian(boundingSphere.center); + //鍦扮悊鍧愭爣锛堝姬搴﹀埗锛�=>杩崱灏旂┖闂寸洿瑙掑潗鏍� + var Cartesian3_original = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, cartographic_original.height); + var Cartesian3_offset = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, height); + //鑾峰緱鍦伴潰鍜宱ffset鐨勮浆鎹� + var translation = Cesium.Cartesian3.subtract(Cartesian3_offset, Cartesian3_original, new Cesium.Cartesian3()); + //淇敼妯″瀷鐭╅樀 + tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); + // Viewer.flyTo(tileset); + }, + reloadTile(tileset, res) { + var vm = JSON.parse(res) + var pos = Cesium.Cartesian3.fromDegrees(vm.lon, vm.lat, vm.height); + var converter = Cesium.Transforms.eastNorthUpToFixedFrame; + var hpr = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(vm.yaw), 0, 0); + var matrix = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr, Cesium.Ellipsoid.WGS84, converter); + tileset._root.transform = matrix; + Viewer.flyTo(tileset); + }, + + + handleCheckChange(data, checked, indeterminate) { if (data.type == 1) { this.getchilds(data); @@ -525,13 +924,31 @@ } }, handleNodeClick(data) { + this.menuVisible = false if (data.type == 2) { this.currentData = data; - for (var j in Viewer.scene.primitives._primitives) { - if (Viewer.scene.primitives._primitives[j].id == data.cnName) { - Viewer.flyTo(Viewer.scene.primitives._primitives[j]); + + if (data.serveType == 'DEM' || data.serveType == 'TMS') { + if (!data.pubid) return + + this.setQueryPubid(data) + } else { + for (var j in Viewer.scene.primitives._primitives) { + if (Viewer.scene.primitives._primitives[j].id == data.cnName) { + Viewer.flyTo(Viewer.scene.primitives._primitives[j]); + } } } + } + }, + async setQueryPubid(res) { + const data = await comprehensive_selectPubById({ id: res.pubid }) + if (data.code != 200) return; + if (data.result.geom) { + var wkt = this.$wkt.parse(data.result.geom); + Viewer.camera.flyTo({ + destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], 2000), + }); } }, getchilds(source) { @@ -551,17 +968,16 @@ init3DMap() { //鍦板浘鍒濆鍖� window.sgworld = new SmartEarth.SGWorld("mapdiv", { - licenseServer: window.sceneConfig.licenseServer, }); - window.Viewer = window.sgworld._Viewer; - // Viewer.camera.flyTo({ // destination: Cesium.Cartesian3.fromDegrees(110, 33, 8000000), // }); - + if (is_production) { + Viewer.imageryLayers.removeAll(); + } Viewer._enableInfoOrSelection = false; //鏄剧ずfps Viewer.scene.debugShowFramesPerSecond = false; @@ -571,16 +987,79 @@ // window.sgworld.navControl("scale", false); //寮�鍚繁搴︽娴� // sg.Analysis.depthTestAgainstTerrain(true) + if (is_production) { + var base_ulr = window.sceneConfig.baseUrl; + if (base_ulr.indexOf('{host}') > -1) { + base_ulr = base_ulr.replace("{host}", iisHost) + } + + Viewer.imageryLayers.addImageryProvider( + new Cesium.UrlTemplateImageryProvider({ + url: base_ulr, + maximumLevel: 5 + }) + ); + + window.BaseMapLayer = Viewer.imageryLayers.addImageryProvider( + new Cesium.UrlTemplateImageryProvider({ + url: base_ulr, + + }) + ); + + + } + + + + Viewer.scene.globe.depthTestAgainstTerrain = true; - - // window.elevationTool = new SmartEarth.ElevationTool(window.sg); // elevationTool.setContourColor("#F1D487"); + 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 + // }); + + // 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 = null; + window.terrainLayer = null; + window.terrainLayer = new Cesium.CesiumTerrainProvider({ + url: res.url + }); + Viewer.terrainProvider = window.terrainLayer + /*Viewer.camera.flyTo({ + destination: Cesium.Cartesian3.fromDegrees(113.229279, 31.215949, 1000), + orientation: { + heading: 6.08434611923462, + pitch: Cesium.Math.toRadians(-45.0), + 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), + }); + } - if (res.url.indexOf('.png') != -1) { + } else if (type == 'DOM') { var wkt = this.$wkt.parse(res.geom); var height = this.getHeight(wkt.coordinates[2]) window.BaseMapLayer = Viewer.imageryLayers.addImageryProvider( @@ -588,85 +1067,367 @@ url: res.url, maximumLevel: 18 }) - ); Viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1], wkt.coordinates[0], height), }); - } else if (res.url.indexOf('.json') != -1) { - var tileset = Viewer.scene.primitives.add( - new Cesium.Cesium3DTileset({ - url: res.url, //192.168.20.106,to4 - maximumScreenSpaceError: 64, // 鏈�澶у睆骞曠┖闂撮敊璇細16 - maximumMemoryUsage: 768, // 鏈�澶у唴瀛橈細512 - dynamicScreenSpaceError: true, // 鍑忓皯绂荤浉鏈鸿緝杩滅殑灞忓箷绌洪棿閿欒锛歠alse - skipLevelOfDetail: true, // 鍦ㄩ亶鍘嗘椂鍊欒烦杩囪鎯咃細false - }) - ); - tileset.readyPromise.then((tileset) => { - tileset.id = res.cnName; - tileset.layerId = res.id; - this.tileSet(tileset, 50) - Viewer.flyTo(tileset); + } else if (type == '3dml' || type == 'fbx' || type == 'ifc' || type == 'rvt' + || type == 'cpt' || type == 'osgb' || type == 'las' || type == 'laz') { + if (this.app.tileset) viewer.scene.primitives.remove(this.app.tileset); + + this.app.tileset = this.createTileset(res); + var that = this; + this.editModelFlag = true; + Viewer.scene.primitives.add(this.app.tileset).readyPromise.then(function (ts) { + + that.setModleLocatin() + Viewer.flyTo(ts); }); + } else if (res.url.indexOf('.mpt') != -1) { + this.editModelFlag = true; + //Viewer.imageryLayers.removeAll(); - Viewer.imageryLayers.removeAll(); - var url = res.url.split(';') - - - sgworld.Creator.createImageryProvider('mpt褰卞儚', "wms", { + var url = res.url.split(';'); + var ops = { url: url[0], layers: url[1] - }, "0", undefined, true, ""); + }; + if (res && res.json) { + var rs = JSON.parse(res.json); + ops.rectangle = Cesium.Rectangle.fromDegrees(rs.west, rs.south, rs.east, rs.north); + } + + sgworld.Creator.createImageryProvider(res.cnName, "wms", ops, "0", undefined, true, ""); + + if (res && res.json) { + var rs = JSON.parse(res.json); + Viewer.camera.flyTo({ + destination: Cesium.Rectangle.fromDegrees(rs.west, rs.south, rs.east, rs.north) + }) + } + + } else if (res.url.indexOf('menuLayer') != -1) { this.setShowModelLayer(); } } }, + getModeKeyId() { + window.ModeKeyIdHandler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas); + window.ModeKeyIdHandler.setInputAction((event) => { + + window.pickedFeature = sgworld.Viewer.scene.pick(event.position); + if (Cesium.defined(window.pickedFeature)) { + if (window.pickedFeature.primitive instanceof Cesium.Cesium3DTileset) { + if (window.pickedFeature && window.pickedFeature.getProperty) { + + this.setModeLayerID(pickedFeature); + } else { + this.modelForm.modelid = 'id3dml' + window.ModeKeyIdHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); //绉婚櫎浜嬩欢 + } + } + } + }, Cesium.ScreenSpaceEventType.LEFT_CLICK) + }, + + async resave() { + var type = this.$store.state.previewLayer.type; + if (type && type != "mpt" && type != "mpt") { + if (!this.modelForm.modelid) { + return this.$message('鏈�夋嫨妯″瀷涓婚敭ID'); + } + } else { + sgworld.Creator.SimpleGraphic.clear() + } + + this.$store.state.previewLayer.json = JSON.stringify(this.modelForm); + + if (this.$store.state.previewLayer.url) { + var url = this.$store.state.previewLayer.url; + this.$store.state.previewLayer.url = url.replace(iisHost, "{host}"); + } + const data = await publish_update(this.$store.state.previewLayer); + if (data.code != 200) { + this.$message.error('鏁版嵁淇濆瓨澶辫触'); + } else { + this.$message({ + message: '鏁版嵁淇濆瓨鎴愬姛', + type: 'success' + }); + } + this.reload(); + }, + reload() { + + sgworld.Analysis.UndergroundMode(this.app.under, this.modelForm.alpha) + var json = JSON.stringify(this.modelForm); + var modelScale = this.modelForm.scale + var url = this.$store.state.previewLayer.url.replace("{host}", iisHost); + if (!url) return; + if (this.app.tileset) Viewer.scene.primitives.remove(this.app.tileset); + + this.app.isBusy = true; + this.app.tileset = this.createTileset(this.$store.state.previewLayer); + var that = this; + Viewer.scene.primitives.add(this.app.tileset).readyPromise.then(function (ts) { + that.modelForm = JSON.parse(json); + var pos = Cesium.Cartesian3.fromDegrees(parseFloat(that.modelForm.lon), parseFloat(that.modelForm.lat), parseFloat(that.modelForm.height)); + var converter = Cesium.Transforms.eastNorthUpToFixedFrame; + var hpr = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(parseFloat(that.modelForm.yaw)), 0, 0); + var matrix = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr, Cesium.Ellipsoid.WGS84, converter); + if (modelScale) { + var scale = Cesium.Matrix4.fromUniformScale(modelScale); + Cesium.Matrix4.multiply(matrix, scale, matrix); + } + that.app.tileset._root.transform = matrix; + Viewer.flyTo(ts); + + that.app.isBusy = false; + }); + }, + + //鎷惧彇 + pickupCoords() { + if (this.app.handler) { + this.app.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); + this.app.handler = undefined; + return; + } + var that = this; + this.app.handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas); + this.app.handler.setInputAction(function (event) { + + var ray = Viewer.camera.getPickRay(event.position); + var cartesian = Viewer.scene.globe.pick(ray, Viewer.scene); + var cartographic = Cesium.Cartographic.fromCartesian(cartesian); + var x = that.toFixed(Cesium.Math.toDegrees(cartographic.longitude), 7); + var y = that.toFixed(Cesium.Math.toDegrees(cartographic.latitude), 7); + var z = that.toFixed(cartographic.height, 3); + + that.modelForm.lon = x; + that.modelForm.lat = y; + that.modelForm.height = z; + that.pickupCoords(); + that.reload(); + + }, Cesium.ScreenSpaceEventType.LEFT_CLICK); + }, + // 淇濈暀灏忔暟浣� + toFixed(d, n) { + var p = Math.pow(10, n); + + return Math.round(d * p) / p; + }, + update() { + // if (!this.modelForm.lon || isNaN(this.modelForm.lon)) { + // var args = this.getEditTilesetArgs(); + // this.modelForm.lon = args.lon == null ? 0 : args.height; + // return + // } + // if (!this.modelForm.lat || isNaN(this.modelForm.lat)) { + // var args = this.getEditTilesetArgs(); + // this.modelForm.lat = args.lat == null ? 0 : args.height; + // return + // } + // if (!this.modelForm.height || isNaN(this.modelForm.height)) { + // var args = this.getEditTilesetArgs(); + // this.modelForm.height = args.height == null ? 0 : args.height; + // return + // } + // if (!this.modelForm.yaw || isNaN(this.modelForm.yaw)) { + // this.modelForm.yaw = 0; + // return + // } + + this.setTilesetArgs(this.modelForm); + sgworld.Analysis.UndergroundMode(this.app.under, this.modelForm.alpha) + }, + setTilesetArgs(f) { + + if (!this.app.tileset || this.app.isBusy) return; + + var pos = Cesium.Cartesian3.fromDegrees(parseFloat(f.lon), parseFloat(f.lat), parseFloat(f.height)); + + var converter = Cesium.Transforms.eastNorthUpToFixedFrame; + var hpr = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(parseFloat(f.yaw)), 0, 0); + var matrix = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr, Cesium.Ellipsoid.WGS84, converter); + var scale = Cesium.Matrix4.fromUniformScale(f.scale); + Cesium.Matrix4.multiply(matrix, scale, matrix); + var model = this.app.tileset + model._root.transform = matrix; + }, + //鍦颁笅 + underground() { + this.app.under = !this.app.under; + sgworld.Analysis.UndergroundMode(this.app.under, this.modelForm.alpha) + }, + //鏄鹃殣 + showTileset() { + + if (!this.app.tileset) return; + this.app.tileset.show = !this.app.tileset.show; + }, + //瀹氫綅 + locateTo() { + if (!this.app.tileset) return; + Viewer.flyTo(this.app.tileset); + }, + createTileset(res) { + res.url = res.url.replace('{host}', iisHost) + return new Cesium.Cesium3DTileset({ + url: res.url, + name: 'tsTest', + skipLevelOfDetail: true, // 鍦ㄩ亶鍘嗘椂鍊欒烦杩囪鎯咃細false + baseScreenSpaceError: 1024, + maximumScreenSpaceError: res.url.indexOf("/pnts/") > -1 ? 16 : 64, // 鏈�澶у睆骞曠┖闂撮敊璇細16锛屾暟鍊煎姞澶ц兘璁╂渶缁堟垚鍍忓彉妯$硦 + skipScreenSpaceErrorFactor: 16, + skipLevels: 1, + immediatelyLoadDesiredLevelOfDetail: false, + loadSiblings: true, // 鑷姩浠庝腑蹇冨紑濮嬭秴娓呭寲妯″瀷锛歠alse + cullWithChildrenBounds: true, // 浣跨敤瀛愰」杈圭晫浣撶Н鐨勫苟闆嗘潵鍓旈櫎鍥惧潡锛歵rue + cullRequestsWhileMoving: true, + cullRequestsWhileMovingMultiplier: 10, // 鍊艰秺灏忚兘澶熸洿蹇殑鍓旈櫎锛�60 + preloadWhenHidden: true, + preferLeaves: true, // 棰勮瀛愯妭鐐癸細false + maximumMemoryUsage: 256, // 鍐呭瓨鍒嗛厤鍙樺皬鏈夊埄浜庡唴瀛樺洖鏀讹紝鎻愬崌鎬ц兘浣撻獙 + progressiveResolutionHeightFraction: 0.5, // 鏁板�煎亸浜�0鑳藉璁╁垵濮嬪姞杞藉彉寰楁ā绯� + dynamicScreenSpaceErrorDensity: 0.5, // 鏁板�煎姞澶э紝鑳借鍛ㄨ竟鍔犺浇鍙樺揩 + dynamicScreenSpaceErrorFactor: 2, // 鍔ㄦ�佸睆骞曠┖闂磋宸殑绯绘暟 + dynamicScreenSpaceError: true // 鍑忓皯绂荤浉鏈鸿緝杩滅殑灞忓箷绌洪棿閿欒锛歠alse锛屽叏灞忓姞杞藉畬涔嬪悗鎵嶆竻鏅板寲鎴垮眿 + }); + }, + setEditModelLayer(res) { + + if (res.json) { + + var json = JSON.parse(res.json) + this.modelForm = json; + this.reload(); + } else { + this.getTilesetArgs(); + } + }, + setModleLocatin() { + var res = this.$store.state.previewLayer; + var type = res.type; + if (this.modelType.indexOf(type) != -1) { + if (type != '3dml') { + this.setEditModelLayer(res) + } else { + this.editModelFlag = true; + } + + } + + }, + setModeLayerID(res) { + + var value = res.getPropertyNames(); + var std = []; + for (var i in value) { + std.push({ + value: value[i], + label: value[i] + }) + } + this.optionKey = std; + this.modelLayerId = this.optionKey[0].label; + this.modelKeyFlag = true; + }, + setSureKeyModelKey() { + this.modelKeyFlag = false; + this.modelForm.modelid = this.modelLayerId + window.ModeKeyIdHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); //绉婚櫎浜嬩欢 + }, + getTilesetArgs() { + this.app.isBusy = true; + var cm = this.app.tileset._root.transform; + var cartesian = new Cesium.Cartesian3(cm[12], cm[13], cm[14]); + var carto = Cesium.Cartographic.fromCartesian(cartesian); + + if (carto) { + this.modelForm.lon = Cesium.Math.toDegrees(carto.longitude).toFixed(7); + this.modelForm.lat = Cesium.Math.toDegrees(carto.latitude).toFixed(7); + this.modelForm.height = carto.height.toFixed(3); + } + this.app.isBusy = false; + }, + getEditTilesetArgs() { + this.app.isBusy = true; + var std = { + lon: 0, + lat: 0, + height: 0, + } + + if (!this.app.tileset._root) return std; + var cm = this.app.tileset._root.transform; + var cartesian = new Cesium.Cartesian3(cm[12], cm[13], cm[14]); + var carto = Cesium.Cartographic.fromCartesian(cartesian); + + + if (carto) { + std.lon = Cesium.Math.toDegrees(carto.longitude).toFixed(7); + std.lat = Cesium.Math.toDegrees(carto.latitude).toFixed(7); + std.height = carto.height.toFixed(3); + } + this.app.isBusy = false; + return std + }, + async setShowModelLayer() { const data = await perms_selectLayers(); if (data.code != 200) { } else { var std = data.result - var val = std.filter((str) => { + var val = []; + std.filter((str) => { + // if (str.type == 1 && str.pid == 1) { + // return str; + // } + // if (str.id == 1 && str.pid == 0) { + // return str; + // } if (str.type == 1) { - return str; + val.push(str); } if (str.url != null && str.type == 2) { - return str; + + if (str.serveType == 'Tileset' || str.serveType == '3DML' || str.serveType == 'TMS' || str.serveType == 'DEM') { + val.push(str); + } } + // if (str.url != null && str.type == 2 && str.serveType == '3DML') { + // + // } }); var res = this.setTreeData(val); this.treeData = res; this.modelLayer = true; var that = this; + var pickedFeature, pickedColor; window.modeCatchHandler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas); window.modeCatchHandler.setInputAction((event) => { - window.pickedFeature && (window.pickedFeature.color = window.pickedColor); - window.pickedFeature = sgworld.Viewer.scene.pick(event.position); - if (Cesium.defined(window.pickedFeature)) { - if (window.pickedFeature.primitive instanceof Cesium.Cesium3DTileset) { - if (window.pickedFeature && window.pickedFeature.getProperty) { - window.pickedColor = window.pickedFeature.color - window.pickedFeature.color = Cesium.Color.RED.withAlpha(0.3); + if (pickedColor) { pickedFeature && (pickedFeature.color = pickedColor); } + + pickedFeature = sgworld.Viewer.scene.pick(event.position); + if (Cesium.defined(pickedFeature)) { + if (pickedFeature.primitive instanceof Cesium.Cesium3DTileset) { + + if (pickedFeature) { + pickedColor = pickedFeature.color + pickedFeature.color = Cesium.Color.RED.withAlpha(0.3); + that.setShowModelInfo(pickedFeature); - // this.$store.state.catModel = true; - // this.$store.state.catModelInfo = { - // id: pickedFeature.getProperty("id"), - // name: pickedFeature.getProperty("name"), - // layerId: pickedFeature.primitive.layerId, - // layerName: pickedFeature.primitive.id - // }; } } } }, Cesium.ScreenSpaceEventType.LEFT_CLICK) - - } }, setTreeData(source) { @@ -677,38 +1438,40 @@ 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 == 430; // 杩斿洖涓�绾ц彍鍗� + return father.pid == 0; // 杩斿洖涓�绾ц彍鍗� }); }, - tileSet(tileset, height) { - //3dtile妯″瀷鐨勮竟鐣岀悆浣� - var boundingSphere = tileset.boundingSphere; - //杩崱灏旂┖闂寸洿瑙掑潗鏍�=>鍦扮悊鍧愭爣锛堝姬搴﹀埗锛� - var cartographic_original = Cesium.Cartographic.fromCartesian(boundingSphere.center); - //鍦扮悊鍧愭爣锛堝姬搴﹀埗锛�=>杩崱灏旂┖闂寸洿瑙掑潗鏍� - var Cartesian3_original = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, cartographic_original.height); - var Cartesian3_offset = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, height); - //鑾峰緱鍦伴潰鍜宱ffset鐨勮浆鎹� - var translation = Cesium.Cartesian3.subtract(Cartesian3_offset, Cartesian3_original, new Cesium.Cartesian3()); - //淇敼妯″瀷鐭╅樀 - tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); - }, + // tileSet(tileset, height) { + // //3dtile妯″瀷鐨勮竟鐣岀悆浣� + // var boundingSphere = tileset.boundingSphere; + // //杩崱灏旂┖闂寸洿瑙掑潗鏍�=>鍦扮悊鍧愭爣锛堝姬搴﹀埗锛� + // var cartographic_original = Cesium.Cartographic.fromCartesian(boundingSphere.center); + // //鍦扮悊鍧愭爣锛堝姬搴﹀埗锛�=>杩崱灏旂┖闂寸洿瑙掑潗鏍� + // var Cartesian3_original = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, cartographic_original.height); + // var Cartesian3_offset = Cesium.Cartesian3.fromRadians(cartographic_original.longitude, cartographic_original.latitude, height); + // //鑾峰緱鍦伴潰鍜宱ffset鐨勮浆鎹� + // var translation = Cesium.Cartesian3.subtract(Cartesian3_offset, Cartesian3_original, new Cesium.Cartesian3()); + // //淇敼妯″瀷鐭╅樀 + // tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); + // }, getHeight(level) { if (level > 0 && level < 23) { return this.levelArray[level] } - return this.levelArray[this.levelArray.length - 1] + var res = 7 + return this.levelArray[res] }, }, } </script> - + <style lang="less" scoped> .previewBox { width: 100%; height: 100%; + .modelLayer { position: absolute; z-index: 40; @@ -716,8 +1479,67 @@ border: 1px solid #409eff; margin: 10px; - max-height: 300px; + max-height: 600px; overflow: auto; + + .modelBox { + width: 100%; + min-height: 24px; + } + } + + .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%; + position: relative; + } + + .el-icon-sunrise { + background: url("../assets/img/synthesis/images/3鐧藉簳_157.png") center center no-repeat; + background-size: 24px; + } + + .el-icon-sunrise:before { + content: "11"; + visibility: hidden; + } + + .box-card { + position: fixed; + display: block; + z-index: 10000; + padding: 0px 0px; + border: 1px solid #ebeef5; + border-radius: 4px; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } } -</style> \ No newline at end of file +</style> -- Gitblit v1.9.3