Skip to content

Commit 7632929

Browse files
committed
【feature】webmap3.0 datasource 优化; l7 结构化数据指定 promoteId
1 parent 98de761 commit 7632929

File tree

7 files changed

+369
-407
lines changed

7 files changed

+369
-407
lines changed

src/mapboxgl/mapping/utils/L7LayerUtil.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1948,7 +1948,7 @@ function addL7MarkerLayer(actionLayer, scene) {
19481948
return layer;
19491949
}
19501950

1951-
function getL7Layer(l) {
1951+
function getL7Layer(l, sourceInfo) {
19521952
const typeRule = {
19531953
[MSLayerType.line]: 'LineLayer',
19541954
[MSLayerType.point]: 'PointLayer',
@@ -1958,7 +1958,7 @@ function getL7Layer(l) {
19581958
const source = l.source || {};
19591959
const layer = new L7Layer({
19601960
type: typeRule[l.type],
1961-
options: { ...l.options, layerID: (l.options || {}).name, featureId: (source.parser || {}).type === 'mvt' ? 'smpid' : undefined } // 解决L7结构化数据监听click事件会返回多个features问题
1961+
options: { ...l.options, layerID: (l.options || {}).name, featureId: sourceInfo.promoteId } // 解决L7结构化数据监听click事件会返回多个features问题
19621962
});
19631963
// getL7Layer返回原生antv l7 layer的实例
19641964
const l7Layer = layer.getL7Layer();
@@ -2033,7 +2033,7 @@ export async function addL7Layers({ map, webMapInfo, l7Layers, spriteDatas, opti
20332033
(l.options || {}).visible !== false && addL7MarkerLayer(actionLayer, scene);
20342034
ChartController.setSceneChartLayer(l.id, actionLayer);
20352035
} else {
2036-
const layer = getL7Layer(l);
2036+
const layer = getL7Layer(l, sources[layers[layerIndex].source]);
20372037
if (!map.getLayer(layer.id)) {
20382038
map.addLayer(layer, beforeLayer && beforeLayer.id);
20392039
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,17 @@ export class WebMap extends mapboxgl.Evented {
717717
}
718718
}
719719
const sourceOnMap = this.map.getSource(layer.source);
720+
if (!Object.keys(dataSource).length && sourceOnMap && sourceOnMap.type === 'vector') {
721+
const matchSource = this._mapInfo.sources[layer.source] || sourceOnMap;
722+
if (matchSource.tiles && matchSource.tiles[0].includes('/rest/maps/')) {
723+
const tileUrl = matchSource.tiles[0];
724+
const [serverUrl, leftParts] = tileUrl.split('/rest/maps/');
725+
const [mapName] = leftParts.split('/tileFeature');
726+
dataSource.url = `${serverUrl}/rest/maps`;
727+
dataSource.mapName = mapName;
728+
dataSource.type = 'REST_MAP';
729+
}
730+
}
720731
const layout = layer.layout || {};
721732
const overlayLayers = this._formatLayer({
722733
id: layer.id,

test/mapboxgl/mapping/WebMapV3Spec.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,7 @@ describe('mapboxgl-webmap3.0', () => {
543543
});
544544

545545
it('layerdatas', (done) => {
546+
const spyTest = spyOn(mapboxgl, 'Map').and.callFake(mbglmap);
546547
spyOn(FetchRequest, 'get').and.callFake((url) => {
547548
if (url.indexOf('map.json') > -1) {
548549
return Promise.resolve(new Response(apstudioWebMap_layerData));
@@ -554,10 +555,8 @@ describe('mapboxgl-webmap3.0', () => {
554555
return Promise.resolve();
555556
});
556557
mapstudioWebmap = new WebMap(id, {
557-
server: server,
558-
iportalServiceProxyUrl: 'layerdatas'
558+
server: server
559559
});
560-
561560
mapstudioWebmap.on('addlayerssucceeded', ({ map }) => {
562561
expect(map).not.toBeUndefined();
563562
expect(mapstudioWebmap.map).toEqual(map);
@@ -567,8 +566,8 @@ describe('mapboxgl-webmap3.0', () => {
567566
expect(style.layers.length).toBe(mapInfo.layers.length);
568567
const appreciableLayers = webMapV3.getAppreciableLayers();
569568
const layerList = webMapV3.getLayerCatalog();
570-
expect(layerList.length).toBe(4);
571-
expect(appreciableLayers.length).toBe(4);
569+
expect(layerList.length).toBe(5);
570+
expect(appreciableLayers.length).toBe(5);
572571
expect(
573572
appreciableLayers.some(
574573
(item) =>
@@ -585,13 +584,23 @@ describe('mapboxgl-webmap3.0', () => {
585584
(item) =>
586585
item.id === 'ms_New_LINE_1718091329989_7' &&
587586
item.dataSource.type === 'REST_DATA' &&
588-
item.dataSource.url === 'http://172.16.14.44:8090/iserver/services/data-Building/rest/data' &&
587+
item.dataSource.url.match(/\/iserver\/services\/data-Building\/rest\/data$/) &&
589588
item.dataSource.serverId === void 0
590589
)
591590
).toBeTruthy();
591+
expect(
592+
appreciableLayers.some(
593+
(item) =>
594+
item.renderSource.id === 'ms_M_3857_1719917169016_4' &&
595+
item.dataSource.type === 'REST_MAP' &&
596+
item.dataSource.url.match(/\/iserver\/services\/map-multi0508\/rest\/maps$/) &&
597+
item.dataSource.mapName === 'M_3857'
598+
)
599+
).toBeTruthy();
592600
expect(
593601
appreciableLayers.some((item) => item.id === 'CHINA_DARK' && !Object.keys(item.dataSource).length)
594602
).toBeTruthy();
603+
spyTest.calls.reset();
595604
done();
596605
});
597606
});

test/mapboxgl/mapping/utils/L7LayerUtilSpec.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,8 @@ describe('L7LayerUtil', () => {
459459
'http://localhost:8195/portalproxy/592c4095f464540e/iserver/services/map-LinkMap/restjsr/v1/vectortile/maps/%E5%8E%BF%E7%BA%A7%E8%A1%8C%E6%94%BF%E5%8C%BA%E5%88%92%40link/tiles/{z}/{x}/{y}.mvt'
460460
],
461461
bounds: [102.98962307000005, 30.090978575000065, 104.89626180000005, 31.437765225000078],
462-
type: 'vector'
462+
type: 'vector',
463+
promoteId: 'spmid'
463464
}
464465
};
465466
const nextOptions = {

test/mapboxgl/overlay/L7LayerSpec.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@ describe('mapboxgl L7Layer', () => {
448448
type: 'Feature',
449449
properties: {
450450
city: '北京',
451+
spmid: 1
451452
},
452453
geometry: {
453454
type: 'Point',
@@ -490,6 +491,11 @@ describe('mapboxgl L7Layer', () => {
490491
layer.setSelectedDatas(geoData.features);
491492
expect(layer.selectedDatas.length).toEqual(geoData.features.length);
492493
expect(layerFilter.values('北京')).toBeFalsy();
494+
layer.setSelectedDatas([]);
495+
layer.l7layer.rawConfig.filter = ['all', ['==', '$type', 'LineString']];
496+
const nextLayerFilter = layer.getFilter();
497+
expect(nextLayerFilter.field).toEqual([]);
498+
expect(nextLayerFilter.values('1')).toBeTruthy();
493499
spyOn(l7Layer, 'on');
494500
spyOn(l7Layer, 'once');
495501
spyOn(l7Layer, 'off');

0 commit comments

Comments
 (0)