@deck.gl/geo-layers 8.6.4 → 8.6.8

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 (73) hide show
  1. package/dist/dist.dev.js +6086 -2963
  2. package/dist/es5/great-circle-layer/great-circle-layer.js +28 -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 +322 -227
  7. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
  8. package/dist/es5/index.js +23 -23
  9. package/dist/es5/mesh-layer/mesh-layer.js +151 -125
  10. package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
  11. package/dist/es5/mvt-layer/coordinate-transform.js +45 -19
  12. package/dist/es5/mvt-layer/coordinate-transform.js.map +1 -1
  13. package/dist/es5/mvt-layer/find-index-binary.js +45 -26
  14. package/dist/es5/mvt-layer/find-index-binary.js.map +1 -1
  15. package/dist/es5/mvt-layer/mvt-layer.js +394 -279
  16. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  17. package/dist/es5/s2-layer/s2-geometry.js +45 -34
  18. package/dist/es5/s2-layer/s2-geometry.js.map +1 -1
  19. package/dist/es5/s2-layer/s2-layer.js +104 -69
  20. package/dist/es5/s2-layer/s2-layer.js.map +1 -1
  21. package/dist/es5/s2-layer/s2-utils.js +28 -29
  22. package/dist/es5/s2-layer/s2-utils.js.map +1 -1
  23. package/dist/es5/terrain-layer/terrain-layer.js +250 -208
  24. package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
  25. package/dist/es5/tile-3d-layer/tile-3d-layer.js +382 -329
  26. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
  27. package/dist/es5/tile-layer/tile-2d-header.js +182 -118
  28. package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
  29. package/dist/es5/tile-layer/tile-2d-traversal.js +176 -113
  30. package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
  31. package/dist/es5/tile-layer/tile-layer.js +262 -215
  32. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  33. package/dist/es5/tile-layer/tileset-2d.js +455 -293
  34. package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
  35. package/dist/es5/tile-layer/utils.js +113 -64
  36. package/dist/es5/tile-layer/utils.js.map +1 -1
  37. package/dist/es5/trips-layer/trips-layer.js +81 -44
  38. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  39. package/dist/esm/h3-layers/h3-cluster-layer.js +7 -5
  40. package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
  41. package/dist/esm/h3-layers/h3-hexagon-layer.js +14 -9
  42. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  43. package/dist/esm/mesh-layer/mesh-layer.js +6 -5
  44. package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
  45. package/dist/esm/mvt-layer/coordinate-transform.js +3 -1
  46. package/dist/esm/mvt-layer/coordinate-transform.js.map +1 -1
  47. package/dist/esm/mvt-layer/mvt-layer.js +37 -7
  48. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  49. package/dist/esm/s2-layer/s2-geometry.js +5 -2
  50. package/dist/esm/s2-layer/s2-geometry.js.map +1 -1
  51. package/dist/esm/s2-layer/s2-utils.js +6 -5
  52. package/dist/esm/s2-layer/s2-utils.js.map +1 -1
  53. package/dist/esm/terrain-layer/terrain-layer.js +22 -21
  54. package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
  55. package/dist/esm/tile-3d-layer/tile-3d-layer.js +21 -16
  56. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
  57. package/dist/esm/tile-layer/tile-2d-header.js +13 -11
  58. package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
  59. package/dist/esm/tile-layer/tile-2d-traversal.js +12 -6
  60. package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
  61. package/dist/esm/tile-layer/tile-layer.js +24 -22
  62. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  63. package/dist/esm/tile-layer/tileset-2d.js +40 -24
  64. package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
  65. package/dist/esm/tile-layer/utils.js +16 -13
  66. package/dist/esm/tile-layer/utils.js.map +1 -1
  67. package/dist.min.js +2 -2
  68. package/package.json +11 -11
  69. package/src/mvt-layer/mvt-layer.js +16 -0
  70. package/src/terrain-layer/terrain-layer.js +10 -9
  71. package/src/tile-layer/tile-layer.js +9 -6
  72. package/src/tile-layer/tileset-2d.js +14 -2
  73. package/src/tile-layer/utils.js +4 -4
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.4",
5
+ "version": "8.6.8",
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.5",
33
+ "@loaders.gl/gis": "^3.1.5",
34
+ "@loaders.gl/loader-utils": "^3.1.5",
35
+ "@loaders.gl/mvt": "^3.1.5",
36
+ "@loaders.gl/terrain": "^3.1.5",
37
+ "@loaders.gl/tiles": "^3.1.5",
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/culling": "^3.5.6",
40
+ "@math.gl/web-mercator": "^3.5.6",
41
41
  "h3-js": "^3.6.0",
42
42
  "long": "^3.2.0",
