From aef7a66e9568004d3e8bb9930db5866d82ed96c6 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期一, 29 四月 2024 22:32:46 +0800 Subject: [PATCH] 新增绘制3d走航图功能 --- src/views/historymode/HistoryMode.vue | 4 + src/components/monitor/FactorRadio.vue | 18 +++++ src/assets/border.css | 1 src/components.d.ts | 2 src/utils/map/3dLayer.js | 88 +++++++++++++++++++++++++++++ src/assets/3dmap.css | 11 --- 6 files changed, 110 insertions(+), 14 deletions(-) diff --git a/src/assets/3dmap.css b/src/assets/3dmap.css index a4523ba..0ddf6ed 100644 --- a/src/assets/3dmap.css +++ b/src/assets/3dmap.css @@ -66,19 +66,10 @@ } .map-factor-selector { - /* background-color: rgb(223, 223, 223); */ position: absolute; left: 1px; - /* left: 10px; */ - top: 120px; + top: 64px; z-index: 100px; - /* display: flex; - align-items: flex-start; - flex-wrap: wrap-reverse; - flex-direction: column; */ - /* background-color: #ffffffb0; */ - /* min-height: 200px; */ - /* max-height: 50vh; */ } .factorbox { diff --git a/src/assets/border.css b/src/assets/border.css index 44f8112..11ac6b5 100644 --- a/src/assets/border.css +++ b/src/assets/border.css @@ -366,6 +366,7 @@ /* 鍐呭 */ .ff-content { position: relative; + display: inline-block; } /* .ff-content .ff-border-top { diff --git a/src/components.d.ts b/src/components.d.ts index 4d59aea..efd3d0d 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -17,6 +17,8 @@ ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu'] ElIcon: typeof import('element-plus/es')['ElIcon'] + ElRadio: typeof import('element-plus/es')['ElRadio'] + ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] FactorRadio: typeof import('./components/monitor/FactorRadio.vue')['default'] MapToolbox: typeof import('./components/map/MapToolbox.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] diff --git a/src/components/monitor/FactorRadio.vue b/src/components/monitor/FactorRadio.vue index f77cf2f..a5ebb94 100644 --- a/src/components/monitor/FactorRadio.vue +++ b/src/components/monitor/FactorRadio.vue @@ -1,7 +1,7 @@ <template> - <BaseCard> + <BaseCard class="map-factor-selector"> <template #content> - <el-radio-group v-model="radio"> + <el-radio-group v-model="radio" size="default" @change="handleChange"> <el-radio v-for="(item, i) in options" :key="i" :value="item.value">{{ item.label }}</el-radio> @@ -14,11 +14,25 @@ // 鐩戞祴鍥犲瓙鍗曢�夋 import { radioOptions } from '@/constant/radio-options'; export default { + emits:['change'], data() { return { radio: radioOptions.type0[0].value, options: radioOptions.type0 }; + }, + method:{ + handleChange(value) { + this.$emit('change', value) + // todo 鍦板浘3d鍥惧儚鍒囨崲灞曠ず鐩戞祴鍥犲瓙 + } } }; </script> +<style scoped> +.el-radio { + --el-radio-text-color: white; + margin-right: 10px; + height: initial; +} +</style> diff --git a/src/utils/map/3dLayer.js b/src/utils/map/3dLayer.js index fef02a0..d0ad682 100644 --- a/src/utils/map/3dLayer.js +++ b/src/utils/map/3dLayer.js @@ -1 +1,87 @@ -import { object3Dlayer } from '../map'; +import { map, object3Dlayer } from './index_old'; + +// 3d鍥惧舰 +var _cylinder = undefined, + // 褰撳墠缁樺埗鐨勫浘褰腑鐨勬渶灏忛珮搴� + _minH = -1, + // 褰撳墠缁樺埗鐨勫浘褰腑鐨勬渶澶ч珮搴� + _maxH = -1; + +//鐩戞祴鏁版嵁 +var _factorDatas = { + lnglats: [], + heights: [], + type: '' + }, + //褰撳墠閫変腑鐨勭洃娴嬪洜瀛愭暟鎹� + _factor = {}, + _zoomFirst = true; + +function onMapZoom() { + // 棣栨鍦板浘缂╂斁鐩戝惉涓嶆墽琛岋紙鍥犱负璁惧畾鐩戝惉鍑芥暟鍚庝細绔嬪嵆鎵ц涓�娆★紝鍙兘瀹樻柟鍑芥暟鏈夌浉鍏冲弬鏁帮紝鍚庣画寰呬慨鏀癸級 + if (_zoomFirst) { + _zoomFirst = false; + return; + } + const fDatas = _factorDatas; + const factor = _factor; + // MapUtil._object3Dlayer.clear() + // MapUtil.drawMesh(f.lnglats, f.heights, f.type, false) + MapUtil.drawMesh2(fDatas, factor); + MapUtil.drawMarker(); +} + +export default { + /** + * 缁樺埗3D璧拌璺嚎鍥� + * @param fDatas 瀹屾暣鐩戞祴鏁版嵁 + * @param factor 褰撳墠灞曠ず鐨勭洃娴嬪洜瀛愮殑鍊紇alue + * @param merge 鏄惁鍜屼箣鍓嶇粯鍒剁殑鍥惧舰鍚堝苟 + * @param setCenter 闀滃ご鏄惁鑷姩绉诲姩鑷冲浘褰腑蹇� + */ + drawRoadMap(fDatas, factor, merge, setCenter) { + const lnglats_GD = fDatas.lnglats_GD; + const heights = factor.heights; + + // 1.鍏抽棴鍦板浘缂╂斁鐩戝惉 + map.off('zoomend', this._onMapZoom); + + // 2.璁$畻缁樺浘楂樺害鐨勮竟鐣屽�� + if (merge != true) { + var minH = _minH < 0 ? heights[0] : _minH; + var maxH = _maxH < 0 ? heights[0] : _maxH; + for (let i = 0; i < heights.length; i++) { + const h = heights[i]; + minH = Math.min(minH, h); + maxH = Math.max(maxH, h); + } + _minH = minH; + _maxH = maxH; + } + + // 3.纭畾瀹氫綅鍧愭爣鐐� + var center; + if (setCenter && lnglats_GD.length > 0) { + var p = lnglats_GD[0]; + for (let i = 0; i < lnglats_GD.length; i++) { + const e = lnglats_GD[i]; + if (e[0] != 0) { + p = e; + break; + } + } + center = new AMap.LngLat(...p); + } + + // 5.缁樺埗3D鍥惧舰 + drawMesh2(fDatas, factor, center, merge); + + // 缂╂斁鍦板浘鍒板悎閫傜殑瑙嗛噹绾у埆 + // map.setFitView() + + // 6.寮�鍚湴鍥剧缉鏀剧洃鍚� + if (lnglats_GD.length > 0) { + map.on('zoomend', this._onMapZoom); + } + } +}; diff --git a/src/views/historymode/HistoryMode.vue b/src/views/historymode/HistoryMode.vue index b718675..a6576bf 100644 --- a/src/views/historymode/HistoryMode.vue +++ b/src/views/historymode/HistoryMode.vue @@ -1,5 +1,7 @@ <template> - <div class="fy-container">HomePage</div> + <div class="fy-container"> + <FactorRadio></FactorRadio> + </div> </template> <script> -- Gitblit v1.9.3