@deck.gl/geo-layers 8.7.0-beta.6 → 8.7.0-beta.7

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 (38) hide show
  1. package/dist/dist.dev.js +216 -149
  2. package/dist/es5/geo-cell-layer/GeoCellLayer.js +112 -0
  3. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -0
  4. package/dist/es5/h3-layers/h3-cluster-layer.js +10 -59
  5. package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
  6. package/dist/es5/index.js +8 -0
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/quadkey-layer/quadkey-layer.js +69 -0
  9. package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -0
  10. package/dist/es5/quadkey-layer/quadkey-utils.js +51 -0
  11. package/dist/es5/quadkey-layer/quadkey-utils.js.map +1 -0
  12. package/dist/es5/s2-layer/s2-layer.js +10 -68
  13. package/dist/es5/s2-layer/s2-layer.js.map +1 -1
  14. package/dist/es5/tile-layer/utils.js +1 -1
  15. package/dist/es5/tile-layer/utils.js.map +1 -1
  16. package/dist/esm/geo-cell-layer/GeoCellLayer.js +68 -0
  17. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -0
  18. package/dist/esm/h3-layers/h3-cluster-layer.js +7 -51
  19. package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
  20. package/dist/esm/index.js +1 -0
  21. package/dist/esm/index.js.map +1 -1
  22. package/dist/esm/quadkey-layer/quadkey-layer.js +26 -0
  23. package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -0
  24. package/dist/esm/quadkey-layer/quadkey-utils.js +24 -0
  25. package/dist/esm/quadkey-layer/quadkey-utils.js.map +1 -0
  26. package/dist/esm/s2-layer/s2-layer.js +6 -59
  27. package/dist/esm/s2-layer/s2-layer.js.map +1 -1
  28. package/dist/esm/tile-layer/utils.js +1 -1
  29. package/dist/esm/tile-layer/utils.js.map +1 -1
  30. package/dist.min.js +2 -2
  31. package/package.json +2 -2
  32. package/src/geo-cell-layer/GeoCellLayer.js +80 -0
  33. package/src/h3-layers/h3-cluster-layer.js +8 -64
  34. package/src/index.ts +1 -0
  35. package/src/quadkey-layer/quadkey-layer.js +22 -0
  36. package/src/quadkey-layer/quadkey-utils.js +28 -0
  37. package/src/s2-layer/s2-layer.js +9 -75
  38. 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-beta.6",
5
+ "version": "8.7.0-beta.7",
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": "d6eefe2e0992999416b2362340f86402b1f25b33"
52
+ "gitHead": "32b25b0d1c4d2985b021eb15f2b2245d81b574bd"
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 {CompositeLayer, createIterable} from '@deck.gl/core';
4
- import {PolygonLayer} from '@deck.gl/layers';
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 CompositeLayer {
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
- renderLayers() {
36
- const {
37
- elevationScale,
38
- extruded,
39
- wireframe,
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
+ }
@@ -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 {CompositeLayer} from '@deck.gl/core';
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 CompositeLayer {
32
- renderLayers() {
33
- // Layer prop
28
+ export default class S2Layer extends GeoCellLayer {
29
+ indexToBounds() {
34
30
  const {data, getS2Token} = this.props;
35
31
 
36
- // Rendering props underlying layer
37
- const {
38
- elevationScale,
39
- extruded,
40
- wireframe,
41
- filled,
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
 
@@ -33,13 +33,13 @@ export const urlType = {
33
33
  function transformBox(bbox, modelMatrix) {
34
34
  const transformedCoords = [
35
35
  // top-left
36
- modelMatrix.transformPoint([bbox[0], bbox[1]]),
36
+ modelMatrix.transformAsPoint([bbox[0], bbox[1]]),
37
37
  // top-right
38
- modelMatrix.transformPoint([bbox[2], bbox[1]]),
38
+ modelMatrix.transformAsPoint([bbox[2], bbox[1]]),
39
39
  // bottom-left
40
- modelMatrix.transformPoint([bbox[0], bbox[3]]),
40
+ modelMatrix.transformAsPoint([bbox[0], bbox[3]]),
41
41
  // bottom-right
42
- modelMatrix.transformPoint([bbox[2], bbox[3]])
42
+ modelMatrix.transformAsPoint([bbox[2], bbox[3]])
43
43
  ];
44
44
  const transformedBox = [
45
45
  // Minimum x coord