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)
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