拍星助手 · 评级系统 · 设计与技术文档 v0.1

动态光污染等级

某地在特定夜晚、特定时段实际能获得的观星光污染等级。参照波特尔 1–9 级,但 SQM 对应值重新校准、且随天象动态变化。全程只用公开数据(David Lorenz 光污染图集 + Mapzen 地形瓦片 + Unihedron 实测标定)。

静态基准 = f( 天顶暗度 , 地形感知周围辉光 )
有效SQM(t) = 基准 − Δ月光(t) − Δ银河(t) − Δ曙暮(t)  →  动态波特尔等级(t)
观测可行轴(独立) = 云(闸门) + 湿度 + 通透度
数据 16,074 条 Unihedron 实测基准图 David Lorenz 2024标定 除"降级系数"外全部就绪

0核心理念

动态光污染等级 区别于传统"静态波特尔"的三点:

  • 参照波特尔(1–9 级),但 SQM 对应数值重新校准——用真实实测值替换流传已久、约定俗成的对照数值(波特尔原文并未给出 SQM 对应)。
  • 暗端由空间决定,而非天顶读数——天顶 SQM 在 ~21.8 以上饱和,1–3 级的区分靠"周围暗区面积 + 地形遮挡"。
  • 等级随天象动态变化——月相/月位、银河、云、湿度都会临时拉低当夜的实际等级。

分两条轴输出:光污染轴(动态有效 SQM → 动态波特尔)与观测可行性轴(云 + 湿度 + 通透度,决定"今晚能不能看、看多清")。

1数据源(全部公开、免鉴权)

数据来源说明
光污染 SQM 瓦片djlorenz.github.io
/astronomy/lp2024
David Lorenz 2024;5°×5°/瓦片、600×600 网格(~0.9km);WGS-84
地形 DEMs3.amazonaws.com
/elevation-tiles-prod/terrarium
Mapzen terrarium;z12(~37m/px);WGS-84
标定实测unihedron.com
/projects/darksky/database
16,074 条全球众包实测(2005–2026),用于拟合校准

图集以二进制格网瓦片形式公开发布;对瓦片做确定性解码即可由坐标得到 SQM 值——复现下述算法即得与图集逐位一致的结果。

1.1 坐标系(中国境内必做修正)

  • 瓦片均为 WGS-84;小程序 wx.getLocation 返回 GCJ-02。中国境内坐标须先 GCJ-02 → WGS-84,偏移约 600 米
  • 对光污染 SQM 影响很小(<1 格,通常同格),但对地形遮挡影响巨大(海拔可差 100+ 米、地平线角可差 6°)。
  • 采用标准 GCJ-02 → WGS-84 反解("火星坐标系"逆变换)后再查询瓦片与地形。

2SQM 瓦片解码算法(从公开瓦片复现)

输入: lat, lon (WGS-84)
lonD  = ((lon+180) mod 360 + 360) mod 360
tileX = floor(lonD/5)+1 ;  tileY = floor((lat+65)/5)+1        # tileY∈[1,28]
文件  = binary_tile_{tileX}_{tileY}.dat.gz → gzip 解压 (360001 字节)
ix = round(120*((lonD - 5*(tileX-1)) + 1/240))               # ∈[1,600]
iy = round(120*(((lat+65) - 5*(tileY-1)) + 1/240))
first  = data[0]*128 + data[1]
latSum = Σ_{i=1}^{iy-1} signed(data[600*i + 1])              # signed: b<128?b:b-256
lonSum = Σ_{i=1}^{ix-1} signed(data[600*(iy-1) + 1 + i])
C      = clamp(first + latSum + lonSum, 0, 10000)
亮度比 = (5/195)*(exp(0.0195*C) - 1)
SQM    = 22.0 - 5*log10(1+亮度比) / log10(100)               # mag/arcsec²

向量化:预计算每瓦片 cumcol[iy]cr[r][k],则 C = first + cumcol[iy-1] + cr[iy-1][ix-1],O(1) 查询。已验证与官方存储值 max|diff|=0.0000。

3天顶 SQM ↔ 波特尔:重标定表

流传最广的 Bortle–SQM 对照其实会误导人(把 1 级标成 22.0)——它并非出自波特尔原文或任何权威定义,只是多年约定俗成的划分;真去测只有 ~21.7。下表用 6,438 条"晴朗·无月·天顶"实测重标定,给出预估实测天顶 SQM

