From b41b6bcda8d085b0c9b0f3d176e76fbed97557a8 Mon Sep 17 00:00:00 2001 From: 584911253@qq.com <584911253@qq.com> Date: 星期二, 14 三月 2023 16:15:47 +0800 Subject: [PATCH] 拾取分析功能开发 --- src/api/api.js | 5 src/assets/lang/zh.js | 1 src/components/MapView/mapPickUpPop.vue | 223 +++++++++++++++++++++++++++++++++++++ src/views/Tools/LayerTree.vue | 23 +++ src/store/index.js | 1 src/views/Synthesis/LeftMenu.vue | 57 +++++++++ src/assets/lang/en.js | 1 src/views/Tools/queryinfo.vue | 8 8 files changed, 314 insertions(+), 5 deletions(-) diff --git a/src/api/api.js b/src/api/api.js index 015b095..acd801e 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -1059,6 +1059,11 @@ return request.post('/comprehensive/updateModel', params); } +//缁煎悎灞曠ず=>鎷惧彇 +export function selectByBuffer(params) { + return request.get('/inquiry/selectByBuffer', { params: params }); +} + diff --git a/src/assets/lang/en.js b/src/assets/lang/en.js index 82fcdaa..81291ac 100644 --- a/src/assets/lang/en.js +++ b/src/assets/lang/en.js @@ -510,6 +510,7 @@ polygonquery: 'Polygon Query', attributequery: 'Attribute Query', rangequery: 'Spatial query', + pickup: 'Pick up', gpsrtk: 'GPS-RTK', placenamelocation: 'Placename Location', distancemeasure: 'Distance Measure', diff --git a/src/assets/lang/zh.js b/src/assets/lang/zh.js index 44dd58b..c97c3b8 100644 --- a/src/assets/lang/zh.js +++ b/src/assets/lang/zh.js @@ -512,6 +512,7 @@ polygonquery: '澶氳竟褰㈡煡璇�', attributequery: '灞炴�ф煡璇�', rangequery: '绌洪棿鏌ヨ', + pickup: '鎷惧彇', gpsrtk: '鍧愭爣瀹氫綅', placenamelocation: '鍦板悕瀹氫綅', distancemeasure: '璺濈娴嬮噺', diff --git a/src/components/MapView/mapPickUpPop.vue b/src/components/MapView/mapPickUpPop.vue new file mode 100644 index 0000000..fb95e86 --- /dev/null +++ b/src/components/MapView/mapPickUpPop.vue @@ -0,0 +1,223 @@ +<template> + <div class="menuPop"> + <div class="leftBox"> + <ul> + <li + v-for="(item, index) in option" + @click="setTableChange(item)" + class="leftBoxLi" + > + {{ item.cnName }} + </li> + </ul> + </div> + <div class="rightBox"> + <div class="tableBox"> + <el-table + :data="tableData" + ref="dialogPayChannel" + height="100%" + style="width: 100%" + border + > + <el-table-column + align="center" + type="index" + label="搴忓彿" + width="50" + /> + <el-table-column + v-for="(item, index) in attributeData" + :key="index" + :label="item.alias" + :prop="item.field" + show-overflow-tooltip + align="center" + ></el-table-column> + </el-table> + </div> + </div> + </div> +</template> + +<script> +import { + dataQuery_selectByPage, + inquiry_selectDomains, + inquiry_selectFields, + dataQuerySelectWktById, + sign_getPublicKey, + dataLib_selectDownloadFile, + dataQuery_selectDbOverflowDep, + apply_insertApply, + decr, + encr, + dataLib_selectDepsByIds, selectByBuffer +} from '../../api/api.js' +import { getToken } from "@/utils/auth" +import $ from "jquery" +import { View } from "ol" +export default { + data() { + return { + option:null, + tableData: [], + attributeData:[], + queryForm:{ + pageIndex:1, + pageSize:10, + }, + pageCount:0, + pickupInfo:null, + optionx:[], + wkt:null, + } + }, + methods: { + async getTableDateHidder() { + let name = this.pickupInfo.url.replaceAll("LF:",""); + name = name.replaceAll("_",""); + const data = await inquiry_selectFields({ name: name }) + if (data.code != 200) { + this.$message.error("鍒楄〃璋冪敤澶辫触") + } + const data1 = await inquiry_selectDomains({ name: name }) + if (data1.code != 200) { + this.$message.error("鍒楄〃璋冪敤澶辫触") + } + this.optionx = [] + this.attributeData = [] + var valadata = data.result + var laydomain = data1.result + + for (var i in valadata) { + if (valadata[i].showtype == 1) { + if ( + valadata[i].domainNa != null && + valadata[i].domainNa != undefined + ) { + for (var j in laydomain) { + if (laydomain[j].domName == valadata[i].domainNa) { + valadata[i].domainNa = laydomain[j].codeDesc + } + } + } + this.optionx.push(valadata[i]) + this.attributeData.push(valadata[i]) + } + } + this.getTableData() + }, + setTableChange(res) { + this.pickupInfo = res; + this.getTableDateHidder() + }, + async getTableData() { + this.tableData = [] + let name = this.pickupInfo.url.replaceAll("LF:",""); + name = name.replaceAll("_",""); + let info = this.$store.state.pickUpPointInfo; + let params = { + buffer:10, + limit:20, + name:name, + wkt:`POINT (${info.lon} ${info.lat})`, + } + const data = await selectByBuffer(params) + if (data.code != 200) { + this.$message.error("鍒楄〃璋冪敤澶辫触") + } + + var val_Data = data.result + for (var i in val_Data) { + var valste = val_Data[i] + for (var j in this.optionx) { + if ( + this.optionx[j].domainNa != null && + this.optionx[j].domainNa != undefined + ) { + valste[this.optionx[j].field] = this.optionx[j].domainNa + } + } + } + this.pageCount = data.count + this.tableData = data.result + }, + }, + mounted() { + this.option = JSON.parse(sessionStorage.getItem("checkedLayers")); + this.pickupInfo = this.option.length > 0 ? this.option[0] : {}; + this.getTableDateHidder(); + this.$bus.$on("treeChanged", changed => { + if (changed){ + this.option = JSON.parse(sessionStorage.getItem("checkedLayers")); + } + }) + }, +} +</script> + +<style scoped lang="less"> +.menuPop { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + overflow: hidden; + border: 1px solid gray; + float: left; + .leftBox { + width: 20%; + height: 100%; + overflow: auto; + float: left; + border-right: 1px solid gray; + li { + line-height: 20px; + border-bottom: 1px solid gray; + padding: 5px; + background: rgba(255, 255, 255, 0.2); + } + li:hover { + color: #409eff; + background: rgba(128, 128, 128, 0.2); + } + .leftDown { + width: 94%; + padding: 3%; + display: flex; + justify-content: flex-end; + } + } + + .rightBox { + width: calc(80% - 1px); + height: 100%; + float: left; + .rightTitle { + padding: 5px; + + width: 100%; + } + .tableBox { + position: relative; + height: 89%; + } + .rightPage { + margin-left: 50px; + /*涓嶅彲鐐瑰嚮鐨�*/ + } + + .boxClose { + float: right; + margin-right: 20px; + } + } +} + +li { + line-height: 20px; + border-bottom: 1px solid gray; + padding: 5px; +} +</style> diff --git a/src/store/index.js b/src/store/index.js index 689fe65..0a314fe 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -40,6 +40,7 @@ propertiesFlag: null, propertiesName: null, propertiesInfo: null, + pickUpPointInfo: null, //涓婚鍒囨崲 theme: variables.theme, diff --git a/src/views/Synthesis/LeftMenu.vue b/src/views/Synthesis/LeftMenu.vue index 4bb524a..bbde562 100644 --- a/src/views/Synthesis/LeftMenu.vue +++ b/src/views/Synthesis/LeftMenu.vue @@ -251,8 +251,8 @@ comprehensive_deletes, comprehensive_selectModelByPageAndCount, comprehensive_insertModel, - comprehensive_updateModel -} from "../../api/api.js"; + comprehensive_updateModel, selectByBuffer +} from '../../api/api.js' import { OverviewMap, defaults as defaultControls, @@ -471,6 +471,12 @@ name: "绌洪棿鏌ヨ", css: "twoMenu_imge52", }, + { + id: "e3", + label: "synthesis.pickup", + name: "鎷惧彇", + css: "twoMenu_imge52", + }, ], [ { @@ -669,6 +675,7 @@ }], modelClip:false, clippingPlanes:null, + showPickUp:false, }; }, methods: { @@ -1384,12 +1391,30 @@ setIquery(res) { switch (res) { case "e2": + Viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); this.$store.state.mapMenuBoolean = !this.$store.state.mapMenuBoolean; this.$store.state.mapMenuBoxFlag = "1"; break; case "e1": + Viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); this.$store.state.mapMenuBoolean = !this.$store.state.mapMenuBoolean; this.$store.state.mapMenuBoxFlag = "2"; + break; + //鎷惧彇鍔熻兘 + case "e3": + this.$store.state.mapMenuBoolean = false; + this.showPickUp = !this.showPickUp; + if (this.showPickUp){ + let that = this; + Viewer.screenSpaceEventHandler.setInputAction(function (event) { + let p = sgworld.Navigate.getMouseDegrees(event); + console.log(p); + that.getPickUpData(p); + }, Cesium.ScreenSpaceEventType.LEFT_CLICK); + }else { + this.$refs.queryinfo.closeAll(); + Viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); + } break; } }, @@ -2395,6 +2420,34 @@ handleAttatchChange(val) { this.attacgSelection = val; }, + //鎷惧彇鏁版嵁鑾峰彇 + async getPickUpData(info){ + let checkedLayers = JSON.parse(sessionStorage.getItem("checkedLayers")); + let showPop = false; + for (const item of checkedLayers) { + let name = item.url.replaceAll("LF:",""); + name = name.replaceAll("_",""); + let params = { + buffer:10, + limit:20, + name:name, + wkt:`POINT (${info.lon} ${info.lat})`, + } + const res = await selectByBuffer(params); + if (res.result && res.result.length > 0){ + this.$store.state.mapPopBoxFlag = "4"; + this.$store.state.pickUpPointInfo = info; + this.$refs && + this.$refs.queryinfo && + this.$refs.queryinfo.open("鎷惧彇鍒嗘瀽", null,); + showPop = true; + break; + } + } + if (!showPop){ + this.$message.warning("鏆傛棤鏁版嵁!"); + } + } }, mounted() { this.measureData = new Map(); diff --git a/src/views/Tools/LayerTree.vue b/src/views/Tools/LayerTree.vue index 54ee232..c9d2169 100644 --- a/src/views/Tools/LayerTree.vue +++ b/src/views/Tools/LayerTree.vue @@ -546,6 +546,23 @@ img_layer.show = checked; } } + //瀛樺偍閫変腑鍥惧眰 + let checkedLayers = JSON.parse(sessionStorage.getItem("checkedLayers")); + if (checked && data.url){ + checkedLayers.push(data); + } + else { + for (let i = 0; i < checkedLayers.length; i++) { + let item = checkedLayers[i]; + if (item.enName == data.enName){ + checkedLayers.splice(i,1); + } + } + } + sessionStorage.setItem("checkedLayers",JSON.stringify(checkedLayers)); + setTimeout(() => { + this.$bus.$emit("treeChanged", true); + }, 500) } else if (data.serveType == "WFS") { if (window.Viewer.dataSources._dataSources.length == 0) { this.setAddLayers(data); @@ -722,6 +739,7 @@ var std = data.result; var that = this; var checkKey = []; + let checkedLayers = []; var val = std.filter((str) => { if (str.type == 1) { return str; @@ -730,11 +748,16 @@ if (str.isShow == 1) { checkKey.push(str.id); that.setAddLayers(str); + if (str.serveType == "WMS" && str.url){ + checkedLayers.push(str); + } } return str; } }); + //瀛樺偍閫変腑鍥惧眰 + sessionStorage.setItem("checkedLayers",JSON.stringify(checkedLayers)); var res = this.setTreeData(val); for (var i in res) { diff --git a/src/views/Tools/queryinfo.vue b/src/views/Tools/queryinfo.vue index 8f64077..24277e1 100644 --- a/src/views/Tools/queryinfo.vue +++ b/src/views/Tools/queryinfo.vue @@ -12,10 +12,10 @@ > <div> <div style="width:940px;height:400px;"> - <map-menu-pop v-if="$store.state.mapPopBoxFlag == '1'" /> <map-space-pop v-if="$store.state.mapPopBoxFlag == '2'" /> <pipe-line-analy v-if="$store.state.mapPopBoxFlag == '3'" /> + <map-pick-up-pop v-if="$store.state.mapPopBoxFlag == '4'" /> </div> </div> </Popup> @@ -26,6 +26,7 @@ import Popup from './Popup.vue'; import mapMenuPop from '../../components/MapView/mapMenuPop.vue'; import mapSpacePop from '../../components/MapView/mapSpacePop.vue'; +import mapPickUpPop from '../../components/MapView/mapPickUpPop'; import pipeLineAnaly from './pipeLineAnaly.vue' export default { name: 'queryinfo', @@ -34,7 +35,8 @@ Popup, mapMenuPop, mapSpacePop, - pipeLineAnaly + pipeLineAnaly, + mapPickUpPop }, data() { return { @@ -116,4 +118,4 @@ }; </script> - + -- Gitblit v1.9.3