diff --git a/src/source/tile.js b/src/source/tile.js index be9110a14ee..a0c5bff3b64 100644 --- a/src/source/tile.js +++ b/src/source/tile.js @@ -212,7 +212,8 @@ class Tile { this.vtLayers = new vt.VectorTile(new Protobuf(this.rawTileData)).layers; } - const layer = this.vtLayers._geojsonTileLayer || this.vtLayers[params.sourceLayer]; + const sourceLayer = params ? params.sourceLayer : undefined; + const layer = this.vtLayers._geojsonTileLayer || this.vtLayers[sourceLayer]; if (!layer) return; diff --git a/test/unit/source/tile.test.js b/test/unit/source/tile.test.js index 8c94e539b86..a30dc6ba049 100644 --- a/test/unit/source/tile.test.js +++ b/test/unit/source/tile.test.js @@ -48,6 +48,23 @@ test('querySourceFeatures', (t) => { t.end(); }); + t.test('empty geojson tile', (t) => { + const tile = new Tile(new TileCoord(1, 1, 1)); + let result; + + result = []; + tile.querySourceFeatures(result, {}); + t.equal(result.length, 0); + + const geojsonWrapper = new GeoJSONWrapper([]); + geojsonWrapper.name = '_geojsonTileLayer'; + tile.rawTileData = vtpbf({ layers: { '_geojsonTileLayer': geojsonWrapper }}); + result = []; + t.doesNotThrow(tile.querySourceFeatures(result)); + t.equal(result.length, 0); + t.end(); + }); + t.test('vector tile', (t) => { const tile = new Tile(new TileCoord(1, 1, 1)); let result;