From 50f52beb0ed100105166f62027cd0b15e6b596dc Mon Sep 17 00:00:00 2001 From: Surpriseplus <845948745@qq.com> Date: 星期六, 12 十一月 2022 15:02:01 +0800 Subject: [PATCH] 重新 --- src/components/mapsdk.vue | 728 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 627 insertions(+), 101 deletions(-) diff --git a/src/components/mapsdk.vue b/src/components/mapsdk.vue index 1b00353..3dfee35 100644 --- a/src/components/mapsdk.vue +++ b/src/components/mapsdk.vue @@ -1,5 +1,13 @@ <template> - <div id="mapdiv" class="mapdiv"> + <div id="mapdiv"> + <div class="menu_Top" v-if="$store.state.mapMenuBoolean"> + <map-menu-top v-if="$store.state.mapMenuBoxFlag == '1'" /> + <map-space-top v-if="$store.state.mapMenuBoxFlag == '2'" /> + </div> + <div class="menu_Popup" v-if="$store.state.mapPopBoolean"> + <map-menu-pop v-if="$store.state.mapPopBoxFlag == '1'" /> + <map-space-pop v-if="$store.state.mapPopBoxFlag == '2'" /> + </div> <div class="bufferBox" v-if="showBufferBoxDialog"> <el-card class="box-card"> <div slot="header" class="clearfix"> @@ -103,23 +111,88 @@ </div> </el-card> </div> + <div class="pathAnalysisBox" v-if="showPathAnalysisBoxDialog"> + <el-card class="box-card"> + <div slot="header" class="clearfix"> + <span>璺緞鍒嗘瀽</span> + <div style="float: right; cursor: pointer"> + <i class="el-icon-close" @click="closeBufferBox(4)"></i> + </div> + </div> + <div class="box-body"> + <el-form ref="form" :model="pathFrom" label-width="50px"> + <el-form-item label="缁忓害:"> + <el-input style="width: 300px" v-model="pathFrom.lon"></el-input> + <el-link + :underline="false" + @click="showMouseLeftClick(1)" + style="margin-left: 10px" + ><i style="color: white" class="el-icon-plus"></i + ></el-link> + </el-form-item> + <el-form-item label="绾害:"> + <el-input style="width: 300px" v-model="pathFrom.lat"></el-input> + <el-link + :underline="false" + @click="showMouseLeftClick(2)" + style="margin-left: 10px" + ><i style="color: white" class="el-icon-plus"></i + ></el-link> + </el-form-item> + <el-form-item> + <el-button @click="showMouseLeftClick(3)" type="info" + >鏌ヨ</el-button + > + </el-form-item> + </el-form> + </div> + </el-card> + </div> + <div + @click="changeMenulayer" + class="center CenDiv" + :class="{ center1: centerFlag }" + > + <div + id="cenBg" + v-bind:class="{ active: isActive, menuLayer: isMenuLayer }" + ></div> + </div> </div> </template> <script> +import $ from 'jquery'; +import mapMenuTop from './MapView/mapMenuTop.vue'; +import mapMenuPop from './MapView/mapMenuPop.vue'; +import mapSpaceTop from './MapView/mapSpaceTop.vue'; +import mapSpacePop from './MapView/mapSpacePop.vue'; + import { select_Comprehensive_ByPageAndCount, select_Comprehensive_SelectWktById, } from '../api/api'; export default { name: '', + components: { + mapMenuTop, + mapMenuPop, + mapSpaceTop, + mapSpacePop, + }, data() { return { + centerFlag: false, buffer: null, showBufferBoxDialog: false, showCoordLocalBoxDialog: false, showToponymicLocalBoxDialog: false, + showPathAnalysisBoxDialog: false, comprehensive: {}, + pathFrom: { + lon: '116.086746,39.937314', + lat: '116.086000,39.936289', + }, bufFrom: { val: 50, }, @@ -134,8 +207,73 @@ pageSize: 10, }, count: 0, + selFrom: {}, tableData: [], imagePoint: null, + handler: null, + pathStart: null, + pathEnd: null, + pathData: null, + + isActive: false, + isMenuLayer: true, + selFrom: {}, + selectTree: null, + + menuList: [ + { + id: 1, + label: '涓�绾� 1', + children: [ + { + id: 4, + label: '浜岀骇 1-1', + children: [ + { + id: 9, + label: '涓夌骇 1-1-1', + }, + { + id: 10, + label: '涓夌骇 1-1-2', + }, + ], + }, + ], + }, + { + id: 2, + label: '涓�绾� 2', + children: [ + { + id: 5, + label: '浜岀骇 2-1', + }, + { + id: 6, + label: '浜岀骇 2-2', + }, + ], + }, + { + id: 3, + label: '涓�绾� 3', + children: [ + { + id: 7, + label: '浜岀骇 3-1', + }, + { + id: 8, + label: '浜岀骇 3-2', + }, + ], + }, + ], + defaultProps: { + children: 'children', + label: 'label', + }, //鏍戠粦瀹氬璞� }; }, mounted() { @@ -146,29 +284,70 @@ }, methods: { init3DMap() { + var webKey = '94a34772eb88317fcbf8428e10448561'; + //鍦板浘鍒濆鍖� window.sgworld = new SmartEarth.SGWorld('mapdiv', { licenseServer: window.sceneConfig.licenseServer, }); + window.Viewer = window.sgworld._Viewer; + //瀹氫綅 - // sgworld.Navigate.jumpTo({ - // //璺宠浆瑙嗚 - // destination: new Cesium.Cartesian3.fromDegrees(110, 32, 8000000), - // }); sgworld.Navigate.jumpTo({ //璺宠浆瑙嗚 - destination: { - x: 311837.3471863137, - y: 5628280.936629815, - z: 2992581.921482893, - }, - orientation: { - heading: 2.5028896264234364, - pitch: -0.2201285642360813, - roll: 0.0, - }, + destination: new Cesium.Cartesian3.fromDegrees( + 116.055913, + 39.937685, + 8000 + ), }); + Viewer.imageryLayers.addImageryProvider( + new Cesium.WebMapTileServiceImageryProvider({ + url: 'http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=94a34772eb88317fcbf8428e10448561', + layer: 'tdtVecBasicLayer', + style: 'default', + format: 'image/jpeg', + tileMatrixSetID: 'GoogleMapsCompatible', + show: false, + }) + ); + + Viewer.imageryLayers.addImageryProvider( + new Cesium.WebMapTileServiceImageryProvider({ + url: 'http://t0.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=94a34772eb88317fcbf8428e10448561', + layer: 'tdtBasicLayer', + style: 'default', + format: 'image/jpeg', + tileMatrixSetID: 'GoogleMapsCompatible', + show: false, + }) + ); + Viewer.imageryLayers.addImageryProvider( + new Cesium.WebMapTileServiceImageryProvider({ + url: 'http://t0.tianditu.com/cva_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cva&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=94a34772eb88317fcbf8428e10448561', + layer: 'tdtAnnoLayer', + style: 'default', + format: 'image/jpeg', + tileMatrixSetID: 'GoogleMapsCompatible', + }) + ); + + // sgworld.Navigate.jumpTo({ + // //璺宠浆瑙嗚 + // destination: { + // x: 311837.3471863137, + // y: 5628280.936629815, + // z: 2992581.921482893, + // }, + // orientation: { + // heading: 2.5028896264234364, + // pitch: -0.2201285642360813, + // roll: 0.0, + // }, + // }); + + // Viewer.scene.globe.depthTestAgainstTerrain = true; Viewer._enableInfoOrSelection = false; //鏄剧ずfps Viewer.scene.debugShowFramesPerSecond = false; @@ -197,26 +376,58 @@ layerName: window.sceneConfig.mpt.name, requestVertexNormals: true, }; - sgworld.Creator.sfsterrainprovider('mpt', option, '', true, ''); + // sgworld.Creator.sfsterrainprovider('mpt', option, '', true, ''); window.elevationTool = new SmartEarth.ElevationTool(window.sgworld); - //妯″瀷鍔犺浇 + }, + + changeMenulayer() { + this.isActive = !this.isActive; + this.isMenuLayer = !this.isMenuLayer; + this.setLayerVisible(); + }, + setLayerVisible() { + if (this.isActive == true) { + Viewer.imageryLayers.get(1).show = true; + Viewer.imageryLayers.get(2).show = false; + } else { + Viewer.imageryLayers.get(1).show = false; + Viewer.imageryLayers.get(2).show = true; + } }, //鏄剧ず寮圭獥 showChangeBox(res) { - if (res.name == 'Query') { - if (res.id == '6') { - } else if (res.id == '7') { - } else { - this.showBufferBoxDialog = true; - } - } else if (res.name == 'Coord') { - if (res.id == '1') { - this.showCoordLocalBoxDialog = true; - } else if (res.id == '2') { - this.showToponymicLocalBoxDialog = true; - this.getToponymicData(); - } + switch (res.name) { + case 'Query': + if (res.id == '6') { + } else if (res.id == '7') { + } else { + this.showBufferBoxDialog = true; + } + break; + case 'Coord': + if (res.id == '1') { + this.showCoordLocalBoxDialog = true; + } else if (res.id == '2') { + this.showToponymicLocalBoxDialog = true; + this.getToponymicData(); + } + break; + case 'Analysis': + if (res.id == '3') { + this.showPathAnalysisBoxDialog = true; + } + break; + case 'exportLayer': + if (res.id == 1) { + } else if (res.id == 2) { + this.changeMenulayer(); + } + break; } + // if (res.name == 'Query') { + // } else if (res.name == 'Coord') { + // } else if (res.name == 'Analysis') { + // } }, handleSizeChange(val) { this.listData.pageSize = val; @@ -292,6 +503,11 @@ this.imagePoint = null; } break; + case 4: + this.showPathAnalysisBoxDialog = false; + this.clearPathAll(3); + + break; } }, //瀹氫綅 @@ -355,94 +571,404 @@ break; } }, + showMouseLeftClick(res) { + if (res == 3) { + if (this.linePath != null) { + this.clearPathAll(3); + } + + var jsonurl = + 'http://192.168.20.39:9055/gisserver/wnsserver/beijingdaohang_wns?start=' + + this.pathFrom.lon + + '&end=' + + this.pathFrom.lat + + '&propertyName=Shape&tolerance=500&request=FindPath&format=json'; + $.ajax({ + url: jsonurl, + async: false, + type: 'GET', + dataType: 'json', + contentType: 'application/json;charset=utf-8', + success: (data) => { + this.executeFly3D(data); + }, + }); + } else { + var that = this; + if (this.handler != null) { + this.clearLeftClick(); + } + this.handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas); + this.handler.setInputAction(function (event) { + let cartesian = Viewer.camera.pickEllipsoid(event.position); + let cartographic = Cesium.Cartographic.fromCartesian(cartesian); + let lng = parseFloat( + Cesium.Math.toDegrees(cartographic.longitude) + ).toFixed(6); // 缁忓害 + let lat = parseFloat( + Cesium.Math.toDegrees(cartographic.latitude) + ).toFixed(6); // 绾害 + if (that.linePath != null) { + that.clearPathAll(3); + } + if (lng != null && lat != null) { + let val = lng + ',' + lat; + var position = sgworld.Creator.CreatePosition(lng, lat, 0); + if (res == 1) { + if (that.pathStart != null) { + that.clearPathAll(1); + } + + that.pathStart = sgworld.Creator.CreateLabel( + position, + '', + SmartEarthRootUrl + 'Workers/image/start.png', + { + // 鏂囨湰鍋忕Щ閲� + pixelOffset: { + x: 0, + y: -50, + }, // 鏃犺閬尅 + disableDepthTestDistance: Infinity, + scale: 0.8, + }, + 0, + '璧峰鐐�' + ); + + that.pathFrom.lon = val; + } else if (res == 2) { + if (that.pathEnd != null) { + that.clearPathAll(2); + } + + that.pathEnd = sgworld.Creator.CreateLabel( + position, + '', + SmartEarthRootUrl + 'Workers/image/end.png', + { + // 鏂囨湰鍋忕Щ閲� + pixelOffset: { + x: 0, + y: -50, + }, // 鏃犺閬尅 + disableDepthTestDistance: Infinity, + scale: 0.8, + }, + 0, + '缁撴潫鐐�' + ); + that.pathFrom.lat = val; + } + that.clearLeftClick(); + } + }, Cesium.ScreenSpaceEventType.LEFT_CLICK); + } + }, + clearPathAll(res) { + switch (res) { + case 1: + if (this.pathStart != null) { + sgworld.Creator.DeleteObject(this.pathStart); + this.pathStart = null; + } + break; + case 2: + if (this.pathEnd != null) { + sgworld.Creator.DeleteObject(this.pathEnd); + this.pathEnd = null; + } + break; + case 3: + if (this.pathStart != null) { + sgworld.Creator.DeleteObject(this.pathStart); + this.pathStart = null; + } + + if (this.pathEnd != null) { + sgworld.Creator.DeleteObject(this.pathEnd); + this.pathEnd = null; + } + if (this.linePath != null) { + sgworld.Creator.DeleteObject(this.linePath); + this.linePath = null; + } + break; + case 4: + if (this.linePath != null) { + sgworld.Creator.DeleteObject(this.linePath); + this.linePath = null; + } + break; + } + }, + clearLeftClick() { + this.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); //绉婚櫎浜嬩欢 + this.handler = null; + }, + executeFly3D(res) { + var position = []; + if (res) { + var positionA = res.features; + if (positionA.length > 0) { + for (var i = 0; i < positionA.length; i++) { + var val = positionA[i]; + if (val.geometry.type == 'LineString') { + var val_data = val.geometry.coordinates; + for (var j = 0; j < val_data.length; j++) { + position.push({ x: val_data[j][0], y: val_data[j][1] }); + } + } + } + this.linePath = sgworld.Creator.createPolyline( + position, + '#ffff00', + 1, + 0, + '绾�' + ); + sgworld.Navigate.flyToObj(this.linePath); + } else { + return; + } + } + }, }, }; </script> -<style scoped> -.mapdiv { +<style scoped lang="less"> +// .mapBox { +// width: 100%; +// height: 100%; +// overflow: hidden; +// margin: 0; +// padding: 0; + +#mapdiv { width: 100%; height: 100%; overflow: hidden; margin: 0; padding: 0; position: relative; + + .toponymicLocalBox { + width: 750px; + height: 450x; + z-index: 40; + position: absolute; + right: 1%; + bottom: 1%; + } + .bufferBox { + width: 412px; + height: 230px; + z-index: 40; + position: absolute; + right: 1%; + bottom: 1%; + } + .coordLocalBox { + width: 350px; + height: 370px; + z-index: 40; + position: absolute; + right: 1%; + bottom: 1%; + } + .pathAnalysisBox { + width: 412px; + z-index: 40; + position: absolute; + right: 1%; + bottom: 1%; + } + .exportBoxLayer { + z-index: 40; + position: absolute; + top: 3%; + left: 20%; + } + .exportMenuLayer { + z-index: 40; + position: absolute; + top: 15%; + left: 2%; + width: 15%; + } + .box-body { + padding: 18px; + /deep/ .el-form-item__label { + color: white !important; + } + /deep/ .el-input__inner { + background: rgba(255, 255, 255, 0.2) !important; + color: white !important; + } + + /deep/.el-table, + .el-table__expanded-cell { + background-color: transparent; + color: white; + } + + /deep/ .el-table tr { + background-color: transparent !important; + } + /deep/ .el-table tbody tr:hover > td { + background-color: rgba(255, 255, 255, 0.2) !important; + } + /deep/.el-table鈥揺nable-row-transition .el-table__body td, + .el-table .cell { + background-color: transparent !important; + } + /deep/ .el-table th.el-table__cell { + background-color: transparent !important; + color: white; + } + /deep/.el-pager li { + background-color: transparent !important; + color: white; + } + /deep/ .btn-prev { + background-color: transparent !important; + } + /deep/ .btn-next { + background-color: transparent !important; + color: white !important; + } + /deep/ .el-pagination__total { + color: white; + } + /deep/ .el-pagination__jump { + color: white; + } + } + + .box-card { + background-color: rgba(0, 0, 0, 0.6); + border: 1px solid rgba(32, 160, 255, 0.6); + color: white; + } + .menu_Top { + background: rgba(0, 0, 0, 0.5); + width: 100%; + height: 6%; + padding: 1%; + position: absolute; + z-index: 40; + } + .menu_Popup { + background: rgba(0, 0, 0, 0.6); + width: 60%; + height: 45%; + + left: 20%; + bottom: 5%; + position: absolute; + z-index: 40; + } } -.bufferBox { - width: 412px; - height: 230px; - z-index: 40; +// } + +// /deep/ +// /deep/ .el-input__inner { +// background: rgba(255, 255, 255, 0.2) !important; +// color: white !important; +// } + +// ::v-deep .el-table, +// .el-table__expanded-cell { +// background-color: transparent; +// color: white; +// } + +// ::v-deep .el-table tr { +// background-color: transparent !important; +// } +// ::v-deep .el-table tbody tr:hover > td { +// background-color: rgba(255, 255, 255, 0.2) !important; +// } +// ::v-deep .el-table鈥揺nable-row-transition .el-table__body td, +// .el-table .cell { +// background-color: transparent !important; +// } +// ::v-deep .el-table th.el-table__cell { +// background-color: transparent !important; +// color: white; +// } +// ::v-deep .el-pager li { +// background-color: transparent !important; +// color: white; +// } +// ::v-deep .btn-prev { +// background-color: transparent !important; +// } +// ::v-deep .btn-next { +// background-color: transparent !important; +// color: white !important; +// } +// ::v-deep .el-pagination__total { +// color: white; +// } +// ::v-deep .el-pagination__jump { +// color: white; +// } +.center { + left: 1%; +} +.CenDiv { position: absolute; - right: 1%; bottom: 1%; + height: 40px; + width: 60px; + z-index: 101; + display: flex; + flex-direction: column; + justify-content: space-between; + box-shadow: 3px 3px 6px #666; + border: 1px solid rgba(204, 204, 204, 0.76); + border-radius: 5px; + cursor: pointer; } -.coordLocalBox { - width: 350px; - height: 370px; - z-index: 40; +// .center1 { +// right: 1%; +// } +// .right { +// position: absolute; +// top: 50px; +// right: 0; +// width: 20%; +// height: calc(100% - 50px); + +// display: flex; +// flex-direction: column; +// justify-content: space-between; +// } +// .CenDiv:hover { +// border: 1px solid #409eff; +// } +.active { + width: 100%; + height: 100%; + background: url('../assets/img/Layer/imgLayer2.png') no-repeat center; position: absolute; - right: 1%; - bottom: 1%; + background-size: 100% 100%; + border-radius: 5px; } -.toponymicLocalBox { - width: 750px; - height: 450x; - z-index: 40; +.menuLayer { + width: 100%; + height: 100%; + background: url('../assets/img/Layer/imgLayer1.png') no-repeat center; position: absolute; - right: 1%; - bottom: 1%; -} -.box-card { - background-color: rgba(0, 0, 0, 0.6); - border: 1px solid rgba(32, 160, 255, 0.6); - color: white; -} -.box-body { - padding: 18px; -} -/deep/ .el-form-item__label { - color: white !important; -} -/deep/ .el-input__inner { - background: rgba(255, 255, 255, 0.2) !important; - color: white !important; + background-size: 100% 100%; + border-radius: 5px; } -::v-deep .el-table, -.el-table__expanded-cell { - background-color: transparent; - color: white; -} - -::v-deep .el-table tr { - background-color: transparent !important; -} -::v-deep .el-table tbody tr:hover > td { - background-color: rgba(255, 255, 255, 0.2) !important; -} -::v-deep .el-table鈥揺nable-row-transition .el-table__body td, -.el-table .cell { - background-color: transparent !important; -} -::v-deep .el-table th.el-table__cell { - background-color: transparent !important; - color: white; -} -::v-deep .el-pager li { - background-color: transparent !important; - color: white; -} -::v-deep .btn-prev { - background-color: transparent !important; -} -::v-deep .btn-next { - background-color: transparent !important; - color: white !important; -} -::v-deep .el-pagination__total { - color: white; -} -::v-deep .el-pagination__jump { - color: white; -} +// .menuSelect .el-input__inner { +// background: rgba(255, 255, 255, 0.2) !important; +// color: white !important; +// border: 1px solid rgba(255, 255, 255, 0.2) !important; +// } </style> -- Gitblit v1.9.3