| | |
| | | |
| | | <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" |
| | | > |
| | | <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" |
| | | @click="locateTo" |
| | | >定位</el-button> |
| | | <el-button |
| | | size="small" |
| | | @click="showTileset" |
| | | >显隐</el-button> |
| | | <el-button |
| | | size="small" |
| | | @click="underground" |
| | | >地下</el-button> |
| | | <el-button |
| | | size="small" |
| | | @click="pickupCoords" |
| | | >拾取</el-button> |
| | | <el-button |
| | | size="small" |
| | | @click="reload" |
| | | > |
| | | <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" |
| | | size="small" |
| | | @click="getModeKeyId" |
| | | >模型主键</el-button> |
| | | <el-button |
| | | size="small" |
| | | @click="resave" |
| | | >保存</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="经度:"> |
| | | <el-input |
| | | size="small" |
| | | v-model="modelForm.lon" |
| | | @input="update" |
| | | ></el-input> |
| | | <el-slider |
| | | v-model="modelForm.lon" |
| | | @input="update" |
| | | :min="73" |
| | | :step="0.001" |
| | | :max="135" |
| | | ></el-slider> |
| | | <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="纬度:"> |
| | | <el-input |
| | | size="small" |
| | | v-model="modelForm.lat" |
| | | @input="update" |
| | | ></el-input> |
| | | <el-slider |
| | | v-model="modelForm.lat" |
| | | @input="update" |
| | | :min="3" |
| | | :step="0.001" |
| | | :max="54" |
| | | ></el-slider> |
| | | <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="高度:"> |
| | | <el-input |
| | | size="small" |
| | | v-model="modelForm.height" |
| | | @input="update" |
| | | ></el-input> |
| | | <el-slider |
| | | v-model="modelForm.height" |
| | | :min="-800" |
| | | :step="1" |
| | | @input="update" |
| | | :max="8800" |
| | | ></el-slider> |
| | | <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="角度:"> |
| | | <el-input |
| | | size="small" |
| | | v-model="modelForm.yaw" |
| | | @input="update" |
| | | ></el-input> |
| | | <el-slider |
| | | v-model="modelForm.yaw" |
| | | :min="0" |
| | | @input="update" |
| | | :step="0.1" |
| | | :max="360" |
| | | ></el-slider> |
| | | <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="透明度:"> |
| | | <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" |
| | | @input="update" |
| | | ></el-input> |
| | | <el-slider |
| | | v-model="modelForm.alpha" |
| | | @input="update" |
| | | :min="0" |
| | | :step="0.01" |
| | | :max="1" |
| | | ></el-slider> |
| | | </el-form-item> |
| | | |
| | | </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> |
| | | |
| | |
| | | |
| | | </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> |
| | |
| | | <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"> |
| | | <i class="el-icon-tickets"></i> 附件 |
| | | </div> |
| | | </el-card> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | |
| | | <script> |
| | | import { |
| | | perms_selectLayers, |
| | |
| | | comprehensive_selectFiles, |
| | | dataQuery_deletes, |
| | | publish_update, |
| | | comprehensive_selectPubById |
| | | comprehensive_selectPubById, |
| | | resSelectCountForRole, |
| | | meta_selectConvertToDwg |
| | | } from '../api/api.js'; |
| | | import { getToken } from '@/utils/auth'; |
| | | import undergroundModel from '../views/Tools/undergroundModel.vue' |
| | |
| | | components: { |
| | | undergroundModel |
| | | }, |
| | | data() { |
| | | 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: [], |
| | |
| | | }, |
| | | childOption: [], |
| | | dialogVisible: false, |
| | | dialogLayerVisible: false, |
| | | isShowModel: false, |
| | | tableData: [], |
| | | formInline: { |
| | |
| | | info: '', |
| | | icon: '', |
| | | bak: '', |
| | | Id: '' |
| | | Id: '', |
| | | |
| | | }, |
| | | options: [ |
| | | { |
| | | value: '倾斜模型', |
| | | label: '倾斜模型' |
| | | }, { |
| | | },{ |
| | | value: 'BIM模型', |
| | | label: 'BIM模型' |
| | | }, { |
| | | },{ |
| | | value: '点云模型', |
| | | label: '点云模型' |
| | | }, { |
| | | },{ |
| | | value: '地质设计模型', |
| | | label: '地质设计模型' |
| | | }, { |
| | | },{ |
| | | value: '人工模型', |
| | | label: '人工模型' |
| | | }, { |
| | | },{ |
| | | value: '其他模型', |
| | | label: '其他模型' |
| | | }], |
| | |
| | | isJpg: false, |
| | | src: '' |
| | | }, |
| | | modelType: ['ifc', 'fbx', 'rvt', '3dml'], |
| | | modelType: ['ifc','fbx','rvt','3dml','cpt','osgb','las','laz'], |
| | | editModelFlag: false, |
| | | modelForm: { |
| | | lon: 119, |
| | |
| | | yaw: 0, |
| | | alpha: 1, |
| | | modelid: null, |
| | | west: null, |
| | | south: null, |
| | | east: null, |
| | | north: null, |
| | | scale: 1 |
| | | }, |
| | | app: { |
| | | tileset: null, |
| | |
| | | modelLayerId: null, |
| | | optionKey: [], |
| | | modelKeyFlag: false, |
| | | menuVisible: false, |
| | | rightClickMenuStyle: {}, // 右键菜单样式 |
| | | serveType: true, |
| | | layerData: "lf.sys_style", |
| | | layerTree: null |
| | | } |
| | | }, |
| | | mounted() { |
| | | mounted () { |
| | | this.init3DMap(); |
| | | this.getLayers(); |
| | | }, |
| | | methods: { |
| | | setUndergroundMode() { |
| | | if (window.UndergroundMode) { |
| | | this.$refs && |
| | | this.$refs.undergroundModel && |
| | | 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):""; // 给父级添加一个children属性,并赋值 |
| | | // 属于同一对象问题,例如:令 a=b、c=1 ,然后再令 b.c=c , 那么 a.c=b.c=c=1 ;同理,后续令 c.d=2 ,那么 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,); |
| | | 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; |
| | | refreshAttatchDetail () { |
| | | this.dialog.src=""; |
| | | this.dialog.dialogVisible=false; |
| | | this.dialog.isPdf=false; |
| | | this.dialog.isJpg=false; |
| | | }, |
| | | //附件查看 |
| | | setAttatchDetail(index, row) { |
| | | 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 |
| | | 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 |
| | | 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) { |
| | | console.log(row) |
| | | this.handleCAD(row) |
| | | } |
| | | }, |
| | | async setAttachDel() { |
| | | var std = []; |
| | | for (var i in this.attacgSelection) { |
| | | async handleCAD (row) { |
| | | const data=await meta_selectConvertToDwg(row.id); |
| | | 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) { |
| | | 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) { |
| | | 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 |
| | | 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=lf.sys_style&eventid=" + this.layerID, |
| | | $.ajax(BASE_URL+"/comprehensive/uploadFiles?token="+token+"&tabName="+this.layerData+"&eventid="+this.layerID, |
| | | { |
| | | type: "post", |
| | | data: formData, |
| | |
| | | message: "附件添加成功", |
| | | type: "success", |
| | | }); |
| | | document.getElementById("insertFile").value = ""; |
| | | this.fromfile = { |
| | | document.getElementById("insertFile").value=""; |
| | | this.fromfile={ |
| | | file: "", |
| | | }; |
| | | |
| | | this.getAttacthFlieList(); |
| | | }, |
| | | error: (e) => { |
| | | document.getElementById("insertFile").value = ""; |
| | | document.getElementById("insertFile").value=""; |
| | | this.$message.error("附件添加失败"); |
| | | }, |
| | | } |
| | | ); |
| | | }, |
| | | //附件=>文件选择 |
| | | getInsertFile() { |
| | | getInsertFile () { |
| | | $('#insertFile').click(); |
| | | }, |
| | | insertFile() { |
| | | var val = document.getElementById('insertFile').files; |
| | | if (!val || !val.length) return; |
| | | this.fromfile.file = val[0].name; |
| | | 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 |
| | | 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) { |
| | | statSizeChange (row,column) { |
| | | return this.stateFormatSizes(row.sizes) |
| | | }, |
| | | stateFormatSizes(res) { |
| | | if (res >= 1024) { |
| | | const val = parseFloat(res / 1024).toFixed(3); |
| | | return val + ' GB'; |
| | | stateFormatSizes (res) { |
| | | if(res>=1024) { |
| | | const val=parseFloat(res/1024).toFixed(3); |
| | | return val+' GB'; |
| | | } else { |
| | | return res + ' MB'; |
| | | return res+' MB'; |
| | | } |
| | | }, |
| | | // 附件=>表格选择 |
| | | handleAttatchChange(val) { |
| | | this.attacgSelection = val; |
| | | handleAttatchChange (val) { |
| | | this.attacgSelection=val; |
| | | }, |
| | | //附件列表查询 |
| | | async getAttacthFlieList() { |
| | | var obj = { |
| | | async getAttacthFlieList () { |
| | | var obj={ |
| | | eventid: this.layerID, |
| | | tabName: "lf.sys_style" |
| | | tabName: this.layerData |
| | | }; |
| | | const res = await comprehensive_selectFiles(obj); |
| | | if (res.code != 200) { |
| | | const res=await comprehensive_selectFiles(obj); |
| | | if(res.code!=200) { |
| | | this.$message.error('列表调用失败'); |
| | | return |
| | | } |
| | | this.tableData = res.result; |
| | | this.tableData=res.result; |
| | | }, |
| | | handleClick() { |
| | | if (this.activeName == "second") { |
| | | handleClick () { |
| | | if(this.activeName=="second") { |
| | | this.getAttacthFlieList(); |
| | | } |
| | | }, |
| | | async EditData() { |
| | | const data = await comprehensive_updateModel(this.formInline) |
| | | async EditData () { |
| | | const data=await comprehensive_updateModel(this.formInline) |
| | | |
| | | |
| | | if (data.code != 200) { |
| | | if(data.code!=200) { |
| | | this.$message.error('修改失败'); |
| | | return |
| | | } |
| | |
| | | type: 'success' |
| | | }); |
| | | |
| | | var that = this; |
| | | that.dialogVisible = false; |
| | | this.formInline.title = this.formInline.name |
| | | that.dialogVisible = true; |
| | | var that=this; |
| | | that.dialogVisible=false; |
| | | this.formInline.title=this.formInline.name |
| | | that.dialogVisible=true; |
| | | |
| | | this.startModelData(); |
| | | }, |
| | | async InsertData() { |
| | | var std = { |
| | | async InsertData () { |
| | | var std={ |
| | | "bak": this.formInline.bak, |
| | | "guid": this.formInline.Id, |
| | | "layerid": this.formInline.layerId, |
| | |
| | | "name": this.formInline.name, |
| | | "type": this.formInline.type |
| | | } |
| | | const data = await comprehensive_insertModel(std) |
| | | if (data.code != 200) { |
| | | const data=await comprehensive_insertModel(std) |
| | | if(data.code!=200) { |
| | | this.$message.error('添加失败'); |
| | | } |
| | | this.$message({ |
| | |
| | | type: 'success' |
| | | }); |
| | | |
| | | var that = this; |
| | | that.dialogVisible = false; |
| | | this.formInline.title = this.formInline.name |
| | | that.dialogVisible = true; |
| | | var that=this; |
| | | that.dialogVisible=false; |
| | | this.formInline.title=this.formInline.name |
| | | that.dialogVisible=true; |
| | | this.startModelData(); |
| | | |
| | | |
| | | |
| | | }, |
| | | handleClose() { |
| | | this.dialogVisible = false; |
| | | this.formInline = { |
| | | handleClose () { |
| | | this.layerData="lf.sys_style" |
| | | this.serveType=true; |
| | | this.dialogVisible=false; |
| | | this.formInline={ |
| | | title: '', |
| | | file: '', |
| | | name: '', |
| | |
| | | bak: '', |
| | | Id: '' |
| | | } |
| | | this.activeName = "first" |
| | | this.activeName="first" |
| | | }, |
| | | |
| | | async setShowModelInfo(result) { |
| | | var modelKey = 'id'; |
| | | async setShowModelInfo (result) { |
| | | var modelKey='id'; |
| | | |
| | | if (result.tileset.pubid > 0) { |
| | | const data = await comprehensive_selectPubById({ id: result.tileset.pubid }) |
| | | if (data.code != 200) { |
| | | return |
| | | } else { |
| | | if(result.tileset) { |
| | | if(result.tileset.pubid&&parseInt(result.tileset.pubid)>0) { |
| | | const data=await comprehensive_selectPubById({ id: result.tileset.pubid }) |
| | | |
| | | modelKey = JSON.parse(data.result.json).modelid |
| | | 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); |
| | | |
| | | } |
| | | if (!modelKey) { |
| | | return this.$message('没有模型主键ID,无法查询数据'); |
| | | } |
| | | } 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") |
| | | this.formInline.Id = result.getProperty(modelKey); |
| | | this.layerID = result.getProperty(modelKey); |
| | | this.formInline.layerId = result.primitive.layerId; |
| | | this.formInline.layerName = result.primitive.id; |
| | | 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; |
| | | this.dialogVisible=true; |
| | | }, |
| | | async startModelData() { |
| | | var obj = { |
| | | async startModelData () { |
| | | var obj={ |
| | | layerid: this.formInline.layerId, |
| | | modelid: this.formInline.Id |
| | | } |
| | | const data = await comprehensive_selectModelByGuid(obj); |
| | | if (data.code != 200) { |
| | | const data=await comprehensive_selectModelByGuid(obj); |
| | | if(data.code!=200) { |
| | | return; |
| | | } |
| | | |
| | | if (data.result == null) { |
| | | this.isShowModel = true; |
| | | this.formInline.name = this.formInline.title; |
| | | 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; |
| | | |
| | | this.isShowModel=false; |
| | | this.formInline=data.result; |
| | | this.formInline.title=this.formInline.name; |
| | | } |
| | | }, |
| | | setChangeTileset(result) { |
| | | var value = this.$refs.tree.getCheckedNodes(); |
| | | var std = []; |
| | | for (var i in value) { |
| | | 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) { |
| | | for(var i in result) { |
| | | var tile=result[i] |
| | | 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( |
| | | |
| | | 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, // 减少离相机较远的屏幕空间错误:false |
| | | skipLevelOfDetail: true, // 在遍历时候跳过详情:false |
| | | }) |
| | | ); |
| | | var that = this; |
| | | var that=this; |
| | | tileset.readyPromise.then((tileset) => { |
| | | tileset.id = res.cnName; |
| | | tileset.layerId = res.id; |
| | | tileset.pubid = res.pubid; |
| | | that.getArgsTileset(tileset, res); |
| | | 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, res) { |
| | | async getArgsTileset (tileset,rs) { |
| | | |
| | | if (res.pubid > 0) { |
| | | const data = await comprehensive_selectPubById({ id: res.pubid }) |
| | | if(rs.pubid>0) { |
| | | |
| | | if (data.code != 200) { |
| | | const data=await comprehensive_selectPubById({ id: rs.pubid }) |
| | | |
| | | if(data.code!=200) { |
| | | |
| | | } else { |
| | | this.reloadTile(tileset, data.result.json) |
| | | |
| | | if(rs.serveType=='3DML') { |
| | | this.tileSet(tileset,parseFloat(rs.elev)) |
| | | } else { |
| | | this.reloadTile(tileset,data.result.json) |
| | | } |
| | | |
| | | |
| | | } |
| | | } else { |
| | | this.tileSet(tileset, parseFloat(res.elev)) |
| | | this.tileSet(tileset,parseFloat(rs.elev)) |
| | | |
| | | } |
| | | }, |
| | | tileSet(tileset, height) { |
| | | tileSet (tileset,height) { |
| | | //3dtile模型的边界球体 |
| | | var boundingSphere = tileset.boundingSphere; |
| | | var boundingSphere=tileset.boundingSphere; |
| | | //迪卡尔空间直角坐标=>地理坐标(弧度制) |
| | | var cartographic_original = Cesium.Cartographic.fromCartesian(boundingSphere.center); |
| | | 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); |
| | | 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); |
| | | //获得地面和offset的转换 |
| | | var translation = Cesium.Cartesian3.subtract(Cartesian3_offset, Cartesian3_original, new Cesium.Cartesian3()); |
| | | var translation=Cesium.Cartesian3.subtract(Cartesian3_offset,Cartesian3_original,new Cesium.Cartesian3()); |
| | | //修改模型矩阵 |
| | | tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); |
| | | Viewer.flyTo(tileset); |
| | | 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; |
| | | 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) { |
| | | handleCheckChange (data,checked,indeterminate) { |
| | | if(data.type==1) { |
| | | this.getchilds(data); |
| | | this.setChangeTileset(this.childOption, checked); |
| | | this.setChangeTileset(this.childOption,checked); |
| | | } else { |
| | | this.setChangeTileset([data], checked); |
| | | this.setChangeTileset([data],checked); |
| | | } |
| | | }, |
| | | handleNodeClick(data) { |
| | | 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]); |
| | | 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]); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | getchilds(source) { |
| | | if (source.children) { |
| | | var child = source.children |
| | | for (var i in child) { |
| | | if (child[i].children) { |
| | | 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]) |
| | |
| | | this.childOption.push(source) |
| | | } |
| | | }, |
| | | init3DMap() { |
| | | init3DMap () { |
| | | //地图初始化 |
| | | window.sgworld = new SmartEarth.SGWorld("mapdiv", { |
| | | window.sgworld=new SmartEarth.SGWorld("mapdiv",{ |
| | | licenseServer: window.sceneConfig.licenseServer, |
| | | }); |
| | | window.Viewer = window.sgworld._Viewer; |
| | | window.Viewer=window.sgworld._Viewer; |
| | | // Viewer.camera.flyTo({ |
| | | // destination: Cesium.Cartesian3.fromDegrees(110, 33, 8000000), |
| | | // }); |
| | | Viewer._enableInfoOrSelection = false; |
| | | |
| | | if(is_production) { |
| | | Viewer.imageryLayers.removeAll(); |
| | | } |
| | | Viewer._enableInfoOrSelection=false; |
| | | //显示fps |
| | | Viewer.scene.debugShowFramesPerSecond = false; |
| | | Viewer.scene.debugShowFramesPerSecond=false; |
| | | //导航控件 |
| | | // window.sgworld.navControl("nav", false); |
| | | //比例尺 |
| | | // window.sgworld.navControl("scale", false); |
| | | //开启深度检测 |
| | | // sg.Analysis.depthTestAgainstTerrain(true) |
| | | Viewer.scene.globe.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"); |
| | | var option = { |
| | | url: window.sceneConfig.SGUrl, |
| | | layerName: window.sceneConfig.mptName, |
| | | requestVertexNormals: true, |
| | | }; |
| | | window.terrainLayer = sgworld.Creator.sfsterrainprovider("", option, "", true, ""); |
| | | 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 |
| | | // }); |
| | | |
| | | |
| | | if (this.$store.state.previewLayer) { |
| | | var res = this.$store.state.previewLayer; |
| | | var type = res.type; |
| | | if (type == 'DEM') { |
| | | window.terrainLayer.deleteObject(); |
| | | window.terrainLayer = null; |
| | | window.terrainLayer = new Cesium.CesiumTerrainProvider({ |
| | | // 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({ |
| | | 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 |
| | | } |
| | | }); |
| | | });*/ |
| | | |
| | | } else if (res.url.indexOf('.png') != -1) { |
| | | var wkt = this.$wkt.parse(res.geom); |
| | | var height = this.getHeight(wkt.coordinates[2]) |
| | | window.BaseMapLayer = Viewer.imageryLayers.addImageryProvider( |
| | | 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), |
| | | destination: Cesium.Cartesian3.fromDegrees(wkt.coordinates[1],wkt.coordinates[0],height), |
| | | }); |
| | | } else if (type == '3dml' || type == 'fbx' || type == 'ifc' || type == 'rvt') { |
| | | if (this.app.tileset) viewer.scene.primitives.remove(this.app.tileset); |
| | | this.app.tileset = this.createTileset(res); |
| | | var that = this; |
| | | Viewer.scene.primitives.add(this.app.tileset).readyPromise.then(function (ts) { |
| | | } 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) { |
| | | Viewer.imageryLayers.removeAll(); |
| | | var url = res.url.split(';') |
| | | sgworld.Creator.createImageryProvider('mpt影像', "wms", { |
| | | } 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] |
| | | }, "0", undefined, true, ""); |
| | | } else if (res.url.indexOf('menuLayer') != -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); |
| | | 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) { |
| | | 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) |
| | | },Cesium.ScreenSpaceEventType.LEFT_CLICK) |
| | | }, |
| | | |
| | | async resave() { |
| | | if (!this.modelForm.modelid) { |
| | | return this.$message('未选择模型主键ID'); |
| | | 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); |
| | | |
| | | const data = await publish_update(this.$store.state.previewLayer); |
| | | if (data.code != 200) { |
| | | 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({ |
| | |
| | | } |
| | | this.reload(); |
| | | }, |
| | | reload() { |
| | | var json = JSON.stringify(this.modelForm); |
| | | var url = this.$store.state.previewLayer.url; |
| | | if (!url) return; |
| | | if (this.app.tileset) Viewer.scene.primitives.remove(this.app.tileset); |
| | | reload () { |
| | | |
| | | 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)); |
| | | 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); |
| | | |
| | | |
| | | 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); |
| | | that.app.tileset._root.transform = matrix; |
| | | 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; |
| | | |
| | | that.app.isBusy=false; |
| | | }); |
| | | }, |
| | | |
| | | //拾取 |
| | | pickupCoords() { |
| | | if (this.app.handler) { |
| | | pickupCoords () { |
| | | if(this.app.handler) { |
| | | this.app.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); |
| | | this.app.handler = undefined; |
| | | this.app.handler=undefined; |
| | | return; |
| | | } |
| | | var that = this; |
| | | this.app.handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas); |
| | | this.app.handler.setInputAction(function (event) { |
| | | 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); |
| | | 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.modelForm.lon=x; |
| | | that.modelForm.lat=y; |
| | | that.modelForm.height=z; |
| | | that.pickupCoords(); |
| | | }, Cesium.ScreenSpaceEventType.LEFT_CLICK); |
| | | that.reload(); |
| | | |
| | | },Cesium.ScreenSpaceEventType.LEFT_CLICK); |
| | | }, |
| | | // 保留小数位 |
| | | toFixed(d, n) { |
| | | var p = Math.pow(10, n); |
| | | toFixed (d,n) { |
| | | var p=Math.pow(10,n); |
| | | |
| | | return Math.round(d * p) / p; |
| | | return Math.round(d*p)/p; |
| | | }, |
| | | update() { |
| | | if (!this.modelForm.lon || isNaN(this.modelForm.lon)) { |
| | | var args = this.getEditTilesetArgs(); |
| | | this.modelForm.lon = args.lon; |
| | | return |
| | | } |
| | | if (!this.modelForm.lat || isNaN(this.modelForm.lat)) { |
| | | var args = this.getEditTilesetArgs(); |
| | | this.modelForm.lat = args.lat; |
| | | return |
| | | } |
| | | if (!this.modelForm.height || isNaN(this.modelForm.height)) { |
| | | var args = this.getEditTilesetArgs(); |
| | | this.modelForm.height = args.height; |
| | | return |
| | | } |
| | | if (!this.modelForm.yaw || isNaN(this.modelForm.yaw)) { |
| | | this.modelForm.yaw = 0; |
| | | return |
| | | } |
| | | // if (!this.modelForm.alpha || isNaN(this.modelForm.alpha)) { |
| | | |
| | | // if (this.app.under) { |
| | | // |
| | | // this.modelForm.alpha = sgworld._Analysis._UndergroundMode._alpha; |
| | | // } else { |
| | | // this.modelForm.alpha = 1 |
| | | // } |
| | | 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) |
| | | sgworld.Analysis.UndergroundMode(this.app.under,this.modelForm.alpha) |
| | | }, |
| | | setTilesetArgs(f) { |
| | | setTilesetArgs (f) { |
| | | |
| | | if (!this.app.tileset || this.app.isBusy) return; |
| | | if(!this.app.tileset||this.app.isBusy) return; |
| | | |
| | | var pos = Cesium.Cartesian3.fromDegrees(parseFloat(f.lon), parseFloat(f.lat), parseFloat(f.height)); |
| | | 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 model = this.app.tileset |
| | | model._root.transform = matrix; |
| | | 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) |
| | | 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; |
| | | showTileset () { |
| | | |
| | | if(!this.app.tileset) return; |
| | | this.app.tileset.show=!this.app.tileset.show; |
| | | }, |
| | | //定位 |
| | | locateTo() { |
| | | if (!this.app.tileset) return; |
| | | locateTo () { |
| | | if(!this.app.tileset) return; |
| | | Viewer.flyTo(this.app.tileset); |
| | | }, |
| | | createTileset(res) { |
| | | createTileset (res) { |
| | | res.url=res.url.replace('{host}',iisHost) |
| | | return new Cesium.Cesium3DTileset({ |
| | | url: res.url, |
| | | name: 'tsTest', |
| | | skipLevelOfDetail: true, // 在遍历时候跳过详情:false |
| | | baseScreenSpaceError: 1024, |
| | | maximumScreenSpaceError: 64, // 最大屏幕空间错误:16,数值加大能让最终成像变模糊 |
| | | maximumScreenSpaceError: res.url.indexOf("/pnts/")>-1? 16:64, // 最大屏幕空间错误:16,数值加大能让最终成像变模糊 |
| | | skipScreenSpaceErrorFactor: 16, |
| | | skipLevels: 1, |
| | | immediatelyLoadDesiredLevelOfDetail: false, |
| | |
| | | dynamicScreenSpaceError: true // 减少离相机较远的屏幕空间错误:false,全屏加载完之后才清晰化房屋 |
| | | }); |
| | | }, |
| | | setEditModelLayer(res) { |
| | | this.editModelFlag = true; |
| | | if (res.json) { |
| | | var json = JSON.parse(res.json) |
| | | this.modelForm = json; |
| | | 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) { |
| | | this.setEditModelLayer(res) |
| | | 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) { |
| | | setModeLayerID (res) { |
| | | |
| | | var value = res.getPropertyNames(); |
| | | var std = []; |
| | | for (var i in value) { |
| | | 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; |
| | | this.optionKey=std; |
| | | this.modelLayerId=this.optionKey[0].label; |
| | | this.modelKeyFlag=true; |
| | | }, |
| | | setSureKeyModelKey() { |
| | | this.modelKeyFlag = false; |
| | | this.modelForm.modelid = this.modelLayerId |
| | | 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); |
| | | 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); |
| | | 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; |
| | | this.app.isBusy=false; |
| | | }, |
| | | getEditTilesetArgs() { |
| | | 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); |
| | | var std = { |
| | | lon: null, |
| | | lat: null, |
| | | height: null, |
| | | getEditTilesetArgs () { |
| | | this.app.isBusy=true; |
| | | var std={ |
| | | lon: 0, |
| | | lat: 0, |
| | | height: 0, |
| | | } |
| | | |
| | | 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); |
| | | 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; |
| | | this.app.isBusy=false; |
| | | return std |
| | | }, |
| | | |
| | | async setShowModelLayer() { |
| | | const data = await perms_selectLayers(); |
| | | if (data.code != 200) { |
| | | async setShowModelLayer () { |
| | | const data=await perms_selectLayers(); |
| | | if(data.code!=200) { |
| | | |
| | | } else { |
| | | var std = data.result |
| | | var val = []; |
| | | 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) { |
| | | if(str.type==1) { |
| | | val.push(str); |
| | | } |
| | | if (str.url != null && str.type == 2 && str.serveType == 'Tileset') { |
| | | 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); |
| | | 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); } |
| | | 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 && pickedFeature.getProperty) { |
| | | pickedColor = pickedFeature.color |
| | | pickedFeature.color = Cesium.Color.RED.withAlpha(0.3); |
| | | 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) |
| | | },Cesium.ScreenSpaceEventType.LEFT_CLICK) |
| | | } |
| | | }, |
| | | setTreeData(source) { |
| | | let cloneData = JSON.parse(JSON.stringify(source)); // 对源数据深度克隆 |
| | | 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) : ""; // 给父级添加一个children属性,并赋值 |
| | | let branchArr=cloneData.filter((child) => father.id==child.pid); // 对比ID,分别上下级菜单,并返回数据 |
| | | branchArr.length>0? (father.children=branchArr):""; // 给父级添加一个children属性,并赋值 |
| | | // 属于同一对象问题,例如:令 a=b、c=1 ,然后再令 b.c=c , 那么 a.c=b.c=c=1 ;同理,后续令 c.d=2 ,那么 a.c.d 也是=2; |
| | | // 由此循环多次后,就能形成相应的树形数据结构 |
| | | return father.pid == 0; // 返回一级菜单 |
| | | return father.pid==0; // 返回一级菜单 |
| | | }); |
| | | }, |
| | | // tileSet(tileset, height) { |
| | |
| | | // //修改模型矩阵 |
| | | // tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); |
| | | // }, |
| | | getHeight(level) { |
| | | if (level > 0 && level < 23) { |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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> |
| | | </style> |