From 33d69f9ff8b7100494f873b405d0431ec95b2ada Mon Sep 17 00:00:00 2001
From: husq <931347610@qq.com>
Date: Tue, 10 Oct 2023 11:09:44 +0800
Subject: [PATCH] 地图图层更换功能添加
---
src/components/cesiumMap/cesium.vue | 145 +++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 137 insertions(+), 8 deletions(-)
diff --git a/src/components/cesiumMap/cesium.vue b/src/components/cesiumMap/cesium.vue
index e8867d1..afbbc9d 100644
--- a/src/components/cesiumMap/cesium.vue
+++ b/src/components/cesiumMap/cesium.vue
@@ -2,8 +2,8 @@
<div class="height-100 width-100 cesium" id="cesiumContainer"></div>
<div v-if="centerConfig.type && !centerConfig.latitude" class="pointLongitude">在地图上点击绘制项目中心点</div>
<div class="search">
- <a-auto-complete v-if="show" v-model:value="searchText" style="width: 200px;height: 100%;" placeholder="请输入地址" @select="enter"
- @change="searchLocation" :options='resultList'>
+ <a-auto-complete v-if="show" v-model:value="searchText" style="width: 200px;height: 100%;" placeholder="请输入地址"
+ @select="enter" @change="searchLocation" :options='resultList'>
</a-auto-complete>
<span class="search-icon" @click="() => show = !show">
<SearchOutlined style="fontSize:24px; color: blue;" />
@@ -23,6 +23,23 @@
<div class="2d" v-if="dimension === 2" @click="switchDimension('3D')">2D</div>
<div class="3d" v-else @click="switchDimension('2D')">3D</div>
</div>
+ <a-popover placement="left" overlayClassName="popover-card">
+ <template #content>
+ <div class="map-img">
+ <div class="stand-box" :class="{ 'active-icon': mapSetting.mode === 0 }" @click.self="setMap(0)"></div>
+ <div class="satellite-box" :class="{ 'active-icon': mapSetting.mode === 1 }" @click.self="setMap(1)">
+ <div class="road-line" :class="{'disabled': mapSetting.mode === 0}">
+ <a-checkbox :disabled="mapSetting.mode === 0" v-model:checked="mapSetting.roadLine" style="color: #fff !important;" @change="roadChange">开启路网</a-checkbox>
+ </div>
+ </div>
+ </div>
+ </template>
+ <div class="layer-icon">
+ <div class="layer-btn">
+ <div class="img"></div>
+ </div>
+ </div>
+ </a-popover>
</template>\
<script setup lang="ts">
@@ -67,7 +84,7 @@
}
}
const searchLocation = _.debounce(search, 500)
-const { flyTo, addPoint, removeById, switchModel, dimension, zoonIn, zoonOut } = cesiumOperation()
+const { flyTo, addPoint, removeById, switchModel, dimension, zoonIn, zoonOut, roadPattern, patternMap } = cesiumOperation()
const enter = (e: string) => {
removeById('key')
const filterItem = resultList.value.find(v => v.value === e)
@@ -99,7 +116,7 @@
const switchDimension = (type: string) => {
switchModel(type)
}
-const handleMouseDown = (fn:Function) => {
+const handleMouseDown = (fn: Function) => {
// clearInterval(timer.value)
timer.value = setInterval(() => {
fn(10)
@@ -108,7 +125,21 @@
const handleMouseUp = () => {
clearInterval(timer.value)
}
-
+const mapSetting = computed(() => store.state.common.mapSetting)
+const setMap = (type: number) => {
+ store.commit('SET_MAP_SETTING_MODE', type)
+ patternMap()
+}
+const roadChange = (e:any) => {
+ if (mapSetting.value.mode === 0) return
+ store.commit('SET_MAP_SETTING_ROAD_LINE', e.target.checked)
+ if (e.target.checked) {
+ roadPattern(true)
+ } else {
+ roadPattern(false)
+ }
+}
+const checked = ref(true)
</script>
<style scoped lang="scss">
@@ -141,6 +172,7 @@
display: flex;
align-items: center;
height: 32px;
+
.search-icon {
padding: 5px;
background-color: #fff;
@@ -159,7 +191,9 @@
align-items: center;
flex-direction: column;
height: 32px;
- &-in, &-out {
+
+ &-in,
+ &-out {
padding: 5px;
background-color: #fff;
height: 32px;
@@ -186,7 +220,102 @@
justify-content: center;
}
+.layer-icon {
+ pointer-events: auto;
+ position: absolute;
+ box-sizing: border-box;
+ width: 40px;
+ height: 40px;
+ padding: 3px;
+ right: 20px;
+ bottom: 120px;
+ background: #fff;
+ margin-top: 10px;
+ border-radius: 50%;
+
+ .layer-btn {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 34px;
+ height: 34px;
+ border-radius: 50%;
+ background: #fff;
+ box-shadow: 0 0 4px 0 rgba(0, 0, 0, .6);
+ cursor: pointer;
+ }
+
+ .img {
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ background: url('../../assets//icons//satellite-icon.png') no-repeat center;
+ }
+}
+
+.map-img {
+ width: 240px;
+ height: 120px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 10px 5px;
+ box-sizing: border-box;
+
+ .stand-box {
+ background: url('../../assets/icons/stand.png') no-repeat 100% 100%;
+ width: 110px;
+ height: 100%;
+ box-sizing: border-box;
+ position: relative;
+ }
+
+ .stand-box::after {
+ content: '标准地图';
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ color: #fff;
+ font-size: 14px;
+ }
+
+ .satellite-box {
+ background: url('../../assets/icons/satellite-icon.png') no-repeat 100% 100%;
+ width: 110px;
+ height: 100%;
+ box-sizing: border-box;
+ position: relative;
+ .road-line {
+ width: 100%;
+ color: #fff;
+ font-size: 14px;
+ background: rgba(0,0,0,.5);
+ :deep(.ant-checkbox-disabled + span) {
+ color: #fff !important;
+ opacity: .4;
+ }
+ }
+ .disabled {
+ cursor: no-drop;
+ }
+ }
+
+ .satellite-box::after {
+ content: '卫星地图';
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ color: #fff;
+ font-size: 14px;
+ padding: 1px 2px;
+ background-color: #2d8cf0;
+ }
+}
+
+.active-icon {
+ border: 2px solid #1180ff;
+}
+
.switch:hover {
color: #1180ff;
-}
-</style>
+}</style>
--
Gitblit v1.9.3