@deck.gl/geo-layers 8.6.3 → 8.7.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/dist.dev.js +9747 -6413
  2. package/dist/es5/great-circle-layer/great-circle-layer.js +26 -1
  3. package/dist/es5/great-circle-layer/great-circle-layer.js.map +1 -1
  4. package/dist/es5/h3-layers/h3-cluster-layer.js +149 -87
  5. package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
  6. package/dist/es5/h3-layers/h3-hexagon-layer.js +326 -230
  7. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
  8. package/dist/es5/index.js +9 -9
  9. package/dist/es5/index.js.map +1 -1
  10. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
  11. package/dist/es5/mesh-layer/mesh-layer.js +153 -132
  12. package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
  13. package/dist/es5/mvt-layer/coordinate-transform.js +46 -20
  14. package/dist/es5/mvt-layer/coordinate-transform.js.map +1 -1
  15. package/dist/es5/mvt-layer/find-index-binary.js +45 -26
  16. package/dist/es5/mvt-layer/find-index-binary.js.map +1 -1
  17. package/dist/es5/mvt-layer/mvt-layer.js +395 -280
  18. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  19. package/dist/es5/s2-layer/s2-geometry.js +43 -32
  20. package/dist/es5/s2-layer/s2-geometry.js.map +1 -1
  21. package/dist/es5/s2-layer/s2-layer.js +104 -69
  22. package/dist/es5/s2-layer/s2-layer.js.map +1 -1
  23. package/dist/es5/s2-layer/s2-utils.js +27 -28
  24. package/dist/es5/s2-layer/s2-utils.js.map +1 -1
  25. package/dist/es5/terrain-layer/terrain-layer.js +250 -208
  26. package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
  27. package/dist/es5/tile-3d-layer/tile-3d-layer.js +384 -329
  28. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
  29. package/dist/es5/tile-layer/tile-2d-header.js +182 -118
  30. package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
  31. package/dist/es5/tile-layer/tile-2d-traversal.js +176 -113
  32. package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
  33. package/dist/es5/tile-layer/tile-layer.js +254 -213
  34. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  35. package/dist/es5/tile-layer/tileset-2d.js +519 -300
  36. package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
  37. package/dist/es5/tile-layer/utils.js +110 -61
  38. package/dist/es5/tile-layer/utils.js.map +1 -1
  39. package/dist/es5/trips-layer/trips-layer.js +81 -44
  40. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  41. package/dist/esm/h3-layers/h3-hexagon-layer.js +2 -1
  42. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  43. package/dist/esm/index.js.map +1 -1
  44. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
  45. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -1
  46. package/dist/esm/mesh-layer/mesh-layer.js +2 -8
  47. package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
  48. package/dist/esm/mvt-layer/coordinate-transform.js +1 -1
  49. package/dist/esm/mvt-layer/coordinate-transform.js.map +1 -1
  50. package/dist/esm/mvt-layer/mvt-layer.js +27 -1
  51. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  52. package/dist/esm/s2-layer/s2-utils.js.map +1 -1
  53. package/dist/esm/terrain-layer/terrain-layer.js +8 -10
  54. package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
  55. package/dist/esm/tile-3d-layer/tile-3d-layer.js +2 -1
  56. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
  57. package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
  58. package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
  59. package/dist/esm/tile-layer/tile-layer.js +8 -16
  60. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  61. package/dist/esm/tile-layer/tileset-2d.js +85 -79
  62. package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
  63. package/dist.min.js +2 -2
  64. package/package.json +12 -12
  65. package/src/h3-layers/h3-hexagon-layer.js +2 -1
  66. package/src/{index.js → index.ts} +0 -0
  67. package/src/mesh-layer/mesh-layer-vertex.glsl.js +24 -23
  68. package/src/mesh-layer/mesh-layer.js +5 -4
  69. package/src/mvt-layer/coordinate-transform.js +1 -1
  70. package/src/mvt-layer/mvt-layer.js +17 -1
  71. package/src/s2-layer/s2-utils.js +7 -1
  72. package/src/terrain-layer/terrain-layer.js +10 -9
  73. package/src/tile-3d-layer/tile-3d-layer.js +12 -9
  74. package/src/tile-layer/tile-2d-traversal.js +17 -3
  75. package/src/tile-layer/tile-layer.js +11 -12
  76. package/src/tile-layer/tileset-2d.js +103 -90
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@deck.gl/geo-layers",
3
3
  "description": "deck.gl layers supporting geospatial use cases and GIS formats",
4
4
  "license": "MIT",
