談談 WMTS 中的 TileMatrix 與 ScaleDenominator


其實有時間琢磨規範文檔的話,倒也不必費時間自己琢磨,這篇算是一些口水話心得。

規範文檔指路:OGC Standard - Two Demensional Tile Matrix Set #6. TileMatrixSet,對,並不是 WMTS 規範,而是更精確的 2D瓦片陣列集規範,它獨立於 WMTS 規範而發佈。

1. WMTS 中的 TileMatrix 是什麼

在我之前的文章《OGC WebGIS 常用服務標準速查》中有提過,這個其實就是一個“陣列”,形象的比喻就是一個“棋盤”,一張網格:

image

因爲我們學習線性代數的時候矩陣就和這玩意兒長得像,所以就被稱作“瓦片陣列”,即 TileMatrix。而基於同一個座標系的多個瓦片陣列,就被稱作“瓦片陣列集”(或者類似的名字,你開心就好),即 TileMatrixSet

打開 WMTS 的 XML 能力文檔,看看 EPSG:4326 座標系的第 1 級瓦片陣列定義:

<TileMatrix>
  <ows:Identifier>EPSG:4326:1</ows:Identifier>
  <ScaleDenominator>1.3977056600717944E8</ScaleDenominator>
  <TopLeftCorner>90.0 -180.0</TopLeftCorner>
  <TileWidth>256</TileWidth>
  <TileHeight>256</TileHeight>
  <MatrixWidth>4</MatrixWidth>
  <MatrixHeight>2</MatrixHeight>
</TileMatrix>

這些屬性一眼看過去很容易知道其含義:

  • Identifier:這個瓦片陣列的 ID

  • TopLeftCorner:這個瓦片的左上角位置,此處是經緯度表達(基於 EPSG:4326 座標系)

  • TileWidthTileHeight:瓦片的像素長寬,即 256 × 256 像素

  • MatrixWidthMatrixHeight:瓦片陣列的長寬;不理解的可以想象一下“矩陣”的長寬,代表這一級瓦片橫向縱向跨度有多少個瓦片

最後一個沒說的 ScaleDenominator,翻譯過來是 比例分母,也是本文重點要介紹的東西。

2. ScaleDenominator 是什麼

在回答這個問題之前,我先提 2 個問題:

  • 在早些年最具代表性的 Windows 系統使用的 96 PPI 像素的屏幕上,1 像素的尺寸是多少?

  • 一個瓦片中,1 像素表示多大經緯度或現實尺寸?

2.1. 一個像素的顯示器物理尺寸是多大

回答第 1 個問題很簡單,網上一搜大概就有,或者拿 23.8 英寸的 1080p 顯示器大致算一下也行:

  • 23.8 英寸 1080p 顯示器對角線約 2202.9 個像素

  • 23.8 英寸約爲 604.52 毫米

所以 1 個像素的長寬大概是 604.52 / 2202.9 ≈ 0.274 毫米。

同理,算出 27 寸 4k(3840 × 2160)顯示器的像素尺寸約爲 0.156 毫米。

隨着技術進步,現在的顯示器面板已經把這個值進一步提高了,27 英寸的 4K 顯示器都很常見,物理像素尺寸進一步縮小,而 Windows 操作系統爲了顯示效果,會在高分辨率屏幕中使用縮放率來提高平滑度 —— 比如,我的 4K 分辨率 27 寸顯示器就使用了 200% 縮放率,也即 4 個像素(長寬各縮放 200%,即 2 個像素 × 2 個像素)作爲原來的 1 個像素顯示,這樣 3840 × 2160 的物理分辨率就會模擬成 1920 × 1080。

2.2. 瓦片圖片的一個像素是多大

看第 2 個問題。

瓦片是有等級的,想知道瓦片 1 像素的尺寸,那麼就勢必知道兩個因子:

  • 這瓦片長寬多少像素

  • 這瓦片佔的總尺寸(長寬)

以 GeoServer 內置的 EPSG:4326 瓦片陣列集定義來看,第 0 級瓦片陣列有 1 行 2 列(MatrixWidthMatrixHeight),那麼一個瓦片的東西跨度應爲地球周長的一半:

image

查資料得知地球赤道周長的值約爲 400750170米,此 0 級瓦片東西向有 256 個像素,容易得知,每個像素爲 (400750170 ÷ 2) ÷ 256 = 782715.17578125 米

現在有了上述的計算例子,就可以足夠解釋什麼是 ScaleDenominator 了:

\[ScaleDenominator_{0} = \frac{782715.17578125}{0.00028} = 2795411342.075892857 \]

這個值與 GeoServer 中第 0 級瓦片陣列的 ScaleDenominator279541132.0143589 僅差距不到 10,從誤差角度看可以認爲相等(地球赤道的大小可能採用的數值略不一樣)。

從公式來看,這個比例就像是在說:0.00028 米(0.28 mm)的屏幕像素尺寸,實際上是地球表面的 782715.17578125 米,所以這個比例分母也可以這麼理解:

\[\frac{地表實際尺寸}{ScaleDenominator}=像素尺寸 \]

說人話,這個比例分母的含義就是 “地表距離和屏幕距離的比例尺”。

2.3. 爲什麼是 0.28 毫米

有人會疑問你這個 0.00028 米(0.28 毫米) 是怎麼來的?在文章開頭引用的規範中,規定了一個 標準渲染像素尺寸 的東西,即 0.28mm 作爲一個像素的長寬。

而在 2.1 小節的實際計算中,傳統高清顯示器的像素尺寸也就差不多是這個數值,考慮到標準制定的時間和硬件背景,使用 0.28 毫米也不足爲奇了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章