WMTS中TileMatrix与ScaleDenominator浅析

 更新时间:2023年03月05日 11:26:10   作者:岭南灯火  
这篇文章主要为大家介绍了WMTS中TileMatrix与ScaleDenominator浅析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

其实有时间琢磨规范文档的话,倒也不必费时间自己琢磨,这篇算是一些口水话心得。

规范文档指路:OGC Standard - Two Demensional Tile Matrix Set #6. TileMatrixSet,对,并不是 WMTS 规范,而是更精确的 2D瓦片阵列集规范,它独立于 WMTS 规范而发布。

1. WMTS 中的 TileMatrix 是什么

在我之前的文章《OGC WebGIS 常用服务标准速查》中有提过,这个其实就是一个“阵列”,形象的比喻就是一个“棋盘”,一张网格:

因为我们学习线性代数的时候矩阵就和这玩意儿长得像,所以就被称作“瓦片阵列”,即 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),那么一个瓦片的东西跨度应为地球周长的一半:

查资料得知地球赤道周长的值约为 400750170米,此 0 级瓦片东西向有 256 个像素,容易得知,每个像素为 (400750170 ÷ 2) ÷ 256 = 782715.17578125 米

现在有了上述的计算例子,就可以足够解释什么是 ScaleDenominator 了:

这个值与 GeoServer 中第 0 级瓦片阵列的 ScaleDenominator279541132.0143589 仅差距不到 10,从误差角度看可以认为相等(地球赤道的大小可能采用的数值略不一样)。

从公式来看,这个比例就像是在说:0.00028 米(0.28 mm)的屏幕像素尺寸,实际上是地球表面的 782715.17578125 米,所以这个比例分母也可以这么理解:

说人话,这个比例分母的含义就是 “地表距离和屏幕距离的比例尺”。

2.3. 为什么是 0.28 毫米

有人会疑问你这个 0.00028 米(0.28 毫米) 是怎么来的?在文章开头引用的规范中,规定了一个 标准渲染像素尺寸 的东西,即 0.28mm 作为一个像素的长宽。

而在 2.1 小节的实际计算中,传统高清显示器的像素尺寸也就差不多是这个数值,考虑到标准制定的时间和硬件背景,使用 0.28 毫米也不足为奇了。

以上就是WMTS中TileMatrix与ScaleDenominator浅析的详细内容,更多关于WMTS TileMatrix ScaleDenominator的资料请关注脚本之家其它相关文章!

相关文章

  • 总结Java常用到的六个加密技术和代码

    总结Java常用到的六个加密技术和代码

    大家要记住现代密码学最重要的原则柯克霍夫原则:数据的安全基于密钥而不是算法的保密。也就是说即使密码系统的任何细节已为人悉知,只要密匙未洩漏,它也应是安全的。这篇文章给大家介绍了6个常用的加密技术和代码。
    2016-07-07
  • 扩展logback将日志输出到Kafka实例详解

    扩展logback将日志输出到Kafka实例详解

    logback是一个功能强大的Java日志框架,它是log4j的继任者,提供了丰富的功能和配置选项,本文将介绍如何通过扩展logback,将日志输出到Kafka实例,感兴趣的朋友一起看看吧
    2024-12-12
  • 使用Spring-Retry解决Spring Boot应用程序中的重试问题

    使用Spring-Retry解决Spring Boot应用程序中的重试问题

    重试的使用场景比较多,比如调用远程服务时,由于网络或者服务端响应慢导致调用超时,此时可以多重试几次。用定时任务也可以实现重试的效果,但比较麻烦,用Spring Retry的话一个注解搞定所有,感兴趣的可以了解一下
    2023-04-04
  • Java面试题冲刺第六天--网络编程1

    Java面试题冲刺第六天--网络编程1

    这篇文章主要为大家分享了最有价值的三道网络编程面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • IDEA中如何查找jar包之间的依赖关系并忽略依赖的某个包

    IDEA中如何查找jar包之间的依赖关系并忽略依赖的某个包

    这篇文章主要介绍了IDEA中如何查找jar包之间的依赖关系并忽略依赖的某个包?本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Eclipse安装Aptana插件(注意对应版本问题)

    Eclipse安装Aptana插件(注意对应版本问题)

    这篇文章主要为大家详细介绍了Eclipse安装Aptana插件的相关资料,特别注意对应版本问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Java多线程yield心得分享

    Java多线程yield心得分享

    前几天复习了一下多线程,发现有许多网上讲的都很抽象,所以,自己把网上的一些案例总结了一下
    2013-12-12
  • 详解Zookeeper基础知识

    详解Zookeeper基础知识

    本文主要讲解了Zookeeper的基础知识,ZooKeeper提供了一个通用协调模式实现方法的开源共享库,使程序员免于写这类通用的协议。关于Zookeeper更多相关知识,感兴趣的小伙伴参考一下这篇文章
    2021-09-09
  • java基础之Integer与int类型输出示例解析

    java基础之Integer与int类型输出示例解析

    这篇文章主要为大家介绍了java基础之Integer与int类型输出示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • SpringBoot中如何对actuator进行关闭

    SpringBoot中如何对actuator进行关闭

    这篇文章主要介绍了SpringBoot中如何对actuator进行关闭问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论