Skip to content

Commit 4a997a5

Browse files
[fix]webmap对接webmercator全球剖分瓦片
1 parent 7ec9629 commit 4a997a5

File tree

5 files changed

+84
-1
lines changed

5 files changed

+84
-1
lines changed

src/mapboxgl/mapping/webmap/v2/WebMap.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,9 @@ export class WebMap extends mapboxgl.Evented {
215215
case 'SUPERMAP_REST':
216216
this._createDynamicTiledLayer(layerInfo);
217217
break;
218+
case 'ZXY_TILE':
219+
this._createZXYLayer(layerInfo);
220+
break;
218221
case 'CLOUD':
219222
case 'CLOUD_BLACK':
220223
case 'OSM':
@@ -438,6 +441,13 @@ export class WebMap extends mapboxgl.Evented {
438441
this._addBaselayer(urlArr, 'XYZ-layers-' + layerInfo.name);
439442
}
440443

444+
_createZXYLayer(layerInfo) {
445+
const { url, subdomains, layerID, name, visible } = layerInfo;
446+
const urls = (subdomains && subdomains.length) ? subdomains.map(item => url.replace('{s}', item)) : [url];
447+
const layerId = layerID || name;
448+
this._addBaselayer(urls, layerId, undefined, undefined, '', visible);
449+
}
450+
441451
/**
442452
* @private
443453
* @function WebMap.prototype._createDynamicTiledLayer
@@ -630,6 +640,7 @@ export class WebMap extends mapboxgl.Evented {
630640
this.fire('getlayersfailed', { error: error, map: this.map });
631641
});
632642
} else if (
643+
layer.layerType === 'ZXY_TILE' ||
633644
layer.layerType === 'SUPERMAP_REST' ||
634645
layer.layerType === 'TILE' ||
635646
layer.layerType === 'WMS' ||
@@ -1808,7 +1819,7 @@ export class WebMap extends mapboxgl.Evented {
18081819
}
18091820
}
18101821

1811-
_addBaselayer(url, layerID, minzoom = 0, maxzoom = 22, isIserver) {
1822+
_addBaselayer(url, layerID, minzoom = 0, maxzoom = 22, isIserver, visible = true) {
18121823
this.map.addLayer({
18131824
id: layerID,
18141825
type: 'raster',
@@ -1819,6 +1830,7 @@ export class WebMap extends mapboxgl.Evented {
18191830
rasterSource: isIserver ? 'iserver' : '',
18201831
prjCoordSys: isIserver ? { epsgCode: this.baseProjection.split(':')[1] } : ''
18211832
},
1833+
layout: { visibility: visible ? 'visible' : 'none' },
18221834
minzoom: minzoom,
18231835
maxzoom: maxzoom
18241836
});

src/openlayers/mapping/WebMap.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -968,6 +968,9 @@ export class WebMap extends Observable {
968968
case 'SUPERMAP_REST':
969969
source = that.createDynamicTiledSource(layerInfo, isBaseLayer);
970970
break;
971+
case 'ZXY_TILE':
972+
source = this.createXYZTileSource(layerInfo);
973+
break;
971974
case 'CLOUD':
972975
case 'CLOUD_BLACK':
973976
case 'OSM':
@@ -1173,6 +1176,24 @@ export class WebMap extends Observable {
11731176
break;
11741177
}
11751178
}
1179+
/**
1180+
* @private
1181+
* @function WebMap.prototype.createXYZTileSource
1182+
* @description 创建图层的XYZTilesource。
1183+
* @param {Object} layerInfo - 图层信息
1184+
* @returns {ol.source.XYZ} xyz的source
1185+
*/
1186+
createXYZTileSource(layerInfo) {
1187+
const { url, subdomains } = layerInfo;
1188+
const urls = (subdomains && subdomains.length) ? subdomains.map(item => url.replace('{s}', item)) : [url];
1189+
const tileGrid = TileSuperMapRest.createTileGrid([-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892]);
1190+
return new XYZ({
1191+
urls,
1192+
wrapX: false,
1193+
crossOrigin: 'anonymous',
1194+
tileGrid
1195+
});
1196+
}
11761197
/**
11771198
* @private
11781199
* @function WebMap.prototype.createDynamicTiledSource
@@ -2107,6 +2128,10 @@ export class WebMap extends Observable {
21072128
that.errorCallback && that.errorCallback(e, 'getFeatureFaild', that.map);
21082129
}
21092130
);
2131+
} else if (layer.layerType === 'ZXY_TILE') {
2132+
that.map.addLayer(that.createBaseLayer(layer, layerIndex));
2133+
that.layerAdded++;
2134+
that.sendMapToUser(len);
21102135
}
21112136
}
21122137
}

test/mapboxgl/mapping/WebMapSpec.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,30 @@ describe('mapboxgl_WebMap', () => {
120120
done();
121121
});
122122
});
123+
124+
it('add zxytile layer', (done) => {
125+
spyOn(FetchRequest, 'get').and.callFake((url) => {
126+
if (url.indexOf('portal.json') > -1) {
127+
return Promise.resolve(new Response(JSON.stringify(iportal_serviceProxy)));
128+
} else if (url.indexOf('/map.json') > -1) {
129+
return Promise.resolve(new Response(datavizWebmap_ZXYTILE));
130+
}
131+
return Promise.resolve();
132+
});
133+
datavizWebmap = new WebMap(
134+
'test',
135+
{
136+
target: 'map',
137+
serverUrl: 'http://fake/fakeiportal',
138+
withCredentials: false
139+
}
140+
);
141+
datavizWebmap.on('addlayerssucceeded', ({ layers }) => {
142+
expect(layers.length).toBe(2);
143+
done();
144+
});
145+
});
146+
123147
it('setWebMapOptions', (done) => {
124148
let options = {
125149
server: server

test/openlayers/mapping/WebMapSpec.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,26 @@ describe('openlayers_WebMap', () => {
205205
done();
206206
}
207207
});
208+
209+
it('initialize_ZXYtILE', (done) => {
210+
let options = {
211+
server: server,
212+
successCallback,
213+
errorCallback: function () { }
214+
};
215+
spyOn(FetchRequest, 'get').and.callFake((url) => {
216+
if (url.indexOf('map.json') > -1) {
217+
var mapJson = datavizWebmap_ZXYTILE;
218+
return Promise.resolve(new Response(mapJson));
219+
}
220+
return Promise.resolve();
221+
});
222+
var datavizWebmap = new WebMap(id, options);
223+
function successCallback() {
224+
expect(datavizWebmap.mapParams.title).toBe('xyz');
225+
done();
226+
}
227+
});
208228
it('isvj-5215', (done) => {
209229
let options = {
210230
server: server,

test/resources/WebMapV5.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ var datavizWebMap_TIANDITU_TER = '{"version":"6.0","title":"ter","description":"
1212

1313
var datavizWebMap_BAIDU = '{"version":"6.0","title":"百度","description":"","projection":"EPSG:3857","center":{"x":9565084.985351142,"y":6230623.14371253},"level":3,"extent":{"leftBottom":{"x":-20037508.3427892,"y":-20037508.3427892},"rightTop":{"x":20037508.3427892,"y":20037508.3427892}},"baseLayer":{"layerType":"BAIDU","name":"百度地图"},"layers":[],"sourceType":"DataViz","thumbnail":"http://127.0.0.1:8090/iportal/static/dataviz/static/imgs/thumbnail_default.png","rootUrl":"http://127.0.0.1:8090/iportal/"}';
1414

15+
var datavizWebmap_ZXYTILE = '{"extent":{"leftBottom":{"x":-20037508.3427892,"y":-20037508.3427892},"rightTop":{"x":20037508.3427892,"y":20037508.3427892}},"maxScale":"1:144447.92746805","level":1,"center":{"x":0,"y":-7.081154551613622e-10},"baseLayer":{"layerType":"TILE","visible":true,"name":"中国暗色地图","url":"https://iportal/rest/maps/China_Dark"},"layers":[{"layerType":"ZXY_TILE","subdomains":["a","c"],"visible":true,"name":"aaa","url":"https://{s}.tile.fake/{z}/{x}/{y}.png"}],"description":"","projection":"EPSG:3857","minScale":"1:591658710.909131","title":"xyz","version":"2.3.0","rootUrl":"http://127.0.0.1:8190/iportal/"}';
16+
1517
var datavizWebMap_OPENSTREET = '{"version":"6.0","title":"openstreet","description":"","projection":"EPSG:3857","center":{"x":7044436.526761844,"y":-1643701.8562444348},"level":2,"extent":{"leftBottom":{"x":-20037508.34,"y":-20037508.34},"rightTop":{"x":20037508.34,"y":20037508.34}},"baseLayer":{"layerType":"OSM","name":"OpenStreetMap"},"layers":[],"sourceType":"DataViz","thumbnail":"http://127.0.0.1:8090/iportal/static/dataviz/static/imgs/thumbnail_default.png"}';
1618

1719
var datavizWebMap_CLOUD = '{"version":"6.0","title":"GAOD","description":"","projection":"EPSG:3857","center":{"x":0,"y":-7.081154551613622e-10},"level":1,"extent":{"leftBottom":{"x":-20037508.3427892,"y":-20037508.3427892},"rightTop":{"x":20037508.3427892,"y":20037508.3427892}},"baseLayer":{"layerType":"CLOUD","name":"高德地图"},"layers":[],"sourceType":"DataViz","thumbnail":"http://127.0.0.1:8090/iportal/static/dataviz/static/imgs/thumbnail_default.png"}';

0 commit comments

Comments
 (0)