Skip to content

Commit 225be4e

Browse files
[bug] 解决ISVJ-11428 【12i】iPortal dv 添加wmts做底图,在数据上图中更换底图不成功的问题,iclient涉及分享页面 ut暂时没补充,ol这边ut原本就报错
(review by zq)
1 parent 6072192 commit 225be4e

File tree

3 files changed

+51
-15
lines changed

3 files changed

+51
-15
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@
149149
"@turf/turf": "7.2.0",
150150
"canvg": "^4.0.3",
151151
"echarts": "5.5.0",
152-
"fast-xml-parser": "^4.2.7",
152+
"fast-xml-parser": "5.3.5",
153153
"fetch-ie8": "1.5.0",
154154
"fetch-jsonp": "1.1.3",
155155
"flatgeobuf": "3.31.1",

src/common/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"@turf/meta": "^7.2.0",
2222
"canvg": "^4.0.3",
2323
"echarts": "5.5.0",
24-
"fast-xml-parser": "^4.2.7",
24+
"fast-xml-parser": "5.3.5",
2525
"fetch-ie8": "1.5.0",
2626
"fetch-jsonp": "1.1.3",
2727
"flatgeobuf": "3.31.1",

src/openlayers/mapping/WebMap.js

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import MouseWheelZoom from 'ol/interaction/MouseWheelZoom';
2929
import * as olProj from 'ol/proj';
3030
import * as olProj4 from 'ol/proj/proj4';
3131
import * as olLayer from 'ol/layer';
32-
import WMTSCapabilities from 'ol/format/WMTSCapabilities';
3332
import WMSCapabilities from 'ol/format/WMSCapabilities';
3433
import TileGrid from 'ol/tilegrid/TileGrid';
3534
import * as olTilegrid from 'ol/tilegrid';
@@ -49,6 +48,7 @@ import Text from 'ol/style/Text';
4948
import Collection from 'ol/Collection';
5049
import { containsCoordinate, getCenter } from 'ol/extent';
5150
import difference from 'lodash.difference';
51+
import { XMLParser } from 'fast-xml-parser';
5252