环境地图 SQM(定级)预估实测 p25/中位/p75到光穹中位暗区占比
1极致暗夜≥21.99 +极大旷野21.61 / 21.72 / 21.86105 km100%
2典型暗夜21.89–21.99 +中旷野21.45 / 21.60 / 21.797796%
3乡村暗21.69–21.8921.40 / 21.58 / 21.734464%
4乡村/郊区20.49–21.6921.03 / 21.29 / 21.471818%
5郊区19.50–20.4919.78 / 20.25 / 20.5805%
6亮郊区18.94–19.5018.95 / 19.25 / 19.61
7城郊过渡18.38–18.9418.30 / 18.58 / 18.81
8–9城市<18.3817.84 / 18.14 / 18.26
关键:1/2/3 级实测中位数(21.72 / 21.60 / 21.58)几乎一样——天顶 SQM 分不开它们;但"到最近光穹距离"分得很干净(105 / 77 / 44 km)。

3.1 交叉点(天顶何时失效)

  • 逐级天顶标准差:B4 0.346 → B3 0.058 → B2 0.031 → B1 0.005(塌陷到零)。
  • 约 SQM 21.7(波特尔 3 起)天顶开始饱和;到 SQM 21.9(波特尔 2)被彻底钉死。
  • 物理地板 ~21.9–22.0(大气辉光/黄道光/银河);实测 >22.0 物理不可能(已剔 196 条,71% 来自单一坏站)。

4静态基准等级(某地固有,无月晴夜)

有效波特尔基准 = f( 天顶暗度 , 地形感知周围辉光 )
  · ≥4 级(地图SQM<21.7):天顶主导,直接查表 §3
  · 1–3 级(地图SQM≥21.7):天顶 + 周围辉光(含地形遮挡) 共同定级/降级

4.1 周围辉光指数(距离加权,纯用光污染瓦片)

辉光_raw = Σ_周围格  A(s) / d^2.5        # d=距离km, 采样±120km/步4km, 排除 d<3km
A(s)     = max(0, 10^(8-0.4·s) - 10^(-0.8))   # 该格"人工光超出自然地板"的线性量
辉光指数 = log10(辉光_raw + 1e-9)

距离幂 2.5 = Walker/Garstang 光传播定律;半径、幂、地板均为可调参数。抓的是整片周边辉光,不只最近一个光穹。

4.2 地形遮挡门控(关键,中国坐标先转 WGS-84)

对每方位 φ(每5°):沿 φ 采样海拔到 ~50km,算地平线角
  = atan((海拔 - 站点海拔 - 曲率修正)/距离)   曲率修正 = d²/(2·(7/6)·R地球)
  shield[φ] = 地平线角首次 >2° 的距离
辉光_地形 = Σ A(s)/d^2.5 × 可见度(φ,d)
可见度 = 0 若 d > shield[φ]  (被山挡在地平线下) ; 否则 1
验证点天顶原始辉光地形辉光被挡
Tivoli(纳米比亚沙漠)22.00−3.70−3.700%
Wiruna(澳洲)21.96−2.42−2.420%
Kendrick Park(Flagstaff旁)21.91−2.07−2.3952%
Crestone(背靠4300m山脊)21.85−2.25−2.6156%

Crestone 东半边被 Sangre de Cristo 5–16° 山脊挡住 100km 外前岭城市群 → 削 56%,实际反超 Wiruna。Kendrick Park 被圣弗朗西斯科峰(3850m)挡 52% → 从"暗袋降3级"救回 2 级。

4.3 降级阈值(暗端 1–3 级;地图SQM≥21.89)

地形辉光指数判定观测含义(波特尔定义)
< −3.01 级地平线无任何光穹
−3.0 ~ −2.22 级1–2 个远处微弱光穹
> −2.2降为 3 级光穹明显(暗袋)

阈值现由"物理模型 + 4 标杆点 + 波特尔定义 + Walker 距离"支撑,属 v0.1;待暗区实测微调(§7)。

5动态层(当夜天象修正)

有效SQM(t) = 基准SQM(地) − Δ月光(t) − Δ银河(t) − Δ曙暮(t)
动态等级(t) = 用 §3 重标定表反查 有效SQM(t)

5.1 月光曲线(已从 16k 实测拟合)

令 u = 月相% / 100 × sin(月高),天顶提亮量 ΔSQM(mag):

月高 \ 月相<30%30–70%70–100%
0–15°+0.08+0.07+0.22
15–30°+0.07+0.11+0.42
30–45°+0.20+0.21+0.69
45°++1.02+1.78
  • 光滑近似:ΔSQM ≈ 1.18 · u^0.65(生产版建议直接用上表插值,单点离散大 R²≈0.10)。
  • 月光也被地形挡:实测点1 满月提亮 2.35 mag,月被山挡后仅 1.75(少 0.6)→ 月光项也过 §4.2 地形门控(按当时月方位角)。
  • 生产版可加"月-目标角距"细化,或改用 Krisciunas-Schaefer 形式。

5.2 银河 / 曙暮光(v2)

  • 银河:银道面/银心在天顶附近时天顶变亮 ~±0.2–0.4 mag;按时间地点算天顶银道坐标。
  • 曙暮光:太阳高度 > −18° 时天空偏亮(可 >0.5 mag);判断是否在天文夜内。

