From 45956b0532ff4bc7c5ec35ac35f336e3b8a82c38 Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期二, 25 二月 2025 10:50:47 +0800
Subject: [PATCH] 设备居中

---
 src/model/map/OLMap.ts |   59 ++++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 34 insertions(+), 25 deletions(-)

diff --git a/src/model/map/OLMap.ts b/src/model/map/OLMap.ts
index d881643..d1d9a90 100644
--- a/src/model/map/OLMap.ts
+++ b/src/model/map/OLMap.ts
@@ -2,6 +2,7 @@
 import { defaultsDeep } from 'lodash-es';
 import type { Overlay } from 'ol';
 import { Feature, Map as OpenLayerMap, View } from 'ol';
+import type { Extent } from 'ol/extent';
 import { extend, getTopLeft, getWidth } from 'ol/extent';
 import type { FeatureLike } from 'ol/Feature';
 import MVT from 'ol/format/MVT.js';
@@ -231,7 +232,7 @@
 		return position;
 	}
 
-	async gaodeAddressSearch(address,city) {
+	async gaodeAddressSearch(address, city) {
 		this.gaodeApiKey = 'eea6302da02576fe3f3dd3ba1fbe0a04';
 		// const url = `https://restapi.amap.com/v3/assistant/inputtips?output=json&city=010&keywords=${address}=${this.gaodeApiKey}`;
 		// 鎼滅储 POI
@@ -253,7 +254,6 @@
 	}
 	drawLayer: VectorLayer<VectorSource<Feature<Geometry>>, Feature<Geometry>> = null;
 	private isDrawStatus = false;
-
 
 	removeDrawLayer() {
 		if (!this.drawLayer) return;
@@ -341,7 +341,6 @@
 				});
 				// 娣诲姞鏂扮殑feature
 				// this.drawLayer.getSource().addFeature(feature);
-		
 
 				// 娣诲姞鐭╁舰鍥惧眰鍒板湴鍥�
 				this.map.addLayer(this.drawLayer);
@@ -387,7 +386,7 @@
 		// 璋冩暣瑙嗗浘浠ラ�傚簲鏈�灏忓鎺ョ煩褰�
 		this.map.getView().fit(extent, {
 			maxZoom: 15,
-			padding: [50, 50, 50, 50] // 娣诲姞鍐呰竟璺濅娇瑙嗗浘鏇寸編瑙�
+			padding: [50, 50, 50, 50], // 娣诲姞鍐呰竟璺濅娇瑙嗗浘鏇寸編瑙�
 		});
 	}
 
@@ -706,18 +705,23 @@
 		return overlay;
 	}
 
-	adjustViewToMarkers() {
+	getAllMarkerOverlays() {
 		const overlays = this.map.getOverlays().getArray();
-
-		const filteredOverlays = overlays.filter((overlay) => {
-			const type = overlay.get('type');
-			return type === OverlayType.Marker;
-		});
-		this.adjustViewToOverlays(filteredOverlays);
+		return overlays.filter((overlay) => overlay.get('type') === OverlayType.Marker);
 	}
 
-	adjustViewToOverlays(overlays: Overlay[]) {
-		if (overlays.length === 0) return;
+	adjustViewToMarkers() {
+		const overlays = this.getAllMarkerOverlays();
+		this.adjustViewToOverlays(overlays);
+	}
+
+	getAllMarkerOverlaysExtent() {
+		const overlays = this.getAllMarkerOverlays();
+		const extent = this.getOverlaysExtent(overlays);
+		return extent;
+	}
+
+	getOverlaysExtent(overlays: Overlay[]) {
 		const extent = overlays.reduce<number[] | null>((ext, item) => {
 			const coord = item.getPosition();
 
@@ -726,7 +730,12 @@
 			}
 			return [Math.min(ext[0], coord[0]), Math.min(ext[1], coord[1]), Math.max(ext[2], coord[0]), Math.max(ext[3], coord[1])];
 		}, null);
+		return extent;
+	}
 
+	adjustViewToOverlays(overlays: Overlay[]) {
+		if (overlays.length === 0) return;
+		const extent = this.getOverlaysExtent(overlays);
 		if (extent) {
 			this.fitExtend(extent);
 		}
@@ -790,22 +799,22 @@
 	}
 
 	zoomToLayers() {
+		let extent = this.getAllMarkerOverlaysExtent();
 		const layers = this.getAllLayerModels();
-		if (!layers || layers.length === 0) return;
+		if (layers.length > 0) {
+			// 鑾峰彇鎵�鏈夊浘灞傜殑鑼冨洿
+			extent = layers.reduce((extent, layer) => {
+				const layerExtent = layer.getExtent();
 
-		// 鑾峰彇鎵�鏈夊浘灞傜殑鑼冨洿
-		const extent = layers.reduce((extent, layer) => {
-			const layerExtent = layer.getExtent();
+				if (!extent) {
+					return layerExtent;
+				}
 
-			if (!extent) {
-				return layerExtent;
-			}
+				// 鍚堝苟鑼冨洿
+				return extend(extent, layerExtent);
+			}, extent);
 
-			// 鍚堝苟鑼冨洿
-			return extend(extent, layerExtent);
-		}, null);
-
-		if (!extent) return;
+		}
 
 		// 鑱氱劍鍒板悎骞跺悗鐨勮寖鍥�
 		this.map.getView().fit(extent, {

--
Gitblit v1.9.3