5353
window.proj4 = proj4;
5454
window.Proj4js = proj4;
@@ -70,6 +70,19 @@ const dpiConfig = {
7070
default: 96, // 常用dpi
7171
iServerWMTS: 90.7142857142857 // iserver使用的wmts图层dpi
7272
};
73+
// 以下路径统一转为array格式(fast-xml-parser插件在返回值数量为1时候返回obj,返回数量大于1时返回array)
74+
const WMTS_ARRAY_NODE_PATHS = [
75+
'Capabilities.Contents.Layer',
76+
'Capabilities.Contents.Layer.Format',
77+
'Capabilities.Contents.Layer.Style',
78+
'Capabilities.Contents.Layer.TileMatrixSetLink',
79+
'Capabilities.Contents.TileMatrixSet',
80+
'Capabilities.Contents.TileMatrixSet.TileMatrix',
81+
'Capabilities.OperationsMetadata.Operation',
82+
'Capabilities.OperationsMetadata.Operation.DCP.HTTP.Get',
83+
'Capabilities.OperationsMetadata.Operation.DCP.HTTP.Get.Constraint',
84+
'Capabilities.OperationsMetadata.Operation.DCP.HTTP.Get.Constraint.AllowedValues.Value'
85+
];
7386
/**
7487
* @class WebMap
7588
* @category iPortal/Online Resources Map
@@ -667,9 +680,15 @@ export class WebMap extends Observable {
667680
* @param {Object} capabilitiesText - wmts信息
668681
*/
669682
getWMTSScales(identifier, capabilitiesText) {
670-
const format = new WMTSCapabilities();
671-
let capabilities = format.read(capabilitiesText);
672-
683+
const parser = new XMLParser({
684+
attributeNamePrefix: '',
685+
ignoreAttributes: false,
686+
removeNSPrefix: true,
687+
isArray: (name, jpath) => {
688+
return WMTS_ARRAY_NODE_PATHS.includes(jpath);
689+
}
690+
});
691+
const capabilities = parser.parse(capabilitiesText).Capabilities;
673692
let content = capabilities.Contents;
674693
let tileMatrixSet = content.TileMatrixSet;
675694
let scales = [];
@@ -1628,7 +1647,12 @@ export class WebMap extends Observable {
16281647
}
16291648
return this.getRequestUrl(url, proxy);
16301649
}
1631-
1650+
getBoundsFromConrner(lower, upper) {
1651+
const bottomLeft = lower.split(' '),
1652+
topRight = upper.split(' ');
1653+
const bounds = bottomLeft.concat(topRight);
1654+
return [+bounds[0], +bounds[1], +bounds[2], +bounds[3]];
1655+
}
16321656
/**
16331657
* @private
16341658
* @function WebMap.prototype.getWmtsInfo
@@ -1648,8 +1672,15 @@ export class WebMap extends Observable {
16481672
return response.text();
16491673
})
16501674
.then(function (capabilitiesText) {
1651-
const format = new WMTSCapabilities();
1652-
let capabilities = format.read(capabilitiesText);
1675+
const parser = new XMLParser({
1676+
attributeNamePrefix: '',
1677+
ignoreAttributes: false,
1678+
removeNSPrefix: true,
1679+
isArray: (name, jpath) => {
1680+
return WMTS_ARRAY_NODE_PATHS.includes(jpath);
1681+
}
1682+
});
1683+
const capabilities = parser.parse(capabilitiesText).Capabilities;
16531684
if (that.isValidResponse(capabilities)) {
16541685
let content = capabilities.Contents;
16551686
let tileMatrixSet = content.TileMatrixSet,
@@ -1664,7 +1695,10 @@ export class WebMap extends Observable {
16641695
idx = n;
16651696
layer = layers[idx];
16661697
layerFormat = layer.Format[0];
1667-
var layerBounds = layer.WGS84BoundingBox;
1698+
var WGS84BoundingBox = layer.WGS84BoundingBox;
1699+
var boundingBox = layer.BoundingBox;
1700+
let bbox = WGS84BoundingBox ? WGS84BoundingBox : boundingBox;
1701+
var layerBounds = that.getBoundsFromConrner(bbox.LowerCorner, bbox.UpperCorner)
16681702
// tileMatrixSetLink = layer.TileMatrixSetLink;
16691703
break;
16701704
}
@@ -1686,15 +1720,15 @@ export class WebMap extends Observable {
16861720
matrixIds.push(tileMatrixSet[i].TileMatrix[h].Identifier);
16871721
}
16881722
//bug wmts出图需要加上origin,否则会出现出图不正确的情况。偏移或者瓦片出不了
1689-
let origin = tileMatrixSet[i].TileMatrix[0].TopLeftCorner;
1723+
let origin = tileMatrixSet[i].TileMatrix[0].TopLeftCorner.split(' ').map(Number);
16901724
layerInfo.origin =
16911725
['EPSG:4326', 'EPSG:4490'].indexOf(wmtsLayerEpsg) > -1 ? [origin[1], origin[0]] : origin;
16921726
break;
16931727
}
16941728
}
16951729
let name = layerInfo.name,
16961730
extent;
1697-
if (layerBounds) {
1731+
if(WGS84BoundingBox) {
16981732
if (layerBounds[0] < -180) {
16991733
layerBounds[0] = -180;
17001734
}
@@ -1708,11 +1742,13 @@ export class WebMap extends Observable {
17081742
layerBounds[3] = 90;
17091743
}
17101744
extent = olProj.transformExtent(layerBounds, 'EPSG:4326', that.baseProjection);
1711-
} else {
1745+
} else if(boundingBox) {
1746+
extent = layerBounds;
1747+
} else {
17121748
extent = olProj.get(that.baseProjection).getExtent();
1713-
}
1749+
}
17141750
layerInfo.tileUrl = that.getTileUrl(
1715-
capabilities.OperationsMetadata.GetTile.DCP.HTTP.Get,
1751+
capabilities.OperationsMetadata.Operation.find(o => o.name === 'GetTile').DCP.HTTP.Get,
17161752
layer,
17171753
layerFormat,
17181754
isKvp

0 commit comments

Comments
 (0)