缩放地图功能
| 术语 | 含义 | 例子 |
|---|---|---|
| 空间分辨率(GSD) | 1 像素 = 实地几米 | 0.3m(高分卫星)、10m(Sentinel-2)、30m(Landsat) |
| 比例尺 | 图上 1 单位 = 实地 N 单位 | 1:225,000 |
| 显示分辨率 | 当前 zoom 下 1 像素 = 多少米 | zoom 11 白洋淀 ≈ 59.5 m/px |
地图层级、地图比例尺
层级
zoom 的本质是 "选哪一层瓦片"—— 它决定数据详细度(你的库 zoom 10 只有 9 片、zoom 16 有 11960 片,这是 "内容")
比例尺
地图比例尺是指地图上的距离与地面实际距离的缩小比例。
比例尺只是 zoom 变化后必然伴随的数值—— 它度量 "1 像素 = 多少米"
比例尺文字
比例尺文字的核心:由当前 zoom + 中心纬度实时算出 "1 像素 = 多少米",再取整档显示
分辨率(米/像素) = 156543.03392804097 × cos(纬度×π/180) / 2ᶻ
// 返回整档比例尺文字,如 "200 m" / "1 km"
function formatScale(zoom, latitude) {
if (zoom <= 0) return ""
var res = 156543.03392804097 * Math.cos(latitude * Math.PI / 180.0) / Math.pow(2, zoom) // 米/像素
if (res <= 0) return ""
var raw = res * 120 // 目标条宽约 120px 对应的米数
var mag = Math.pow(10, Math.floor(Math.log(raw) / Math.LN10))
var norm = raw / mag // 归一化到 1~10
var nice = norm < 1.5 ? 1 : (norm < 3.5 ? 2 : (norm < 7.5 ? 5 : 10))
var meters = nice * mag // 整档值
return meters >= 1000 ? (meters / 1000) + " km" : meters + " m"
}
// 需在头部加:import QtQuick.Window 2.2
// 显示 1:N 形式(如 "1:225,000")
function formatScaleRatio(zoom, latitude) {
if (zoom <= 0) return ""
var res = 156543.03392804097 * Math.cos(latitude * Math.PI / 180.0) / Math.pow(2, zoom)
var dpi = Screen.pixelDensity * 25.4 // 像素密度 -> DPI
var ratio = Math.round(res * dpi / 0.0254)
return "1:" + ratio.toLocaleString()
}
缩放地图
缩放 = 切换瓦片层级(内容变化)+ 比例尺跳变(度量变化)。
按钮缩放以 "视口中心" 为锚点 → 中心经纬度不变,只改 zoom → 直接调 updateView,不需要 zoomAt(那是滚轮鼠标锚点才需要的,可后加)
原理
缩放是手段,改变 zoom 是状态,比例尺变化是结果度量
用户缩放操作
→ 改变 zoomLevel(离散跳级:±1)
→ ① 切换瓦片金字塔层级:加载第 z 层的瓦片(数据详细度变了)
→ ② 屏幕像素 ↔ 地面距离的换算随之改变:resolution = 156543.03×cos(纬度)/2ᶻ
→ 比例尺分母按 2^Δz 变化(zoom+1 → 放大一倍,比例尺 1:225,000 → 1:112,000)
放大地图(Zoom In)
当你执行双击、双指张开或点击 “+” 号放大地图时:
- 层级(Zoom Level):数字变大(例如从 10 级变为 12 级)。
- 比例尺(Map Scale):比例尺变大(分母变小,例如从 1:50,000 变为 1:10,000)。
视觉效果:视野范围变小,但地面物体的细节(如小路、店铺招牌)变得更清晰。
缩小地图(Zoom Out)
当你执行双指捏合或点击 “-” 号缩小地图时:
- 层级(Zoom Level):数字变小(例如从 15 级降到 8 级)。
- 比例尺(Map Scale):比例尺变小(分母变大,例如从 1:2,000 变为 1:100,000)。
视觉效果:視野范围变大,能看到更多的省份或国家,但微观的建筑和道路细节会被隐藏。

浙公网安备 33010602011771号