@deck.gl/geo-layers 8.8.0-alpha.2 → 8.8.0-alpha.3

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 (33) hide show
  1. package/dist/dist.dev.js +2060 -2044
  2. package/dist/es5/geo-cell-layer/GeoCellLayer.js +3 -3
  3. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
  4. package/dist/es5/index.js.map +1 -1
  5. package/dist/es5/mvt-layer/mvt-layer.js +10 -7
  6. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  7. package/dist/es5/quadkey-layer/quadkey-layer.js +4 -2
  8. package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
  9. package/dist/es5/quadkey-layer/quadkey-utils.js.map +1 -1
  10. package/dist/es5/tile-layer/tile-layer.js +21 -21
  11. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  12. package/dist/es5/tile-layer/utils.js.map +1 -1
  13. package/dist/esm/geo-cell-layer/GeoCellLayer.js +6 -3
  14. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
  15. package/dist/esm/index.js.map +1 -1
  16. package/dist/esm/mvt-layer/mvt-layer.js +8 -4
  17. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  18. package/dist/esm/quadkey-layer/quadkey-layer.js +5 -2
  19. package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
  20. package/dist/esm/quadkey-layer/quadkey-utils.js.map +1 -1
  21. package/dist/esm/tile-layer/tile-layer.js +4 -5
  22. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  23. package/dist/esm/tile-layer/utils.js.map +1 -1
  24. package/dist.min.js +1 -1
  25. package/package.json +2 -2
  26. package/src/geo-cell-layer/{GeoCellLayer.js → GeoCellLayer.ts} +14 -10
  27. package/src/index.ts +1 -0
  28. package/src/mvt-layer/mvt-layer.js +5 -4
  29. package/src/quadkey-layer/quadkey-layer.ts +39 -0
  30. package/src/quadkey-layer/{quadkey-utils.js → quadkey-utils.ts} +2 -2
  31. package/src/tile-layer/tile-layer.ts +42 -39
  32. package/src/tile-layer/utils.ts +7 -2
  33. package/src/quadkey-layer/quadkey-layer.js +0 -22
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.8.0-alpha.2",
5
+ "version": "8.8.0-alpha.3",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
@@ -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": "a52215449dff06fb683f5afd6399526353d11f35"
52
+ "gitHead": "edad7cf75b75a137d63ec89d2d644727d3082e25"
53
53
  }
