技术标签: html5 前端 地理信息 javascript
本章介绍Cesium JS库的WebMapTileServiceImageryProvider类,并以GeoServer为例演示了在CesiumViewer控件中添加瓦片图层的方法。
主要包括以下内容:
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图层瓦片切割与调用来设置自己的瓦片服务器。
键值对访问方式是最为简单的一种访问方式,以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瓦片图像。
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>
仔细分析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个参数了,是不是一下子感觉清静了很多。
首先,注册七牛云,获取密钥,个人中心-->密钥管理 当然,我们可以在对象存储中jia建立存储空间,在内容管理中上传图片和下载图片。在七牛上的每一张图片都有自己单一的链接,但是随着业务的扩展,需要访问到一个域下面的所有图片,图片的具体名称并不确定,或者以后会有变动。所以需要实现获取空间文件列表。看了七牛云的java SDK文档实现过程如下://构造一个带指定Zo...
1、一定的技术基础.身为软件实施顾问,你不能不了解你的产品,当然你可以了解得粗略,不必象技术工程师那样精通,你要能够回答客户提出的大部分问题,需要你掌握的知识非常综合、全面——强调的是广度而不是深度,当然,如果你的深度够好,那么会更加有利.如果你的深度不够,经常回答不上客户的问题,不要紧,关键是你要留一个缓冲余地,你要知道,你应该从哪里获得帮助和支持.优秀的实施顾问,应该懂得如何调度资源.以下..._软件实施实习生职业规划
初探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
看了一下_yaml-cpp decode
详细介绍时间复杂度与空间复杂度_时间复杂度
0. 前言对于存储系统,人们最为关注“三高”问题: 高性能,高可扩展性,高可靠性。尝尝会听到某司宣称自己的存储系统能够达到6个9(99.9999%),其指存储系统十分可靠,在一年中最多出现十几秒的宕机时间; 而对于高可扩展性,主要是指系统对存储设备(硬盘,闪存)数量增加的支持。而高性能则是指IOPS高,响应延迟低。说远了,我们回到主题,为了测试系统IO性能的高低,在实际开发中,需要使用IO性能测试..._fio 多进程
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定义三角形三边
#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 安装环境 平台:Ubuntu 16.04对于CaffeOnSpark的安装,默认的前提是已经在机器上安装CUDA, Hadoop 和 Spark 集群,并且它们可用的。关于Hadoop和Spark的版本,官方文档有严格定义: Hadoop 2.6 Spark 1.6 或者是: Hadoop 2.7 Spark 2.0
安装redis 安装指令:yum install epel-release --下载fedora的epel仓库yum install redis -- 安装redis数据库开启和关闭服务redis 其他常用指令:redis-server /etc/redis.conf --开启redis服务redis-cli ...
又过了一天,平平淡淡,上午看了看关于RSS的东西,晚上才知道有个CSS的东西,都搞混了,惭愧啊,晚上看了个关于CS /BS讨论的帖子,张了很多见识,什么时候我也能成为那样的高手啊!!