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-1000 | 6 |
| 200-500 | 7.5 |
| 50-200 | 10 |
| 10-50 | 10.5 |
| 1-10 | 11 |
| 0-1 | 15 |
small 策略(精细展示)
| 最大距离(km) | 缩放级别 |
|---|---|
| 1000+ | 3 |
| 500-1000 | 4 |
| 200-500 | 5 |
| 50-200 | 6 |
| 30-50 | 7 |
| 20-30 | 8 |
| 10-20 | 9 |
| 5-10 | 10 |
| 1-5 | 12 |
| 0-1 | 15 |
异常
- 当输入的坐标无效时抛出错误:"Invalid coordinate: [value]"
- 当 type 为字符串但不在预定义类型中时抛出错误:"Unknown type: [value]"
适用场景
- 地图应用: 自动调整地图缩放级别以显示两个位置点
- 导航功能: 根据起点和终点距离设置合适的地图视野
- 位置分享: 展示两个位置点的相对关系
- 地理分析: 计算合适比例尺进行地理数据展示
⚠️ 注意:坐标值必须在有效范围内(经度 -180~180,纬度 -90~90),超出范围可能导致计算结果不准确。函数支持字符串格式的数字输入,会自动转换为数值类型。