5
- "version": "8.6.3",
5
+ "version": "8.7.0-alpha.10",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
@@ -29,18 +29,18 @@
29
29
  "prepublishOnly": "npm run build-bundle && npm run build-bundle -- --env.dev"
30
30
  },
31
31
  "dependencies": {
32
- "@loaders.gl/3d-tiles": "^3.0.8",
33
- "@loaders.gl/gis": "^3.0.8",
34
- "@loaders.gl/loader-utils": "^3.0.8",
35
- "@loaders.gl/mvt": "^3.0.8",
36
- "@loaders.gl/terrain": "^3.0.8",
37
- "@loaders.gl/tiles": "^3.0.8",
32
+ "@loaders.gl/3d-tiles": "^3.1.3",
33
+ "@loaders.gl/gis": "^3.1.3",
34
+ "@loaders.gl/loader-utils": "^3.1.3",
35
+ "@loaders.gl/mvt": "^3.1.3",
36
+ "@loaders.gl/terrain": "^3.1.3",
37
+ "@loaders.gl/tiles": "^3.1.3",
38
38
  "@luma.gl/experimental": "^8.5.10",
39
- "@math.gl/culling": "^3.5.4",
40
- "@math.gl/web-mercator": "^3.5.4",
39
+ "@math.gl/core": "^3.5.6",
40
+ "@math.gl/culling": "^3.5.6",
41
+ "@math.gl/web-mercator": "^3.5.6",
41
42
  "h3-js": "^3.6.0",
42
- "long": "^3.2.0",
43
- "math.gl": "^3.5.4"
43
+ "long": "^3.2.0"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "@deck.gl/core": "^8.0.0",
@@ -49,5 +49,5 @@
49
49
  "@deck.gl/mesh-layers": "^8.0.0",
50
50
  "@loaders.gl/core": "^3.0.0"
51
51
  },
52
- "gitHead": "938ee03697eecbaced24c9df637d53ab42375df1"
52
+ "gitHead": "b6c48fb68b66755743c28776a0642b56a2df086a"
53
53
  }
@@ -8,7 +8,7 @@ import {
8
8
  edgeLength,
9
9
  UNITS
10
10
  } from 'h3-js';
11
- import {lerp} from 'math.gl';
11
+ import {lerp} from '@math.gl/core';
12
12
  import {CompositeLayer, createIterable} from '@deck.gl/core';
13
13
  import {ColumnLayer, PolygonLayer} from '@deck.gl/layers';
14
14
 
