ArcGIS_使用天地图WMTS服务

原创
2016/01/15 16:19
阅读数 1.6K

由于公司项目需要使用ArcGIS来加载天地图服务,所以收集和整理了一些ArcGIS方面的资料。自从高二后就几乎没接触过地理知识了,对GIS的了解也是近期学习才了解了一些基本概念,所以理解有偏差的地方希望大家不吝指教。

  • WMTS服务介绍

    WMTS (Web Map Tile Service) 是OGC 提出的缓存技术标准,即在服务器端缓存被切割成一定大小瓦片的地图,对客户端只提供这些预先定义好的单个瓦片的服务,将更多的数据处理操作如图层叠加等放在客户端,从而缓解 GIS 服务器端数据处理的压力,改善用户体验。

    WMTS 使用瓦片矩阵集(Tile matrix set)来表示切割后的地图,如图1所示。瓦片就是包含地理数据的矩形影像,一幅地图按一定的瓦片大小被切割成多个瓦片,形成瓦片矩阵,一个或多个瓦片矩阵即组成瓦片矩阵集。不同的瓦片矩阵具有不同的分辨率,每个瓦片矩阵由瓦片矩阵标识符(一般为瓦片矩阵的序号,分辨率最低的一层为第0层,依次向上排)进行标识。

                                              图 1 瓦片矩阵集

    TiledWMTSLayer是用于访问WMTS服务的分块缓存图层,位于命名空间com.supermap.web.mapping下。TiledWMTSLayer具有通用性,支持任何符合ogc标准的WMTS服务。TiledWMTSLayer可通过HTTP KVP(Key-Value Pair)和 REST两种方式访问WMTS服务。

  • 天地图WMTS功能参数

要想成功访问WMTS服务,需要为TiledWMTSLayer设置的参数有:WMTS服务地址(url)、要访问的图层名称(layerName)、访问方式(requestEncoding)和当前图层(layerName)的具体信息参数。

如某一切片地址为:

http://t0.tianditu.com/vec_c/wmts?service=wmts&request=gettile&version=1.0.0&layer=vec&STYLE=default&tilematrixset=c&tilematrix=3&tilerow=2&tilecol=4&format=tiles

其中http://t0.tianditu.com/vec_c/wmts?  为图层服务器地址

其他参数为:

GetCapabilities、Gettile

参数 类型及范围 说明
baseURL

http://t0.tianditu.com/服务类型/wmts

服务类型:

vec_w、cva_w、eva_w、img_w、cia_w、ter_w、cta_w、

vec_c、cva_c、eva_c、img_c、cia_c、ter_c、cta_c、

服务器地址
service

服务类型
request
gettile、GetCapabilities 请求类型
version

WMTS服务的版本,默认值为1.0.0
layer

w:Mercator

c: cgcs2000

图层名称
style
图层的风格(具体含义不知)
tilematrixset

矩阵集标识
tilematrix
int 瓦片层号
tilerow
int 瓦片行号
tilecol
int 瓦片列号
format
jpg、png、titles 请求瓦片的格式


  • ArcGIS使用天地图WMTS服务

ArcGIS来加载天地图切片主要方式为自定义CustomLayer继承自AGSTiledServiceLayer

  • 重写父类的三个readonly属性

@interface TianMapLayer : AGSTiledServiceLayer
{
    AGSTileInfo *_tileInfo; // 瓦片信息
    AGSEnvelope *_fullEnvelope; // 显示范围
    AGSSpatialReference *_spatialReference; // 参考坐标系
}
@end
@implementation TianMapLayer
- (AGSTileInfo *)tileInfo {
    return _tileInfo;
}

- (AGSEnvelope *)fullEnvelope {
    return _fullEnvelope;
}

- (AGSSpatialReference *)spatialReference {
    return _fullEnvelope.spatialReference;
}
@end


  • 初始化时设置 Layer schema信息

- (instancetype)initWithType:(TianMapType)layerType localServiceURL:(NSString *)url error:(NSError *__autoreleasing *)error {
    if (self = [super init]) {
        TianMapInfo *layerInfo = [TianMapInfo infoWithLayerType:layerType];
        self.layerInfo = layerInfo;
        
        if (url) {
            layerInfo.baseUrl = url;
        }
        _fullEnvelope = layerInfo.fullEnvelope;
        _tileInfo = layerInfo.tileInfo;
        [_tileInfo computeTileBounds:self.fullEnvelope];
        [super layerDidLoad];
    }
    return self;
}


  • 重写请求瓦片数据和取消请求的两个方法

-(void)requestTileForKey:(AGSTileKey*)key; // 需要加载某一瓦片时调用
-(void)cancelRequestForKey:(AGSTileKey*)key; // 取消加载某一瓦片时调用


1. 初始化Layer schema信息设置可参考官方Capabilities文档内容:

http://t0.tianditu.com/vec_w/wmts/?SERVICE=WMTS&REQUEST=GetCapabilities

2. 

-(void)requestTileForKey:(AGSTileKey*)key;

方法中,根据请求瓦片的位置,构建瓦片URL信息,创建操作并加入全局队列

瓦片信息下载完成后,调用

[super setTileData:op.imageData forKey:op.tileKey];

将数据显示到对应Key的位置上


Demo地址:

https://github.com/HonglingHe/ArcGIS_TianDiTuWMTS

参考链接:

1> http://blog.csdn.net/u012239760/article/details/50435255

2> http://blog.csdn.net/chaiqi/article/details/9302373


展开阅读全文
打赏
1
0 收藏
分享

作者的其它热门文章

加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部