6观测可行性轴(独立于光污染等级)

6.1 云(双向影响,已从实测得系数)

各环境满云相对晴天的 SQM 变化:

环境(地图SQM)少云多云满云
城市/亮(<19)−0.2−0.4−2.2
郊区(19–20.5)−0.2−0.5−3.8
乡村(20.5–21.3)−0.1−1.8
极暗(>21.3)00+0.3
关键陷阱:极暗点满云会让 SQM 升高(云挡住自然辉光),但观测全毁。云不能塞进有效SQM公式,须做独立的"可观测性闸门"(满云=不可观测,无论 SQM)。云的"提亮"只在有光污染环境里作为修正项。

6.2 湿度 + 近处路灯(亚网格局部污染)

  • 实测点2:地图 20.84,实测仅 20.20(−0.64 mag),因近处零星路灯 + 溪边高湿度散射。
  • 这些在地图(~0.9km)和辉光采样(4km)分辨率之下,抓不到。
  • 外部数据:湿度(气象 API)+ 高分辨率本地灯光(OSM 路灯 / VIIRS)。属 v2。

7标定状态与外部锚定

要标定的量能否从 16k 天顶实测拟合状态
天顶↔SQM 重标定✅ 能已完成(§3)
云影响系数✅ 能已完成(§6.1)
月光曲线✅ 能已完成(§5.1)
周围/地形→天顶残差✅ 能可做(待跑)
周围辉光→降几级❌ 不能需外部真值

为何降级系数拟合不出来:实测是天顶,波特尔是全天空;周边光穹主要影响地平线,天顶 SQM 几乎看不到 → 在"天顶固定"下数据里没有随地平线变化的量。结构性限制。

外部锚定(替代暗区实测):

  • 波特尔 1 vs 2 的定义本身就是"地平线有无光穹":1级=无远处光污染;2级=地平线 1–2 个微弱光穹;SQM 仅差 0.15–0.4 mag。→ 直接验证 §4 并给定性阈值。
  • SQM 暗端失效:官方承认 <21.5 精度下降、1–2 级读数仅近似。
  • NPS/Duriscoe 用全天空"平均天空亮度(ASL)",正因"光穹在地平线比天顶亮" → 专业界同款思路。
  • Walker 定律距离:人口 1000 → 32km、10000 → 80km 可避开;大城市光穹 150+ 英里可见。→ 校准辉光/距离阈值。

8实测验证(ground truth)

8.1 中国实测点(用户提供)

WGS-84(修正后)地图SQM实测用户评级模型
点123.820, 114.09921.2421.254级✅ 天顶主导,吻合
点223.834, 112.88620.8420.20达不到4级✅ 局部污染−0.64→5级

点1:地图准、天顶主导、4 级吻合;月被山挡少提亮 0.6mag(验证地形挡月光)。点2:地图高估 0.64 mag,揭示"亚网格局部污染"(§6.2);E 向城市对应"E 银河不可见"。两点均验证 GCJ→WGS 修正对地形关键(偏移 ~600m)。

8.2 标杆暗点

Tivoli / Hakos(纳米比亚)、Wiruna(澳洲)、Crestone / Kendrick Park(美国) —— 见 §4.2,地形门控正确分离"背山谷地"与"开阔暗袋"。

9实现路线

v1(现在可做,全公开数据)

坐标修正 → SQM 瓦片 → 重标定等级(§3) → 地形感知辉光(§4) → 月光动态层(§5.1) → 云可观测闸门(§6.1)。降级阈值用 v0.1(§4.3)。

v2

银河/曙暮项(§5.2);湿度 + 本地灯光(§6.2,需外部数据);用户实测暗区点微调降级阈值。

性能:地形分析重(每点十几张 DEM 瓦片 + 一圈地平线),必须按坐标缓存(地形不变,算一次存永久)。地形分析宜做成异步任务 + 永久缓存。

10常量与公式速查

SQM 公式    SQM = 22 − 5·log10(1 + (5/195)(e^(0.0195·C)−1)) / log10(100)
辉光        Σ max(0,10^(8−0.4s)−10^(−0.8)) / d^2.5   R=120km, step=4km, 排除 d<3km, 幂 2.5
地形门控    地平线角 > 2° 即挡(含曲率修正 d²/(2·(7/6)·R地球))
降级阈值    地形辉光指数 <−3.0→1级 / −3.0~−2.2→2级 / >−2.2→3级
月光        ΔSQM ≈ 1.18·u^0.65 , u=月相/100×sin(月高)  (或用 §5.1 表插值)
云闸门      满云=不可观测;云"提亮"仅用于有光污染环境
自然地板    SQM 上限 ~22.0,>22.0 视为坏数据剔除
坐标        中国境内 GCJ-02 → WGS-84 反解,偏移 ~600m,地形必做