From ff78eb366dbfaa9c7a4fd653efd488dfada3160d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=99=93=E5=87=A1?= <154408238@qq.com> Date: Wed, 23 Aug 2023 11:39:55 +0800 Subject: [PATCH] 1 --- .eslintrc.js | 4 +- package-lock.json | 68 +++++++++++++++++++ package.json | 3 +- src/components/earth/Earth.js | 1 - .../earth/layerManager/layerManager.js | 37 +++++++++- src/components/earth/tokens.js | 3 + .../mapUI/baseMapManager/baseMapManager.vue | 49 +++++++++---- src/components/mapUI/mapLayout.vue | 7 ++ src/components/mapUI/mapTools/mapTools.vue | 27 ++++++++ src/main.js | 2 +- 10 files changed, 184 insertions(+), 17 deletions(-) create mode 100644 src/components/earth/tokens.js create mode 100644 src/components/mapUI/mapTools/mapTools.vue diff --git a/.eslintrc.js b/.eslintrc.js index 594b712..7833c12 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -6,7 +6,9 @@ module.exports = { es6: true }, globals: { - Cesium: true + Cesium: true, + viewer: true, + scene: true }, extends: [ 'plugin:vue/vue3-recommended', diff --git a/package-lock.json b/package-lock.json index 7eefe84..915252e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,10 +12,12 @@ "@vicons/antd": "^0.10.0", "@vicons/ionicons5": "^0.10.0", "ali-oss": "^6.17.1", + "animate.css": "^4.1.1", "axios": "^0.26.1", "dayjs": "^1.11.2", "mockjs": "^1.1.0", "pinia": "^2.0.13", + "pinia-plugin-persist": "^1.0.0", "tinymce": "^5.10.2", "vue": "^3.2.16", "vue-router": "^4.0.14", @@ -2243,6 +2245,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/animate.css": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz", + "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==" + }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -8380,6 +8387,46 @@ } } }, + "node_modules/pinia-plugin-persist": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/pinia-plugin-persist/-/pinia-plugin-persist-1.0.0.tgz", + "integrity": "sha512-M4hBBd8fz/GgNmUPaaUsC29y1M09lqbXrMAHcusVoU8xlQi1TqgkWnnhvMikZwr7Le/hVyMx8KUcumGGrR6GVw==", + "dependencies": { + "vue-demi": "^0.12.1" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0", + "pinia": "^2.0.0", + "vue": "^2.0.0 || >=3.0.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/pinia-plugin-persist/node_modules/vue-demi": { + "version": "0.12.5", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.12.5.tgz", + "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/pinia/node_modules/vue-demi": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.1.tgz", @@ -13893,6 +13940,11 @@ } } }, + "animate.css": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz", + "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==" + }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -18456,6 +18508,22 @@ } } }, + "pinia-plugin-persist": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/pinia-plugin-persist/-/pinia-plugin-persist-1.0.0.tgz", + "integrity": "sha512-M4hBBd8fz/GgNmUPaaUsC29y1M09lqbXrMAHcusVoU8xlQi1TqgkWnnhvMikZwr7Le/hVyMx8KUcumGGrR6GVw==", + "requires": { + "vue-demi": "^0.12.1" + }, + "dependencies": { + "vue-demi": { + "version": "0.12.5", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.12.5.tgz", + "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==", + "requires": {} + } + } + }, "platform": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", diff --git a/package.json b/package.json index 229e581..64e9b0c 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@vicons/antd": "^0.10.0", "@vicons/ionicons5": "^0.10.0", "ali-oss": "^6.17.1", + "animate.css": "^4.1.1", "axios": "^0.26.1", "dayjs": "^1.11.2", "mockjs": "^1.1.0", @@ -46,4 +47,4 @@ "vite-plugin-mock": "^2.9.6", "vite-plugin-vue-setup-extend": "^0.4.0" } -} \ No newline at end of file +} diff --git a/src/components/earth/Earth.js b/src/components/earth/Earth.js index 8aeae68..d86ca24 100644 --- a/src/components/earth/Earth.js +++ b/src/components/earth/Earth.js @@ -31,7 +31,6 @@ class Earth { // contextOptions: { // requestWebgl1: true // 指定上下文,使用webgl1的上下文 // }, - selectionIndicator: false // 去除绿色选择框 }) viewer._cesiumWidget._creditContainer.style.display = 'none' diff --git a/src/components/earth/layerManager/layerManager.js b/src/components/earth/layerManager/layerManager.js index 0cc896a..da9ef6d 100644 --- a/src/components/earth/layerManager/layerManager.js +++ b/src/components/earth/layerManager/layerManager.js @@ -7,11 +7,12 @@ // } // } // export default layerManager - +import { TDT_TOKEN } from '@/components/earth/tokens.js' class LayerManager { constructor(viewer) { this.viewer = viewer this.tilesetList = [] + this.baseLayer = null } async add3DTilesetByUrl(url, name) { @@ -56,6 +57,40 @@ class LayerManager { }) }) } + + loadBaseLayerByType(option) { + const type = option.code + const imgProvider = new Cesium.WebMapTileServiceImageryProvider({ + url: `http://{s}.tianditu.com/${type}_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=${type}&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=${TDT_TOKEN}`, + subdomains: ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7'], + layer: `${type}`, + style: 'default', + format: 'image/jpeg', + tileMatrixSetID: 'GoogleMapsCompatible', + maximumLevel: 18, + show: true + }) + const baseLayer = viewer.imageryLayers.addImageryProvider(imgProvider) + if (type !== 'cva') { + this.baseLayer = { + name: option.name, + layer: baseLayer + } + } else { + this.annotationLayer = { + name: option.name, + layer: baseLayer + } + } + + return baseLayer + } + + removeLayer(layer) { + if (layer) { + viewer.imageryLayers.remove(layer) + } + } } export default LayerManager diff --git a/src/components/earth/tokens.js b/src/components/earth/tokens.js new file mode 100644 index 0000000..756c96f --- /dev/null +++ b/src/components/earth/tokens.js @@ -0,0 +1,3 @@ +export const CESIUM_TOKEN = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkZWJjOTRmOS04ZWVlLTQ2Y2QtYjk1Zi1mMTlhYTI5YjRjZGQiLCJpZCI6Njg1MDEsImlhdCI6MTYzMjc5Nzk5NX0.Y - SNJskkiSEYtqKERD6sib6lYKQuzXf_z_z3mBVpEjI' + +export const TDT_TOKEN = 'b48998cf12f83e0215989b14acf59e3f' diff --git a/src/components/mapUI/baseMapManager/baseMapManager.vue b/src/components/mapUI/baseMapManager/baseMapManager.vue index 86e97da..0510cc1 100644 --- a/src/components/mapUI/baseMapManager/baseMapManager.vue +++ b/src/components/mapUI/baseMapManager/baseMapManager.vue @@ -1,7 +1,7 @@