【问题原因】 iClient for MapboxGL 本身加载 SuperMap iServer 发布的 WMTS 服务时,是从全球范围左上角开始计算的,所以无论 WMTS 服务数据范围是多大,第一层都会被放大到全球范围。
【解决方案】 在生成栅格瓦片的时候使用全球剖分方式,发布 WMTS 服务后,需要在 iClient for MapboxGL 中捕获瓦片请求头,调整请求头中 z 值,需减去栅格瓦片和全球范围的层级差,示例代码如下:
// 捕获瓦片请求头并调整 z 值
transformRequest: function (url,resourceType) {
let skey = 'TileMatrix=';
let tempZ = 7;
let ss = url;
if (ss.indexOf(skey) != -1){
let t = ss.split(skey);
let i = t[1].indexOf('&');
let tUrl = t[0] + skey + (parseInt(t[1].substr(0, i)) - tempZ - 1) + t[1].substr(i);
return {
url: tUrl
};
} else {
return {
url: url
};
}
}