使用SuperMap对接天地图

作者:doremi

我们在做项目时,经常需要与天地图对接,对接形式分为2种:

  1. 将公网天地图用作项目底图,在JavaScript客户端加载显示;
  2. 将自己发布的WMTS地图服务给别人用,同时需要自己的服务能和天地图公网服务无缝对接。
    现分为就这两种情况说下具体操作过程

####一、对接天地图
与通常的wmts服务一样我们需要获取能力文档中的几个参数
如,天地图提供的全球矢量地图服务http://t0.tianditu.com/vec_c/wmts(获取能力文档需要在地址后加上?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetCapabilities)
在Contents节点中获取信息
使用SuperMap对接天地图_第1张图片

通常获取
,,,,
这些值,写入iClient for JavaScript代码中:

WMTSLayer = new SuperMap.Layer.WMTS({
				name: "vec", //自定义图层名称
				url: "http://t0.tianditu.com/vec_c/wmts", //wmts服务地址
				layer: "vec",  //服务中的图层名称
				style: "default",  //风格描述
				matrixSet: "c",  //标识符矩阵集
				format: "tiles",  //瓦片格式 
				requestEncoding: "KVP",
				tileOrigin: new SuperMap.LonLat(-180, 90), //切图原点,天地图标准都是(-180,,90)
				tileSize: new SuperMap.Size(256,256) //瓦片大小
			});
map.addLayers([WMTSLayer]);  //添加图层到地图中
map.setCenter(new SuperMap.LonLat(0,0), 1);  //设置底图中心点和缩放级别

效果如下:
使用SuperMap对接天地图_第2张图片

###二、天地图叠加
在项目开发中,很多时候我们需要将业务图层与天地图无缝对接,如果我们做的是市县一级天地图,需要与国家或省级天地图一起叠加显示,就需要按照天地图的标准来发布我们自己的地图。

1、 如何使用SuperMap iServer发布天地图标准的服务
SuperMap iServer平台提供了自定义的服务接口,支持 WMTS 1.0.0 标准的服务。
在iServer的管理页面中找到【服务】-【服务接口】-【添加服务接口】,新建wmts服务接口,比例尺集选择Custom,填入天地图比例尺分母数组(填入的时候不用写中括号)
[2.958293554545656E8,1.479146777272828E8,3.69786694318207E7,1.848933471591035E7, 9244667.357955175,4622333.678977588,2311166.839488794,1155583.419744397, 577791.7098721985,288895.85493609926,144447.92746804963,72223.96373402482, 36111.98186701241,18055.990933506204,9027.995466753102,4513.997733376551, 2256.998866688275,1128.4994333267211,564.2497166633606]
DPI设置96,点击【保存】
使用SuperMap对接天地图_第3张图片

然后找到%SuperMap iServer_HOME%\webapps\iserver\WEB-INF\iserver-services-interfaces.xml服务接口配置文件,找到新建的服务接口wmts-TDT
使用SuperMap对接天地图_第4张图片

中填入自定义的瓦片矩阵集名,添加节点,填入天地图每一级别的瓦片矩阵,注意大小写。然后在服务发布的时候勾选上wmts1.0.0服务,自定义的接口服务会自动添加上。发布成功后获取能力文档

使用SuperMap对接天地图_第5张图片

2、叠加地图

//天地图分辨率数组
resolutions=[0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125, 0.02197265625, 0.010986328125, 0.0054931640625, 0.00274658203125, 0.001373291015625, 0.0006866455078125, 0.00034332275390625, 0.000171661376953125, 0.0000858306884765625, 0.00004291534423828125, 0.000021457672119140625, 0.0000107288360595703125, 0.00000536441802978515625, 0.000002682209014892578125, 0.0000013411045074462890625];
var matrixIds=[];
//矩阵标识符列表
			for(var i=0;i<20;i++){
				matrixIds[i]={identifier:i+1};			}
//全球矢量地图
			WMTSLayer = new SuperMap.Layer.WMTS({
				name: "vec",
				url: "http://t0.tianditu.com/vec_c/wmts",
				layer: "vec",
				isBaseLayer:false,
				style: "default",
				matrixSet: "c",
				format: "tiles",
				opacity: 1,
				requestEncoding: "KVP",
				resolutions: resolutions,
				matrixIds: matrixIds,
				maxExtent: new SuperMap.Bounds(-180,-90,180,90),
				tileSize: new SuperMap.Size(256,256)
			});

WmtsLayerjingjin = new SuperMap.Layer.WMTS({
				name: "京津地区地图",
				url: "http://localhost:8090/iserver/services/map-Jingjin/wmts-TDT",
				layer: "京津地区地图",
				isBaseLayer:false,
				style: "default",
				matrixSet: "Matrix_0",
				format: "image/png",
				resolutions: resolutions,
				matrixIds: matrixIds,
				opacity: 1,
				requestEncoding: "KVP"
			});
			map.addLayers([WMTSLayer, WmtsLayerjingjin]);
				map.setCenter(new SuperMap.LonLat(117,40), 5);

由于有些地方天地图的分辨率数组长度和全球矢量地图(或者底图)的分辨率数组长度可能不一致,为了保证能够无缝叠加上,叠加的地图分辨率数组应该包含于或者等于底图分辨率数组,比如此例中,底图的分辨率数组是1-19,而叠加的影像地图分辨率数组是1-20,因为地图缩放级别是以底图为准的,所以为了保证能够无缝叠加,将底图的分辨率数组也设置成了1-20.
效果如下:
使用SuperMap对接天地图_第6张图片

ps:天地图接口配置文件(http://download.csdn.net/detail/supermapsupport/9795590)138行开始,仅供参考。

你可能感兴趣的:(云GIS)