Skip to content

Commit 8badfdf

Browse files
committed
【feature】webmap3.0 优化加载通过proxy代理后的REST服务地址的图层
1 parent 57ab0f2 commit 8badfdf

File tree

2 files changed

+53
-7
lines changed

2 files changed

+53
-7
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,17 @@ export class WebMap extends mapboxgl.Evented {
200200
const fontFamilys = this._getLabelFontFamily();
201201
// 初始化 map
202202
const mapOptions = {
203+
transformRequest: (url, resourceType) => {
204+
const res = { url };
205+
if (
206+
resourceType === 'Tile' &&
207+
this.options.iportalServiceProxyUrl &&
208+
url.indexOf(this.options.iportalServiceProxyUrl) >= 0
209+
) {
210+
res.credentials = 'include';
211+
}
212+
return res;
213+
},
203214
...this.mapOptions,
204215
container: this.options.target,
205216
crs: this._baseProjection,

test/mapboxgl/mapping/WebMapV3Spec.js

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ describe('mapboxgl-webmap3.0', () => {
7575
return Promise.resolve();
7676
});
7777
mapstudioWebmap = new WebMap(id, {
78-
server: server
78+
server: server,
79+
iportalServiceProxyUrl: 'initialize_raster'
7980
});
8081
expect(mapstudioWebmap.credentialKey).toBeUndefined();
8182
expect(mapstudioWebmap.credentialValue).toBeUndefined();
@@ -136,7 +137,8 @@ describe('mapboxgl-webmap3.0', () => {
136137
const mapInfo = JSON.parse(mapstudioWebMap_symbol);
137138
mapstudioWebmap = new WebMapV3(mapInfo, {
138139
server: server,
139-
target: 'map'
140+
target: 'map',
141+
iportalServiceProxyUrl: 'mapId is JSON'
140142
});
141143
mapstudioWebmap.initializeMap(mapInfo);
142144

@@ -212,7 +214,8 @@ describe('mapboxgl-webmap3.0', () => {
212214
mapboxgl.CRS.set = function () {};
213215
mapstudioWebmap = new WebMapV3(nextMapInfo, {
214216
server: server,
215-
target: 'map'
217+
target: 'map',
218+
iportalServiceProxyUrl: 'projection is 4490 and include mapbox-gl-enhance'
216219
});
217220
mapstudioWebmap.initializeMap(nextMapInfo);
218221

@@ -307,7 +310,8 @@ describe('mapboxgl-webmap3.0', () => {
307310
const mapInfo = JSON.parse(mapstudioWebMap_symbol);
308311
mapstudioWebmap = new WebMapV3(mapInfo, {
309312
server: server,
310-
target: 'map'
313+
target: 'map',
314+
iportalServiceProxyUrl: 'overlayLayersManager'
311315
});
312316
mapstudioWebmap.initializeMap(mapInfo);
313317

@@ -407,7 +411,8 @@ describe('mapboxgl-webmap3.0', () => {
407411
const mapInfo = JSON.parse(mapstudioWebMap_symbol);
408412
mapstudioWebmap = new WebMapV3(mapInfo, {
409413
server: server,
410-
target: 'map'
414+
target: 'map',
415+
iportalServiceProxyUrl: 'exclude source and layer'
411416
});
412417
mapstudioWebmap.initializeMap(mapInfo);
413418

@@ -486,9 +491,13 @@ describe('mapboxgl-webmap3.0', () => {
486491
});
487492
mapboxgl.CRS = function () {};
488493
mapboxgl.CRS.set = function () {};
494+
const mapOptions = {
495+
transformRequest: function(url) { return { url }; }
496+
}
497+
spyOn(mapOptions, 'transformRequest').and.callThrough();
489498
mapstudioWebmap = new WebMap(id, {
490499
server: server
491-
});
500+
}, mapOptions);
492501
mapstudioWebmap.on('addlayerssucceeded', ({ map }) => {
493502
const webmapInstance = mapstudioWebmap._getWebMapInstance();
494503
expect(map).not.toBeUndefined();
@@ -500,6 +509,7 @@ describe('mapboxgl-webmap3.0', () => {
500509
const layerCatalogs = webmapInstance.getLayerCatalog();
501510
expect(layerCatalogs.length).toBeLessThanOrEqual(appreciableLayers.length);
502511
expect(webmapInstance.getLegendInfo().length).toBe(11);
512+
expect(mapOptions.transformRequest.calls.count()).toBeGreaterThan(0);
503513
delete mapboxgl.Map.prototype.getCRS;
504514
delete mapboxgl.CRS;
505515
done();
@@ -544,7 +554,8 @@ describe('mapboxgl-webmap3.0', () => {
544554
return Promise.resolve();
545555
});
546556
mapstudioWebmap = new WebMap(id, {
547-
server: server
557+
server: server,
558+
iportalServiceProxyUrl: 'layerdatas'
548559
});
549560

550561
mapstudioWebmap.on('addlayerssucceeded', ({ map }) => {
@@ -584,4 +595,28 @@ describe('mapboxgl-webmap3.0', () => {
584595
done();
585596
});
586597
});
598+
599+
it('transformRequest', (done) => {
600+
spyOn(FetchRequest, 'get').and.callFake((url) => {
601+
if (url.indexOf('617580084.json') > -1) {
602+
return Promise.resolve(new Response(mapstudioAppInfo));
603+
}
604+
return Promise.resolve();
605+
});
606+
spyOn(mapboxgl, 'Map').and.callFake(mbglmap);
607+
const mapInfo = JSON.parse(mapstudioWebMap_raster);
608+
mapstudioWebmap = new WebMapV3(mapInfo, {
609+
server: server,
610+
iportalServiceProxyUrl: 'http://localhost:8195/portalproxy'
611+
});
612+
mapstudioWebmap.initializeMap(mapInfo);
613+
expect(mapstudioWebmap.map).not.toBeUndefined();
614+
let mockTileUrl = 'http://localhost:8195/portalproxy/7c851958ab40a5e0/iserver/services/map_world1_y6nykx3f/rest/maps/World1/tileimage.png?scale=6.760654286410619e-9&x=1&y=0&width=256&height=256&transparent=true&redirect=false&cacheEnabled=true&origin=%7B%22x%22%3A-180%2C%22y%22%3A90%7D';
615+
let transformed = mapstudioWebmap.map.options.transformRequest(mockTileUrl, 'Tile');
616+
expect(transformed.credentials).toBe('include');
617+
mockTileUrl = 'https://maptiles.supermapol.com/iserver/services/map_China/rest/maps/China_Dark';
618+
transformed = mapstudioWebmap.map.options.transformRequest(mockTileUrl, 'Tile');
619+
expect(transformed.credentials).toBeUndefined();
620+
done();
621+
});
587622
});

0 commit comments

Comments
 (0)