Skip to content

Commit aba1bf5

Browse files
[feature]webmap对接webmercator全球剖分瓦片 by qiw
1 parent 5c4313b commit aba1bf5

File tree

7 files changed

+110
-0
lines changed

7 files changed

+110
-0
lines changed

src/common/mapping/WebMapService.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,7 @@ export class WebMapService {
657657
let type;
658658
let isHosted = (dataSource && dataSource.serverId) || layerType === 'MARKER' || layerType === 'HOSTED_TILE';
659659
let isTile =
660+
layerType === 'ZXY_TILE' ||
660661
layerType === 'SUPERMAP_REST' ||
661662
layerType === 'TILE' ||
662663
layerType === 'WMS' ||

src/common/mapping/WebMapV2.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,9 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
403403
case 'TILE':
404404
this._createDynamicTiledLayer(layerInfo, addedCallback);
405405
break;
406+
case 'ZXY_TILE':
407+
this._createZXYLayer(layerInfo, addedCallback);
408+
break;
406409
case 'CLOUD':
407410
case 'XYZ':
408411
url = mapUrls[layerInfo.layerType]
@@ -442,6 +445,7 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
442445
layer.minzoom = Math.max(this._transformScaleToZoom(minScale, crs), 0);
443446
layer.maxzoom = Math.min(24, this._transformScaleToZoom(maxScale, crs) + 0.0000001);
444447
}
448+
console.log('_initOverlayLayers')
445449

446450
if (type === 'tile') {
447451
if (layer.autoUpdateTime) {
@@ -705,6 +709,14 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
705709
addedCallback && addedCallback();
706710
}
707711

712+
_createZXYLayer(layerInfo, addedCallback) {
713+
const { url, subdomains, layerID, name, visible } = layerInfo;
714+
const urls = (subdomains && subdomains.length) ? subdomains.map(item => url.replace('{s}', item)) : [url];
715+
const layerId = layerID || name;
716+
this._addBaselayer({ url: urls, layerID: layerId, visibility: visible });
717+
addedCallback && addedCallback();
718+
}
719+
708720
_createDynamicTiledLayer(layerInfo, addedCallback) {
709721
const url = layerInfo.url;
710722
const layerId = layerInfo.layerID || layerInfo.name;

src/openlayers/mapping/WebMap.js

Lines changed: 26 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':
@@ -1321,6 +1324,25 @@ export class WebMap extends Observable {
13211324
});
13221325
}
13231326

1327+
/**
1328+
* @private
1329+
* @function WebMap.prototype.createXYZTileSource
1330+
* @description 创建图层的XYZTilesource。
1331+
* @param {Object} layerInfo - 图层信息
1332+
* @returns {ol.source.XYZ} xyz的source
1333+
*/
1334+
createXYZTileSource(layerInfo) {
1335+
const { url, subdomains } = layerInfo;
1336+
const urls = (subdomains && subdomains.length) ? subdomains.map(item => url.replace('{s}', item)) : [url];
1337+
const tileGrid = TileSuperMapRest.createTileGrid([-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892]);
1338+
return new XYZ({
1339+
urls,
1340+
wrapX: false,
1341+
crossOrigin: 'anonymous',
1342+
tileGrid
1343+
});
1344+
}
1345+
13241346
/**
13251347
* @private
13261348
* @function WebMap.prototype.createWMSSource
@@ -2107,6 +2129,10 @@ export class WebMap extends Observable {
21072129
that.errorCallback && that.errorCallback(e, 'getFeatureFaild', that.map);
21082130
}
21092131
);
2132+
} else if (layer.layerType === 'ZXY_TILE') {
2133+
that.map.addLayer(that.createBaseLayer(layer, layerIndex));
2134+
that.layerAdded++;
2135+
that.sendMapToUser(len);
21102136
}
21112137
}
21122138
}

test/common/mapping/WebMapServiceSpec.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,23 @@ describe('WebMapServiceSpec.js', () => {
179179
});
180180
});
181181

182+
xit('getsourcetype zxytile', done => {
183+
const options = {
184+
...options,
185+
serverUrl: 'https://fakeiportal.supermap.io/iportal/' // 没有通过处理在末尾加 '/',在此处理
186+
};
187+
spyOn(FetchRequest, 'get').and.callFake((url) => {
188+
if (url.indexOf('map.json') > -1) {
189+
return Promise.resolve(mapJson);
190+
}
191+
return Promise.resolve(new Response(JSON.stringify(iportal_serviceProxy)));
192+
});
193+
const service = new WebMapService(mapId, options);
194+
const res = service.getDatasourceType({layerType: 'ZXY_TILE'});
195+
expect(res).toBe('tile');
196+
done()
197+
});
198+
182199
it('get the wrong iPortal service proxy', (done) => {
183200
const options = {
184201
...options,

test/mapboxgl/mapping/WebMapV2Spec.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1522,6 +1522,36 @@ describe('mapboxgl_WebMapV2', () => {
15221522
});
15231523
});
15241524

1525+
it('add zxytile layer', (done) => {
1526+
spyOn(FetchRequest, 'get').and.callFake((url) => {
1527+
if (url.indexOf('portal.json') > -1) {
1528+
return Promise.resolve(new Response(JSON.stringify(iportal_serviceProxy)));
1529+
} else if (url.indexOf('/map.json') > -1) {
1530+
return Promise.resolve(new Response(datavizWebmap_ZXYTILE));
1531+
}
1532+
return Promise.resolve();
1533+
});
1534+
datavizWebmap = new WebMap(
1535+
'test',
1536+
{
1537+
target: 'map',
1538+
serverUrl: 'http://fake/fakeiportal',
1539+
withCredentials: false
1540+
},
1541+
{
1542+
style: {
1543+
version: 8,
1544+
sources: {},
1545+
layers: []
1546+
}
1547+
}
1548+
);
1549+
datavizWebmap.on('mapcreatesucceeded', ({ layers }) => {
1550+
expect(layers.length).toBe(2);
1551+
done();
1552+
});
1553+
});
1554+
15251555
it('isvj-5215', (done) => {
15261556
spyOn(FetchRequest, 'get').and.callFake((url) => {
15271557
if (url.indexOf('portal.json') > -1) {

test/openlayers/mapping/WebMapSpec.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,28 @@ describe('openlayers_WebMap', () => {
184184
}
185185
});
186186

187+
it('initialize_ZXYtILE', (done) => {
188+
let options = {
189+
server: server,
190+
successCallback,
191+
errorCallback: function () { }
192+
};
193+
spyOn(FetchRequest, 'get').and.callFake((url) => {
194+
if (url.indexOf('map.json') > -1) {
195+
var mapJson = datavizWebmap_ZXYTILE;
196+
return Promise.resolve(new Response(mapJson));
197+
}
198+
return Promise.resolve();
199+
});
200+
var datavizWebmap = new WebMap(id, options);
201+
202+
function successCallback() {
203+
expect(datavizWebmap.mapParams.title).toBe('xyz');
204+
// expect(datavizWebmap.layerAdded).toBe(2);
205+
done();
206+
}
207+
});
208+
187209
it('jsonsql', (done) => {
188210
let options = {
189211
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)