From 3305e4a5080593e8668da4cfa370b7b660aed4f4 Mon Sep 17 00:00:00 2001 From: Timi Date: Wed, 10 Dec 2025 13:55:29 +0800 Subject: [PATCH] fix map scale --- miniprogram/pages/main/journal-map/index.ts | 34 +++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/miniprogram/pages/main/journal-map/index.ts b/miniprogram/pages/main/journal-map/index.ts index 06777f0..738f81f 100644 --- a/miniprogram/pages/main/journal-map/index.ts +++ b/miniprogram/pages/main/journal-map/index.ts @@ -57,6 +57,37 @@ Page({ async onLoad() { await this.loadJournals(); }, + /** 计算合适的缩放级别以显示所有标记点 */ + calculateScale(journals: JournalMarker[]): number { + if (journals.length === 0) return 13; + if (journals.length === 1) return 15; + + // 计算经纬度的范围 + const lats = journals.map(j => j.lat); + const lngs = journals.map(j => j.lng); + const minLat = Math.min(...lats); + const maxLat = Math.max(...lats); + const minLng = Math.min(...lngs); + const maxLng = Math.max(...lngs); + + // 计算跨度 + const latSpan = maxLat - minLat; + const lngSpan = maxLng - minLng; + const maxSpan = Math.max(latSpan, lngSpan); + + // 根据跨度映射到缩放级别(scale 范围 3-20) + if (maxSpan > 10) return 5; + if (maxSpan > 5) return 7; + if (maxSpan > 2) return 9; + if (maxSpan > 1) return 10; + if (maxSpan > .5) return 11; + if (maxSpan > .2) return 12; + if (maxSpan > .1) return 13; + if (maxSpan > .05) return 14; + if (maxSpan > .02) return 15; + if (maxSpan > .01) return 16; + return 17; + }, /** 加载所有记录 */ async loadJournals() { this.setData({ isLoading: true }); @@ -131,6 +162,8 @@ Page({ // 计算中心点(所有标记的平均位置) const centerLat = journals.reduce((sum, j) => sum + j.lat, 0) / journals.length; const centerLng = journals.reduce((sum, j) => sum + j.lng, 0) / journals.length; + // 计算合适的缩放级别 + const scale = this.calculateScale(journals) - 2; this.setData({ journals, @@ -138,6 +171,7 @@ Page({ customCalloutMarkerIds, centerLat, centerLng, + scale, isLoading: false }); } catch (err: any) {