12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130 |
- <script setup>
- import {
- inject
- } from "vue";
- const getMapInstance = inject("getMapInstance");
- jt3dRight = getMapInstance();
- import {
- Store
- } from '@/store/index'
- store = Store()
- import {
- deepTree
- } from "@/utils/deepTree.js";
- </script>
- <template>
- <div class="jt-layer">
- <el-tree :data="treeData" :default-expanded-keys="expandedKeys" node-key="id" class="tree-line" :expand-on-click-node="false" ref="treeRef" @check-change="handleCheckChange" @node-click="handleClick">
- <template #default="{ node, data }">
- <!-- 复选框 -->
- <el-checkbox v-if="data.ischeck === '1' && store.userport == 'PC'" v-model="node.checked" :indeterminate="node.indeterminate" :disabled="!!node.disabled" @change="handleCheckBoxChange($event, data, node)">
- </el-checkbox>
- <el-switch v-else-if="data.ischeck == 1 && store.userport == 'APP'" width="30rem" size="small" v-model="node.checked" @change="handleCheckBoxChange($event, data, node)" />
- <span class="custom-tree-node">
- <!-- 字体、图标 -->
- <!-- <span>
- <img src="@/assets/images/logo16x16.ico" />
- </span> -->
- <span class="overflowtext">
- {{ data.layername }}
- </span>
- </span>
- <!-- 透明度 -->
- <template v-if="node.checked && data.opacity >0">
- <div style="width: 80rem; padding: 0 20rem; position: absolute; right: 0">
- <el-slider v-model="data.opacity" @input="handleSliderChange($event, data)" :max="1" :min="0.1" :step="0.1" />
- </div>
- </template>
- </template>
- </el-tree>
- </div>
- </template>
- <script>
- let store = undefined;
- let jt3dRight = undefined;
- let jt3dLeft = undefined;
- export default {
- /* 数据 */
- data() {
- return {
- treeData: [],
- inittree: [], //初始化图层数组
- expandedKeys: [], //对应要展开的节点id
- }
- },
- /* 方法 */
- methods: {
- /**
- * el-tree 当节点被点击的时候触发
- * 控制地图服务的显示及隐藏
- * @param {Object} data 传递给 data 属性的数组中该节点所对应的对象
- */
- async handleClick(data) {
- let _self = this;
- let _serviceId = "serviceLeft_" + data.layercode + data.layerorder;
- let layername = data.layername;
- //透明度
- let _opacity = null;
- if (data.opacity == null) {
- _opacity = 1;
- } else {
- _opacity = Number(data.opacity);
- data.opacity = _opacity;
- if (_opacity == 0) {
- _opacity = 1;
- }
- }
- //参数集
- let parameterset = data.parameterset;
- if (data.parameterset instanceof Object) {
- parameterset = data.parameterset;
- } else if (data.parameterset != "" && data.parameterset != null && data.parameterset != undefined) {
- parameterset = JSON.parse(data.parameterset);
- }
- if (data.isinit === '1') {
- await new Promise((resolve, reject) => {
- switch (data.loadtype) {
- case "GeoJsonPolyline": //GeoJsonPolyline
- break;
- case "entitiesGltf": //gltf/glb
- if (parameterset) {
- if (parameterset.points) { //模型位置
- let flyToEntity = jt3dLeft.LocateUtil.flyToEntityByPoints([
- parameterset.points,
- ], 'point', {
- heading: 0,
- pitch: -90,
- range: 8880
- });
- } else {
- ElMessage("请检测图层表parameterset字段是否设置points");
- }
- } else {
- ElMessage("请检测图层表parameterset字段是否设置points");
- }
- break;
- case "PolygonImageMaterial": //图片材质
- break;
- case "CrImageServerLayer": //地形服务(DEM)
- break;
- case "DEM": //地形服务(DEM)
- break;
- case "UrlTemplateImageryProvider": //加载URL模板服务
- break;
- case "WebMapTileServiceImageryProvider": // WMTS地图服务
- break;
- case "WebMapServiceImageryProvider": //WMS地图服务
- break;
- case "ArcGisMapServerImageryProvider": // ArcGIS Online和Server的相关服务
- break;
- case "TileMapServiceImageryProvider": // 2.5维度地图
- break;
- case "Cesium3DTileset": //加载3DTileset地图服务--实景
- break;
- case "Cesium3DTileset_BM": //加载3DTileset地图服务--白膜
- break;
- default:
- break;
- }
- })
- }
- },
- /**
- * el-tree 当复选框被点击的时候触发
- * 控制地图服务的显示及隐藏
- * @param {Object} data 传递给 data 属性的数组中该节点所对应的对象
- * @param {Object} checked 节点本身是否被选中
- */
- async handleCheckChange(data, checked) {
- let _self = this;
- let _serviceId = "serviceLeft_" + data.layercode + data.layerorder;
- let layername = data.layername;
- let layertype = data.layertype;
- //透明度
- let _opacity = null;
- if (data.opacity == null) {
- _opacity = 1;
- } else {
- _opacity = Number(data.opacity);
- data.opacity = _opacity;
- if (_opacity == 0) {
- _opacity = 1;
- }
- }
- //参数集
- let parameterset = data.parameterset;
- if (data.parameterset instanceof Object) {
- parameterset = data.parameterset;
- } else if (data.parameterset != "" && data.parameterset != null && data.parameterset != undefined) {
- parameterset = JSON.parse(data.parameterset);
- }
- //在显示的图层中,如果图层配置可以查询,则进行查询
- if (layertype === '矢量面' && data.querytable) {
- if (checked) {
- if (store.queryMapTables.indexOf(data.querytable) === -1) {
- store.queryMapTables.push(data.querytable);
- }
- } else {
- //过滤
- store.queryMapTables = store.queryMapTables.filter(tableName => {
- return tableName !== data.querytable
- })
- }
- }
- await new Promise((resolve, reject) => {
- switch (data.loadtype) {
- case "GeoJsonPoint": //GeoJsonPoint
- if (checked) {
- //设置参数
- let _options = {
- id: _serviceId,
- url: data.datasource,
- }
- if (parameterset) {
- if (parameterset.billboard instanceof Object) {
- let billboard = parameterset.billboard;
- _options.billboard = billboard;
- }
- if (parameterset.label instanceof Object) {
- let label = parameterset.label;
- _options.label = label;
- }
- }
- jt3dLeft.layer.addBillboardByGeoJson(_options, function(serviceId) {
- });
- } else {
- jt3dLeft.layer.removeDataSources({
- serviceId: _serviceId,
- });
- }
- break;
- case "GeoJsonPolyline": //GeoJsonPolyline
- if (checked) {
- //设置参数
- let _options = {
- id: _serviceId,
- url: data.datasource,
- }
- if (parameterset) {
- if (parameterset.clampToGround) { //是否贴地
- _options.clampToGround = parameterset.clampToGround;
- }
- if (parameterset.isImageAlpha) { //是否采用图片颜色
- _options.isImageAlpha = parameterset.isImageAlpha;
- }
- if (parameterset.imgUrl) { //精灵线图片
- _options.imgUrl = parameterset.imgUrl;
- }
- if (parameterset.color) { //指定线的颜色
- _options.color = parameterset.color;
- }
- if (parameterset.width) { //线宽
- _options.width = parameterset.width;
- }
- if (parameterset.duration) { //持续时间 毫秒,越小越快
- _options.duration = parameterset.duration;
- }
- if (parameterset.count) { //重复次数
- _options.count = parameterset.count;
- }
- if (parameterset.direction) { //direction=vertical 纵,order='-'(由下到上) , '+"(由上到下)
- _options.direction = parameterset.direction;
- }
- if (parameterset.order) { //direction=horizontal 横,order='-'(顺时针) , '+'(逆时针)
- _options.order = parameterset.order;
- }
- }
- jt3dLeft.layer.addPolylineByGeoJson(_options, function(serviceId) {
- });
- } else {
- jt3dLeft.layer.removeDataSources({
- serviceId: _serviceId,
- });
- }
- break;
- case "entitiesGltf": //gltf/glb
- if (checked) {
- //设置参数
- let _options = {
- id: _serviceId,
- url: data.datasource,
- points: [],
- }
- if (parameterset) {
- if (parameterset.points) { //模型位置
- _options.points = parameterset.points;
- if (parameterset.minimumPixelSize) { //模型最小刻度
- _options.minimumPixelSize = parameterset.minimumPixelSize;
- }
- if (parameterset.maximumScale) { //模型的最大比例尺大小,设置模型最大放大大小
- _options.maximumScale = parameterset.maximumScale;
- }
- if (parameterset.silhouetteColor) { //模型轮廓颜色
- _options.silhouetteColor = parameterset.silhouetteColor;
- }
- if (parameterset.alpha) { //模型透明度
- _options.alpha = parameterset.alpha;
- }
- if (parameterset.heading) { //以弧度为单位的航向分量
- _options.heading = parameterset.heading;
- }
- if (parameterset.pitch) { //以弧度为单位的航向分量
- _options.pitch = parameterset.pitch;
- }
- if (parameterset.roll) { //以弧度为单位的滚动分量
- _options.roll = parameterset.roll;
- }
- jt3dLeft.layer.addEntitiesGltf(_options, function(serviceId) {
- // let flyToEntity = jt3dLeft.LocateUtil.flyToEntityByPoints([
- // parameterset.points,
- // ], 'point');
- });
- } else {
- ElMessage("请检测图层表parameterset字段是否设置points");
- }
- } else {
- ElMessage("请检测图层表parameterset字段是否设置points");
- }
- } else {
- jt3dLeft.layer.removeEntity({
- serviceId: _serviceId,
- });
- }
- break;
- case "PolygonImageMaterial": //图片材质
- if (checked) {
- if (parameterset) {
- if (parameterset.points) {
- jt3dLeft.layer.addPolygonImageMaterial({
- id: _serviceId,
- points: parameterset.points,
- url: data.datasource,
- alpha: _opacity
- }, function(serviceId) {
- });
- } else {
- ElMessage("请检测图层表parameterset字段是否设置points");
- }
- } else {
- ElMessage("请检测图层表parameterset字段是否设置points");
- }
- } else {
- jt3dLeft.layer.removeEntity({
- serviceId: _serviceId,
- });
- }
- break;
- case "CrImageServerLayer": //贴地所有地形、模型的规划图、网格地图
- if (checked) {
- let floatLayer = new this.jt3dSDK.CrImageServerLayer({
- viewer: jt3dLeft._viewer,
- url: data.datasource,
- opacity: _opacity,
- show: true
- });
- window[_serviceId] = floatLayer;
- //添加网格地图
- // window[_serviceId].show();
- } else {
- window[_serviceId].hide();
- }
- break;
- case "DEM": //地形服务(DEM)
- if (checked) {
- //设置参数
- let _options = {
- url: data.datasource,
- }
- if (parameterset) {
- if (parameterset.terrainExaggeration) { //地形夸张系数
- _options.terrainExaggeration = parameterset.terrainExaggeration;
- }
- }
- jt3dLeft.layer.addTerrain(_options);
- } else {
- jt3dLeft.layer.removeTerrain();
- }
- break;
- case "UrlTemplateImageryProvider": //加载URL模板服务
- if (checked) {
- //设置参数
- let _options = {
- id: _serviceId,
- url: data.datasource,
- alpha: _opacity
- }
- if (parameterset) {
- if (parameterset.CRS) { //坐标系
- _options.CRS = parameterset.CRS;
- }
- if (parameterset.minimumLevel) { //最小层级
- _options.minimumLevel = parameterset.minimumLevel;
- }
- if (parameterset.maximumLevel) { //最大层级
- _options.maximumLevel = parameterset.maximumLevel;
- }
- }
- //加载服务
- jt3dLeft.layer.addUrlTemplateImagery(_options, function(serviceId) {
- //重置图层顺序
- _self.setLayerNumber(serviceId)
- if (layertype === '标注') {
- var imageryLayers = jt3dLeft._viewer.imageryLayers;
- imageryLayers.raiseToTop(window[serviceId]);
- }
- });
- } else {
- let removeLayer = jt3dLeft.layer.removeImageryProvider({
- serviceId: _serviceId
- });
- removeLayer.then(function() {
- console.log('成功移除')
- });
- }
- break;
- case "WebMapTileServiceImageryProvider": // WMTS地图服务
- if (checked) {
- //设置参数
- let _options = {
- id: _serviceId,
- url: data.datasource,
- layers: 'cia',
- style: 'default',
- tileMatrixSetID: 'w',
- alpha: _opacity
- }
- if (parameterset) {
- if (parameterset.layers) { //WMTS请求的层名
- _options.layers = parameterset.layers;
- if (parameterset.style) { //WMTS请求的样式名
- _options.style = parameterset.style;
- if (parameterset.tileMatrixSetID) { //用于WMTS请求的TileMatrixSet的标识符
- _options.tileMatrixSetID = parameterset.tileMatrixSetID;
- if (parameterset.tileMatrixLabels) { //TileMatrix中用于WMTS请求的标识符列表,每个TileMatrix级别一个标识符。
- _options.tileMatrixLabels = parameterset.tileMatrixLabels;
- }
- if (parameterset.minimumLevel) { //最小层级
- _options.minimumLevel = parameterset.minimumLevel;
- }
- if (parameterset.maximumLevel) { //最大层级
- _options.maximumLevel = parameterset.maximumLevel;
- }
- jt3dLeft.layer.addWebMapTileService(_options, function(serviceId) {
- //重置图层顺序
- _self.setLayerNumber(serviceId)
- if (layertype === '标注') {
- var imageryLayers = jt3dLeft._viewer.imageryLayers;
- imageryLayers.raiseToTop(window[serviceId]);
- }
- });
- } else {
- ElMessage("请检测图层表parameterset字段是否设置tileMatrixSetID");
- }
- } else {
- ElMessage("请检测图层表parameterset字段是否设置style");
- }
- } else {
- ElMessage("请检测图层表parameterset字段是否设置layers");
- }
- } else {
- ElMessage("请检测图层表parameterset字段是否设置layers,style,tileMatrixSetID");
- }
- } else {
- jt3dLeft.layer.removeImageryProvider({
- serviceId: _serviceId
- });
- }
- break;
- case "WebMapServiceImageryProvider": //WMS地图服务
- if (checked) {
- //设置参数
- let _options = {
- id: _serviceId,
- url: data.datasource,
- layers: "SDYTMP:map_zrzy_water_polylon",
- alpha: _opacity
- }
- if (parameterset) {
- if (parameterset.layers) { //WMTS请求的层名
- _options.layers = parameterset.layers;
- if (parameterset.minimumLevel) { //最小层级
- _options.minimumLevel = parameterset.minimumLevel;
- }
- if (parameterset.maximumLevel) { //最大层级
- _options.maximumLevel = parameterset.maximumLevel;
- }
- jt3dLeft.layer.addWebMapService(_options, function(serviceId) {
- //重置图层顺序
- _self.setLayerNumber(serviceId)
- if (layertype === '标注') {
- var imageryLayers = jt3dLeft._viewer.imageryLayers;
- imageryLayers.raiseToTop(window[serviceId]);
- }
- });
- } else {
- ElMessage("请检测图层表parameterset字段是否设置layers");
- }
- } else {
- ElMessage("请检测图层表parameterset字段是否设置layers");
- }
- } else {
- jt3dLeft.layer.removeImageryProvider({
- serviceId: _serviceId
- });
- }
- break;
- case "ArcGisMapServerImageryProvider": // ArcGIS Online和Server的相关服务
- if (checked) {
- //设置参数
- let _options = {
- id: _serviceId,
- url: data.datasource,
- alpha: _opacity
- }
- if (parameterset) {
- if (parameterset.layers) {
- _options.layers = parameterset.layers;
- }
- }
- //加载服务
- jt3dLeft.layer.addArcGisMapServer(_options, function(serviceId) {
- //重置图层顺序
- _self.setLayerNumber(serviceId)
- if (layertype === '标注') {
- var imageryLayers = jt3dLeft._viewer.imageryLayers;
- imageryLayers.raiseToTop(window[serviceId]);
- }
- })
- } else {
- jt3dLeft.layer.removeImageryProvider({
- serviceId: _serviceId
- });
- }
- break;
- case "TileMapServiceImageryProvider": // 2.5维度地图
- if (checked) {
- //设置参数
- let _options = {
- id: _serviceId,
- url: data.datasource,
- alpha: _opacity
- }
- if (parameterset) {
- if (parameterset.minimumLevel) { //最小层级
- _options.minimumLevel = parameterset.minimumLevel;
- }
- if (parameterset.maximumLevel) { //最大层级
- _options.maximumLevel = parameterset.maximumLevel;
- }
- }
- jt3dLeft.layer.addTileMapServiceImagery(_options, function(serviceId) {
- //重置图层顺序
- _self.setLayerNumber(serviceId)
- if (layertype === '标注') {
- var imageryLayers = jt3dLeft._viewer.imageryLayers;
- imageryLayers.raiseToTop(window[serviceId]);
- }
- });
- } else {
- jt3dLeft.layer.removeImageryProvider({
- serviceId: _serviceId
- });
- }
- break;
- case "Cesium3DTileset": //加载3DTileset地图服务--实景
- let datasource = data.datasource.split("#")
- console.log('datasource', datasource)
- if (checked) {
- //加载实景
- datasource.forEach((res, index) => {
- //设置参数
- let _options = {
- id: _serviceId + index,
- url: res,
- }
- if (parameterset) {
- if (parameterset.height) {
- _options.height = parameterset.height;
- }
- if (parameterset.alpha) {
- _options.alpha = parameterset.alpha;
- }
- }
- jt3dLeft.layer.addCesium3DTileset(_options, function(serviceId) {
- window[_serviceId + index] = window[serviceId];
- });
- })
- } else {
- datasource.forEach((res, index) => {
- jt3dLeft.layer.removeScenePrimitives({
- serviceId: _serviceId + index
- });
- })
- }
- break;
- case "Cesium3DTileset_BM": //加载3DTileset地图服务--白膜
- if (checked) {
- //设置参数
- let _options = {
- id: _serviceId,
- url: data.datasource,
- }
- if (parameterset) {
- if (parameterset.color) {
- _options.color = parameterset.color;
- }
- }
- //加载白膜
- jt3dLeft.layer.addCesium3DTilesetBm(_options, function(serviceId) {
- jt3dLeft.layer.set3DTileBMStyle(_options);
- });
- } else {
- jt3dLeft.layer.removeScenePrimitives({
- serviceId: _serviceId
- });
- }
- break;
- default:
- break;
- }
- })
- },
- /**
- * el-slider 值改变时触发(使用鼠标拖曳时,只在松开鼠标后触发)
- * 地图服务的透明度调整
- */
- handleSliderChange($event, data) {
- let _serviceId = "serviceLeft_" + data.layercode + data.layerorder;
- if (data.loadtype === "Cesium3DTileset") {
- let datasource = data.datasource.split("#")
- datasource.forEach((res, index) => {
- //设置实景透明度
- jt3d.layer.set3DTileStyle({
- serviceId: _serviceId + index,
- alpha: $event,
- });
- })
- } else if (data.loadtype === "CrImageServerLayer") {
- let floatLayer = window[_serviceId];
- floatLayer.setOpacity($event)
- } else if (data.loadtype === "PolygonImageMaterial") {
- //设置透明度
- jt3dLeft.layer.setPolygonImageMaterial({
- serviceId: _serviceId,
- alpha: $event,
- });
- } else if (data.loadtype === "entitiesGltf") {
- //设置透明度
- jt3dLeft.layer.setModelStyle({
- serviceId: _serviceId,
- alpha: $event,
- });
- } else {
- jt3dLeft.layer.setLayersStyle({
- serviceId: _serviceId,
- alpha: $event,
- });
- }
- },
- /**
- * el-checkbox 当绑定值变化时触发的事件
- * @param {Object} checked 复选框状态
- * @param {Object} data 对应于节点点击的节点对象
- * @param {Object} node TreeNode 的 node 属性
- */
- handleCheckBoxChange(checked, data, node) {
- let _node = this.$refs.treeRef.getNode(data);
- if (_node.isLeaf) {
- this.$refs.treeRef.setChecked(_node,
- checked); //是否设置子节点,默认为false,利用tree组件渲染后带有的isLeaf(是否为叶子节点)属性,如果为叶子节点就选中。利用tree的API就实现了正确的回显效果
- }
- //控制子节点
- this.childNodesChange(node, checked);
- },
- /**
- * 控制子节点
- * @param {Object} node
- * @param {Object} checked
- */
- childNodesChange(node, checked) {
- let _self = this;
- node.childNodes.forEach(item => {
- _self.$refs.treeRef.setChecked(item, checked);
- _self.childNodesChange(item, checked);
- });
- },
- /**
- * 初始化复选框选中状态
- * @param {Object} datas
- */
- setNodesChecked(datas) {
- let _self = this;
- datas.forEach((data, index) => {
- _self.$nextTick(() => {
- var node = _self.$refs.treeRef.getNode(data);
- //node.isLeaf是否是叶子节点
- if (node.isLeaf) {
- let checked = false;
- if (data.isinit === '1') {
- checked = true;
- }
- data.opacity = Number(data.opacity)
- _self.$refs.treeRef.setChecked(node, checked);
- }
- });
- if (data.children != undefined) {
- _self.setNodesChecked(data.children);
- }
- });
- },
- /**
- * 设置图层顺序
- * @param {Object} options
- */
- setLayerNumber(serviceId) {
- // let layerList = jt3dLeft._viewer.imageryLayers._layers
- var imageryLayers = jt3dLeft._viewer.imageryLayers;
- if (store.markID) {
- console.log('标注id', store.markID)
- imageryLayers.raiseToTop(window[store.markID]); //标注层置顶
- }
- imageryLayers.lowerToBottom(window[serviceId]); //设置图层初始顺序
- imageryLayers.raise(window[serviceId]);
- imageryLayers.raise(window[serviceId]);
- this.inittree.forEach(res => {
- if (res.layercode && res.layerorder) {
- let id = "service_" + res.layercode + res.layerorder
- let startid = Number(res.layercode + res.layerorder)
- let strid = Number(serviceId.substring(8))
- if (imageryLayers.contains(window[id])) {
- if (startid < strid) {
- imageryLayers.raise(window[serviceId])
- } else {
- // imageryLayers.raiseToTop(window[store.markID]);
- // break;
- }
- }
- }
- })
- },
- /**
- * 分屏对比初始化
- */
- initSplitScreen() {
- let _self = this;
- //这样做会跑偏
- // let cesiumContainerDiv = document.getElementById("cesiumContainer2");
- // if (cesiumContainerDiv == null) {
- // cesiumContainerDiv = document.createElement('div');
- // cesiumContainerDiv.id = "cesiumContainer2";
- // cesiumContainerDiv.classList.add("ViewerSplitScreen");
- // cesiumContainerDiv.style.float = "left";
- // cesiumContainerDiv.style.width = "calc(50% - 1rem)";
- // cesiumContainerDiv.style.height = "100vh";
- // cesiumContainerDiv.style.margin = "0";
- // cesiumContainerDiv.style.borderRight = "2rem solid red";
- // /* 加入到页面 */
- // document.body.appendChild(cesiumContainerDiv);
- // }
- let mapView1 = document.getElementById("cesiumContainer");
- let mapView2 = document.getElementById("cesiumContainer2");
- mapView1.className = "ViewerSplitScreen";
- mapView2.style.display = "block";
- //加载分屏左侧大球
- this.initMap3d();
- //同步相机状态
- this.syncViewer();
- //绑定图层控制
- this.initTree();
- },
- /**
- * 移除分屏对比
- */
- removeSplitScreen() {
- let mapView1 = document.getElementById("cesiumContainer");
- let mapView2 = document.getElementById("cesiumContainer2");
- mapView1.className = "jt-map";
- mapView2.style.display = "none";
- mapView2.innerHTML = "";
- if (jt3dLeft) {
- jt3dLeft._viewer.entities.removeAll(); // 删除全部
- jt3dLeft._viewer.imageryLayers.removeAll();
- jt3dLeft._viewer.scene.primitives.removeAll(); //谨慎使用,可能删除不必要的primitive
- // jt3dLeft._viewer.destroy();
- jt3dLeft = undefined;
- }
- },
- /**
- * 加载分屏左侧大球
- */
- initMap3d() {
- jt3dLeft = new this.jt3dSDK.jtMap3d({
- container: "cesiumContainer2",
- });
- //底部工具
- jt3dLeft.statusBar.show = true;
- //图层
- jt3dLeft.layer = new this.jt3dSDK.layer(jt3dLeft._viewer);
- //测量工具
- jt3dLeft.CommonTools = new this.jt3dSDK.CommonTools(jt3dLeft._viewer);
- //绘图工具
- jt3dLeft.SketchViewModel = new this.jt3dSDK.SketchViewModel(jt3dLeft._viewer, {
- isClear: false,
- isDrawPoint: true,
- isRetainDrawPoint: true,
- iconType: 'blue',
- });
- //定位工具
- jt3dLeft.LocateUtil = new this.jt3dSDK.LocateUtil(jt3dLeft._viewer);
- //二三维标绘
- jt3dLeft.DrawTools = new this.jt3dSDK.DrawTools(jt3dLeft._viewer);
- //军事标绘
- jt3dLeft.DrawMilitaryPlot = new this.jt3dSDK.DrawMilitaryPlot(jt3dLeft._viewer);
- //天空盒子
- jt3dLeft.SceneEffects = {};
- jt3dLeft.SceneEffects.SkyBox = new this.jt3dSDK.SceneEffects.SkyBox(jt3dLeft._viewer);
- //线对象
- jt3dLeft.PolylineObject = new this.jt3dSDK.PolylineObject(jt3dLeft._viewer);
- //比例尺、指南针
- this.$parent.$parent.$refs.queryword.initNavigation(jt3dLeft);
- //设置默认视图
- this.$parent.$parent.$refs.refMap3d.setView(jt3dLeft);
- // 初始化项目区域范围视角
- this.$parent.$parent.$refs.refMap3d.fullMap(jt3dLeft);
- //加载天空盒子
- this.$parent.$parent.$refs.refMap3d.addSkybox(jt3dLeft);
- //添加镇街边界线——精灵线
- this.$parent.$parent.$refs.refMap3d.addBoundaryLine(jt3dLeft);
- },
- /**
- * 同步相机状态
- */
- syncViewer() {
- let _self = this;
- let viewerL = jt3dLeft._viewer;
- let viewerR = jt3dRight._viewer;
- var sceneL = viewerL.scene;
- var sceneR = viewerR.scene;
- var handlerL = new Cesium.ScreenSpaceEventHandler(sceneL.canvas);
- var ellipsoidL = sceneL.globe.ellipsoid;
- var handlerR = new Cesium.ScreenSpaceEventHandler(sceneR.canvas);
- var ellipsoidR = sceneR.globe.ellipsoid;
- handlerL.setInputAction((movement) => {
- this.isLeftTrigger = true;
- this.isRightTrigger = false;
- }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
- handlerR.setInputAction((movement) => {
- this.isLeftTrigger = false;
- this.isRightTrigger = true;
- }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
- var syncViewerL = function() {
- if (_self.isLeftTrigger) {
- viewerR.camera.flyTo({
- destination: viewerL.camera.position,
- orientation: {
- heading: viewerL.camera.heading,
- pitch: viewerL.camera.pitch,
- roll: viewerL.camera.roll
- },
- duration: 0.0
- });
- }
- }
- viewerR.camera.changed.addEventListener(syncViewerL);
- viewerR.scene.preRender.addEventListener(syncViewerL);
- var syncViewerR = function() {
- if (_self.isRightTrigger) {
- viewerL.camera.flyTo({
- destination: viewerR.camera.position,
- orientation: {
- heading: viewerR.camera.heading,
- pitch: viewerR.camera.pitch,
- roll: viewerR.camera.roll
- },
- duration: 0.0
- });
- }
- }
- viewerR.camera.changed.addEventListener(syncViewerR);
- viewerR.scene.preRender.addEventListener(syncViewerR);
- },
- /**
- * 加载图层控制树
- */
- initTree() {
- //在这获取图层列表
- let _this = this
- //权限查询条件语句
- let atlasLayersSqlWhere = undefined
- //获取地图图集id
- let roleId = store.roleId
- atlasLayersSqlWhere = '"roleid"' + " = " + roleId + " "
- //Promise回调
- function init(data) {
- return new Promise((resolve, reject) => {
- _this.inittree.forEach(res => {
- let num = Number(res.layerorder)
- if (num < 10) {
- res.layerorder = '0' + res.layerorder
- }
-
- //显示2级
- if (res.parentid === null) {
- _this.expandedKeys.push(res.id);
- }
-
- //其它级别展开
- if (res.isExpand === '1') {
- _this.expandedKeys.push(res.id);
- }
- })
- _this.treeData = deepTree(_this.inittree)
- resolve(_this.treeData)
- })
- }
- //获取图集
- this.$http.get('/getTableList', {
- tableName: 'sys_map_atlas_layers', //表名
- sqlWhere: atlasLayersSqlWhere, //
- orderByField: ''
- }).then(res => {
- console.log('所有图层', res.data)
- //初始图层列表
- this.inittree = res.data
- init(res.data).then(item => {
- //图层初始化打开状态
- _this.setNodesChecked(item);
- console.log('图层控制树列表', _this.treeData)
- })
- })
- }
- },
- mounted() {
- },
- };
- </script>
- <style lang="scss">
- .el-switch--small .el-switch__core .el-switch__action{
- width: 12rem;
- height: 12rem;
- }
- .el-switch--small.is-checked .el-switch__core .el-switch__action{
- margin-left: calc(-1rem - 12rem);
- }
- .el-switch__core .el-switch__action{
- top:0;
- }
- .el-slider__button{
- width: 20rem;
- height: 20rem;
- }
- .el-tree-node__content{
- height: 26rem;
- }
-
- .el-switch--small .el-switch__core{
- height: 16rem;
- }
-
- .el-switch--small{
- padding: 0 5rem;
- }
-
- .jt-layer {
- padding-left: 10rem;
- .el-tree {
- background: none;
- color: #fff;
- --el-tree-node-hover-bg-color: #2a67c3;
- .overflowtext {
- width: auto !important;
- padding: 0;
- }
- }
- .tree-line {
- .el-tree-node {
- position: relative;
- // padding-left: 16rem; // 缩进量
- }
- .el-tree-node__children {
- padding-left: 16rem !important; // 缩进量
- .el-tree-node__content {
- padding-left: 18rem !important;
- }
- }
- // 竖线
- .el-tree-node::before {
- content: "";
- height: 100%;
- width: 1rem;
- position: absolute;
- left: -3rem;
- top: -26rem;
- border-width: 1rem;
- border-left: 1rem dashed rgba(255, 255, 255, .8);
- }
- // 当前层最后一个节点的竖线高度固定
- .el-tree-node:last-child::before {
- height: 38rem; // 可以自己调节到合适数值
- }
- // 横线
- .el-tree-node::after {
- content: "";
- width: 24rem;
- height: 20rem;
- position: absolute;
- left: -3rem;
- top: 12rem;
- border-width: 1rem;
- border-top: 1rem dashed rgba(255, 255, 255, .8);
- }
- // 去掉最顶层的虚线,放最下面样式才不会被上面的覆盖了
- &>.el-tree-node::after {
- border-top: none;
- }
- &>.el-tree-node::before {
- border-left: none;
- }
- // 展开关闭的icon
- .el-tree-node__expand-icon {
- font-size: 16rem;
- // 叶子节点(无子节点)
- &.is-leaf {
- color: transparent;
- display: none; // 也可以去掉
- }
- }
- }
- }
- </style>
|