wujingjing
2025-02-25 45956b0532ff4bc7c5ec35ac35f336e3b8a82c38
设备居中
已修改1个文件
59 ■■■■■ 文件已修改
src/model/map/OLMap.ts 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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, {