fix map scale

This commit is contained in:
Timi
2025-12-10 15:13:20 +08:00
parent 71cbf554d4
commit 432cc85663
2 changed files with 9 additions and 34 deletions

View File

@ -40,6 +40,7 @@ interface JournalMapData {
markers: MapMarker[];
journals: JournalMarker[];
customCalloutMarkerIds: number[];
includePoints: Array<{ latitude: number; longitude: number }>; // 缩放视野以包含所有点
selectedMarker: JournalMarker | null;
showDetail: boolean; // 是否显示详情(控制 DOM 存在)
detailVisible: boolean; // 详情是否可见(控制动画)
@ -54,6 +55,7 @@ Page({
markers: [],
journals: [],
customCalloutMarkerIds: [],
includePoints: [],
selectedMarker: null,
showDetail: false,
detailVisible: false,
@ -62,37 +64,6 @@ 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 });
@ -167,8 +138,11 @@ 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;
// 缩放视野以包含所有标记点
const includePoints = journals.map((j) => ({
latitude: j.lat,
longitude: j.lng
}));
this.setData({
journals,
@ -176,7 +150,7 @@ Page({
customCalloutMarkerIds,
centerLat,
centerLng,
scale,
includePoints,
isLoading: false
});
} catch (err: any) {

View File

@ -8,6 +8,7 @@
longitude="{{centerLng}}"
scale="{{scale}}"
markers="{{markers}}"
include-points="{{includePoints}}"
bindmarkertap="onMarkerTap"
bindcallouttap="onCalloutTap"
>