@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.
- package/dist/dist.dev.js +2060 -2044
- package/dist/es5/geo-cell-layer/GeoCellLayer.js +3 -3
- package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/mvt-layer/mvt-layer.js +10 -7
- package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/es5/quadkey-layer/quadkey-layer.js +4 -2
- package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
- package/dist/es5/quadkey-layer/quadkey-utils.js.map +1 -1
- package/dist/es5/tile-layer/tile-layer.js +21 -21
- package/dist/es5/tile-layer/tile-layer.js.map +1 -1
- package/dist/es5/tile-layer/utils.js.map +1 -1
- package/dist/esm/geo-cell-layer/GeoCellLayer.js +6 -3
- package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mvt-layer/mvt-layer.js +8 -4
- package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/esm/quadkey-layer/quadkey-layer.js +5 -2
- package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
- package/dist/esm/quadkey-layer/quadkey-utils.js.map +1 -1
- package/dist/esm/tile-layer/tile-layer.js +4 -5
- package/dist/esm/tile-layer/tile-layer.js.map +1 -1
- package/dist/esm/tile-layer/utils.js.map +1 -1
- package/dist.min.js +1 -1
- package/package.json +2 -2
- package/src/geo-cell-layer/{GeoCellLayer.js → GeoCellLayer.ts} +14 -10
- package/src/index.ts +1 -0
- package/src/mvt-layer/mvt-layer.js +5 -4
- package/src/quadkey-layer/quadkey-layer.ts +39 -0
- package/src/quadkey-layer/{quadkey-utils.js → quadkey-utils.ts} +2 -2
- package/src/tile-layer/tile-layer.ts +42 -39
- package/src/tile-layer/utils.ts +7 -2
- 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.
|
|
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": "
|
|
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
|
|
9
|
-
|
|
10
|
-
|
|
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
|
@@ -82,18 +82,19 @@ export default class MVTLayer extends TileLayer {
|
|
|
82
82
|
this.setState({data, tileJSON});
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
_getTilesetOptions(
|
|
86
|
-
const opts = super._getTilesetOptions(
|
|
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 >
|
|
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(
|
|
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
|
-
|
|
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
|
|
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
|
|
71
|
+
onTileLoad?: (tile: Tile2DHeader) => void;
|
|
64
72
|
|
|
65
73
|
/** Called when a tile is cleared from cache. */
|
|
66
|
-
onTileUnload
|
|
74
|
+
onTileUnload?: (tile: Tile2DHeader) => void;
|
|
67
75
|
|
|
68
76
|
/** Called when a tile failed to load. */
|
|
69
|
-
onTileError
|
|
77
|
+
onTileError?: (err: any) => void;
|
|
70
78
|
|
|
71
79
|
/** The bounding box of the layer's data. */
|
|
72
|
-
extent
|
|
80
|
+
extent?: number[] | null;
|
|
73
81
|
|
|
74
82
|
/** The pixel dimension of the tiles, usually a power of 2. */
|
|
75
|
-
tileSize
|
|
83
|
+
tileSize?: number;
|
|
76
84
|
|
|
77
|
-
/** The max zoom level of the layer's data.
|
|
78
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
110
|
+
refinementStrategy?: RefinementStrategy;
|
|
99
111
|
|
|
100
112
|
/** Range of minimum and maximum heights in the tile. */
|
|
101
|
-
zRange
|
|
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
|
|
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
|
|
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
|
-
|
|
127
|
-
|
|
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(
|
|
175
|
+
tileset = new this.props.TilesetClass(this._getTilesetOptions());
|
|
173
176
|
this.setState({tileset});
|
|
174
177
|
} else if (propsChanged) {
|
|
175
|
-
tileset.setOptions(this._getTilesetOptions(
|
|
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(
|
|
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:
|
|
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
|
package/src/tile-layer/utils.ts
CHANGED
|
@@ -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(
|
|
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;
|