Skip to content

Commit 3bb88bf

Browse files
committed
【fix】webmap.json 版本3.3.x,下钻过滤失败; review by qiw
1 parent 644f4fb commit 3bb88bf

File tree

4 files changed

+575
-8
lines changed

4 files changed

+575
-8
lines changed

src/common/mapping/WebMapV3.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* This program are made available under the terms of the Apache License, Version 2.0
33
* which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
44
import { FetchRequest } from '../util/FetchRequest';
5-
import { getLayerInfosFromCatalogs, getMainLayerFromCatalog, isSameRasterLayer, mergeFeatures, transformUrl } from './utils/util';
5+
import { getLayerCatalogRenderLayers, getLayerInfosFromCatalogs, getMainLayerFromCatalog, isSameRasterLayer, mergeFeatures, transformUrl } from './utils/util';
66
import { SourceListModelV3 } from './utils/SourceListModelV3';
77

88
const LEGEND_RENDER_TYPE = {
@@ -504,7 +504,7 @@ export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, mapRe
504504
layer.id = layerId;
505505
}
506506
}
507-
layerIdToChange.push({ originId: originId, renderId: layer.id });
507+
layerIdToChange.push({ originId: originId, renderId: layer.id, id: originId });
508508
}
509509
const layerCatalogFromMapJson = JSON.parse(JSON.stringify(style.metadata.layerCatalog), 'parts');
510510
this._updateLayerCatalogsId({
@@ -592,7 +592,8 @@ export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, mapRe
592592
});
593593
return;
594594
}
595-
const matchLayer = layerIdMapList.find((item) => item.originId === id);
595+
const renderLayers = getLayerCatalogRenderLayers(loopItem[layerIdsField], id, layerIdMapList);
596+
const matchLayer = layerIdMapList.find((item) => item.originId === renderLayers[0]);
596597
if (matchLayer) {
597598
const catalog = this._findLayerCatalog(catalogs, id);
598599
catalog.id = matchLayer.renderId;
@@ -602,7 +603,7 @@ export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, mapRe
602603
}
603604
return;
604605
}
605-
if (unspportedLayers.includes(id)) {
606+
if (unspportedLayers.includes(id) || renderLayers.some((layerId) => unspportedLayers.includes(layerId))) {
606607
this._deleteLayerCatalog(catalogs, id);
607608
}
608609
});
@@ -1407,9 +1408,10 @@ export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, mapRe
14071408
const unSupportedMsg = 'layer are not supported yet';
14081409
const { interaction } = mapInfo;
14091410
if (interaction && interaction.drill) {
1410-
this.fire('layercreatefailed', { error: `drill ${unSupportedMsg}`, map: this.map });
1411+
this.fire('layercreatefailed', { error: `drill ${unSupportedMsg}`, map: this.map, error_code: 'DRILL_LAYERS_NOT_SUPPORTED' });
14111412
interaction.drill.forEach((drillItem) => {
1412-
filterLayerIds.push(...drillItem.layerIds);
1413+
const drillLayerIds = drillItem.layerIds || drillItem.layers.reduce((ids, item) => ids.concat(item.layerIds), []);
1414+
filterLayerIds.push(...drillLayerIds);
14131415
});
14141416
}
14151417
return filterLayerIds;

