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