@@ -1,17 +1,24 @@
1
- import {CompositeLayer} from '@deck.gl/core';
2
- import {PolygonLayer} from '@deck.gl/layers';
1
+ import {CompositeLayer, Layer, LayersList} from '@deck.gl/core';
2
+ import {PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';
3
3
 
4
4
  const defaultProps = {
5
5
  ...PolygonLayer.defaultProps
6
6
  };
7
7
 
8
- export default class GeoCellLayer extends CompositeLayer {
9
- // Implement to generate props to create geometry
10
- indexToBounds() {
8
+ export type GeoCellLayerProps<DataT = any> = PolygonLayerProps<DataT>;
9
+
10
+ export default class GeoCellLayer<DataT = any, ExtraProps = {}> extends CompositeLayer<
11
+ Required<GeoCellLayerProps<DataT>> & ExtraProps
12
+ > {
13
+ static layerName = 'GeoCellLayer';
14
+ static defaultProps = defaultProps;
15
+
16
+ /** Implement to generate props to create geometry. */
17
+ indexToBounds(): Partial<GeoCellLayer['props']> | null {
11
18
  return null;
12
19
  }
13
20
 
14
- renderLayers() {
21
+ renderLayers(): Layer | null | LayersList {
15
22
  // Rendering props underlying layer
16
23
  const {
17
24
  elevationScale,
@@ -64,7 +71,7 @@ export default class GeoCellLayer extends CompositeLayer {
64
71
  },
65
72
  this.getSubLayerProps({
66
73
  id: 'cell',
67
- updateTriggers: {
74
+ updateTriggers: updateTriggers && {
68
75
  getElevation: updateTriggers.getElevation,
69
76
  getFillColor: updateTriggers.getFillColor,
70
77
  getLineColor: updateTriggers.getLineColor,
@@ -75,6 +82,3 @@ export default class GeoCellLayer extends CompositeLayer {
75
82
  );
76
83
  }
77
84
  }
78
-
79
- GeoCellLayer.layerName = 'GeoCellLayer';
80
- GeoCellLayer.defaultProps = defaultProps;
package/src/index.ts CHANGED
@@ -36,3 +36,4 @@ export {default as _Tileset2D} from './tile-layer/tileset-2d';
36
36
  // Types
37
37
 
38
38
  export type {TileLayerProps} from './tile-layer/tile-layer';
39
+ export type {QuadkeyLayerProps} from './quadkey-layer/quadkey-layer';
@@ -82,18 +82,19 @@ export default class MVTLayer extends TileLayer {
82
82
  this.setState({data, tileJSON});
83
83
  }
84
84
 
85
- _getTilesetOptions(props) {
86
- const opts = super._getTilesetOptions(props);
85
+ _getTilesetOptions() {
86
+ const opts = super._getTilesetOptions();
87
87
  const {tileJSON} = this.state;
88
+ const {minZoom, maxZoom} = this.props;
88
89
 
89
90
  if (tileJSON) {
90
- if (Number.isFinite(tileJSON.minzoom) && tileJSON.minzoom > props.minZoom) {
91
+ if (Number.isFinite(tileJSON.minzoom) && tileJSON.minzoom > minZoom) {
91
92
  opts.minZoom = tileJSON.minzoom;
92
93
  }
93
94
 
94
95
  if (
95
96
  Number.isFinite(tileJSON.maxzoom) &&
96
- (!Number.isFinite(props.maxZoom) || tileJSON.maxzoom < props.maxZoom)
97
+ (!Number.isFinite(maxZoom) || tileJSON.maxzoom < maxZoom)
97
98
  ) {
98
99
  opts.maxZoom = tileJSON.maxzoom;
99
100
  }
@@ -0,0 +1,39 @@
1
+ import {AccessorFunction} from '@deck.gl/core';
2
+ import GeoCellLayer from '../geo-cell-layer/GeoCellLayer';
3
+ import {getQuadkeyPolygon} from './quadkey-utils';
4
+
5
+ const defaultProps = {
6
+ getQuadkey: {type: 'accessor', value: d => d.quadkey}
7
+ };
8
+
9
+ /**
10
+ * Properties of `QuadkeyLayer`.
11
+ */
12
+ type QuadkeyLayerProps<DataT = any> = {
13
+ /**
14
+ * Called for each data object to retrieve the quadkey string identifier.
15
+ *
16
+ * By default, it reads `quadkey` property of data object.
17
+ */
18
+ getQuadkey?: AccessorFunction<DataT, string>;
19
+ };
20
+
21
+ export default class QuadkeyLayer<DataT = any, ExtraProps = {}> extends GeoCellLayer<
22
+ DataT,
23
+ Required<QuadkeyLayerProps> & ExtraProps
24
+ > {
25
+ static layerName = 'QuadkeyLayer';
26
+ static defaultProps: any = defaultProps;
27
+
28
+ indexToBounds(): Partial<GeoCellLayer['props']> | null {
29
+ const {data, getQuadkey} = this.props;
30
+
31
+ return {
32
+ data,
33
+ _normalize: false,
34
+ positionFormat: 'XY',
35
+
36
+ getPolygon: (x: DataT, objectInfo) => getQuadkeyPolygon(getQuadkey(x, objectInfo))
37
+ };
38
+ }
39
+ }
@@ -2,7 +2,7 @@ import {worldToLngLat} from '@math.gl/web-mercator';
2
2
 
3
3
  const TILE_SIZE = 512;
4
4
 
5
- export function quadkeyToWorldBounds(quadkey) {
5
+ export function quadkeyToWorldBounds(quadkey: string): [number[], number[]] {
6
6
  let x = 0;
7
7
  let y = 0;
8
8
  let mask = 1 << quadkey.length;
@@ -20,7 +20,7 @@ export function quadkeyToWorldBounds(quadkey) {
20
20
  ];
21
21
  }
22
22
 
23
- export function getQuadkeyPolygon(quadkey) {
23
+ export function getQuadkeyPolygon(quadkey: string): number[] {
24
24
  const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);
25
25
  const [w, n] = worldToLngLat(topLeft);
26
26
  const [e, s] = worldToLngLat(bottomRight);
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  assert,
3
- ChangeFlags,
4
3
  CompositeLayer,
5
4
  CompositeLayerProps,
6
5
  Layer,
7
6
  LayerProps,
7
+ UpdateParameters,
8
8
  _flatten as flatten
9
9
  } from '@deck.gl/core';
10
10
  import {GeoJsonLayer} from '@deck.gl/layers';
@@ -39,12 +39,20 @@ const defaultProps = {
39
39
  zoomOffset: 0
40
40
  };
41
41
 
42
- export type TileLayerProps<DataT = any> = CompositeLayerProps<DataT> & {
42
+ /** All props supported by the TileLayer */
43
+ export type TileLayerProps<DataT> = _TileLayerProps<DataT> & CompositeLayerProps<DataT>;
44
+
45
+ /** Props added by the TileLayer */
46
+ type _TileLayerProps<DataT> = {
47
+ /**
48
+ * Optionally implement a custom indexing scheme.
49
+ */
50
+ TilesetClass: typeof Tileset2D;
43
51
  /**
44
52
  * Renders one or an array of Layer instances.
45
53
  */
46
- renderSubLayers: (
47
- props: TileLayerProps & {
54
+ renderSubLayers?: (
55
+ props: TileLayerProps<DataT> & {
48
56
  id: string;
49
57
  data: any;
50
58
  _offset: number;
@@ -54,58 +62,62 @@ export type TileLayerProps<DataT = any> = CompositeLayerProps<DataT> & {
54
62
  /**
55
63
  * If supplied, `getTileData` is called to retrieve the data of each tile.
56
64
  */
57
- getTileData: (props: TileLoadProps) => Promise<any> | any;
65
+ getTileData?: (props: TileLoadProps) => Promise<DataT> | DataT;
58
66
 
59
67
  /** Called when all tiles in the current viewport are loaded. */
60
68
  onViewportLoad?: (tiles: Tile2DHeader[]) => void;
61
69
 
62
70
  /** Called when a tile successfully loads. */
63
- onTileLoad: (tile: Tile2DHeader) => void;
71
+ onTileLoad?: (tile: Tile2DHeader) => void;
64
72
 
65
73
  /** Called when a tile is cleared from cache. */
66
- onTileUnload: (tile: Tile2DHeader) => void;
74
+ onTileUnload?: (tile: Tile2DHeader) => void;
67
75
 
68
76
  /** Called when a tile failed to load. */
69
- onTileError: (err: any) => void;
77
+ onTileError?: (err: any) => void;
70
78
 
71
79
  /** The bounding box of the layer's data. */
72
- extent: number[] | undefined | null;
80
+ extent?: number[] | null;
73
81
 
74
82
  /** The pixel dimension of the tiles, usually a power of 2. */
75
- tileSize: number;
83
+ tileSize?: number;
76
84
 
77
- /** The max zoom level of the layer's data. */
78
- maxZoom: number;
85
+ /** The max zoom level of the layer's data.
86
+ * @default null
87
+ */
88
+ maxZoom?: number | null;
79
89
 
80
- /** The min zoom level of the layer's data. */
81
- minZoom: number;
90
+ /** The min zoom level of the layer's data.
91
+ * @default 0
92
+ */
93
+ minZoom?: number | null;
82
94
 
83
95
  /** The maximum number of tiles that can be cached. */
84
- maxCacheSize: number | undefined | null;
96
+ maxCacheSize?: number | null;
85
97
 
86
98
  /**
87
99
  * The maximum memory used for caching tiles.
88
100
  *
89
101
  * @default null
90
102
  */
91
- maxCacheByteSize: number | undefined;
103
+ maxCacheByteSize?: number | null;
92
104
 
93
105
  /**
94
106
  * How the tile layer refines the visibility of tiles.
95
107
  *
96
108
  * @default 'best-available'
97
109
  */
98
- refinementStrategy: RefinementStrategy;
110
+ refinementStrategy?: RefinementStrategy;
99
111
 
100
112
  /** Range of minimum and maximum heights in the tile. */
101
- zRange: ZRange | null;
113
+ zRange?: ZRange | null;
102
114
 
103
115
  /**
104
116
  * The maximum number of concurrent getTileData calls.
105
117
  *
106
118
  * @default 6
107
119
  */
108
- maxRequests: number;
120
+ maxRequests?: number;
109
121
 
110
122
  /**
111
123
  * This offset changes the zoom level at which the tiles are fetched.
@@ -114,7 +126,7 @@ export type TileLayerProps<DataT = any> = CompositeLayerProps<DataT> & {
114
126
  *
115
127
  * @default 0
116
128
  */
117
- zoomOffset: number;
129
+ zoomOffset?: number;
118
130
  };
119
131
 
120
132
  /**
@@ -122,10 +134,9 @@ export type TileLayerProps<DataT = any> = CompositeLayerProps<DataT> & {
122
134
  *
123
135
  * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.
124
136
  */
125
- export default class TileLayer<
126
- DataT = any,
127
- PropsT extends TileLayerProps<DataT> = TileLayerProps<DataT>
128
- > extends CompositeLayer<PropsT> {
137
+ export default class TileLayer<DataT = any, ExtraPropsT = {}> extends CompositeLayer<
138
+ ExtraPropsT & Required<_TileLayerProps<DataT>>
139
+ > {
129
140
  static defaultProps = defaultProps as any;
130
141
  static layerName = 'TileLayer';
131
142
 
@@ -150,15 +161,7 @@ export default class TileLayer<
150
161
  return changeFlags.somethingChanged;
151
162
  }
152
163
 
153
- updateState({
154
- props,
155
- changeFlags
156
- }: {
157
- props: TileLayerProps;
158
- oldProps: TileLayerProps;
159
- context: any;
160
- changeFlags: ChangeFlags;
161
- }) {
164
+ updateState({changeFlags}: UpdateParameters<TileLayer>) {
162
165
  assert(this.state);
163
166
 
164
167
  let {tileset} = this.state;
@@ -169,10 +172,10 @@ export default class TileLayer<
169
172
  (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));
170
173
 
171
174
  if (!tileset) {
172
- tileset = new this.props.TilesetClass(this._getTilesetOptions(props));
175
+ tileset = new this.props.TilesetClass(this._getTilesetOptions());
173
176
  this.setState({tileset});
174
177
  } else if (propsChanged) {
175
- tileset.setOptions(this._getTilesetOptions(props));
178
+ tileset.setOptions(this._getTilesetOptions());
176
179
 
177
180
  if (dataChanged) {
178
181
  // reload all tiles
@@ -189,7 +192,7 @@ export default class TileLayer<
189
192
  this._updateTileset();
190
193
  }
191
194
 
192
- _getTilesetOptions(props: TileLayerProps): Tileset2DProps {
195
+ _getTilesetOptions(): Tileset2DProps {
193
196
  const {
194
197
  tileSize,
195
198
  maxCacheSize,
@@ -200,7 +203,7 @@ export default class TileLayer<
200
203
  minZoom,
201
204
  maxRequests,
202
205
  zoomOffset
203
- } = props;
206
+ } = this.props;
204
207
 
205
208
  return {
206
209
  maxCacheSize,
@@ -290,7 +293,7 @@ export default class TileLayer<
290
293
  }
291
294
 
292
295
  renderSubLayers(
293
- props: TileLayerProps & {
296
+ props: _TileLayerProps<DataT> & {
294
297
  id: string;
295
298
  data: any;
296
299
  _offset: number;
@@ -330,7 +333,7 @@ export default class TileLayer<
330
333
  _offset: 0,
331
334
  tile
332
335
  });
333
- tile.layers = flatten(layers, Boolean).map(layer =>
336
+ tile.layers = (flatten(layers, Boolean) as Layer[]).map(layer =>
334
337
  layer.clone({
335
338
  tile,
336
339
  ...subLayerProps
@@ -1,6 +1,5 @@
1
1
  import {Viewport} from '@deck.gl/core';
2
2
  import {Matrix4} from '@math.gl/core';
3
- import Tile2DHeader from './tile-2d-header';
4
3
  import {getOSMTileIndices} from './tile-2d-traversal';
5
4
  import {Bounds, TileBoundingBox, TileIndex, ZRange} from './types';
6
5
 
@@ -62,7 +61,13 @@ function stringHash(s: string): number {
62
61
  return Math.abs(s.split('').reduce((a, b) => ((a << 5) - a + b.charCodeAt(0)) | 0, 0));
63
62
  }
64
63
 
65
- export function getURLFromTemplate(template: string | string[], tile: Tile2DHeader): string | null {
64
+ export function getURLFromTemplate(
65
+ template: string | string[],
66
+ tile: {
67
+ index: TileIndex;
68
+ id: string;
69
+ }
70
+ ): string | null {
66
71
  if (!template || !template.length) {
67
72
  return null;
68
73
  }
@@ -1,22 +0,0 @@
1
- import GeoCellLayer from '../geo-cell-layer/GeoCellLayer';
2
- import {getQuadkeyPolygon} from './quadkey-utils';
3
-
4
- const defaultProps = {
5
- getQuadkey: {type: 'accessor', value: d => d.quadkey}
6
- };
7
-
8
- export default class QuadkeyLayer extends GeoCellLayer {
9
- indexToBounds() {
10
- const {data, getQuadkey} = this.props;
11
-
12
- return {
13
- data,
14
- _normalize: false,
15
- positionFormat: 'XY',
16
- getPolygon: (x, objectInfo) => getQuadkeyPolygon(getQuadkey(x, objectInfo))
17
- };
18
- }
19
- }
20
-
21
- QuadkeyLayer.layerName = 'QuadkeyLayer';
22
- QuadkeyLayer.defaultProps = defaultProps;