Skip to content

Commit d3eca96

Browse files
committed
【feature】mapboxgl querySourceFeatures 统一返回的结构 geoJSON
1 parent 86feffa commit d3eca96

File tree

3 files changed

+67
-13
lines changed

3 files changed

+67
-13
lines changed

src/mapboxgl/overlay/L7Layer.js

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -309,23 +309,28 @@ export class L7Layer extends CustomOverlayLayer {
309309
const _this = this;
310310
this.l7layer.boxSelect([Math.min(x1, x2), Math.min(y1, y2), Math.max(x1, x2), Math.max(y1, y2)], (features) => {
311311
const nextFeatures = features || [];
312-
cb(
313-
nextFeatures.map((item) => {
314-
return {
315-
...item,
316-
layer: _this.getLayer()
317-
};
318-
})
319-
);
312+
const { layerCapture = true } = options || {};
313+
if (layerCapture) {
314+
cb(
315+
nextFeatures.map((item) => {
316+
return {
317+
...item,
318+
layer: _this.getLayer()
319+
};
320+
})
321+
);
322+
return;
323+
}
324+
cb(nextFeatures);
320325
});
321326
}
322327

323328
querySourceFeatures() {
324329
if (!this.l7layer || !this.l7layer.rawConfig.visible) {
325330
return [];
326331
}
327-
const layerSource = this.l7layer.layerSource;
328-
let datas = layerSource.data.dataArray;
332+
const { layerSource, pickingService } = this.l7layer;
333+
let datas = pickingService.handleRawFeature(layerSource.data.dataArray);
329334
const { parser: { type } } = layerSource;
330335
if (type === 'mvt') {
331336
const { tileset: { cacheTiles = [] } = {} } = layerSource;
@@ -339,7 +344,7 @@ export class L7Layer extends CustomOverlayLayer {
339344
(!(item.properties || {})[featureId] ||
340345
!mvtDatas.some((feature) => feature.properties[featureId] === item.properties[featureId]))
341346
);
342-
mvtDatas.push(...features);
347+
mvtDatas.push(...pickingService.handleRawFeature(features));
343348
});
344349
datas = datas.length > mvtDatas.length ? datas : mvtDatas;
345350
}
@@ -351,7 +356,7 @@ export class L7Layer extends CustomOverlayLayer {
351356
[0, 0],
352357
[this.map.transform.width - 1, this.map.transform.height - 1] // -1 是解决报错问题
353358
];
354-
this.queryRenderedFeatures(bounds, undefined, cb);
359+
this.queryRenderedFeatures(bounds, { layerCapture: false }, cb);
355360
}
356361
return datas;
357362
}

test/mapboxgl/overlay/L7LayerSpec.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,14 @@ describe('mapboxgl L7Layer', () => {
519519
expect(queryResult.cb.calls.count()).toBe(1);
520520
expect(queryFeatures).not.toBeUndefined();
521521
expect(queryFeatures.length).toBeGreaterThan(0);
522-
expect(layer.querySourceFeatures().length).toBeGreaterThan(0);
522+
expect(queryFeatures[0].geometry).not.toBeUndefined();
523+
expect(queryFeatures[0].properties).not.toBeUndefined();
524+
expect(queryFeatures[0].layer).not.toBeUndefined();
525+
const sourceFeatures = layer.querySourceFeatures();
526+
expect(sourceFeatures.length).toBeGreaterThan(0);
527+
expect(sourceFeatures[0].geometry).not.toBeUndefined();
528+
expect(sourceFeatures[0].properties).not.toBeUndefined();
529+
expect(sourceFeatures[0].layer).toBeUndefined();
523530
expect(layer.getLayer().layout.visibility).toBe('visible');
524531
layer.setLayoutProperty('visibility', 'none');
525532
expect(layer.getLayer().layout.visibility).toBe('none');

test/tool/mock_l7.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,54 @@ class Layer {
5757
dataArray: []
5858
}
5959
};
60+
this.pickingService = {
61+
handleRawFeature: function (rawFeature) {
62+
rawFeature = rawFeature instanceof Array ? rawFeature : [rawFeature];
63+
const res = rawFeature.map((item) => {
64+
if (item === 'null') {
65+
return item;
66+
}
67+
if (item.type === 'Feature') {
68+
return item;
69+
}
70+
const newFeature = {
71+
properties: {},
72+
geometry: { type: '', coordinates: [] },
73+
};
74+
const coordinates = item.coordinates;
75+
delete item.coordinates;
76+
newFeature.properties = item;
77+
if (coordinates) {
78+
newFeature.geometry = { type: '', coordinates };
79+
}
80+
return newFeature;
81+
});
82+
return res;
83+
}
84+
}
6085
if (this.rawConfig.visible === void 0) {
6186
this.rawConfig.visible = true;
6287
}
6388
}
6489
source(data, options = {}) {
6590
const parser = options.parser || { type: "geojson" };
91+
let dataArray = [];
92+
if (parser.type === "geojson") {
93+
dataArray = data;
94+
}
95+
if (parser.type === 'json') {
96+
dataArray = [
97+
{
98+
航班有效期结束: 2016.11,
99+
到达城市: '北京',
100+
smpid: 1,
101+
coordinates: [
102+
[80.30091874, 41.26940127],
103+
[116.395645, 39.92998578]
104+
]
105+
}
106+
];
107+
}
66108
this.layerSource = {
67109
...options,
68110
parser,

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