Skip to content

getMapScale

根据两个经纬度点计算推荐的地图缩放级别,使用 Haversine 公式计算距离并基于距离自动匹配合适的缩放级别。

示例

ts
// 计算北京到上海的缩放级别(适合大范围展示)
const zoom = getMapScale(116.4074, 39.9042, 121.4737, 31.2304, { type: 'big' });
console.log(zoom); // 根据距离自动返回合适的缩放级别

// 计算两个相近地点的缩放级别(适合精细展示)
const zoomSmall = getMapScale(116.4074, 39.9042, 116.4174, 39.9142, { type: 'small' });

// 自定义缩放规则(比如适配特定地图服务)
const customZoom = getMapScale(116.4074, 39.9042, 121.4737, 31.2304, {
  type: [
    [2000, 5],   // 距离 > 2000km 时使用缩放级别 5
    [500, 8],    // 距离 > 500km 时使用缩放级别 8
    [50, 12],    // 距离 > 50km 时使用缩放级别 12
    [0, 16],     // 距离 <= 50km 时使用缩放级别 16
  ],
});

// 支持字符串格式的坐标
const zoomFromString = getMapScale('116.4074', '39.9042', '121.4737', '31.2304');

参数

名称说明类型可选值默认值
oneLon第一点经度number | string--
oneLat第一点纬度number | string--
twoLon第二点经度number | string--
twoLat第二点纬度number | string--
options缩放策略选项GetMapScaleOptions-{ type: 'big' }

GetMapScaleOptions

名称说明类型可选值默认值
type缩放策略类型"big" | "small" | [number, number][]"big": 适合展示较大地理范围
"small": 适合精细区域
自定义映射表
"big"

返回值

number: 推荐的地图缩放级别

算法说明

距离计算

使用 Haversine 公式 计算两点间的球面距离:

  • 地球半径:6371 公里
  • 考虑地球曲率,适用于任意距离的计算

缩放级别映射

big 策略(大范围展示)

最大距离(km)缩放级别
1000+4
500-10006
200-5007.5
50-20010
10-5010.5
1-1011
0-115

small 策略(精细展示)

最大距离(km)缩放级别
1000+3
500-10004
200-5005
50-2006
30-507
20-308
10-209
5-1010
1-512
0-115

异常

  • 当输入的坐标无效时抛出错误:"Invalid coordinate: [value]"
  • 当 type 为字符串但不在预定义类型中时抛出错误:"Unknown type: [value]"

适用场景

  • 地图应用: 自动调整地图缩放级别以显示两个位置点
  • 导航功能: 根据起点和终点距离设置合适的地图视野
  • 位置分享: 展示两个位置点的相对关系
  • 地理分析: 计算合适比例尺进行地理数据展示

⚠️ 注意:坐标值必须在有效范围内(经度 -180~180,纬度 -90~90),超出范围可能导致计算结果不准确。函数支持字符串格式的数字输入,会自动转换为数值类型。