缩放地图功能

术语 含义 例子
空间分辨率(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)

当你执行双击、双指张开或点击 “+” 号放大地图时:

  1. 层级(Zoom Level):数字变大(例如从 10 级变为 12 级)。
  2. 比例尺(Map Scale):比例尺变大(分母变小,例如从 1:50,000 变为 1:10,000)。
    视觉效果:视野范围变小,但地面物体的细节(如小路、店铺招牌)变得更清晰。

缩小地图(Zoom Out)

当你执行双指捏合或点击 “-” 号缩小地图时:

  1. 层级(Zoom Level):数字变小(例如从 15 级降到 8 级)。
  2. 比例尺(Map Scale):比例尺变小(分母变大,例如从 1:2,000 变为 1:100,000)。
    视觉效果:視野范围变大,能看到更多的省份或国家,但微观的建筑和道路细节会被隐藏。
posted @ 2026-09-09 11:35  twjy  阅读(18)  评论(0)    收藏  举报