使用SuperMap對接天地圖


我們在做項目時,經常需要與天地圖對接,對接形式分為2種:
1. 將公網天地圖用作項目底圖,在JavaScript客戶端加載顯示;
2. 將自己發布的WMTS地圖服務給別人用,同時需要自己的服務能和天地圖公網服務無縫對接。
現分為就這兩種情況說下具體操作過程

一、對接天地圖

與通常的wmts服務一樣我們需要獲取能力文檔中的幾個參數
如,天地圖提供的全球矢量地圖服務http://t0.tianditu.com/vec_c/wmts(獲取能力文檔需要在地址后加上?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetCapabilities)
在Contents節點中獲取信息

 


通常獲取
<ows:Title></ows:Title>,<ows:BoundingBox></ows:BoundingBox>,<Style><ows:Identifier></ows:Identifier></Style>,<Format></Format>,<TileMatrixSet></TileMatrixSet>
這些值,寫入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); //設置底圖中心點和縮放級別

效果如下:

 


二、天地圖疊加

在項目開發中,很多時候我們需要將業務圖層與天地圖無縫對接,如果我們做的是市縣一級天地圖,需要與國家或省級天地圖一起疊加顯示,就需要按照天地圖的標准來發布我們自己的地圖。

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 iServer_HOME%\webapps\iserver\WEB-INF\iserver-services-interfaces.xml服務接口配置文件,找到新建的服務接口wmts-TDT

 


在<tileMatrixSets>中填入自定義的瓦片矩陣集名,添加<matrixList>節點,填入天地圖每一級別的瓦片矩陣,注意大小寫。然后在服務發布的時候勾選上wmts1.0.0服務,自定義的接口服務會自動添加上。發布成功后獲取能力文檔

 

 

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.
效果如下:

 


ps:天地圖接口配置文件(http://download.csdn.net/detail/supermapsupport/9795590)138行
---------------------
作者:SuperMap技術控
來源:CSDN
原文:https://blog.csdn.net/supermapsupport/article/details/66974049
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM