Cesium入门(五):加载WMTS瓦片地图服务_cesium wmts_程序员猴小萌的博客-程序员宅基地

技术标签: html5  前端  地理信息  javascript  

本章介绍Cesium JS库的WebMapTileServiceImageryProvider类,并以GeoServer为例演示了在CesiumViewer控件中添加瓦片图层的方法。

主要包括以下内容:

  • WebMapTileServiceImageryProvider
  • 添加WMTS瓦片图层

1. WebMapTileServiceImageryProvider

WebMapTileServiceImageryProvider是Cesium JS库中专门用来加载WMTS 1.0.0兼容服务的一个图层类,可以提供键值对和RESTful两种访问方式。主要的构造选项参数如下:

Name

Type

Description

url

String

WMTS GetTile操作的URL

format

String

从服务器上获取的图像的MIME类别

layer

String

WMTS请求的图层名称

style

String

WMTS请求的样式名称

tileMatrixSetID

String

WMTS请求的瓦片集识别符

tileMatrixLabels

Array

WMTS请求中的瓦片矩阵标签列表,一个标签对应一个缩放等级

tileWidth

Number

瓦片的宽度,默认256

tileHeight

Number

瓦片的高度,默认256

tilingScheme

TilingScheme 

切片方案,对应切片矩阵中的切片组织方式

rectangle

Rectangle 

层覆盖的矩形范围

minimumLevel

Number

图层支持的最小级别

maximumLevel

Number

图层支持的最大级别

使用GetTile获取WMTS服务的时候,url中需要填充几个必需的参数:

{layer}:瓦片图层名称

{style}:瓦片风格

{format}:图像类别

{TileMatrixSetID}:瓦片矩阵集合名称,通常为“EPSG:4326”或“EPSG:3857”等

{TileMatrixLabels}:为瓦片矩阵名称,一般为瓦片层级的名称

{TileRow}:为瓦片行编号

{TileCol}:为瓦片行编号

如果使用键值对方式访问的话,上述参数自动组成键值对后与GetTile一起发送至WMTS服务器。如是使用RESTful方式访问的话,上太述这些参数需要出现在瓦片访问url模板中,形如

wmts/rest/{layer}/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/png

了解了WebMapTileServiceImageryProvider类的构造参数后,就可以根据WMTS服务器的要求构造一个瓦片ImageryProvider,加入到图层容器中就可以看到WMTS瓦片请求的效果了。

如果还没有设置好瓦片图层,可以参考GeoServer入门(二):WMTS图层瓦片切割与调用来设置自己的瓦片服务器。

2. 添加WMTS瓦片图层

(1)使用键值对参数方式访问WMTS瓦片

键值对访问方式是最为简单的一种访问方式,以GeoServer为例,使用键值对访问时只需要按照服务器的要求填充相应的参数即可。

  从源码中看到,默认情况下除了设置url=http://localhost:8080/geoserver/gwc/service/wmts外,还需设置layer、style、tileMatrixSetID和format共4个参数。此处的源码有一个特殊的内部参数tilematrix,也就是瓦片矩阵的名字。

 

  这个内部参数在定义了tileMatrixLabels参数的情况下等于tileMatrixLabels参数的值,也就是自定义的瓦片矩阵的名字;在没有设置tileMatrixLabels参数的情况下等于缩放级别的数字值。

之所以要在这里提出这个tileMatrixLabels参数,是因为GeoServer在缓冲切分瓦片时对每一个缩放级别的存储目录没有使用相应的数字,而使用了网格+级别的方式来命名,如“EPSG:9100913:10”表示的是使用“EPSG:9100913”网格切分的第10级瓦片。

因此,如果想要使用键值对方式访问GeoServer发布的瓦片图层,除了url之个还需要设置至少5个访问参数,主要代码如下:

    <script>
      let wmtsImageryProvider = new Cesium.WebMapTileServiceImageryProvider({
        url : 'http://localhost:8080/geoserver/gwc/service/wmts',
        layer : 'pucheng:satellite',
        style : 'raster',
        format : 'image/png',
        tileMatrixSetID : 'EPSG:900913',
        tileMatrixLabels : ['EPSG:900913:0', 'EPSG:900913:1', 'EPSG:900913:2', 'EPSG:900913:3', 'EPSG:900913:4', 'EPSG:900913:5', 'EPSG:900913:6', 'EPSG:900913:7', 'EPSG:900913:8', 'EPSG:900913:9', 'EPSG:900913:10', 'EPSG:900913:11', 'EPSG:900913:12', 'EPSG:900913:13', 'EPSG:900913:14', 'EPSG:900913:15', 'EPSG:900913:16', 'EPSG:900913:17', 'EPSG:900913:18']
      });

    viewer.imageryLayers.addImageryProvider(wmtsImageryProvider);

    viewer.camera.flyTo({
        destination : Cesium.Cartesian3.fromDegrees(109.637, 34.966, 100000),
        oridntation : {
            heading : Cesium.Math.toRadians(0.0),
            putch : Cesium.Math.toRadians(-25.0),
            roll : 0.0
        }
    });
    </script>

