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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy