refactor(map): 重构地图组件并添加缩放限制

-移除 HelloWorld.vue 文件
- 在 TiandituMap.vue 和 WipeEffectMap.vue 中添加地图缩放限制
- 更新 tianditu.js 配置文件,增加 MIN_ZOOM 和 MAX_ZOOM 常量
- 在 splitScreen.js 中为分屏地图添加缩放限制
This commit is contained in:
zhangtao 2025-08-01 15:47:32 +08:00
parent 6ae6c25d34
commit 44f895e1b1
5 changed files with 23 additions and 79 deletions

View File

@ -1,67 +0,0 @@
<template>
<div class="map-container">
<div id="mapDiv" class="map-div"></div>
</div>
</template>
<script setup>
import { onMounted, ref } from 'vue'
// props
const props = defineProps({
msg: String
})
//
const mapInstance = ref(null)
onMounted(() => {
// API
if (typeof T !== 'undefined') {
mapInstance.value = new T.Map('mapDiv')
//
let ctrl = new T.Control.MapType([
{
title: "卫星混合",
icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/satellitepoi.png",
layer: TMAP_HYBRID_MAP,
},
{
title: "地图",
icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/vector.png",
layer: TMAP_NORMAL_MAP,
},
]);
//
ctrl.setPosition(window.T_ANCHOR_TOP_RIGHT);
mapInstance.value.addControl(ctrl);
//
mapInstance.value.centerAndZoom(new T.LngLat(121.4737, 31.2304), 10);
console.log('地图初始化成功')
} else {
console.error('天地图 API 未加载')
}
})
</script>
<style scoped>
.map-container {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 1000;
}
.map-div {
width: 100%;
height: 100%;
}
</style>

View File

@ -49,7 +49,9 @@ const initMap = () => {
layers: vectorLayers, layers: vectorLayers,
view: new View({ view: new View({
center: fromLonLat(TIANDITU_CONFIG.DEFAULT_CENTER), center: fromLonLat(TIANDITU_CONFIG.DEFAULT_CENTER),
zoom: TIANDITU_CONFIG.DEFAULT_ZOOM zoom: TIANDITU_CONFIG.DEFAULT_ZOOM,
minZoom: TIANDITU_CONFIG.MIN_ZOOM,
maxZoom: TIANDITU_CONFIG.MAX_ZOOM
}), }),
controls: controls controls: controls
}) })

View File

@ -82,7 +82,9 @@ const initMap = () => {
target: mapDiv.value, target: mapDiv.value,
view: new View({ view: new View({
center: fromLonLat(TIANDITU_CONFIG.DEFAULT_CENTER), center: fromLonLat(TIANDITU_CONFIG.DEFAULT_CENTER),
zoom: TIANDITU_CONFIG.DEFAULT_ZOOM zoom: TIANDITU_CONFIG.DEFAULT_ZOOM,
minZoom: TIANDITU_CONFIG.MIN_ZOOM,
maxZoom: TIANDITU_CONFIG.MAX_ZOOM
}), }),
controls: controls, controls: controls,
}) })

View File

@ -6,31 +6,35 @@ export const TIANDITU_CONFIG = {
// 申请地址https://console.tianditu.gov.cn/ // 申请地址https://console.tianditu.gov.cn/
// 如果没有API Key地图将无法正常显示 // 如果没有API Key地图将无法正常显示
API_KEY: '4559200347e75489c4474f5b11846368', API_KEY: '4559200347e75489c4474f5b11846368',
// 天地图服务URL配置 (使用子域名轮询) // 天地图服务URL配置 (使用子域名轮询)
SERVICES: { SERVICES: {
// 矢量底图 // 矢量底图
VECTOR: 'http://t{0-7}.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk={key}', VECTOR: 'http://t{0-7}.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk={key}',
// 矢量注记 // 矢量注记
VECTOR_ANNOTATION: 'http://t{0-7}.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk={key}', VECTOR_ANNOTATION: 'http://t{0-7}.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk={key}',
// 影像底图 // 影像底图
SATELLITE: 'http://t{0-7}.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk={key}', SATELLITE: 'http://t{0-7}.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk={key}',
// 影像注记 // 影像注记
SATELLITE_ANNOTATION: 'http://t{0-7}.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk={key}' SATELLITE_ANNOTATION: 'http://t{0-7}.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk={key}'
}, },
// 服务器子域名 // 服务器子域名
SUB_DOMAINS: ['0', '1', '2', '3', '4', '5', '6', '7'], SUB_DOMAINS: ['0', '1', '2', '3', '4', '5', '6', '7'],
// 默认地图中心点(上海) // 默认地图中心点(上海)
DEFAULT_CENTER: [121.4737, 31.2304], DEFAULT_CENTER: [121.4737, 31.2304],
// 默认缩放级别 // 默认缩放级别
DEFAULT_ZOOM: 14, DEFAULT_ZOOM: 14,
// 缩放级别限制
MIN_ZOOM: 1,
MAX_ZOOM: 18,
// OpenLayers 投影配置 // OpenLayers 投影配置
PROJECTION: 'EPSG:4326' PROJECTION: 'EPSG:4326'
} }

View File

@ -7,6 +7,7 @@ import TileLayer from 'ol/layer/Tile'
import XYZ from 'ol/source/XYZ' import XYZ from 'ol/source/XYZ'
import { fromLonLat } from 'ol/proj' import { fromLonLat } from 'ol/proj'
import { defaults } from 'ol/control'; import { defaults } from 'ol/control';
import { TIANDITU_CONFIG } from '../config/tianditu.js'
/** /**
* 分屏地图管理器 * 分屏地图管理器
@ -162,7 +163,9 @@ export class SplitScreenManager {
target: container, target: container,
view: new View({ view: new View({
center: fromLonLat(options.center), center: fromLonLat(options.center),
zoom: options.zoom zoom: options.zoom,
minZoom: TIANDITU_CONFIG.MIN_ZOOM,
maxZoom: TIANDITU_CONFIG.MAX_ZOOM
}), }),
controls: controls controls: controls
}) })