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