@deck.gl/geo-layers 8.7.0-beta.5 → 8.7.0
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 +203 -136
- package/dist/es5/geo-cell-layer/GeoCellLayer.js +112 -0
- package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -0
- package/dist/es5/h3-layers/h3-cluster-layer.js +10 -59
- package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/es5/index.js +8 -0
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/quadkey-layer/quadkey-layer.js +69 -0
- package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -0
- package/dist/es5/quadkey-layer/quadkey-utils.js +51 -0
- package/dist/es5/quadkey-layer/quadkey-utils.js.map +1 -0
- package/dist/es5/s2-layer/s2-layer.js +10 -68
- package/dist/es5/s2-layer/s2-layer.js.map +1 -1
- package/dist/es5/tile-layer/utils.js +1 -1
- package/dist/es5/tile-layer/utils.js.map +1 -1
- package/dist/esm/geo-cell-layer/GeoCellLayer.js +68 -0
- package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -0
- package/dist/esm/h3-layers/h3-cluster-layer.js +7 -51
- package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/quadkey-layer/quadkey-layer.js +26 -0
- package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -0
- package/dist/esm/quadkey-layer/quadkey-utils.js +24 -0
- package/dist/esm/quadkey-layer/quadkey-utils.js.map +1 -0
- package/dist/esm/s2-layer/s2-layer.js +6 -59
- package/dist/esm/s2-layer/s2-layer.js.map +1 -1
- package/dist/esm/tile-layer/utils.js +1 -1
- package/dist/esm/tile-layer/utils.js.map +1 -1
- package/dist.min.js +2 -2
- package/package.json +2 -2
- package/src/geo-cell-layer/GeoCellLayer.js +80 -0
- package/src/h3-layers/h3-cluster-layer.js +8 -64
- package/src/index.ts +1 -0
- package/src/quadkey-layer/quadkey-layer.js +22 -0
- package/src/quadkey-layer/quadkey-utils.js +28 -0
- package/src/s2-layer/s2-layer.js +9 -75
- 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.7.0
|
|
5
|
+
"version": "8.7.0",
|
|
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": "69cc7100ab41c1f074468ea80c1ca8472d4a6146"
|
|
53
53
|
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import {CompositeLayer} from '@deck.gl/core';
|
|
2
|
+
import {PolygonLayer} from '@deck.gl/layers';
|
|
3
|
+
|
|
4
|
+
const defaultProps = {
|
|
5
|
+
...PolygonLayer.defaultProps
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export default class GeoCellLayer extends CompositeLayer {
|
|
9
|
+
// Implement to generate props to create geometry
|
|
10
|
+
indexToBounds() {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
renderLayers() {
|
|
15
|
+
// Rendering props underlying layer
|
|
16
|
+
const {
|
|
17
|
+
elevationScale,
|
|
18
|
+
extruded,
|
|
19
|
+
wireframe,
|
|
20
|
+
filled,
|
|
21
|
+
stroked,
|
|
22
|
+
lineWidthUnits,
|
|
23
|
+
lineWidthScale,
|
|
24
|
+
lineWidthMinPixels,
|
|
25
|
+
lineWidthMaxPixels,
|
|
26
|
+
lineJointRounded,
|
|
27
|
+
lineMiterLimit,
|
|
28
|
+
lineDashJustified,
|
|
29
|
+
getElevation,
|
|
30
|
+
getFillColor,
|
|
31
|
+
getLineColor,
|
|
32
|
+
getLineWidth
|
|
33
|
+
} = this.props;
|
|
34
|
+
|
|
35
|
+
// Accessor props for underlying layers
|
|
36
|
+
const {updateTriggers, material, transitions} = this.props;
|
|
37
|
+
|
|
38
|
+
// Filled Polygon Layer
|
|
39
|
+
const CellLayer = this.getSubLayerClass('cell', PolygonLayer);
|
|
40
|
+
return new CellLayer(
|
|
41
|
+
{
|
|
42
|
+
filled,
|
|
43
|
+
wireframe,
|
|
44
|
+
|
|
45
|
+
extruded,
|
|
46
|
+
elevationScale,
|
|
47
|
+
|
|
48
|
+
stroked,
|
|
49
|
+
lineWidthUnits,
|
|
50
|
+
lineWidthScale,
|
|
51
|
+
lineWidthMinPixels,
|
|
52
|
+
lineWidthMaxPixels,
|
|
53
|
+
lineJointRounded,
|
|
54
|
+
lineMiterLimit,
|
|
55
|
+
lineDashJustified,
|
|
56
|
+
|
|
57
|
+
material,
|
|
58
|
+
transitions,
|
|
59
|
+
|
|
60
|
+
getElevation,
|
|
61
|
+
getFillColor,
|
|
62
|
+
getLineColor,
|
|
63
|
+
getLineWidth
|
|
64
|
+
},
|
|
65
|
+
this.getSubLayerProps({
|
|
66
|
+
id: 'cell',
|
|
67
|
+
updateTriggers: {
|
|
68
|
+
getElevation: updateTriggers.getElevation,
|
|
69
|
+
getFillColor: updateTriggers.getFillColor,
|
|
70
|
+
getLineColor: updateTriggers.getLineColor,
|
|
71
|
+
getLineWidth: updateTriggers.getLineWidth
|
|
72
|
+
}
|
|
73
|
+
}),
|
|
74
|
+
this.indexToBounds()
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
GeoCellLayer.layerName = 'GeoCellLayer';
|
|
80
|
+
GeoCellLayer.defaultProps = defaultProps;
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import {h3SetToMultiPolygon} from 'h3-js';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
3
|
+
import {createIterable} from '@deck.gl/core';
|
|
4
|
+
import GeoCellLayer from '../geo-cell-layer/GeoCellLayer';
|
|
5
5
|
|
|
6
6
|
const defaultProps = {
|
|
7
|
-
...PolygonLayer.defaultProps,
|
|
8
7
|
getHexagons: {type: 'accessor', value: d => d.hexagons}
|
|
9
8
|
};
|
|
10
9
|
|
|
11
|
-
export default class H3ClusterLayer extends
|
|
10
|
+
export default class H3ClusterLayer extends GeoCellLayer {
|
|
12
11
|
updateState({props, oldProps, changeFlags}) {
|
|
13
12
|
if (
|
|
14
13
|
changeFlags.dataChanged ||
|
|
@@ -32,66 +31,11 @@ export default class H3ClusterLayer extends CompositeLayer {
|
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
33
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
filled,
|
|
41
|
-
stroked,
|
|
42
|
-
lineWidthScale,
|
|
43
|
-
lineWidthMinPixels,
|
|
44
|
-
lineWidthMaxPixels,
|
|
45
|
-
lineJointRounded,
|
|
46
|
-
lineMiterLimit,
|
|
47
|
-
lineDashJustified,
|
|
48
|
-
material,
|
|
49
|
-
|
|
50
|
-
getFillColor,
|
|
51
|
-
getLineColor,
|
|
52
|
-
getLineWidth,
|
|
53
|
-
getLineDashArray,
|
|
54
|
-
getElevation,
|
|
55
|
-
transitions,
|
|
56
|
-
updateTriggers
|
|
57
|
-
} = this.props;
|
|
58
|
-
|
|
59
|
-
const SubLayerClass = this.getSubLayerClass('cluster-region', PolygonLayer);
|
|
60
|
-
|
|
61
|
-
return new SubLayerClass(
|
|
62
|
-
{
|
|
63
|
-
filled,
|
|
64
|
-
wireframe,
|
|
65
|
-
|
|
66
|
-
extruded,
|
|
67
|
-
elevationScale,
|
|
68
|
-
|
|
69
|
-
stroked,
|
|
70
|
-
lineWidthScale,
|
|
71
|
-
lineWidthMinPixels,
|
|
72
|
-
lineWidthMaxPixels,
|
|
73
|
-
lineJointRounded,
|
|
74
|
-
lineMiterLimit,
|
|
75
|
-
lineDashJustified,
|
|
76
|
-
|
|
77
|
-
material,
|
|
78
|
-
transitions,
|
|
79
|
-
|
|
80
|
-
getFillColor: this.getSubLayerAccessor(getFillColor),
|
|
81
|
-
getLineColor: this.getSubLayerAccessor(getLineColor),
|
|
82
|
-
getLineWidth: this.getSubLayerAccessor(getLineWidth),
|
|
83
|
-
getLineDashArray: this.getSubLayerAccessor(getLineDashArray),
|
|
84
|
-
getElevation: this.getSubLayerAccessor(getElevation)
|
|
85
|
-
},
|
|
86
|
-
this.getSubLayerProps({
|
|
87
|
-
id: 'cluster-region',
|
|
88
|
-
updateTriggers
|
|
89
|
-
}),
|
|
90
|
-
{
|
|
91
|
-
data: this.state.polygons,
|
|
92
|
-
getPolygon: d => d.polygon
|
|
93
|
-
}
|
|
94
|
-
);
|
|
34
|
+
indexToBounds() {
|
|
35
|
+
return {
|
|
36
|
+
data: this.state.polygons,
|
|
37
|
+
getPolygon: d => d.polygon
|
|
38
|
+
};
|
|
95
39
|
}
|
|
96
40
|
}
|
|
97
41
|
|
package/src/index.ts
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
export {default as GreatCircleLayer} from './great-circle-layer/great-circle-layer';
|
|
23
23
|
export {default as S2Layer} from './s2-layer/s2-layer';
|
|
24
|
+
export {default as QuadkeyLayer} from './quadkey-layer/quadkey-layer';
|
|
24
25
|
export {default as TileLayer} from './tile-layer/tile-layer';
|
|
25
26
|
export {default as TripsLayer} from './trips-layer/trips-layer';
|
|
26
27
|
export {default as H3ClusterLayer} from './h3-layers/h3-cluster-layer';
|
|
@@ -0,0 +1,22 @@
|
|
|
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;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {worldToLngLat} from '@math.gl/web-mercator';
|
|
2
|
+
|
|
3
|
+
const TILE_SIZE = 512;
|
|
4
|
+
|
|
5
|
+
export function quadkeyToWorldBounds(quadkey) {
|
|
6
|
+
let x = 0;
|
|
7
|
+
let y = 0;
|
|
8
|
+
let mask = 1 << quadkey.length;
|
|
9
|
+
const scale = mask / TILE_SIZE;
|
|
10
|
+
|
|
11
|
+
for (let i = 0; i < quadkey.length; i++) {
|
|
12
|
+
mask >>= 1;
|
|
13
|
+
const q = parseInt(quadkey[i]);
|
|
14
|
+
if (q % 2) x |= mask;
|
|
15
|
+
if (q > 1) y |= mask;
|
|
16
|
+
}
|
|
17
|
+
return [
|
|
18
|
+
[x / scale, TILE_SIZE - y / scale],
|
|
19
|
+
[(x + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function getQuadkeyPolygon(quadkey) {
|
|
24
|
+
const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);
|
|
25
|
+
const [w, n] = worldToLngLat(topLeft);
|
|
26
|
+
const [e, s] = worldToLngLat(bottomRight);
|
|
27
|
+
return [e, n, e, s, w, s, w, n, e, n];
|
|
28
|
+
}
|
package/src/s2-layer/s2-layer.js
CHANGED
|
@@ -18,89 +18,23 @@
|
|
|
18
18
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
19
|
// THE SOFTWARE.
|
|
20
20
|
|
|
21
|
-
import
|
|
22
|
-
import {PolygonLayer} from '@deck.gl/layers';
|
|
23
|
-
|
|
21
|
+
import GeoCellLayer from '../geo-cell-layer/GeoCellLayer';
|
|
24
22
|
import {getS2Polygon} from './s2-utils';
|
|
25
23
|
|
|
26
24
|
const defaultProps = {
|
|
27
|
-
...PolygonLayer.defaultProps,
|
|
28
25
|
getS2Token: {type: 'accessor', value: d => d.token}
|
|
29
26
|
};
|
|
30
27
|
|
|
31
|
-
export default class S2Layer extends
|
|
32
|
-
|
|
33
|
-
// Layer prop
|
|
28
|
+
export default class S2Layer extends GeoCellLayer {
|
|
29
|
+
indexToBounds() {
|
|
34
30
|
const {data, getS2Token} = this.props;
|
|
35
31
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
stroked,
|
|
43
|
-
lineWidthUnits,
|
|
44
|
-
lineWidthScale,
|
|
45
|
-
lineWidthMinPixels,
|
|
46
|
-
lineWidthMaxPixels,
|
|
47
|
-
lineJointRounded,
|
|
48
|
-
lineMiterLimit,
|
|
49
|
-
lineDashJustified,
|
|
50
|
-
getElevation,
|
|
51
|
-
getFillColor,
|
|
52
|
-
getLineColor,
|
|
53
|
-
getLineWidth,
|
|
54
|
-
getLineDashArray
|
|
55
|
-
} = this.props;
|
|
56
|
-
|
|
57
|
-
// Accessor props for underlying layers
|
|
58
|
-
const {updateTriggers, material} = this.props;
|
|
59
|
-
|
|
60
|
-
// Filled Polygon Layer
|
|
61
|
-
const CellLayer = this.getSubLayerClass('cell', PolygonLayer);
|
|
62
|
-
return new CellLayer(
|
|
63
|
-
{
|
|
64
|
-
filled,
|
|
65
|
-
wireframe,
|
|
66
|
-
|
|
67
|
-
extruded,
|
|
68
|
-
elevationScale,
|
|
69
|
-
|
|
70
|
-
stroked,
|
|
71
|
-
lineWidthUnits,
|
|
72
|
-
lineWidthScale,
|
|
73
|
-
lineWidthMinPixels,
|
|
74
|
-
lineWidthMaxPixels,
|
|
75
|
-
lineJointRounded,
|
|
76
|
-
lineMiterLimit,
|
|
77
|
-
lineDashJustified,
|
|
78
|
-
|
|
79
|
-
material,
|
|
80
|
-
|
|
81
|
-
getElevation,
|
|
82
|
-
getFillColor,
|
|
83
|
-
getLineColor,
|
|
84
|
-
getLineWidth,
|
|
85
|
-
getLineDashArray
|
|
86
|
-
},
|
|
87
|
-
this.getSubLayerProps({
|
|
88
|
-
id: 'cell',
|
|
89
|
-
updateTriggers: {
|
|
90
|
-
getElevation: updateTriggers.getElevation,
|
|
91
|
-
getFillColor: updateTriggers.getFillColor,
|
|
92
|
-
getLineColor: updateTriggers.getLineColor,
|
|
93
|
-
getLineWidth: updateTriggers.getLineWidth,
|
|
94
|
-
getLineDashArray: updateTriggers.getLineDashArray
|
|
95
|
-
}
|
|
96
|
-
}),
|
|
97
|
-
{
|
|
98
|
-
data,
|
|
99
|
-
_normalize: false,
|
|
100
|
-
positionFormat: 'XY',
|
|
101
|
-
getPolygon: (x, objectInfo) => getS2Polygon(getS2Token(x, objectInfo))
|
|
102
|
-
}
|
|
103
|
-
);
|
|
32
|
+
return {
|
|
33
|
+
data,
|
|
34
|
+
_normalize: false,
|
|
35
|
+
positionFormat: 'XY',
|
|
36
|
+
getPolygon: (x, objectInfo) => getS2Polygon(getS2Token(x, objectInfo))
|
|
37
|
+
};
|
|
104
38
|
}
|
|
105
39
|
}
|
|
106
40
|
|
package/src/tile-layer/utils.js
CHANGED
|
@@ -33,13 +33,13 @@ export const urlType = {
|
|
|
33
33
|
function transformBox(bbox, modelMatrix) {
|
|
34
34
|
const transformedCoords = [
|
|
35
35
|
// top-left
|
|
36
|
-
modelMatrix.
|
|
36
|
+
modelMatrix.transformAsPoint([bbox[0], bbox[1]]),
|
|
37
37
|
// top-right
|
|
38
|
-
modelMatrix.
|
|
38
|
+
modelMatrix.transformAsPoint([bbox[2], bbox[1]]),
|
|
39
39
|
// bottom-left
|
|
40
|
-
modelMatrix.
|
|
40
|
+
modelMatrix.transformAsPoint([bbox[0], bbox[3]]),
|
|
41
41
|
// bottom-right
|
|
42
|
-
modelMatrix.
|
|
42
|
+
modelMatrix.transformAsPoint([bbox[2], bbox[3]])
|
|
43
43
|
];
|
|
44
44
|
const transformedBox = [
|
|
45
45
|
// Minimum x coord
|