Skip to content

Commit 4372b35

Browse files
[feature]webmap对接webmercator全球剖分瓦片 by qiw
1 parent 5398599 commit 4372b35

File tree

5 files changed

+85
-1
lines changed

5 files changed

+85
-1
lines changed

src/mapboxgl/mapping/WebMap.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,9 @@ export class WebMap extends mapboxgl.Evented {
343343
case 'SUPERMAP_REST':
344344
this._createDynamicTiledLayer(layerInfo);
345345
break;
346+
case 'ZXY_TILE':
347+
this._createZXYLayer(layerInfo);
348+
break;
346349
case 'CLOUD':
347350
case 'CLOUD_BLACK':
348351
case 'OSM':
@@ -566,6 +569,13 @@ export class WebMap extends mapboxgl.Evented {
566569
this._addBaselayer(urlArr, 'XYZ-layers-' + layerInfo.name);
567570
}
568571

572+
_createZXYLayer(layerInfo) {
573+
const { url, subdomains, layerID, name, visible } = layerInfo;
574+
const urls = (subdomains && subdomains.length) ? subdomains.map(item => url.replace('{s}', item)) : [url];
575+
const layerId = layerID || name;
576+
this._addBaselayer(urls, layerId, undefined, undefined, false, visible);
577+
}
578+
569579
/**
570580
* @private
571581
* @function WebMap.prototype._createDynamicTiledLayer
@@ -758,6 +768,7 @@ export class WebMap extends mapboxgl.Evented {
758768
this.fire('getlayersfailed', { error: error, map: this.map });
759769
});
760770
} else if (
771+
layer.layerType === 'ZXY_TILE' ||
761772
layer.layerType === 'SUPERMAP_REST' ||
762773
layer.layerType === 'TILE' ||
763774
layer.layerType === 'WMS' ||
@@ -1955,7 +1966,7 @@ export class WebMap extends mapboxgl.Evented {
19551966
}
19561967
}
19571968

1958-
_addBaselayer(url, layerID, minzoom = 0, maxzoom = 22, isIserver) {
1969+
_addBaselayer(url, layerID, minzoom = 0, maxzoom = 22, isIserver, visible = true) {
19591970
this.map.addLayer({
19601971
id: layerID,
19611972
type: 'raster',
@@ -1966,6 +1977,7 @@ export class WebMap extends mapboxgl.Evented {
19661977
rasterSource: isIserver ? 'iserver' : '',
19671978
prjCoordSys: isIserver ? { epsgCode: this.baseProjection.split(':')[1] } : ''
19681979
},
1980+
layout: { visibility: visible ? 'visible': 'none' },
19691981
minzoom: minzoom,
19701982
maxzoom: maxzoom
19711983
});

src/openlayers/mapping/WebMap.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -917,6 +917,9 @@ export class WebMap extends Observable {
917917
case 'SUPERMAP_REST':
918918
source = that.createDynamicTiledSource(layerInfo, isBaseLayer);
919919
break;
920+
case 'ZXY_TILE':
921+
source = this.createXYZTileSource(layerInfo);
922+
break;
920923
case 'CLOUD':
921924
case 'CLOUD_BLACK':
922925
case 'OSM':
@@ -1116,6 +1119,26 @@ export class WebMap extends Observable {
11161119
break;
11171120
}
11181121
}
1122+
1123+
/**
1124+
* @private
1125+
* @function WebMap.prototype.createXYZTileSource
1126+
* @description 创建图层的XYZTilesource。
1127+
* @param {Object} layerInfo - 图层信息
1128+
* @returns {ol.source.XYZ} xyz的source
1129+
*/
1130+
createXYZTileSource(layerInfo) {
1131+
const { url, subdomains } = layerInfo;
1132+
const urls = (subdomains && subdomains.length) ? subdomains.map(item => url.replace('{s}', item)) : [url];
1133+
const tileGrid = TileSuperMapRest.createTileGrid([-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892]);
1134+
return new XYZ({
1135+
urls,
1136+
wrapX: false,
1137+
crossOrigin: 'anonymous',
1138+
tileGrid
1139+
});
1140+
}
1141+
11191142
/**
11201143
* @private
11211144
* @function WebMap.prototype.createDynamicTiledSource
@@ -1939,6 +1962,10 @@ export class WebMap extends Observable {
19391962
that.layerAdded++;
19401963
that.errorCallback && that.errorCallback(e, 'getFeatureFaild', that.map);
19411964
})
1965+
} else if (layer.layerType === 'ZXY_TILE') {
1966+
that.map.addLayer(that.createBaseLayer(layer, layerIndex));
1967+
that.layerAdded++;
1968+
that.sendMapToUser(len);
19421969
}
19431970
}
19441971
}

test/mapboxgl/mapping/WebMapSpec.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,28 @@ describe('mapboxgl_WebMap', () => {
161161
done();
162162
});
163163
});
164+
it('add zxytile layer', (done) => {
165+
spyOn(FetchRequest, 'get').and.callFake((url) => {
166+
if (url.indexOf('portal.json') > -1) {
167+
return Promise.resolve(new Response(JSON.stringify(iportal_serviceProxy)));
168+
} else if (url.indexOf('/map.json') > -1) {
169+
return Promise.resolve(new Response(datavizWebmap_ZXYTILE));
170+
}
171+
return Promise.resolve();
172+
});
173+
datavizWebmap = new WebMap(
174+
'test',
175+
{
176+
target: 'map',
177+
serverUrl: 'http://fake/fakeiportal',
178+
withCredentials: false
179+
}
180+
);
181+
datavizWebmap.on('addlayerssucceeded', ({ layers }) => {
182+
expect(layers.length).toBe(2);
183+
done();
184+
});
185+
});
164186
it('initialize_TIANDITU_IMAGE', (done) => {
165187
spyOn(FetchRequest, 'get').and.callFake((url) => {
166188
if (url.indexOf('map.json') > -1) {

test/openlayers/mapping/WebMapSpec.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,27 @@ describe('openlayers_WebMap', () => {
389389
}
390390
});
391391

392+
it('initialize_ZXYtILE', (done) => {
393+
let options = {
394+
server: server,
395+
successCallback,
396+
errorCallback: function () { }
397+
};
398+
spyOn(FetchRequest, 'get').and.callFake((url) => {
399+
if (url.indexOf('map.json') > -1) {
400+
var mapJson = datavizWebmap_ZXYTILE;
401+
return Promise.resolve(new Response(mapJson));
402+
}
403+
return Promise.resolve();
404+
});
405+
var datavizWebmap = new WebMap(id, options);
406+
function successCallback() {
407+
expect(datavizWebmap.mapParams.title).toBe('xyz');
408+
// expect(datavizWebmap.layerAdded).toBe(2);
409+
done();
410+
}
411+
});
412+
392413
it('initialize_CLOUD', (done) => {
393414
let options = {
394415
server: server,

test/resources/WebMapV5.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)