Skip to content

Commit bdb5f8f

Browse files
committed
【bug】1) webmap, 对接arcgis的wmts服务以及通过iserver发布arcgis的wmts服务。
2)解决wmts服务restful方式,出图失败的问题 UT跑过,DOC正常打出。打包正常 (reivewed by chengl)
1 parent 8baf4bd commit bdb5f8f

File tree

1 file changed

+44
-19
lines changed

1 file changed

+44
-19
lines changed

src/openlayers/mapping/WebMap.js

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ const metersPerUnit = {
6060
M: 1,
6161
USFEET: 1200 / 3937
6262
};
63+
const dpiConfig = {
64+
default: 96, // 常用dpi
65+
iServerWMTS: 90.7142857142857 // iserver使用的wmts图层dpi
66+
}
6367
/**
6468
* @class ol.supermap.WebMap
6569
* @category iPortal/Online
@@ -509,8 +513,9 @@ export class WebMap extends Observable {
509513
*/
510514
addMVTBaseMap(mapInfo) {
511515
// 获取地图详细信息
512-
return this.getMBStyle(mapInfo).then(baseLayerInfo => {
516+
return this.getMBStyle(mapInfo).then(() => {
513517
// 创建图层
518+
let baseLayerInfo = mapInfo.baseLayer;
514519
return this.createMVTLayer(baseLayerInfo).then(layer => {
515520
let layerID = Util.newGuid(8);
516521
if (baseLayerInfo.name) {
@@ -565,7 +570,7 @@ export class WebMap extends Observable {
565570
if((baseLayer.visibleScales && baseLayer.visibleScales.length > 0) || (baseLayer.scales && baseLayer.scales.length >0)) {
566571
//底图有固定比例尺,就直接获取。不用view计算
567572
this.getScales(baseLayer);
568-
} else if(options.baseLayer && ['TILE', 'MAPBOXSTYLE'].includes(options.baseLayer.layerType) && extent && extent.length === 4){
573+
} else if(options.baseLayer && ['TILE', 'VECTOR_TILE'].includes(options.baseLayer.layerType) && extent && extent.length === 4){
569574
let width = extent[2] - extent[0];
570575
let height = extent[3] - extent[1];
571576
let maxResolution1 = width / 512;
@@ -1159,6 +1164,8 @@ export class WebMap extends Observable {
11591164
} else {
11601165
extent = olProj.get(that.baseProjection).getExtent()
11611166
}
1167+
const isKvp = layerInfo.requestEncoding === 'KVP';
1168+
layerInfo.tileUrl = that.getTileUrl(capabilities.OperationsMetadata.GetTile.DCP.HTTP.Get, isKvp, layerInfo.layer, layerInfo.tileMatrixSet);
11621169
//将需要的参数补上
11631170
layerInfo.dpi = 90.7;
11641171
layerInfo.extent = extent;
@@ -1167,8 +1174,6 @@ export class WebMap extends Observable {
11671174
layerInfo.name = name;
11681175
layerInfo.orginEpsgCode = layerInfo.projection;
11691176
layerInfo.overLayer = true;
1170-
//只有这种,Dataviz里面不应该选择
1171-
layerInfo.requestEncoding = 'KVP';
11721177
layerInfo.scales = scales;
11731178
layerInfo.style = "default";
11741179
layerInfo.title = name;
@@ -1185,6 +1190,30 @@ export class WebMap extends Observable {
11851190
that.errorCallback && that.errorCallback(error, 'getWmtsFaild', that.map)
11861191
});
11871192
}
1193+
/**
1194+
* @private
1195+
* @function ol.supermap.WebMap.prototype.getTileUrl
1196+
* @description 获取wmts的图层参数。
1197+
* @param {array} getTileArray - 图层信息。
1198+
* @param {boolean} isKvp - 是否是kvp方式
1199+
* @param {string} layer - 选择的图层
1200+
* @param {string} matrixSet -选择比例尺
1201+
*/
1202+
getTileUrl(getTileArray, isKvp, layer, matrixSet) {
1203+
let url, type = isKvp ? 'KVP' : 'RESTful';
1204+
getTileArray.forEach(data => {
1205+
if(data.Constraint[0].AllowedValues.Value[0].toUpperCase() === type.toUpperCase()) {
1206+
url = data.href;
1207+
}
1208+
})
1209+
if(!isKvp) {
1210+
//Restful格式
1211+
url = `${url}${layer}/default/${matrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png`;
1212+
//supermap iserver发布的restful会有一个?
1213+
url = url.replace('?', '/');
1214+
}
1215+
return url;
1216+
}
11881217

11891218
/**
11901219
* @private
@@ -1199,7 +1228,7 @@ export class WebMap extends Observable {
11991228
// 单位通过坐标系获取 (PS: 以前代码非4326 都默认是米)
12001229
let unit = olProj.get(this.baseProjection).getUnits();
12011230
return new olSource.WMTS({
1202-
url: layerInfo.url,
1231+
url: layerInfo.tileUrl || layerInfo.url,
12031232
layer: layerInfo.layer,
12041233
format: layerInfo.layerFormat,
12051234
matrixSet: layerInfo.tileMatrixSet,
@@ -1244,8 +1273,8 @@ export class WebMap extends Observable {
12441273
*/
12451274
getReslutionsFromScales(scales, dpi, unit, datumAxis) {
12461275
unit = (unit && unit.toLowerCase()) || 'degrees';
1247-
dpi = dpi > 0 ? dpi : 96;
1248-
datumAxis = datumAxis || 6378137;
1276+
dpi = dpi || dpiConfig.iServerWMTS;
1277+
datumAxis = datumAxis || 6370997;
12491278
let res = [],
12501279
matrixIds = [];
12511280
//给个默认的
@@ -3762,7 +3791,6 @@ export class WebMap extends Observable {
37623791
baseLayer = mapInfo.baseLayer,
37633792
dataSource = baseLayer.dataSource || {},
37643793
{ url, serverId } = dataSource,
3765-
layerInfo = {},
37663794
styleUrl;
37673795
styleUrl = serverId !== undefined ? `${this.server}web/datas/${serverId}/download` : url;
37683796
return FetchRequest.get(this.getRequestUrl(styleUrl), null, {
@@ -3778,24 +3806,21 @@ export class WebMap extends Observable {
37783806
let extent = styles.metadata.mapbounds;
37793807
baseLayer.extent = extent; // 这里把extent保存一下
37803808

3781-
layerInfo.projection = mapInfo.projection;
3782-
layerInfo.epsgCode = mapInfo.projection;
3783-
layerInfo.visible = baseLayer.visible;
3784-
layerInfo.name = baseLayer.name;
3785-
layerInfo.url = url;
3786-
layerInfo.sourceType = 'VECTOR_TILE';
3787-
layerInfo.layerType = 'VECTOR_TILE';
3788-
layerInfo.styles = styles;
3789-
layerInfo.extent = extent;
3790-
layerInfo.bounds = {
3809+
baseLayer.projection = mapInfo.projection;
3810+
baseLayer.epsgCode = mapInfo.projection;
3811+
baseLayer.url = url;
3812+
baseLayer.sourceType = 'VECTOR_TILE';
3813+
baseLayer.layerType = 'VECTOR_TILE';
3814+
baseLayer.styles = styles;
3815+
baseLayer.extent = extent;
3816+
baseLayer.bounds = {
37913817
bottom: extent[1],
37923818
left: extent[0],
37933819
leftBottom: { x: extent[0], y: extent[1] },
37943820
right: extent[2],
37953821
rightTop: { x: extent[2], y: extent[3] },
37963822
top: extent[3]
37973823
}
3798-
return layerInfo;
37993824
})
38003825
}
38013826

0 commit comments

Comments
 (0)