Skip to content

Commit 1ad7d8b

Browse files
committed
【feature】fix webmapv2 切换更新数据图例重复; webmapv3 追加地图再清楚之后原l7图层消失
1 parent 6ad0774 commit 1ad7d8b

File tree

6 files changed

+149
-12
lines changed

6 files changed

+149
-12
lines changed

src/common/mapping/WebMapV2.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2468,6 +2468,11 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo }) {
24682468
default:
24692469
break;
24702470
}
2471+
const matchIndex = this._legendList.findIndex(item => item.layerId === layerInfo.layerID);
2472+
if (matchIndex > -1) {
2473+
this._legendList.splice(matchIndex, 1, legendItem);
2474+
return;
2475+
}
24712476
this._legendList.push(legendItem);
24722477
}
24732478

src/common/mapping/WebMapV3.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,11 +205,11 @@ export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, mapRe
205205

206206
clean(removeMap = true) {
207207
if (this.map) {
208-
const scene = this.map.$l7scene;
209-
if (scene) {
210-
scene.removeAllLayer();
208+
if (removeMap) {
209+
const scene = this.map.$l7scene;
210+
scene && scene.removeAllLayer();
211+
this.map.remove();
211212
}
212-
removeMap && this.map.remove();
213213
this.map = null;
214214
this._legendList = [];
215215
this._mapResourceInfo = {};

test/mapboxgl/mapping/WebMapV2Spec.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,8 +1360,10 @@ describe('mapboxgl_WebMapV2', () => {
13601360
});
13611361
datavizWebmap = new WebMap(id, { ...commonOption, map: commonMap }, { ...commonMapOptions });
13621362
const callback = function (data) {
1363-
expect(datavizWebmap.getLayers().length).toBe(uniqueLayer_polygon.layers.length + 1);
1364-
const layerInfo = { ...uniqueLayer_polygon.layers[0], id: uniqueLayer_polygon.layers[0].name };
1363+
const layers = datavizWebmap.getLayers();
1364+
expect(layers.length).toBe(uniqueLayer_polygon.layers.length + 1);
1365+
expect(layers.length).toBe(data.layers.length);
1366+
expect(datavizWebmap.getLegends().length).toBe(2);
13651367
const features = [
13661368
{
13671369
type: 'Feature',
@@ -1386,9 +1388,10 @@ describe('mapboxgl_WebMapV2', () => {
13861388
}
13871389
}
13881390
];
1389-
const spy = spyOn(datavizWebmap._handler, '_initOverlayLayer');
1390-
datavizWebmap.updateOverlayLayer(layerInfo, features);
1391+
const spy = spyOn(datavizWebmap._handler, '_initOverlayLayer').and.callThrough();
1392+
datavizWebmap.updateOverlayLayer({ id: datavizWebmap._handler._mapInfo.layers[0].layerID }, features);
13911393
expect(spy).toHaveBeenCalled();
1394+
expect(datavizWebmap.getLegends().length).toBe(2);
13921395
done();
13931396
};
13941397
datavizWebmap.on('mapcreatesucceeded', callback);

test/mapboxgl/mapping/WebMapV3Spec.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ describe('mapboxgl-webmap3.0', () => {
3838
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
3939
jasmine.DEFAULT_TIMEOUT_INTERVAL = 50000;
4040
mapboxgl.Map.prototype.overlayLayersManager = {};
41+
mbglmap.prototype.getL7Scene = mapboxgl.Map.prototype.getL7Scene;
4142
});
4243
afterEach(() => {
4344
if (mapstudioWebmap && mapstudioWebmap.map) {
@@ -47,6 +48,7 @@ describe('mapboxgl-webmap3.0', () => {
4748
}
4849
window.document.body.removeChild(testDiv);
4950
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
51+
mbglmap.prototype.getL7Scene = undefined;
5052
});
5153

5254
it('initialize_background', (done) => {
@@ -1196,4 +1198,65 @@ describe('mapboxgl-webmap3.0', () => {
11961198
};
11971199
mapstudioWebmap.once('mapcreatesucceeded', callback);
11981200
});
1201+
1202+
it('test webmap with l7layers append l7layers', (done) => {
1203+
spyOn(MapManagerUtil, 'default').and.callFake(mbglmap);
1204+
const mapInfo = JSON.parse(mapstudioWebMap_L7Layers);
1205+
spyOn(L7, 'PointLayer').and.callFake(mockL7.PointLayer);
1206+
spyOn(L7, 'LineLayer').and.callFake(mockL7.PointLayer);
1207+
spyOn(L7, 'PolygonLayer').and.callFake(mockL7.PointLayer);
1208+
spyOn(L7, 'HeatmapLayer').and.callFake(mockL7.PointLayer);
1209+
spyOn(L7, 'Scene').and.callFake(mockL7.Scene);
1210+
spyOn(L7, 'Mapbox').and.callFake(mockL7.Mapbox);
1211+
spyOn(FetchRequest, 'get').and.callFake((url) => {
1212+
if (url.indexOf('web/config/portal.json') > -1) {
1213+
return Promise.resolve(new Response(JSON.stringify(iportal_serviceProxy)));
1214+
}
1215+
if (url.indexOf('map.json') > -1) {
1216+
return Promise.resolve(new Response(JSON.stringify({ ...mapInfo, crs: 'EPSG:3857' })));
1217+
}
1218+
if (url.indexOf('617580084.json') > -1) {
1219+
return Promise.resolve(new Response(msProjectINfo_L7Layers));
1220+
}
1221+
if (url.indexOf('/sprite') > -1) {
1222+
return Promise.resolve(new Response(msSpriteInfo));
1223+
}
1224+
if (url.indexOf('/web/datas/1052943054/structureddata/ogc-features/collections/all/items.json') > -1) {
1225+
return Promise.resolve(new Response(l7StructureData1052943054Items));
1226+
}
1227+
if (url.indexOf('/web/datas/1052943054/structureddata.json') > -1) {
1228+
return Promise.resolve(new Response(l7StructureData1052943054));
1229+
}
1230+
if (url.indexOf('/web/datas/1767084124/structureddata/ogc-features/collections/all/items.json') > -1) {
1231+
return Promise.resolve(new Response(l7StructureData1767084124Items));
1232+
}
1233+
if (url.indexOf('/web/datas/1767084124/structureddata.json') > -1) {
1234+
return Promise.resolve(new Response(l7StructureData1767084124));
1235+
}
1236+
return Promise.resolve();
1237+
});
1238+
mapstudioWebmap = new WebMap(
1239+
id,
1240+
{
1241+
server: server
1242+
}
1243+
);
1244+
mapstudioWebmap.once('mapcreatesucceeded', ({ map: firstMap, layers: firstLayersList }) => {
1245+
expect(firstMap).not.toBeUndefined();
1246+
const style = firstMap.getStyle();
1247+
expect(style.layers.length).toEqual(mapInfo.layers.length);
1248+
const webMap1 = new WebMap(id, { server, map: firstMap });
1249+
webMap1.once('mapcreatesucceeded', ({ map, layers }) => {
1250+
expect(map).toEqual(firstMap);
1251+
expect(layers.length).toBe(firstLayersList.length);
1252+
expect(map.$l7scene).not.toBeUndefined();
1253+
const mapSpy = spyOn(map, 'remove');
1254+
const sceneSpy = spyOn(map.$l7scene, 'removeAllLayer');
1255+
webMap1.cleanLayers();
1256+
expect(mapSpy).not.toHaveBeenCalled();
1257+
expect(sceneSpy).not.toHaveBeenCalled();
1258+
done();
1259+
});
1260+
});
1261+
});
11991262
});

test/maplibregl/mapping/WebMapV2Spec.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1361,8 +1361,10 @@ describe('maplibregl_WebMapV2', () => {
13611361
});
13621362
datavizWebmap = new WebMap(id, { ...commonOption, map: commonMap }, { ...commonMapOptions });
13631363
const callback = function (data) {
1364-
expect(datavizWebmap.getLayers().length).toBe(uniqueLayer_polygon.layers.length + 1);
1365-
const layerInfo = { ...uniqueLayer_polygon.layers[0], id: uniqueLayer_polygon.layers[0].name };
1364+
const layers = datavizWebmap.getLayers();
1365+
expect(layers.length).toBe(uniqueLayer_polygon.layers.length + 1);
1366+
expect(layers.length).toBe(data.layers.length);
1367+
expect(datavizWebmap.getLegends().length).toBe(2);
13661368
const features = [
13671369
{
13681370
type: 'Feature',
@@ -1387,9 +1389,10 @@ describe('maplibregl_WebMapV2', () => {
13871389
}
13881390
}
13891391
];
1390-
const spy = spyOn(datavizWebmap._handler, '_initOverlayLayer');
1391-
datavizWebmap.updateOverlayLayer(layerInfo, features);
1392+
const spy = spyOn(datavizWebmap._handler, '_initOverlayLayer').and.callThrough();
1393+
datavizWebmap.updateOverlayLayer({ id: datavizWebmap._handler._mapInfo.layers[0].layerID }, features);
13921394
expect(spy).toHaveBeenCalled();
1395+
expect(datavizWebmap.getLegends().length).toBe(2);
13931396
done();
13941397
};
13951398
datavizWebmap.on('mapcreatesucceeded', callback);

test/maplibregl/mapping/WebMapV3Spec.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ describe('maplibregl-webmap3.0', () => {
3838
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
3939
jasmine.DEFAULT_TIMEOUT_INTERVAL = 50000;
4040
maplibregl.Map.prototype.overlayLayersManager = {};
41+
mbglmap.prototype.getL7Scene = maplibregl.Map.prototype.getL7Scene;
4142
});
4243
afterEach(() => {
4344
if (mapstudioWebmap && mapstudioWebmap.map) {
@@ -47,6 +48,7 @@ describe('maplibregl-webmap3.0', () => {
4748
}
4849
window.document.body.removeChild(testDiv);
4950
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
51+
mbglmap.prototype.getL7Scene = undefined;
5052
});
5153

5254
it('initialize_background', (done) => {
@@ -1196,4 +1198,65 @@ describe('maplibregl-webmap3.0', () => {
11961198
};
11971199
mapstudioWebmap.once('mapcreatesucceeded', callback);
11981200
});
1201+
1202+
it('test webmap with l7layers append l7layers', (done) => {
1203+
spyOn(MapManagerUtil, 'default').and.callFake(mbglmap);
1204+
const mapInfo = JSON.parse(mapstudioWebMap_L7Layers);
1205+
spyOn(L7, 'PointLayer').and.callFake(mockL7.PointLayer);
1206+
spyOn(L7, 'LineLayer').and.callFake(mockL7.PointLayer);
1207+
spyOn(L7, 'PolygonLayer').and.callFake(mockL7.PointLayer);
1208+
spyOn(L7, 'HeatmapLayer').and.callFake(mockL7.PointLayer);
1209+
spyOn(L7, 'Scene').and.callFake(mockL7.Scene);
1210+
spyOn(L7, 'Maplibre').and.callFake(mockL7.Maplibre);
1211+
spyOn(FetchRequest, 'get').and.callFake((url) => {
1212+
if (url.indexOf('web/config/portal.json') > -1) {
1213+
return Promise.resolve(new Response(JSON.stringify(iportal_serviceProxy)));
1214+
}
1215+
if (url.indexOf('map.json') > -1) {
1216+
return Promise.resolve(new Response(JSON.stringify({ ...mapInfo, crs: 'EPSG:3857' })));
1217+
}
1218+
if (url.indexOf('617580084.json') > -1) {
1219+
return Promise.resolve(new Response(msProjectINfo_L7Layers));
1220+
}
1221+
if (url.indexOf('/sprite') > -1) {
1222+
return Promise.resolve(new Response(msSpriteInfo));
1223+
}
1224+
if (url.indexOf('/web/datas/1052943054/structureddata/ogc-features/collections/all/items.json') > -1) {
1225+
return Promise.resolve(new Response(l7StructureData1052943054Items));
1226+
}
1227+
if (url.indexOf('/web/datas/1052943054/structureddata.json') > -1) {
1228+
return Promise.resolve(new Response(l7StructureData1052943054));
1229+
}
1230+
if (url.indexOf('/web/datas/1767084124/structureddata/ogc-features/collections/all/items.json') > -1) {
1231+
return Promise.resolve(new Response(l7StructureData1767084124Items));
1232+
}
1233+
if (url.indexOf('/web/datas/1767084124/structureddata.json') > -1) {
1234+
return Promise.resolve(new Response(l7StructureData1767084124));
1235+
}
1236+
return Promise.resolve();
1237+
});
1238+
mapstudioWebmap = new WebMap(
1239+
id,
1240+
{
1241+
server: server
1242+
}
1243+
);
1244+
mapstudioWebmap.once('mapcreatesucceeded', ({ map: firstMap, layers: firstLayersList }) => {
1245+
expect(firstMap).not.toBeUndefined();
1246+
const style = firstMap.getStyle();
1247+
expect(style.layers.length).toEqual(mapInfo.layers.length);
1248+
const webMap1 = new WebMap(id, { server, map: firstMap });
1249+
webMap1.once('mapcreatesucceeded', ({ map, layers }) => {
1250+
expect(map).toEqual(firstMap);
1251+
expect(layers.length).toBe(firstLayersList.length);
1252+
expect(map.$l7scene).not.toBeUndefined();
1253+
const mapSpy = spyOn(map, 'remove');
1254+
const sceneSpy = spyOn(map.$l7scene, 'removeAllLayer');
1255+
webMap1.cleanLayers();
1256+
expect(mapSpy).not.toHaveBeenCalled();
1257+
expect(sceneSpy).not.toHaveBeenCalled();
1258+
done();
1259+
});
1260+
});
1261+
});
11991262
});

0 commit comments

Comments
 (0)