通过“Web开发者工具”可以查看到确实请求到了WMTS瓦片图像。

(2)使用RESTful方式访问WMTS瓦片

RESTful访问方式的访问其实是使用参数模板将一些参数替换到了URL里。根据GeoServer入门(二):WMTS图层瓦片切割与调用中提出的查GeoServer服务能力的方法,可以将url设置为以下形式:

url='/map/gwc/service/wmts/rest/pucheng:satellite/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/png'

通过查询函数源码可知,在瓦片提供者类构造之时会用style和tileMatrixSetID替换url模板中的占位符:

 

 在请求瓦片图像的requestImage函数中会用tileMatrix、tileRow和tileCol三个参数替换模板中的占位符。

 

 与键值对访问方式一样,RESTful方式还需要设置tileMatrixLabels的值,以使得在GeoServer服务器中能够找到正确的瓦片缓冲。

因此,如果想要使用RESTful方式访问GeoServer发布的瓦片图层,除了url之个还需要设置style、tileMatrixSetID、tileMatrixLabels至少3个访问参数。少了layer和format两个参数的原因是这两个参数已经在url中指定过了。主要代码如下:

    <script>
      let wmtsImageryProvider = new Cesium.WebMapTileServiceImageryProvider({
        url : 'http://localhost:8080/geoserver/gwc/service/wmts/rest/pucheng:satellite/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/png',
        style : 'raster',
        tileMatrixSetID : 'EPSG:900913',
        tileMatrixLabels : ['EPSG:900913:0', 'EPSG:900913:1', 'EPSG:900913:2', 'EPSG:900913:3', 'EPSG:900913:4', 'EPSG:900913:5', 'EPSG:900913:6', 'EPSG:900913:7', 'EPSG:900913:8', 'EPSG:900913:9', 'EPSG:900913:10', 'EPSG:900913:11', 'EPSG:900913:12', 'EPSG:900913:13', 'EPSG:900913:14', 'EPSG:900913:15', 'EPSG:900913:16', 'EPSG:900913:17', 'EPSG:900913:18']
      });

    viewer.imageryLayers.addImageryProvider(wmtsImageryProvider);

    viewer.camera.flyTo({
        destination : Cesium.Cartesian3.fromDegrees(109.637, 34.966, 100000),
        oridntation : {
            heading : Cesium.Math.toRadians(0.0),
            putch : Cesium.Math.toRadians(-25.0),
            roll : 0.0
        }
    });
    </script>

(3)GeoServer WMTS服务专用RESTful访问方式

仔细分析GeoServer服务器中GeoWebCache瓦片缓冲文件夹的命名方式,组合内部变量tileMatrix的默认值,可以通过修改url模板的方式构造出符合GeoServer WMTS要求的请求字符串,将url设置为以下形式:

url='/map/gwc/service/wmts/rest/pucheng:satellite/{style}/{TileMatrixSet}/{TileMatrixSet}:{TileMatrix}/{TileRow}/{TileCol}?format=image/png'

在这个url中,只是将{TileMatrix}替换成了{TileMatrixSet}:{TileMatrix},但是却可以再也不用重新定义冗长的tileMatrixLabels了,精减后的主要代码如下:

    <script>
      let wmtsImageryProvider = new Cesium.WebMapTileServiceImageryProvider({
        url : 'http://localhost:8080/geoserver/gwc/service/wmts/rest/pucheng:satellite/{style}/{TileMatrixSet}/{TileMatrixSet}:{TileMatrix}/{TileRow}/{TileCol}?format=image/png',
        style : 'raster',
        tileMatrixSetID : 'EPSG:900913'
      });

    viewer.imageryLayers.addImageryProvider(wmtsImageryProvider);

    viewer.camera.flyTo({
        destination : Cesium.Cartesian3.fromDegrees(109.637, 34.966, 100000),
        oridntation : {
            heading : Cesium.Math.toRadians(0.0),
            putch : Cesium.Math.toRadians(-25.0),
            roll : 0.0
        }
    });
    </script>

