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