From fa7ba545bb58983c8dab5f96cd1f010a48d7420c Mon Sep 17 00:00:00 2001 From: surprise <15810472099@163.com> Date: 星期一, 22 四月 2024 17:39:58 +0800 Subject: [PATCH] 综合展示,附件挂载添加cad查看功能 --- src/components/preview_map.vue | 1720 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 1,648 insertions(+), 72 deletions(-) diff --git a/src/components/preview_map.vue b/src/components/preview_map.vue index 25bd220..91df902 100644 --- a/src/components/preview_map.vue +++ b/src/components/preview_map.vue @@ -1,102 +1,1678 @@ - <template> - <div - id="mapdiv" - class="previewBox" - ></div> -</template> + <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%"> + <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-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-option> + </el-select> + + </el-form-item> + + <el-form-item :label="$t('common.bak')"> + <el-input v-model="formInline.bak"></el-input> + + </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-form-item> + </el-form> + + </el-tab-pane> + <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-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-col> + <el-col :span="3"> + <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-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> + + </template> + </el-table-column> + </el-table> + + </el-tab-pane> + + </el-tabs> + + </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, + comprehensive_selectModelByGuid, + comprehensive_insertModel, + comprehensive_updateModel, + comprehensive_selectFiles, + dataQuery_deletes, + publish_update, + comprehensive_selectPubById, + resSelectCountForRole, + meta_selectConvertToDwg +} from '../api/api.js'; +import { getToken } from '@/utils/auth'; +import undergroundModel from '../views/Tools/undergroundModel.vue' + export default { - data() { + components: { + undergroundModel + }, + data () { return { levelArray: [ - 0, 40000000, 20000000, 10000000, 5000000, 2000000, 1000000, 500000, - 250000, 200000, 100000, 50000, 17000, 9000, 5000, 2000, 1000, 500, 200, - 100, 50, 25, 10, 0, + 0,40000000,20000000,10000000,5000000,2000000,1000000,500000, + 250000,200000,100000,50000,17000,9000,5000,2000,1000,500,200, + 100,50,25,10,0, ], + modelLayer: false, + treeData: [], + defaultProps: { + children: "children", + label: "cnName", + }, + childOption: [], + dialogVisible: false, + dialogLayerVisible: false, + isShowModel: false, + tableData: [], + formInline: { + title: '', + file: '', + name: '', + type: '', + info: '', + icon: '', + bak: '', + Id: '', + + }, + options: [ + { + value: '鍊炬枩妯″瀷', + label: '鍊炬枩妯″瀷' + },{ + value: 'BIM妯″瀷', + label: 'BIM妯″瀷' + },{ + value: '鐐逛簯妯″瀷', + label: '鐐逛簯妯″瀷' + },{ + value: '鍦拌川璁捐妯″瀷', + label: '鍦拌川璁捐妯″瀷' + },{ + value: '浜哄伐妯″瀷', + label: '浜哄伐妯″瀷' + },{ + value: '鍏朵粬妯″瀷', + label: '鍏朵粬妯″瀷' + }], + activeName: 'first', + currentData: null, + attacgSelection: [], + fromfile: { file: '' }, + layerID: null, + dialog: { + dialogVisible: false, + isPdf: false, + 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() { + mounted () { this.init3DMap(); + this.getLayers(); }, methods: { - init3DMap() { - //鍦板浘鍒濆鍖� - window.sg = new SmartEarth.SGWorld("mapdiv", { - url: SmartEarthRootUrl + "Workers/image/earth.jpg", - licenseServer: window.sceneConfig.licenseServer, - }); + async getLayers () { + const data=await perms_selectLayers(); + if(data.code!=200) { + return this.$message.error("鍥惧眰鍒楄〃鏌ヨ澶辫触"); + } - window.Viewer = window.sg._Viewer; - - // Viewer.camera.flyTo({ - // destination: Cesium.Cartesian3.fromDegrees(110, 33, 8000000), - // }); - - Viewer.imageryLayers.addImageryProvider( - new Cesium.UrlTemplateImageryProvider({ - url: gaoDeBaseUrl[1].url, - maximumLevel: 18 - }) - ); - - Viewer._enableInfoOrSelection = false; - //鏄剧ずfps - Viewer.scene.debugShowFramesPerSecond = false; - //瀵艰埅鎺т欢 - window.sg.navControl("nav", false); - //姣斾緥灏� - window.sg.navControl("scale", false); - //寮�鍚繁搴︽娴� - // sg.Analysis.depthTestAgainstTerrain(true) - Viewer.scene.globe.depthTestAgainstTerrain = true; - - var option = { - url: window.sceneConfig.SGUrl, - layerName: window.sceneConfig.mptName, - requestVertexNormals: true, - }; - sg.Creator.sfsterrainprovider("", option, "", true, ""); - - window.elevationTool = new SmartEarth.ElevationTool(window.sg); - elevationTool.setContourColor("#F1D487"); - if (this.$store.state.previewLayer) { - var res = this.$store.state.previewLayer; - if (res.layer.indexOf('.png')) { - console.log(res.layer) - var wkt = this.$wkt.parse(res.geom); - var height = this.getHeight(wkt.coordinates[2]) - console.log(wkt) - window.BaseMapLayer = Viewer.imageryLayers.addImageryProvider( - new Cesium.UrlTemplateImageryProvider({ - url: res.layer, - maximumLevel: 18 - }) - - ); - debugger + 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], height), + destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1],wkt.coordinates[0],sceneConfig.extureHeight), // 2000 }); } } }, - getHeight(level) { - if (level > 0 && level < 23) { + 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; + this.dialog.isPdf=false; + this.dialog.isJpg=false; + }, + //闄勪欢鏌ョ湅 + setAttatchDetail (index,row) { + this.refreshAttatchDetail() + var name=row.name; + 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 + ||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(); + this.dialog.src=url + } if(name.indexOf('.dwg')!=-1) { + + this.handleCAD(row) + } + }, + async handleCAD (row) { + const data=await meta_selectConvertToDwg({ id: row.id,type: true }); + if(data.result) { + var url=iisHost+"/dwg/cad/browse/?file=data/"+data.result; + window.open(url) + } else { + return this.$message("鏁版嵁杞崲澶辫触锛屾棤娉曢瑙�"); + } + + }, + async setAttachDel () { + var std=[]; + for(var i in this.attacgSelection) { + std.push(this.attacgSelection[i].id); + } + const res=await dataQuery_deletes({ ids: std.toString() }); + if(res.code!=200) { + this.$message.error("鏂囦欢鍒犻櫎澶辫触"); + } + this.getAttacthFlieList(); + }, + setAttachInsert () { + var token=getToken(); + var fs=document.getElementById("insertFile"); + if(fs.files.length==0) { + this.$message({ + message: "璇烽�夋嫨瑕佷笂浼犵殑鏂囦欢锛�", + type: "warning", + }); + return; + } + const formData=new FormData(); + for(var i=0,c=fs.files.length;i<c;i++) { + formData.append("file",fs.files[i]); // fs.files[i].name,file + } + + + $.ajax(BASE_URL+"/comprehensive/uploadFiles?token="+token+"&tabName="+this.layerData+"&eventid="+this.layerID, + { + type: "post", + data: formData, + async: true, + cache: false, + processData: false, + contentType: false, + success: (rs) => { + this.$message({ + message: "闄勪欢娣诲姞鎴愬姛", + type: "success", + }); + document.getElementById("insertFile").value=""; + this.fromfile={ + file: "", + }; + + this.getAttacthFlieList(); + }, + error: (e) => { + document.getElementById("insertFile").value=""; + this.$message.error("闄勪欢娣诲姞澶辫触"); + }, + } + ); + }, + //闄勪欢=>鏂囦欢閫夋嫨 + getInsertFile () { + $('#insertFile').click(); + }, + insertFile () { + var val=document.getElementById('insertFile').files; + if(!val||!val.length) return; + this.fromfile.file=val[0].name; + }, + matchState (state="",reg) { + var row=state.row; + var name=row.name; + 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 + ||name.indexOf('.dwg')!=-1 + ) { + return true; + } + + return false; + }, + statSizeChange (row,column) { + return this.stateFormatSizes(row.sizes) + }, + stateFormatSizes (res) { + if(res>=1024) { + const val=parseFloat(res/1024).toFixed(3); + return val+' GB'; + } else { + return res+' MB'; + } + }, + // 闄勪欢=>琛ㄦ牸閫夋嫨 + handleAttatchChange (val) { + this.attacgSelection=val; + }, + //闄勪欢鍒楄〃鏌ヨ + async getAttacthFlieList () { + var obj={ + eventid: this.layerID, + tabName: this.layerData + }; + const res=await comprehensive_selectFiles(obj); + if(res.code!=200) { + this.$message.error('鍒楄〃璋冪敤澶辫触'); + return + } + this.tableData=res.result; + }, + handleClick () { + if(this.activeName=="second") { + this.getAttacthFlieList(); + } + }, + async EditData () { + const data=await comprehensive_updateModel(this.formInline) + + + if(data.code!=200) { + this.$message.error('淇敼澶辫触'); + 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 () { + var std={ + "bak": this.formInline.bak, + "guid": this.formInline.Id, + "layerid": this.formInline.layerId, + "modelid": this.formInline.Id, + "name": this.formInline.name, + "type": this.formInline.type + } + const data=await comprehensive_insertModel(std) + if(data.code!=200) { + this.$message.error('娣诲姞澶辫触'); + } + 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: '', + file: '', + name: '', + type: '', + info: '', + icon: '', + bak: '', + Id: '' + } + this.activeName="first" + }, + + async setShowModelInfo (result) { + var modelKey='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; + }, + async startModelData () { + var obj={ + layerid: this.formInline.layerId, + modelid: this.formInline.Id + } + const data=await comprehensive_selectModelByGuid(obj); + 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,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) { + std.push(value[i].id) + } + for(var i in result) { + var tile=result[i] + if(std.indexOf(tile.id)!=-1) { + this.setAddLayers(tile) + } else { + 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 (rs) { + + if(rs.serveType=="Tileset"||rs.serveType=="3DML") { + var url; + if(rs.url.indexOf("{host}")!=-1) { + url=rs.url.replace("{host}",iisHost); + } else { + url=modelUrl+"/"+rs.url + } + + var tileset=Viewer.scene.primitives.add( + new Cesium.Cesium3DTileset({ + name: rs.cnName, + url: url, //192.168.20.106,to4 + 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=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); + this.setChangeTileset(this.childOption,checked); + } else { + this.setChangeTileset([data],checked); + } + }, + handleNodeClick (data) { + this.menuVisible=false + if(data.type==2) { + this.currentData=data; + + 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) { + if(source.children) { + var child=source.children + for(var i in child) { + if(child[i].children) { + this.getchilds(child[i]) + } else { + this.childOption.push(child[i]) + } + } + } else { + this.childOption.push(source) + } + }, + 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; + //瀵艰埅鎺т欢 + // window.sgworld.navControl("nav", false); + //姣斾緥灏� + // 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), + }); + } + + } else if(type=='DOM') { + var wkt=this.$wkt.parse(res.geom); + var height=this.getHeight(wkt.coordinates[2]) + window.BaseMapLayer=Viewer.imageryLayers.addImageryProvider( + new Cesium.UrlTemplateImageryProvider({ + url: res.url, + maximumLevel: 18 + }) + ); + Viewer.camera.flyTo({ + destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1],wkt.coordinates[0],height), + }); + } 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(); + + var url=res.url.split(';'); + var ops={ + url: url[0], + layers: url[1] + }; + 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) => { + // if (str.type == 1 && str.pid == 1) { + // return str; + // } + // if (str.id == 1 && str.pid == 0) { + // return str; + // } + if(str.type==1) { + val.push(str); + } + if(str.url!=null&&str.type==2) { + + 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) => { + 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); + } + } + } + },Cesium.ScreenSpaceEventType.LEFT_CLICK) + } + }, + setTreeData (source) { + let cloneData=JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕 + return cloneData.filter((father) => { + // 寰幆鎵�鏈夐」 + let branchArr=cloneData.filter((child) => father.id==child.pid); // 瀵规瘮ID锛屽垎鍒笂涓嬬骇鑿滃崟锛屽苟杩斿洖鏁版嵁 + 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; // 杩斿洖涓�绾ц彍鍗� + }); + }, + // 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> + +<style lang="less" scoped> .previewBox { width: 100%; height: 100%; + + .modelLayer { + position: absolute; + z-index: 40; + padding: 10px 20px; + + border: 1px solid #409eff; + margin: 10px; + 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