Skip to content

Commit 86feffa

Browse files
committed
【feature】mapboxgl querySourceFeatures queryRenderedFeatures 过滤不可见图层的查询
1 parent 1e56005 commit 86feffa

File tree

4 files changed

+31
-4
lines changed

4 files changed

+31
-4
lines changed

src/mapboxgl/overlay/Base.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ export class CustomOverlayLayer {
6060
// 移除 layer 事件
6161
off() {}
6262

63-
// 查询足查询参数的可见要素的 GeoJSON 要素对象数组
63+
// 查询足查询参数的可见要素的 GeoJSON 要素对象数组,如果图层不可见则返回空
6464
queryRenderedFeatures() {}
6565

66-
// 查询满足查询参数的指定矢量切片或 GeoJSON 源中的要素
66+
// 查询满足查询参数的指定矢量切片或 GeoJSON 源中的要素,如果图层不可见则返回空
6767
querySourceFeatures() {}
6868
}

src/mapboxgl/overlay/L7Layer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ export class L7Layer extends CustomOverlayLayer {
292292
}
293293

294294
queryRenderedFeatures(geometry, options, cb) {
295-
if (!this.l7layer) {
295+
if (!this.l7layer || !this.l7layer.rawConfig.visible) {
296296
return cb([]);
297297
}
298298
let box = geometry;
@@ -321,7 +321,7 @@ export class L7Layer extends CustomOverlayLayer {
321321
}
322322

323323
querySourceFeatures() {
324-
if (!this.l7layer) {
324+
if (!this.l7layer || !this.l7layer.rawConfig.visible) {
325325
return [];
326326
}
327327
const layerSource = this.l7layer.layerSource;

test/mapboxgl/overlay/L7LayerSpec.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,28 @@ describe('mapboxgl L7Layer', () => {
507507
const nextLayerFilter = layer.getFilter();
508508
expect(nextLayerFilter.field).toEqual([]);
509509
expect(nextLayerFilter.values('1')).toBeTruthy();
510+
511+
let queryFeatures;
512+
const queryResult = {
513+
cb: function (data) {
514+
queryFeatures = data;
515+
}
516+
};
517+
spyOn(queryResult, 'cb').and.callThrough();
518+
layer.queryRenderedFeatures([0, 0], {}, queryResult.cb);
519+
expect(queryResult.cb.calls.count()).toBe(1);
520+
expect(queryFeatures).not.toBeUndefined();
521+
expect(queryFeatures.length).toBeGreaterThan(0);
522+
expect(layer.querySourceFeatures().length).toBeGreaterThan(0);
523+
expect(layer.getLayer().layout.visibility).toBe('visible');
524+
layer.setLayoutProperty('visibility', 'none');
525+
expect(layer.getLayer().layout.visibility).toBe('none');
526+
expect(layer.querySourceFeatures().length).toBe(0);
527+
layer.queryRenderedFeatures([0, 0], {}, queryResult.cb);
528+
expect(queryResult.cb.calls.count()).toBe(2);
529+
expect(queryFeatures.length).toBe(0);
530+
layer.setLayoutProperty('visibility', 'visible');
531+
510532
spyOn(l7Layer, 'on');
511533
spyOn(l7Layer, 'once');
512534
spyOn(l7Layer, 'off');

test/tool/mock_l7.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ class Layer {
5757
dataArray: []
5858
}
5959
};
60+
if (this.rawConfig.visible === void 0) {
61+
this.rawConfig.visible = true;
62+
}
6063
}
6164
source(data, options = {}) {
6265
const parser = options.parser || { type: "geojson" };
@@ -124,9 +127,11 @@ class Layer {
124127
return this;
125128
}
126129
show() {
130+
this.rawConfig.visible = true;
127131
return this;
128132
}
129133
hide() {
134+
this.rawConfig.visible = false;
130135
return this;
131136
}
132137
getSource() {

0 commit comments

Comments
 (0)