WMTS中TileMatrix與ScaleDenominator淺析
正文
其實(shí)有時(shí)間琢磨規(guī)范文檔的話,倒也不必費(fèi)時(shí)間自己琢磨,這篇算是一些口水話心得。
規(guī)范文檔指路:OGC Standard - Two Demensional Tile Matrix Set #6. TileMatrixSet,對,并不是 WMTS 規(guī)范,而是更精確的 2D瓦片陣列集規(guī)范,它獨(dú)立于 WMTS 規(guī)范而發(fā)布。
1. WMTS 中的 TileMatrix 是什么
在我之前的文章《OGC WebGIS 常用服務(wù)標(biāo)準(zhǔn)速查》中有提過,這個其實(shí)就是一個“陣列”,形象的比喻就是一個“棋盤”,一張網(wǎng)格:

因?yàn)槲覀儗W(xué)習(xí)線性代數(shù)的時(shí)候矩陣就和這玩意兒長得像,所以就被稱作“瓦片陣列”,即 TileMatrix。而基于同一個坐標(biāo)系的多個瓦片陣列,就被稱作“瓦片陣列集”(或者類似的名字,你開心就好),即 TileMatrixSet。
打開 WMTS 的 XML 能力文檔,看看 EPSG:4326 坐標(biāo)系的第 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:這個瓦片陣列的 IDTopLeftCorner:這個瓦片的左上角位置,此處是經(jīng)緯度表達(dá)(基于EPSG:4326坐標(biāo)系)TileWidth、TileHeight:瓦片的像素長寬,即 256 × 256 像素MatrixWidth、MatrixHeight:瓦片陣列的長寬;不理解的可以想象一下“矩陣”的長寬,代表這一級瓦片橫向縱向跨度有多少個瓦片
最后一個沒說的 ScaleDenominator,翻譯過來是 比例分母,也是本文重點(diǎn)要介紹的東西。
2. ScaleDenominator 是什么
在回答這個問題之前,我先提 2 個問題:
- 在早些年最具代表性的 Windows 系統(tǒng)使用的 96 PPI 像素的屏幕上,1 像素的尺寸是多少?
- 一個瓦片中,1 像素表示多大經(jīng)緯度或現(xiàn)實(shí)尺寸?
2.1. 一個像素的顯示器物理尺寸是多大
回答第 1 個問題很簡單,網(wǎng)上一搜大概就有,或者拿 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 毫米。
隨著技術(shù)進(jìn)步,現(xiàn)在的顯示器面板已經(jīng)把這個值進(jìn)一步提高了,27 英寸的 4K 顯示器都很常見,物理像素尺寸進(jìn)一步縮小,而 Windows 操作系統(tǒng)為了顯示效果,會在高分辨率屏幕中使用縮放率來提高平滑度 —— 比如,我的 4K 分辨率 27 寸顯示器就使用了 200% 縮放率,也即 4 個像素(長寬各縮放 200%,即 2 個像素 × 2 個像素)作為原來的 1 個像素顯示,這樣 3840 × 2160 的物理分辨率就會模擬成 1920 × 1080。
2.2. 瓦片圖片的一個像素是多大
看第 2 個問題。
瓦片是有等級的,想知道瓦片 1 像素的尺寸,那么就勢必知道兩個因子:
- 這瓦片長寬多少像素
- 這瓦片占的總尺寸(長寬)
以 GeoServer 內(nèi)置的 EPSG:4326 瓦片陣列集定義來看,第 0 級瓦片陣列有 1 行 2 列(MatrixWidth 和 MatrixHeight),那么一個瓦片的東西跨度應(yīng)為地球周長的一半:

查資料得知地球赤道周長的值約為 400750170米,此 0 級瓦片東西向有 256 個像素,容易得知,每個像素為 (400750170 ÷ 2) ÷ 256 = 782715.17578125 米。
現(xiàn)在有了上述的計(jì)算例子,就可以足夠解釋什么是 ScaleDenominator 了:

這個值與 GeoServer 中第 0 級瓦片陣列的 ScaleDenominator 值 279541132.0143589 僅差距不到 10,從誤差角度看可以認(rèn)為相等(地球赤道的大小可能采用的數(shù)值略不一樣)。
從公式來看,這個比例就像是在說:0.00028 米(0.28 mm)的屏幕像素尺寸,實(shí)際上是地球表面的 782715.17578125 米,所以這個比例分母也可以這么理解:

說人話,這個比例分母的含義就是 “地表距離和屏幕距離的比例尺”。
2.3. 為什么是 0.28 毫米
有人會疑問你這個 0.00028 米(0.28 毫米) 是怎么來的?在文章開頭引用的規(guī)范中,規(guī)定了一個 標(biāo)準(zhǔn)渲染像素尺寸 的東西,即 0.28mm 作為一個像素的長寬。
而在 2.1 小節(jié)的實(shí)際計(jì)算中,傳統(tǒng)高清顯示器的像素尺寸也就差不多是這個數(shù)值,考慮到標(biāo)準(zhǔn)制定的時(shí)間和硬件背景,使用 0.28 毫米也不足為奇了。
以上就是WMTS中TileMatrix與ScaleDenominator淺析的詳細(xì)內(nèi)容,更多關(guān)于WMTS TileMatrix ScaleDenominator的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
擴(kuò)展logback將日志輸出到Kafka實(shí)例詳解
logback是一個功能強(qiáng)大的Java日志框架,它是log4j的繼任者,提供了豐富的功能和配置選項(xiàng),本文將介紹如何通過擴(kuò)展logback,將日志輸出到Kafka實(shí)例,感興趣的朋友一起看看吧2024-12-12
使用Spring-Retry解決Spring Boot應(yīng)用程序中的重試問題
重試的使用場景比較多,比如調(diào)用遠(yuǎn)程服務(wù)時(shí),由于網(wǎng)絡(luò)或者服務(wù)端響應(yīng)慢導(dǎo)致調(diào)用超時(shí),此時(shí)可以多重試幾次。用定時(shí)任務(wù)也可以實(shí)現(xiàn)重試的效果,但比較麻煩,用Spring Retry的話一個注解搞定所有,感興趣的可以了解一下2023-04-04
Java面試題沖刺第六天--網(wǎng)絡(luò)編程1
這篇文章主要為大家分享了最有價(jià)值的三道網(wǎng)絡(luò)編程面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下2021-07-07
IDEA中如何查找jar包之間的依賴關(guān)系并忽略依賴的某個包
這篇文章主要介紹了IDEA中如何查找jar包之間的依賴關(guān)系并忽略依賴的某個包?本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Eclipse安裝Aptana插件(注意對應(yīng)版本問題)
這篇文章主要為大家詳細(xì)介紹了Eclipse安裝Aptana插件的相關(guān)資料,特別注意對應(yīng)版本問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
java基礎(chǔ)之Integer與int類型輸出示例解析
這篇文章主要為大家介紹了java基礎(chǔ)之Integer與int類型輸出示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
SpringBoot中如何對actuator進(jìn)行關(guān)閉
這篇文章主要介紹了SpringBoot中如何對actuator進(jìn)行關(guān)閉問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03

