GeoServer-WMTS,TMS

GeoServer-WMTS,TMS

sf2gis@163.com

2016年8月23日创建

1方法:发布TMS

1.1 目标:TMS(Tiled Map Service),目标是发布切片。

功能是根据Level/x/y.type来获取切片。

参考:http://www.cnblogs.com/TechSnail/p/3205454.html

1.2 发布:使用GeoServer发布TMS

1.2.1首先新建切片策略Gridset,可以设置范围,级别等。

1.2.2 设置图层样式和切片策略:在图层的TileCache中设置切片的样式和策略。

注意:只有DefaultStyle的切片才是默认切片,其它样式的切片都带有GUID后缀,不能被TMS请求直接获取。

1.2.3切片:点击seed可以生成切片。

可以配置切片的线程数,生成方法,策略,级别,样式等。使用RefreshList可以查看当前的切片进度。

切片在数据目录下的gwc文件夹下。

1.3 测试TMS:Qgis加载TMS

需要使用GDAL的VRT格式,设置TMS,并以栅格方式加载。参见:GDAL_OGR\GDAL应用.docx

1.4 使用TMS

1.4.1点击左上角的logo,进入首页,点击右侧的TMS,得到所有TMS,查找需要的服务。

1.4.2 根据服务地址,添加level/x/y.format构造瓦片请求。

示例:

http://localhost:8080/geoserver/gwc/service/tms/1.0.0/testShp%3Astates@testTms@png/3/2/5.png

2方法:发布WMTS

2.1 目标:WMS中使用已经生成的缓存瓦片进行服务。

2.2 原理:WMTS1.0.0 规范。

参考:http://www.opengeospatial.org/standards/wmts/

2.3 方法:WMTS,OpenGIS Web Map Tile Service,切片网络地图服务。

2.4 发布:生成WMS的切片(参见:GeoServer.docx WMS部分),在Layer中设置TileCache为已有的切片。

2.5 测试:Rest请求Tile

WMTS1.0.0规范要求在请求中指明一些必须的key(value如果为空,则不填),例如:

service=WMTS,rquest=GetTile,version=1.0.0,图层layer=图层名,样式style=样式名,瓦片格式format=image/png或者image/jpg等,瓦片集tileMatrixSet=切片方案,瓦片名称tileMatrix=瓦片级别名称,所在行数tileRow,所在列数tileCol。

2.5.1在TileLayer的信息页面可以看到如下信息。

Layer=nurc:Img_Sample,style使用默认,可以不填。Format=image/png或者image/jpg。

 

2.5.2在GridSet页面,可以看到切图有关信息。

tileMatrixSet=Test,tileMatrix=EPSG:4326:5。

2.5.3 计算WMTS的切图行列号:左上角为(0,0),计算行列号。

从GridSet页面,可以看到左上角为(-180,90),标记位置为(-66.02,48.58)

TILECOL=((-66.02)-(-180))/ (0.02197265625*256)= 20.26,从0起算,去20。

TILEROW=|48.58-90|/(0.02197265625*256)=7.36, 从0起算,去7。

WMTS1.0.0 标准附录H(资料性)伪代码

本资料性附录提供了根据范围框获取图块和获取图块范围框坐标的伪代码。

H.1 根据BBOX计算图块行列号

以下伪代码片段可用于把具有特定CRS坐标的范围框(bBoxMinX, bBoxMinY, bBoxMaxX, bBoxMaxY)转换为图块集的行列范围。该伪代码使用了6.1中的标记方法。该伪代码中,假定bBoxMinX, bBoxMinY,bBoxMaxX, bBoxMaxY, tileMatrixMinX, tileMatrixMinY, tileMatrixMinY,tileMatrixMaxY, tileSpanX 和tileSpanY均为浮点变量(IEEE-754),它具有源于有限精度表示法的准确性问题。典型情况下,如果使用了floor()函数向下取整,这些准确性问题可能会被放大,可能返回的值为期望值±1。为了避免这一问题,本代码使用一个极小值(epsilon),在不被CRS坐标精度影响的地方加上或减去该值。

// 为补偿浮点计算的不准确性

epsilon = 1e-6

tileMinCol =floor((bBoxMinX – tileMatrixMinX) / tileSpanX + epsilon)

tileMaxCol =floor((bBoxMaxX – tileMatrixMinX) / tileSpanX – epsilon)

tileMinRow =floor((tileMatrixMaxY – bBoxMaxY) / tileSpanY + epsilon)

tileMaxRow =floor((tileMatrixMaxY – bBoxMinY) / tileSpanY – epsilon)

// 为避免请求越界图块

if (tileMinCol< 0) tileMinCol = 0

if (tileMaxCol>= matrixWidth) tileMaxCol = matrixWidth-1

if (tileMinRow< 0) tileMinRow = 0

if (tileMaxRow>= matrixHeight) tileMaxRow = matrixHeight-1

要获取所有覆盖该范围框的图块,客户端可以扫描tileMinCol到tileMaxCol,和tileMinRow到tileMaxRow的整个范围,包括界点。累计(tileMaxCol- tileMinCol+1) ×(tileMaxRow- tileMinRow+1)个图块将被获取。

H.2 根据图块行列号计算BBOX

以下伪代码可用来把一对图块下标(tileCol, tileRow)转换为该图块用CRS坐标表示的范围框。图块左上角点坐标:

leftX = tileCol *tileSpanX + tileMatrixMinX

upperY =tileMatrixMaxY – tileRow * tileSpanY

图块右下角点坐标:

rightX =(tileCol+1) * tileSpanX + tileMatrixMinX

lowerY =tileMatrixMaxY – (tileRow+1) * tileSpanY

2.5.4结果

http://localhost:8080/geoserver/gwc/service/wmts?format=image/png&styles=&tileMatrixSET=TEST&request=GetTile&layer=nurc:Img_Sample&TILEMATRIX=EPSG:4326:5&TileROW=7&TILECOL=20

 

2.6 测试:QGIS加载WMTS

获取WMTS地址:在首页上点击WMTS,从中找到ProviderName,取出其值。

 

在QGIS新建WMTS连接,从输入相应的地址,设置名称。连接后从瓦片集中找到需要服务,添加。将显示所选的WMTS瓦片。

这里要注意,需要翻转轴方向。

 

3WMTS和TMS

TMS有OSGeo(OpenSourceGeospatial Fundation)发布,WMTS有OGC(Open Geospatial Consortium)发布,2009两者签订兼容协议。WMTS的支持更广泛一下。

OSGeo的目标开源地理软件之间的规范合作。

OGC的目标是制定地理标准。

TMS只支持Restful,WMTS支持KVP、Restfu、SOAP。

参考:http://www.opengeospatial.org/pressroom/pressreleases/944

http://wenku.baidu.com/link?url=Wf3dEo4x1ZjCahGULFWUMSyDOcEwTPopxFBzPLGiv-DjB2OzuNhvRRSwkMbTyJPPcIQ0m9n19azsRSwl_1JlyrO_Z8jXNBoykTpsSjstdBG

转载自:https://blog.csdn.net/sf2gis2/article/details/52854059

You may also like...