精减后的代码除了必须设置的url之外,就只剩下了style和tileMatrixSetID 这2个参数了,是不是一下子感觉清静了很多。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qlcheng2008/article/details/122263455

智能推荐

七牛云--java获取域空间文件列表-程序员宅基地

首先,注册七牛云,获取密钥,个人中心--&gt;密钥管理 当然,我们可以在对象存储中jia建立存储空间,在内容管理中上传图片和下载图片。在七牛上的每一张图片都有自己单一的链接,但是随着业务的扩展,需要访问到一个域下面的所有图片,图片的具体名称并不确定,或者以后会有变动。所以需要实现获取空间文件列表。看了七牛云的java SDK文档实现过程如下://构造一个带指定Zo...

软件实施工程师职业规划_软件实施实习生职业规划-程序员宅基地

1、一定的技术基础.身为软件实施顾问,你不能不了解你的产品,当然你可以了解得粗略,不必象技术工程师那样精通,你要能够回答客户提出的大部分问题,需要你掌握的知识非常综合、全面——强调的是广度而不是深度,当然,如果你的深度够好,那么会更加有利.如果你的深度不够,经常回答不上客户的问题,不要紧,关键是你要留一个缓冲余地,你要知道,你应该从哪里获得帮助和支持.优秀的实施顾问,应该懂得如何调度资源.以下..._软件实施实习生职业规划

traverse+php,初探PHP-Parser和PHP代码混淆_阿尔法老师的博客-程序员宅基地

初探PHP-ParserPHP-Parser是nikic用PHP编写的PHP5.2到PHP7.4解析器,其目的是简化静态代码分析和操作。Parsing创建一个解析器实例:use PhpParser\ParserFactory;$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);ParserFactory接收以下几..._php-parser

android 自定义键盘的简单实现和遇到的问题_android keyboardview_李堇的博客-程序员宅基地

android自定义键盘的实现和遇到的一些问题_android keyboardview

时间复杂度详解_小码吃趴菜的博客-程序员宅基地

详细介绍时间复杂度与空间复杂度_时间复杂度

随便推点

自动化测试Linux和fio,Linux IO性能测试工具: FIO之初见-程序员宅基地

0. 前言对于存储系统,人们最为关注“三高”问题: 高性能,高可扩展性,高可靠性。尝尝会听到某司宣称自己的存储系统能够达到6个9(99.9999%),其指存储系统十分可靠,在一年中最多出现十几秒的宕机时间; 而对于高可扩展性,主要是指系统对存储设备(硬盘,闪存)数量增加的支持。而高性能则是指IOPS高,响应延迟低。说远了,我们回到主题,为了测试系统IO性能的高低,在实际开发中,需要使用IO性能测试..._fio 多进程

Java定义三角形类,输入三边的长度,计算三角形的面积。采用异常处理判断三边是否能构成一个三角形,如果不能抛出异常_java定义三角形三边_Ricky leo的博客-程序员宅基地

package test;import java.util.Scanner;class IllegalArgumentException extends Exception{ public IllegalArgumentException() { }}public class work02 { public static void main(String args[]) { double a,b,c,p,s; Scanner scanner=new Scanner(Sy_java定义三角形三边

单机部署基于sentinel的redis集群-程序员宅基地

#cd /usr/local/# tar -zxvf redis-4.0.11.tar.gz # mkdir redis #cd redis-4.0.11 # make PREFIX=/usr/local/redis install #cd ...

CaffeOnSpark 安装笔记 可以正常运行-程序员宅基地

CaffeOnSpark 安装环境 平台:Ubuntu 16.04对于CaffeOnSpark的安装,默认的前提是已经在机器上安装CUDA, Hadoop 和 Spark 集群,并且它们可用的。关于Hadoop和Spark的版本,官方文档有严格定义: Hadoop 2.6 Spark 1.6 或者是: Hadoop 2.7 Spark 2.0

Redis安装和常见问题解决-程序员宅基地

安装redis 安装指令:yum install epel-release --下载fedora的epel仓库yum install redis -- 安装redis数据库开启和关闭服务redis 其他常用指令:redis-server /etc/redis.conf --开启redis服务redis-cli ...

7.25号-程序员宅基地

又过了一天,平平淡淡,上午看了看关于RSS的东西,晚上才知道有个CSS的东西,都搞混了,惭愧啊,晚上看了个关于CS /BS讨论的帖子,张了很多见识,什么时候我也能成为那样的高手啊!!