地球赤道半径 R:6378137m
地球赤道周长 C = 2π*6378137 = 40075016.68557849 m

如何计算 ScaleDenominator

DPI 96

设图片 Dpi = 96
1 英寸 = 2.54cm = 96px 那么 1 个像素的宽度就为 0.264mm 1px = 0.0254/96 m ≈ 0.264mm

实际为 0.0002645833333333333,取值精度会影响计算结果

比例尺=图上距离/实际距离
ScaleDenominator(比例分母) = 实际距离/图上距离

以 0 级为例,第 0 级使用一张瓦片(宽度为 256px)

对应的实际距离为

此时的比例分母为:

即此时的比例尺为1:591658710.91

OGC 标准(DPI 90.714)

OGC 使用的像素宽度为 0.28mm 1,Dpi 约为90.714

比例分母是相对于 0.28 mm × 0.28 mm(毫米)的“标准化渲染像素大小”定义的。 通常,真正的像素大小是未知的,0.28 mm 是 2005 年常见显示器的实际尺寸。 即使当前显示设备的像素尺寸小得多,该值仍被用作参考。 自 20 世纪 80 年代以来,Microsoft Windows 操作系统已将其默认标准显示像素每英寸(PPI)设置为 96。该值导致每像素约 0.264 mm,可能会造成一些混淆。

如果像素宽度使用 0.28mm,则图上距离为
此时的比例分母为:

一段计算比例分母的 Python 代码:

# 像素宽度为0.28mm
for i in range(0,22):
    print(f"{i} {2*math.pi*6378137/(256*pow(2,i)*0.00028)}")
# 像素宽度约为0.264(DPI 96)
for i in range(0,22):
	print(f"{i} {2*math.pi*6378137/(256*pow(2,i)*0.0254/96)}")

两种方式计算的比例分母对比:

LevelScaleDenominator(028mm)ScaleDenominator(DPI 96)
0559082264.0287178591658710.9091313
1279541132.0143589295829355.45456564
2139770566.00717944147914677.72728282
369885283.0035897273957338.86364141
434942641.5017948636978669.431820706
517471320.7508974318489334.715910353
68735660.3754487159244667.357955176
74367830.18772435754622333.678977588
82183915.09386217872311166.839488794
91091957.54693108941155583.419744397
10545978.7734655447577791.7098721985
11272989.38673277234288895.85493609926
12136494.69336638617144447.92746804963
1368247.3466831930972223.96373402482
1434123.6733415965436111.98186701241
1517061.8366707982718055.990933506204
168530.9183353991369027.995466753102
174265.4591676995684513.997733376551
182132.7295838497842256.9988666882755
191066.3647919248921128.4994333441377
20533.182395962446564.2497166720689
21266.591197981223282.12485833603444

列 1 与 OGC 标准中比例尺集一致 Web Mercator Quad TileMatrixSet definition

国标GB/T 35652-2017 瓦片地图服务中规定设备分辨率为 96 DPI,与列 2 结果一致。

See Also:

Footnotes

  1. OGC Two Dimensional Tile Matrix Set - 6.1.1 Tile matrix in a two-dimensional space.