test/mapboxgl/mapping/WebMapV3Spec.js

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,8 +439,65 @@ describe('mapboxgl-webmap3.0', () => {
439439
server: server,
440440
target: 'map'
441441
});
442-
mapstudioWebmap.on('layercreatefailed', ({ error }) => {
442+
mapstudioWebmap.on('layercreatefailed', ({ error, error_code }) => {
443443
expect(['drill'].indexOf(error.split(' ')[0]) > -1).toBeTruthy();
444+
expect(error_code).toBe('DRILL_LAYERS_NOT_SUPPORTED');
445+
});
446+
mapstudioWebmap.on('mapcreatesucceeded', ({ map }) => {
447+
const style = map.getStyle();
448+
expect(style.layers.length).toBeLessThan(originMapInfo.layers.length);
449+
expect(style.layers.length).toBe(mapInfo.layers.length);
450+
expect(mapstudioWebmap.getLayers().length).toBe(1);
451+
expect(mapstudioWebmap.getLayerCatalog().length).toBe(1);
452+
done();
453+
});
454+
mapstudioWebmap.initializeMap(mapInfo);
455+
});
456+
457+
it('filter drill ui id test', (done) => {
458+
spyOn(FetchRequest, 'get').and.callFake((url) => {
459+
if (url.indexOf('/sprite') > -1) {
460+
return Promise.resolve(new Response(msSpriteInfo));
461+
}
462+
return Promise.resolve();
463+
});
464+
const mapInfo = JSON.parse(mapstudioWebMap_drill_layers1);
465+
const originMapInfo = JSON.parse(mapstudioWebMap_drill_layers1);
466+
const mapstudioWebmap = new WebMapV3(mapInfo, {
467+
server: server,
468+
target: 'map'
469+
});
470+
mapstudioWebmap.on('layercreatefailed', ({ error, error_code }) => {
471+
expect(['drill'].indexOf(error.split(' ')[0]) > -1).toBeTruthy();
472+
expect(error_code).toBe('DRILL_LAYERS_NOT_SUPPORTED');
473+
});
474+
mapstudioWebmap.on('mapcreatesucceeded', ({ map }) => {
475+
const style = map.getStyle();
476+
expect(style.layers.length).toBeLessThan(originMapInfo.layers.length);
477+
expect(style.layers.length).toBe(mapInfo.layers.length);
478+
expect(mapstudioWebmap.getLayers().length).toBe(1);
479+
expect(mapstudioWebmap.getLayerCatalog().length).toBe(1);
480+
done();
481+
});
482+
mapstudioWebmap.initializeMap(mapInfo);
483+
});
484+
485+
it('filter drill interaction changed test', (done) => {
486+
spyOn(FetchRequest, 'get').and.callFake((url) => {
487+
if (url.indexOf('/sprite') > -1) {
488+
return Promise.resolve(new Response(msSpriteInfo));
489+
}
490+
return Promise.resolve();
491+
});
492+
const mapInfo = JSON.parse(mapstudioWebMap_drill_layers2);
493+
const originMapInfo = JSON.parse(mapstudioWebMap_drill_layers2);
494+
const mapstudioWebmap = new WebMapV3(mapInfo, {
495+
server: server,
496+
target: 'map'
497+
});
498+
mapstudioWebmap.on('layercreatefailed', ({ error, error_code }) => {
499+
expect(['drill'].indexOf(error.split(' ')[0]) > -1).toBeTruthy();
500+
expect(error_code).toBe('DRILL_LAYERS_NOT_SUPPORTED');
444501
});
445502
mapstudioWebmap.on('mapcreatesucceeded', ({ map }) => {
446503
const style = map.getStyle();

test/maplibregl/mapping/WebMapV3Spec.js

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,8 +404,65 @@ describe('maplibregl-webmap3.0', () => {
404404
server: server,
405405
target: 'map'
406406
});
407-
mapstudioWebmap.on('layercreatefailed', ({ error }) => {
407+
mapstudioWebmap.on('layercreatefailed', ({ error, error_code }) => {
408408
expect(['drill'].indexOf(error.split(' ')[0]) > -1).toBeTruthy();
409+
expect(error_code).toBe('DRILL_LAYERS_NOT_SUPPORTED');
410+
});
411+
mapstudioWebmap.on('mapcreatesucceeded', ({ map }) => {
412+
const style = map.getStyle();
413+
expect(style.layers.length).toBeLessThan(originMapInfo.layers.length);
414+
expect(style.layers.length).toBe(mapInfo.layers.length);
415+
expect(mapstudioWebmap.getLayers().length).toBe(1);
416+
expect(mapstudioWebmap.getLayerCatalog().length).toBe(1);
417+
done();
418+
});
419+
mapstudioWebmap.initializeMap(mapInfo);
420+
});
421+
422+
it('filter drill ui id test', (done) => {
423+
spyOn(FetchRequest, 'get').and.callFake((url) => {
424+
if (url.indexOf('/sprite') > -1) {
425+
return Promise.resolve(new Response(msSpriteInfo));
426+
}
427+
return Promise.resolve();
428+
});
429+
const mapInfo = JSON.parse(mapstudioWebMap_drill_layers1);
430+
const originMapInfo = JSON.parse(mapstudioWebMap_drill_layers1);
431+
const mapstudioWebmap = new WebMapV3(mapInfo, {
432+
server: server,
433+
target: 'map'
434+
});
435+
mapstudioWebmap.on('layercreatefailed', ({ error, error_code }) => {
436+
expect(['drill'].indexOf(error.split(' ')[0]) > -1).toBeTruthy();
437+
expect(error_code).toBe('DRILL_LAYERS_NOT_SUPPORTED');
438+
});
439+
mapstudioWebmap.on('mapcreatesucceeded', ({ map }) => {
440+
const style = map.getStyle();
441+
expect(style.layers.length).toBeLessThan(originMapInfo.layers.length);
442+
expect(style.layers.length).toBe(mapInfo.layers.length);
443+
expect(mapstudioWebmap.getLayers().length).toBe(1);
444+
expect(mapstudioWebmap.getLayerCatalog().length).toBe(1);
445+
done();
446+
});
447+
mapstudioWebmap.initializeMap(mapInfo);
448+
});
449+
450+
it('filter drill interaction changed test', (done) => {
451+
spyOn(FetchRequest, 'get').and.callFake((url) => {
452+
if (url.indexOf('/sprite') > -1) {
453+
return Promise.resolve(new Response(msSpriteInfo));
454+
}
455+
return Promise.resolve();
456+
});
457+
const mapInfo = JSON.parse(mapstudioWebMap_drill_layers2);
458+
const originMapInfo = JSON.parse(mapstudioWebMap_drill_layers2);
459+
const mapstudioWebmap = new WebMapV3(mapInfo, {
460+
server: server,
461+
target: 'map'
462+
});
463+
mapstudioWebmap.on('layercreatefailed', ({ error, error_code }) => {
464+
expect(['drill'].indexOf(error.split(' ')[0]) > -1).toBeTruthy();
465+
expect(error_code).toBe('DRILL_LAYERS_NOT_SUPPORTED');
409466
});
410467
mapstudioWebmap.on('mapcreatesucceeded', ({ map }) => {
411468
const style = map.getStyle();

0 commit comments

Comments
 (0)