43
- "math.gl": "^3.5.4"
43
+ "math.gl": "^3.5.6"
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": "750695c9f13595fa01982d81cdc2eb11bb5593b7"
52
+ "gitHead": "5a252f2cb2de10ceeb20a0ecf353034de5366e65"
53
53
  }
@@ -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;
@@ -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
@@ -183,8 +183,8 @@ export default class TileLayer extends CompositeLayer {
183
183
  return this.props.renderSubLayers(props);
184
184
  }
185
185
 
186
- getHighlightedObjectIndex() {
187
- return -1;
186
+ getSubLayerPropsByTile(tile) {
187
+ return null;
188
188
  }
189
189
 
190
190
  getPickingInfo({info, sourceLayer}) {
@@ -200,7 +200,7 @@ export default class TileLayer extends CompositeLayer {
200
200
 
201
201
  renderLayers() {
202
202
  return this.state.tileset.tiles.map(tile => {
203
- const highlightedObjectIndex = this.getHighlightedObjectIndex(tile);
203
+ const subLayerProps = this.getSubLayerPropsByTile(tile);
204
204
  // cache the rendered layer in the tile
205
205
  if (!tile.isLoaded && !tile.content) {
206
206
  // nothing to show
@@ -215,14 +215,17 @@ export default class TileLayer extends CompositeLayer {
215
215
  tile.layers = flatten(layers, Boolean).map(layer =>
216
216
  layer.clone({
217
217
  tile,
218
- highlightedObjectIndex
218
+ ...subLayerProps
219
219
  })
220
220
  );
221
221
  } else if (
222
+ subLayerProps &&
222
223
  tile.layers[0] &&
223
- tile.layers[0].props.highlightedObjectIndex !== highlightedObjectIndex
224
+ Object.keys(subLayerProps).some(
225
+ propName => tile.layers[0].props[propName] !== subLayerProps[propName]
226
+ )
224
227
  ) {
225
- tile.layers = tile.layers.map(layer => layer.clone({highlightedObjectIndex}));
228
+ tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));
226
229
  }
227
230
  return tile.layers;
228
231
  });
@@ -71,6 +71,9 @@ export default class Tileset2D {
71
71
  this._selectedTiles = null;
72
72
  this._frameNumber = 0;
73
73
 
74
+ this._modelMatrix = new Matrix4();
75
+ this._modelMatrixInverse = new Matrix4();
76
+
74
77
  this.setOptions(opts);
75
78
  }
76
79
 
@@ -87,6 +90,10 @@ export default class Tileset2D {
87
90
  return this._selectedTiles.every(tile => tile.isLoaded);
88
91
  }
89
92
 
93
+ get needsReload() {
94
+ return this._selectedTiles.some(tile => tile.needsReload);
95
+ }
96
+
90
97
  setOptions(opts) {
91
98
  Object.assign(this.opts, opts);
92
99
  if (Number.isFinite(opts.maxZoom)) {
@@ -131,8 +138,8 @@ export default class Tileset2D {
131
138
  const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);
132
139
  if (!viewport.equals(this._viewport) || isModelMatrixNew) {
133
140
  if (isModelMatrixNew) {
134
- this._modelMatrixInverse = modelMatrix && modelMatrixAsMatrix4.clone().invert();
135
- this._modelMatrix = modelMatrix && modelMatrixAsMatrix4;
141
+ this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();
142
+ this._modelMatrix = modelMatrixAsMatrix4;
136
143
  }
137
144
  this._viewport = viewport;
138
145
  const tileIndices = this.getTileIndices({
@@ -149,6 +156,11 @@ export default class Tileset2D {
149
156
  // Some new tiles are added
150
157
  this._rebuildTree();
151
158
  }
159
+ // Check for needed reloads explicitly even if the view/matrix has not changed.
160
+ } else if (this.needsReload) {
161
+ this._selectedTiles = this._selectedTiles.map(tile =>
162
+ this._getTile({x: tile.x, y: tile.y, z: tile.z})
163
+ );
152
164
  }
153
165
 
154
166
  // Update tile states
@@ -65,10 +65,10 @@ export function getURLFromTemplate(template, properties) {
65
65
 
66
66
  const {x, y, z} = properties;
67
67
  return template
68
- .replace('{x}', x)
69
- .replace('{y}', y)
70
- .replace('{z}', z)
71
- .replace('{-y}', Math.pow(2, z) - y - 1);
68
+ .replace(/\{x\}/g, x)
69
+ .replace(/\{y\}/g, y)
70
+ .replace(/\{z\}/g, z)
71
+ .replace(/\{-y\}/g, Math.pow(2, z) - y - 1);
72
72
  }
73
73
 
74
74
  /**