@@ -304,6 +304,7 @@ export default class H3HexagonLayer extends CompositeLayer {
304
304
  forwardProps,
305
305
  this.getSubLayerProps({
306
306
  id: 'hexagon-cell',
307
+ flatShading: true,
307
308
  updateTriggers: forwardProps.updateTriggers
308
309
  }),
309
310
  {
File without changes
@@ -26,12 +26,18 @@ out vec3 normals_commonspace;
26
26
  out vec4 position_commonspace;
27
27
  out vec4 vColor;
28
28
 
29
- void main(void) {
30
- // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/geometryUVRegion.cmn.md
31
- vec2 uv = fract(texCoords) * (uvRegions.zw - uvRegions.xy) + uvRegions.xy;
29
+ vec2 applyUVRegion(vec2 uv) {
30
+ #ifdef HAS_UV_REGIONS
31
+ // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/geometryUVRegion.cmn.md
32
+ return fract(uv) * (uvRegions.zw - uvRegions.xy) + uvRegions.xy;
33
+ #else
34
+ return uv;
35
+ #endif
36
+ }
32
37
 
38
+ void main(void) {
39
+ vec2 uv = applyUVRegion(texCoords);
33
40
  geometry.uv = uv;
34
- geometry.uv = texCoords;
35
41
 
36
42
  if (u_pickFeatureIds) {
37
43
  geometry.pickingColor = featureIdsPickingColors;
@@ -39,26 +45,9 @@ void main(void) {
39
45
  geometry.pickingColor = instancePickingColors;
40
46
  }
41
47
 
42
- #ifdef MODULE_PBR
43
- // set PBR data
44
- #ifdef HAS_NORMALS
45
- pbr_vNormal = project_normal(instanceModelMatrix * normals);
46
- geometry.normal = pbr_vNormal;
47
- #endif
48
-
49
- #ifdef HAS_UV
50
- pbr_vUV = uv;
51
- #else
52
- pbr_vUV = vec2(0., 0.);
53
- #endif
54
- geometry.uv = pbr_vUV;
55
- #endif
56
-
57
48
  vTexCoord = uv;
58
49
  cameraPosition = project_uCameraPosition;
59
- normals_commonspace = project_normal(instanceModelMatrix * normals);
60
50
  vColor = vec4(colors * instanceColors.rgb, instanceColors.a);
61
- geometry.normal = normals_commonspace;
62
51
 
63
52
  vec3 pos = (instanceModelMatrix * positions) * sizeScale;
64
53
  vec3 projectedPosition = project_position(positions);
@@ -66,13 +55,25 @@ void main(void) {
66
55
  gl_Position = project_common_position_to_clipspace(position_commonspace);
67
56
 
68
57
  geometry.position = position_commonspace;
58
+ normals_commonspace = project_normal(instanceModelMatrix * normals);
59
+ geometry.normal = normals_commonspace;
60
+
61
+ DECKGL_FILTER_GL_POSITION(gl_Position, geometry);
69
62
 
70
63
  #ifdef MODULE_PBR
71
64
  // set PBR data
72
65
  pbr_vPosition = geometry.position.xyz;
73
- #endif
66
+ #ifdef HAS_NORMALS
67
+ pbr_vNormal = geometry.normal;
68
+ #endif
74
69
 
75
- DECKGL_FILTER_GL_POSITION(gl_Position, geometry);
70
+ #ifdef HAS_UV
71
+ pbr_vUV = uv;
72
+ #else
73
+ pbr_vUV = vec2(0., 0.);
74
+ #endif
75
+ geometry.uv = pbr_vUV;
76
+ #endif
76
77
 
77
78
  DECKGL_FILTER_COLOR(vColor, geometry);
78
79
  }
@@ -11,9 +11,6 @@ function validateGeometryAttributes(attributes) {
11
11
  if (!hasColorAttribute) {
12
12
  attributes.colors = {constant: true, value: new Float32Array([1, 1, 1])};
13
13
  }
14
- if (!attributes.uvRegions) {
15
- attributes.uvRegions = {constant: true, value: new Float32Array([0, 0, 1, 1])};
16
- }
17
14
  }
18
15
 
19
16
  const defaultProps = {
@@ -76,7 +73,11 @@ export default class _MeshLayer extends SimpleMeshLayer {
76
73
  ...this.getShaders(),
77
74
  id,
78
75
  geometry: mesh,
79
- defines: {...shaders.defines, ...materialParser?.defines},
76
+ defines: {
77
+ ...shaders.defines,
78
+ ...materialParser?.defines,
79
+ HAS_UV_REGIONS: mesh.attributes.uvRegions
80
+ },
80
81
  parameters: materialParser?.parameters,
81
82
  isInstanced: true
82
83
  });
@@ -1,4 +1,4 @@
1
- import {lerp} from 'math.gl';
1
+ import {lerp} from '@math.gl/core';
2
2
 
3
3
  const availableTransformations = {
4
4
  Point,
@@ -1,5 +1,5 @@
1
1
  import {log} from '@deck.gl/core';
2
- import {Matrix4} from 'math.gl';
2
+ import {Matrix4} from '@math.gl/core';
3
3
  import {MVTWorkerLoader} from '@loaders.gl/mvt';
4
4
  import {binaryToGeojson} from '@loaders.gl/gis';
5
5
  import {COORDINATE_SYSTEM} from '@deck.gl/core';
@@ -43,6 +43,10 @@ export default class MVTLayer extends TileLayer {
43
43
  super.updateState({props, oldProps, context, changeFlags});
44
44
  this._setWGS84PropertyForTiles();
45
45
  }
46
+ const {highlightColor} = props;
47
+ if (highlightColor !== oldProps.highlightColor && Array.isArray(highlightColor)) {
48
+ this.setState({highlightColor});
49
+ }
46
50
  }
47
51
 
48
52
  /* eslint-disable complexity */
@@ -167,12 +171,17 @@ export default class MVTLayer extends TileLayer {
167
171
  newHoveredFeatureId = getFeatureUniqueId(hoveredFeature, uniqueIdProperty);
168
172
  newHoveredFeatureLayerName = getFeatureLayerName(hoveredFeature);
169
173
  }
174
+ let {highlightColor} = this.props;
175
+ if (typeof highlightColor === 'function') {
176
+ highlightColor = highlightColor(info);
177
+ }
170
178
 
171
179
  if (
172
180
  hoveredFeatureId !== newHoveredFeatureId ||
173
181
  hoveredFeatureLayerName !== newHoveredFeatureLayerName
174
182
  ) {
175
183
  this.setState({
184
+ highlightColor,
176
185
  hoveredFeatureId: newHoveredFeatureId,
177
186
  hoveredFeatureLayerName: newHoveredFeatureLayerName
178
187
  });
@@ -195,6 +204,13 @@ export default class MVTLayer extends TileLayer {
195
204
  return info;
196
205
  }
197
206
 
207
+ getSubLayerPropsByTile(tile) {
208
+ return {
209
+ highlightedObjectIndex: this.getHighlightedObjectIndex(tile),
210
+ highlightColor: this.state.highlightColor
211
+ };
212
+ }
213
+
198
214
  getHighlightedObjectIndex(tile) {
199
215
  const {hoveredFeatureId, hoveredFeatureLayerName} = this.state;
200
216
  const {uniqueIdProperty, highlightedFeatureId, binary} = this.props;
@@ -25,7 +25,13 @@ const MAX_RESOLUTION = 100;
25
25
  /* Adapted from s2-geometry's S2Cell.getCornerLatLngs */
26
26
  /* eslint-disable max-statements */
27
27
  function getGeoBounds({face, ij, level}) {
28
- const offsets = [[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]];
28
+ const offsets = [
29
+ [0, 0],
30
+ [0, 1],
31
+ [1, 1],
32
+ [1, 0],
33
+ [0, 0]
34
+ ];
29
35
 
30
36
  // The S2 cell edge is curved: http://s2geometry.io/
31
37
  // This is more prominent at lower levels
@@ -20,7 +20,7 @@
20
20
 
21
21
  import {CompositeLayer, log} from '@deck.gl/core';
22
22
  import {SimpleMeshLayer} from '@deck.gl/mesh-layers';
23
- import {WebMercatorViewport, COORDINATE_SYSTEM} from '@deck.gl/core';
23
+ import {COORDINATE_SYSTEM} from '@deck.gl/core';
24
24
  import {TerrainWorkerLoader} from '@loaders.gl/terrain';
25
25
  import TileLayer from '../tile-layer/tile-layer';
26
26
  import {urlType, getURLFromTemplate} from '../tile-layer/utils';
@@ -123,17 +123,17 @@ export default class TerrainLayer extends CompositeLayer {
123
123
 
124
124
  getTiledTerrainData(tile) {
125
125
  const {elevationData, fetch, texture, elevationDecoder, meshMaxError} = this.props;
126
+ const {viewport} = this.context;
126
127
  const dataUrl = getURLFromTemplate(elevationData, tile);
127
128
  const textureUrl = getURLFromTemplate(texture, tile);
128
129
 
129
- const {bbox, signal, z} = tile;
130
- const viewport = new WebMercatorViewport({
131
- longitude: (bbox.west + bbox.east) / 2,
132
- latitude: (bbox.north + bbox.south) / 2,
133
- zoom: z
134
- });
135
- const bottomLeft = viewport.projectFlat([bbox.west, bbox.south]);
136
- const topRight = viewport.projectFlat([bbox.east, bbox.north]);
130
+ const {bbox, signal} = tile;
131
+ const bottomLeft = viewport.isGeospatial
132
+ ? viewport.projectFlat([bbox.west, bbox.south])
133
+ : [bbox.left, bbox.bottom];
134
+ const topRight = viewport.isGeospatial
135
+ ? viewport.projectFlat([bbox.east, bbox.north])
136
+ : [bbox.right, bbox.top];
137
137
  const bounds = [bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]];
138
138
 
139
139
  const terrain = this.loadTerrain({
@@ -165,6 +165,7 @@ export default class TerrainLayer extends CompositeLayer {
165
165
  data: DUMMY_DATA,
166
166
  mesh,
167
167
  texture,
168
+ _instanced: false,
168
169
  coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,
169
170
  getPosition: d => [0, 0, 0],
170
171
  getColor: color
@@ -192,13 +192,8 @@ export default class Tile3DLayer extends CompositeLayer {
192
192
  }
193
193
 
194
194
  _makePointCloudLayer(tileHeader, oldLayer) {
195
- const {
196
- attributes,
197
- pointCount,
198
- constantRGBA,
199
- cartographicOrigin,
200
- modelMatrix
201
- } = tileHeader.content;
195
+ const {attributes, pointCount, constantRGBA, cartographicOrigin, modelMatrix} =
196
+ tileHeader.content;
202
197
  const {positions, normals, colors} = attributes;
203
198
 
204
199
  if (!positions) {
@@ -267,7 +262,15 @@ export default class Tile3DLayer extends CompositeLayer {
267
262
 
268
263
  _makeSimpleMeshLayer(tileHeader, oldLayer) {
269
264
  const content = tileHeader.content;
270
- const {attributes, indices, modelMatrix, cartographicOrigin, material, featureIds} = content;
265
+ const {
266
+ attributes,
267
+ indices,
268
+ modelMatrix,
269
+ cartographicOrigin,
270
+ coordinateSystem = COORDINATE_SYSTEM.METER_OFFSETS,
271
+ material,
272
+ featureIds
273
+ } = content;
271
274
  const {_getMeshColor} = this.props;
272
275
 
273
276
  const geometry =
@@ -293,7 +296,7 @@ export default class Tile3DLayer extends CompositeLayer {
293
296
  pbrMaterial: material,
294
297
  modelMatrix,
295
298
  coordinateOrigin: cartographicOrigin,
296
- coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,
299
+ coordinateSystem,
297
300
  featureIds,
298
301
  _offset: 0
299
302
  }
@@ -12,9 +12,23 @@ const TILE_SIZE = 512;
12
12
  // number of world copies to check
13
13
  const MAX_MAPS = 3;
14
14
  // for calculating bounding volume of a tile in a non-web-mercator viewport
15
- const REF_POINTS_5 = [[0.5, 0.5], [0, 0], [0, 1], [1, 0], [1, 1]]; // 4 corners and center
16
- const REF_POINTS_9 = REF_POINTS_5.concat([[0, 0.5], [0.5, 0], [1, 0.5], [0.5, 1]]); // 4 corners, center and 4 mid points
17
- const REF_POINTS_11 = REF_POINTS_9.concat([[0.25, 0.5], [0.75, 0.5]]); // 2 additional points on equator for top tile
15
+ const REF_POINTS_5 = [
16
+ [0.5, 0.5],
17
+ [0, 0],
18
+ [0, 1],
19
+ [1, 0],
20
+ [1, 1]
21
+ ]; // 4 corners and center
22
+ const REF_POINTS_9 = REF_POINTS_5.concat([
23
+ [0, 0.5],
24
+ [0.5, 0],
25
+ [1, 0.5],
26
+ [0.5, 1]
27
+ ]); // 4 corners, center and 4 mid points
28
+ const REF_POINTS_11 = REF_POINTS_9.concat([
29
+ [0.25, 0.5],
30
+ [0.75, 0.5]
31
+ ]); // 2 additional points on equator for top tile
18
32
 
19
33
  class OSMNode {
20
34
  constructor(x, y, z) {
@@ -144,18 +144,14 @@ export default class TileLayer extends CompositeLayer {
144
144
  this.props.onTileLoad(tile);
145
145
  tile.layers = null;
146
146
 
147
- if (tile.isVisible) {
148
- this.setNeedsUpdate();
149
- }
147
+ this.setNeedsUpdate();
150
148
  }
151
149
 
152
150
  _onTileError(error, tile) {
153
151
  this.props.onTileError(error);
154
152
  tile.layers = null;
155
153
 
156
- if (tile.isVisible) {
157
- this.setNeedsUpdate();
158
- }
154
+ this.setNeedsUpdate();
159
155
  }
160
156
 
161
157
  _onTileUnload(tile) {
@@ -183,8 +179,8 @@ export default class TileLayer extends CompositeLayer {
183
179
  return this.props.renderSubLayers(props);
184
180
  }
185
181
 
186
- getHighlightedObjectIndex() {
187
- return -1;
182
+ getSubLayerPropsByTile(tile) {
183
+ return null;
188
184
  }
189
185
 
190
186
  getPickingInfo({info, sourceLayer}) {
@@ -200,7 +196,7 @@ export default class TileLayer extends CompositeLayer {
200
196
 
201
197
  renderLayers() {
202
198
  return this.state.tileset.tiles.map(tile => {
203
- const highlightedObjectIndex = this.getHighlightedObjectIndex(tile);
199
+ const subLayerProps = this.getSubLayerPropsByTile(tile);
204
200
  // cache the rendered layer in the tile
205
201
  if (!tile.isLoaded && !tile.content) {
206
202
  // nothing to show
@@ -215,14 +211,17 @@ export default class TileLayer extends CompositeLayer {
215
211
  tile.layers = flatten(layers, Boolean).map(layer =>
216
212
  layer.clone({
217
213
  tile,
218
- highlightedObjectIndex
214
+ ...subLayerProps
219
215
  })
220
216
  );
221
217
  } else if (
218
+ subLayerProps &&
222
219
  tile.layers[0] &&
223
- tile.layers[0].props.highlightedObjectIndex !== highlightedObjectIndex
220
+ Object.keys(subLayerProps).some(
221
+ propName => tile.layers[0].props[propName] !== subLayerProps[propName]
222
+ )
224
223
  ) {
225
- tile.layers = tile.layers.map(layer => layer.clone({highlightedObjectIndex}));
224
+ tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));
226
225
  }
227
226
  return tile.layers;
228
227
  });