@deck.gl/geo-layers 9.0.0-alpha.7 → 9.0.0-beta.10

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 (263) hide show
  1. package/dist/dist.dev.js +2574 -5044
  2. package/dist/geo-cell-layer/GeoCellLayer.js +51 -0
  3. package/{typed → dist}/geohash-layer/geohash-layer.d.ts +1 -1
  4. package/dist/geohash-layer/geohash-layer.d.ts.map +1 -0
  5. package/dist/geohash-layer/geohash-layer.js +19 -0
  6. package/dist/geohash-layer/geohash-utils.js +50 -0
  7. package/dist/great-circle-layer/great-circle-layer.js +12 -0
  8. package/{typed → dist}/h3-layers/h3-cluster-layer.d.ts +1 -1
  9. package/dist/h3-layers/h3-cluster-layer.d.ts.map +1 -0
  10. package/dist/h3-layers/h3-cluster-layer.js +47 -0
  11. package/dist/h3-layers/h3-hexagon-layer.js +204 -0
  12. package/dist/h3-layers/h3-utils.js +56 -0
  13. package/dist/index.cjs +3160 -0
  14. package/dist/index.cjs.map +7 -0
  15. package/dist/index.d.ts +31 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +36 -0
  18. package/dist/mesh-layer/mesh-layer-fragment.glsl.d.ts +3 -0
  19. package/{typed → dist}/mesh-layer/mesh-layer-fragment.glsl.d.ts.map +1 -1
  20. package/dist/mesh-layer/mesh-layer-fragment.glsl.js +33 -0
  21. package/dist/mesh-layer/mesh-layer-vertex.glsl.js +63 -0
  22. package/{typed → dist}/mesh-layer/mesh-layer.d.ts.map +1 -1
  23. package/dist/mesh-layer/mesh-layer.js +128 -0
  24. package/{typed → dist}/mvt-layer/coordinate-transform.d.ts +1 -1
  25. package/{typed → dist}/mvt-layer/coordinate-transform.d.ts.map +1 -1
  26. package/dist/mvt-layer/coordinate-transform.js +41 -0
  27. package/dist/mvt-layer/find-index-binary.d.ts +11 -0
  28. package/dist/mvt-layer/find-index-binary.d.ts.map +1 -0
  29. package/dist/mvt-layer/find-index-binary.js +96 -0
  30. package/{typed → dist}/mvt-layer/mvt-layer.d.ts +13 -11
  31. package/dist/mvt-layer/mvt-layer.d.ts.map +1 -0
  32. package/dist/mvt-layer/mvt-layer.js +305 -0
  33. package/{typed → dist}/quadkey-layer/quadkey-layer.d.ts +1 -1
  34. package/dist/quadkey-layer/quadkey-layer.d.ts.map +1 -0
  35. package/dist/quadkey-layer/quadkey-layer.js +22 -0
  36. package/dist/quadkey-layer/quadkey-utils.js +26 -0
  37. package/dist/s2-layer/s2-geometry.js +123 -0
  38. package/{typed → dist}/s2-layer/s2-layer.d.ts +1 -1
  39. package/dist/s2-layer/s2-layer.d.ts.map +1 -0
  40. package/dist/s2-layer/s2-layer.js +38 -0
  41. package/dist/s2-layer/s2-utils.js +87 -0
  42. package/{typed → dist}/terrain-layer/terrain-layer.d.ts +4 -4
  43. package/dist/terrain-layer/terrain-layer.d.ts.map +1 -0
  44. package/dist/terrain-layer/terrain-layer.js +233 -0
  45. package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts +15 -1
  46. package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts.map +1 -1
  47. package/dist/tile-3d-layer/tile-3d-layer.js +302 -0
  48. package/{typed → dist}/tile-layer/tile-layer.d.ts +14 -5
  49. package/dist/tile-layer/tile-layer.d.ts.map +1 -0
  50. package/dist/tile-layer/tile-layer.js +207 -0
  51. package/dist/tileset-2d/index.d.ts +7 -0
  52. package/dist/tileset-2d/index.d.ts.map +1 -0
  53. package/dist/tileset-2d/index.js +4 -0
  54. package/dist/tileset-2d/memoize.js +41 -0
  55. package/{typed → dist}/tileset-2d/tile-2d-header.d.ts +3 -2
  56. package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
  57. package/dist/tileset-2d/tile-2d-header.js +135 -0
  58. package/dist/tileset-2d/tile-2d-traversal.d.ts +4 -0
  59. package/dist/tileset-2d/tile-2d-traversal.d.ts.map +1 -0
  60. package/dist/tileset-2d/tile-2d-traversal.js +182 -0
  61. package/{typed → dist}/tileset-2d/tileset-2d.d.ts +9 -7
  62. package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
  63. package/dist/tileset-2d/tileset-2d.js +458 -0
  64. package/dist/tileset-2d/types.js +1 -0
  65. package/{typed → dist}/tileset-2d/utils.d.ts +3 -3
  66. package/dist/tileset-2d/utils.d.ts.map +1 -0
  67. package/dist/tileset-2d/utils.js +234 -0
  68. package/{typed → dist}/trips-layer/trips-layer.d.ts +1 -1
  69. package/{typed → dist}/trips-layer/trips-layer.d.ts.map +1 -1
  70. package/dist/trips-layer/trips-layer.js +93 -0
  71. package/dist/wms-layer/utils.js +13 -0
  72. package/dist/wms-layer/wms-layer.js +192 -0
  73. package/dist.min.js +243 -564
  74. package/package.json +30 -23
  75. package/src/index.ts +7 -7
  76. package/src/mesh-layer/mesh-layer-fragment.glsl.ts +1 -9
  77. package/src/mesh-layer/mesh-layer.ts +1 -2
  78. package/src/mvt-layer/coordinate-transform.ts +1 -1
  79. package/src/mvt-layer/find-index-binary.ts +5 -9
  80. package/src/mvt-layer/mvt-layer.ts +36 -25
  81. package/src/terrain-layer/terrain-layer.ts +13 -3
  82. package/src/tile-3d-layer/tile-3d-layer.ts +1 -2
  83. package/src/tile-layer/tile-layer.ts +30 -14
  84. package/src/tileset-2d/tile-2d-header.ts +2 -1
  85. package/src/tileset-2d/tile-2d-traversal.ts +1 -1
  86. package/src/tileset-2d/tileset-2d.ts +14 -7
  87. package/src/tileset-2d/utils.ts +2 -2
  88. package/src/trips-layer/trips-layer.ts +1 -1
  89. package/src/wms-layer/wms-layer.ts +1 -1
  90. package/dist/es5/geo-cell-layer/GeoCellLayer.js +0 -118
  91. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +0 -1
  92. package/dist/es5/geohash-layer/geohash-layer.js +0 -67
  93. package/dist/es5/geohash-layer/geohash-layer.js.map +0 -1
  94. package/dist/es5/geohash-layer/geohash-utils.js +0 -77
  95. package/dist/es5/geohash-layer/geohash-utils.js.map +0 -1
  96. package/dist/es5/great-circle-layer/great-circle-layer.js +0 -48
  97. package/dist/es5/great-circle-layer/great-circle-layer.js.map +0 -1
  98. package/dist/es5/h3-layers/h3-cluster-layer.js +0 -162
  99. package/dist/es5/h3-layers/h3-cluster-layer.js.map +0 -1
  100. package/dist/es5/h3-layers/h3-hexagon-layer.js +0 -351
  101. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +0 -1
  102. package/dist/es5/h3-layers/h3-utils.js +0 -111
  103. package/dist/es5/h3-layers/h3-utils.js.map +0 -1
  104. package/dist/es5/index.js +0 -132
  105. package/dist/es5/index.js.map +0 -1
  106. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js +0 -9
  107. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
  108. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +0 -9
  109. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
  110. package/dist/es5/mesh-layer/mesh-layer.js +0 -217
  111. package/dist/es5/mesh-layer/mesh-layer.js.map +0 -1
  112. package/dist/es5/mvt-layer/coordinate-transform.js +0 -83
  113. package/dist/es5/mvt-layer/coordinate-transform.js.map +0 -1
  114. package/dist/es5/mvt-layer/find-index-binary.js +0 -127
  115. package/dist/es5/mvt-layer/find-index-binary.js.map +0 -1
  116. package/dist/es5/mvt-layer/mvt-layer.js +0 -533
  117. package/dist/es5/mvt-layer/mvt-layer.js.map +0 -1
  118. package/dist/es5/quadkey-layer/quadkey-layer.js +0 -72
  119. package/dist/es5/quadkey-layer/quadkey-layer.js.map +0 -1
  120. package/dist/es5/quadkey-layer/quadkey-utils.js +0 -53
  121. package/dist/es5/quadkey-layer/quadkey-utils.js.map +0 -1
  122. package/dist/es5/s2-layer/s2-geometry.js +0 -158
  123. package/dist/es5/s2-layer/s2-geometry.js.map +0 -1
  124. package/dist/es5/s2-layer/s2-layer.js +0 -67
  125. package/dist/es5/s2-layer/s2-layer.js.map +0 -1
  126. package/dist/es5/s2-layer/s2-utils.js +0 -80
  127. package/dist/es5/s2-layer/s2-utils.js.map +0 -1
  128. package/dist/es5/terrain-layer/terrain-layer.js +0 -347
  129. package/dist/es5/terrain-layer/terrain-layer.js.map +0 -1
  130. package/dist/es5/tile-3d-layer/tile-3d-layer.js +0 -511
  131. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +0 -1
  132. package/dist/es5/tile-layer/tile-layer.js +0 -363
  133. package/dist/es5/tile-layer/tile-layer.js.map +0 -1
  134. package/dist/es5/tileset-2d/index.js +0 -66
  135. package/dist/es5/tileset-2d/index.js.map +0 -1
  136. package/dist/es5/tileset-2d/memoize.js +0 -47
  137. package/dist/es5/tileset-2d/memoize.js.map +0 -1
  138. package/dist/es5/tileset-2d/tile-2d-header.js +0 -250
  139. package/dist/es5/tileset-2d/tile-2d-header.js.map +0 -1
  140. package/dist/es5/tileset-2d/tile-2d-traversal.js +0 -256
  141. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +0 -1
  142. package/dist/es5/tileset-2d/tileset-2d.js +0 -757
  143. package/dist/es5/tileset-2d/tileset-2d.js.map +0 -1
  144. package/dist/es5/tileset-2d/types.js +0 -2
  145. package/dist/es5/tileset-2d/types.js.map +0 -1
  146. package/dist/es5/tileset-2d/utils.js +0 -302
  147. package/dist/es5/tileset-2d/utils.js.map +0 -1
  148. package/dist/es5/trips-layer/trips-layer.js +0 -114
  149. package/dist/es5/trips-layer/trips-layer.js.map +0 -1
  150. package/dist/es5/wms-layer/utils.js +0 -18
  151. package/dist/es5/wms-layer/utils.js.map +0 -1
  152. package/dist/es5/wms-layer/wms-layer.js +0 -376
  153. package/dist/es5/wms-layer/wms-layer.js.map +0 -1
  154. package/dist/esm/geo-cell-layer/GeoCellLayer.js +0 -72
  155. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +0 -1
  156. package/dist/esm/geohash-layer/geohash-layer.js +0 -26
  157. package/dist/esm/geohash-layer/geohash-layer.js.map +0 -1
  158. package/dist/esm/geohash-layer/geohash-utils.js +0 -56
  159. package/dist/esm/geohash-layer/geohash-utils.js.map +0 -1
  160. package/dist/esm/great-circle-layer/great-circle-layer.js +0 -12
  161. package/dist/esm/great-circle-layer/great-circle-layer.js.map +0 -1
  162. package/dist/esm/h3-layers/h3-cluster-layer.js +0 -79
  163. package/dist/esm/h3-layers/h3-cluster-layer.js.map +0 -1
  164. package/dist/esm/h3-layers/h3-hexagon-layer.js +0 -280
  165. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +0 -1
  166. package/dist/esm/h3-layers/h3-utils.js +0 -54
  167. package/dist/esm/h3-layers/h3-utils.js.map +0 -1
  168. package/dist/esm/index.js +0 -17
  169. package/dist/esm/index.js.map +0 -1
  170. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js +0 -56
  171. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
  172. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +0 -85
  173. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
  174. package/dist/esm/mesh-layer/mesh-layer.js +0 -178
  175. package/dist/esm/mesh-layer/mesh-layer.js.map +0 -1
  176. package/dist/esm/mvt-layer/coordinate-transform.js +0 -49
  177. package/dist/esm/mvt-layer/coordinate-transform.js.map +0 -1
  178. package/dist/esm/mvt-layer/find-index-binary.js +0 -99
  179. package/dist/esm/mvt-layer/find-index-binary.js.map +0 -1
  180. package/dist/esm/mvt-layer/mvt-layer.js +0 -427
  181. package/dist/esm/mvt-layer/mvt-layer.js.map +0 -1
  182. package/dist/esm/quadkey-layer/quadkey-layer.js +0 -31
  183. package/dist/esm/quadkey-layer/quadkey-layer.js.map +0 -1
  184. package/dist/esm/quadkey-layer/quadkey-utils.js +0 -24
  185. package/dist/esm/quadkey-layer/quadkey-utils.js.map +0 -1
  186. package/dist/esm/s2-layer/s2-geometry.js +0 -126
  187. package/dist/esm/s2-layer/s2-geometry.js.map +0 -1
  188. package/dist/esm/s2-layer/s2-layer.js +0 -26
  189. package/dist/esm/s2-layer/s2-layer.js.map +0 -1
  190. package/dist/esm/s2-layer/s2-utils.js +0 -69
  191. package/dist/esm/s2-layer/s2-utils.js.map +0 -1
  192. package/dist/esm/terrain-layer/terrain-layer.js +0 -292
  193. package/dist/esm/terrain-layer/terrain-layer.js.map +0 -1
  194. package/dist/esm/tile-3d-layer/tile-3d-layer.js +0 -438
  195. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +0 -1
  196. package/dist/esm/tile-layer/tile-layer.js +0 -299
  197. package/dist/esm/tile-layer/tile-layer.js.map +0 -1
  198. package/dist/esm/tileset-2d/index.js +0 -4
  199. package/dist/esm/tileset-2d/index.js.map +0 -1
  200. package/dist/esm/tileset-2d/memoize.js +0 -40
  201. package/dist/esm/tileset-2d/memoize.js.map +0 -1
  202. package/dist/esm/tileset-2d/tile-2d-header.js +0 -179
  203. package/dist/esm/tileset-2d/tile-2d-header.js.map +0 -1
  204. package/dist/esm/tileset-2d/tile-2d-traversal.js +0 -184
  205. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +0 -1
  206. package/dist/esm/tileset-2d/tileset-2d.js +0 -509
  207. package/dist/esm/tileset-2d/tileset-2d.js.map +0 -1
  208. package/dist/esm/tileset-2d/types.js +0 -2
  209. package/dist/esm/tileset-2d/types.js.map +0 -1
  210. package/dist/esm/tileset-2d/utils.js +0 -233
  211. package/dist/esm/tileset-2d/utils.js.map +0 -1
  212. package/dist/esm/trips-layer/trips-layer.js +0 -88
  213. package/dist/esm/trips-layer/trips-layer.js.map +0 -1
  214. package/dist/esm/wms-layer/utils.js +0 -9
  215. package/dist/esm/wms-layer/utils.js.map +0 -1
  216. package/dist/esm/wms-layer/wms-layer.js +0 -231
  217. package/dist/esm/wms-layer/wms-layer.js.map +0 -1
  218. package/typed/geohash-layer/geohash-layer.d.ts.map +0 -1
  219. package/typed/h3-layers/h3-cluster-layer.d.ts.map +0 -1
  220. package/typed/index.d.ts +0 -31
  221. package/typed/index.d.ts.map +0 -1
  222. package/typed/mesh-layer/mesh-layer-fragment.glsl.d.ts +0 -3
  223. package/typed/mvt-layer/find-index-binary.d.ts +0 -12
  224. package/typed/mvt-layer/find-index-binary.d.ts.map +0 -1
  225. package/typed/mvt-layer/mvt-layer.d.ts.map +0 -1
  226. package/typed/quadkey-layer/quadkey-layer.d.ts.map +0 -1
  227. package/typed/s2-layer/s2-layer.d.ts.map +0 -1
  228. package/typed/terrain-layer/terrain-layer.d.ts.map +0 -1
  229. package/typed/tile-layer/tile-layer.d.ts.map +0 -1
  230. package/typed/tileset-2d/index.d.ts +0 -7
  231. package/typed/tileset-2d/index.d.ts.map +0 -1
  232. package/typed/tileset-2d/tile-2d-header.d.ts.map +0 -1
  233. package/typed/tileset-2d/tile-2d-traversal.d.ts +0 -4
  234. package/typed/tileset-2d/tile-2d-traversal.d.ts.map +0 -1
  235. package/typed/tileset-2d/tileset-2d.d.ts.map +0 -1
  236. package/typed/tileset-2d/utils.d.ts.map +0 -1
  237. /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts +0 -0
  238. /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts.map +0 -0
  239. /package/{typed → dist}/geohash-layer/geohash-utils.d.ts +0 -0
  240. /package/{typed → dist}/geohash-layer/geohash-utils.d.ts.map +0 -0
  241. /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts +0 -0
  242. /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts.map +0 -0
  243. /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts +0 -0
  244. /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts.map +0 -0
  245. /package/{typed → dist}/h3-layers/h3-utils.d.ts +0 -0
  246. /package/{typed → dist}/h3-layers/h3-utils.d.ts.map +0 -0
  247. /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts +0 -0
  248. /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts.map +0 -0
  249. /package/{typed → dist}/mesh-layer/mesh-layer.d.ts +0 -0
  250. /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts +0 -0
  251. /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts.map +0 -0
  252. /package/{typed → dist}/s2-layer/s2-geometry.d.ts +0 -0
  253. /package/{typed → dist}/s2-layer/s2-geometry.d.ts.map +0 -0
  254. /package/{typed → dist}/s2-layer/s2-utils.d.ts +0 -0
  255. /package/{typed → dist}/s2-layer/s2-utils.d.ts.map +0 -0
  256. /package/{typed → dist}/tileset-2d/memoize.d.ts +0 -0
  257. /package/{typed → dist}/tileset-2d/memoize.d.ts.map +0 -0
  258. /package/{typed → dist}/tileset-2d/types.d.ts +0 -0
  259. /package/{typed → dist}/tileset-2d/types.d.ts.map +0 -0
  260. /package/{typed → dist}/wms-layer/utils.d.ts +0 -0
  261. /package/{typed → dist}/wms-layer/utils.d.ts.map +0 -0
  262. /package/{typed → dist}/wms-layer/wms-layer.d.ts +0 -0
  263. /package/{typed → dist}/wms-layer/wms-layer.d.ts.map +0 -0
@@ -0,0 +1,51 @@
1
+ import { CompositeLayer } from '@deck.gl/core';
2
+ import { PolygonLayer } from '@deck.gl/layers';
3
+ const defaultProps = {
4
+ ...PolygonLayer.defaultProps
5
+ };
6
+ export default class GeoCellLayer extends CompositeLayer {
7
+ static { this.layerName = 'GeoCellLayer'; }
8
+ static { this.defaultProps = defaultProps; }
9
+ /** Implement to generate props to create geometry. */
10
+ indexToBounds() {
11
+ return null;
12
+ }
13
+ renderLayers() {
14
+ // Rendering props underlying layer
15
+ const { elevationScale, extruded, wireframe, filled, stroked, lineWidthUnits, lineWidthScale, lineWidthMinPixels, lineWidthMaxPixels, lineJointRounded, lineMiterLimit, lineDashJustified, getElevation, getFillColor, getLineColor, getLineWidth } = this.props;
16
+ // Accessor props for underlying layers
17
+ const { updateTriggers, material, transitions } = this.props;
18
+ // Filled Polygon Layer
19
+ const CellLayer = this.getSubLayerClass('cell', PolygonLayer);
20
+ const { updateTriggers: boundsUpdateTriggers, ...boundsProps } = this.indexToBounds() || {};
21
+ return new CellLayer({
22
+ filled,
23
+ wireframe,
24
+ extruded,
25
+ elevationScale,
26
+ stroked,
27
+ lineWidthUnits,
28
+ lineWidthScale,
29
+ lineWidthMinPixels,
30
+ lineWidthMaxPixels,
31
+ lineJointRounded,
32
+ lineMiterLimit,
33
+ lineDashJustified,
34
+ material,
35
+ transitions,
36
+ getElevation,
37
+ getFillColor,
38
+ getLineColor,
39
+ getLineWidth
40
+ }, this.getSubLayerProps({
41
+ id: 'cell',
42
+ updateTriggers: updateTriggers && {
43
+ ...boundsUpdateTriggers,
44
+ getElevation: updateTriggers.getElevation,
45
+ getFillColor: updateTriggers.getFillColor,
46
+ getLineColor: updateTriggers.getLineColor,
47
+ getLineWidth: updateTriggers.getLineWidth
48
+ }
49
+ }), boundsProps);
50
+ }
51
+ }
@@ -1,5 +1,5 @@
1
1
  import { AccessorFunction, DefaultProps } from '@deck.gl/core';
2
- import GeoCellLayer from '../geo-cell-layer/GeoCellLayer';
2
+ import GeoCellLayer from "../geo-cell-layer/GeoCellLayer.js";
3
3
  /**
4
4
  * Properties of `GeohashLayer`.
5
5
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geohash-layer.d.ts","sourceRoot":"","sources":["../../src/geohash-layer/geohash-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAC7D,OAAO,YAAY,0CAAuC;AAO1D;;GAEG;AACH,KAAK,iBAAiB,CAAC,KAAK,GAAG,OAAO,IAAI;IACxC;;;;OAIG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CAC9C,CAAC;AAEF,sIAAsI;AACtI,MAAM,CAAC,OAAO,OAAO,YAAY,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,SAAS,EAAE,GAAG,EAAE,CAAE,SAAQ,YAAY,CAC7F,KAAK,EACL,QAAQ,CAAC,iBAAiB,CAAC,GAAG,UAAU,CACzC;IACC,MAAM,CAAC,SAAS,SAAkB;IAClC,MAAM,CAAC,YAAY,2CAAgB;IAEnC,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI;CAUvD"}
@@ -0,0 +1,19 @@
1
+ import GeoCellLayer from "../geo-cell-layer/GeoCellLayer.js";
2
+ import { getGeohashPolygon } from "./geohash-utils.js";
3
+ const defaultProps = {
4
+ getGeohash: { type: 'accessor', value: (d) => d.geohash }
5
+ };
6
+ /** Render filled and/or stroked polygons based on the [Geohash](https://en.wikipedia.org/wiki/Geohash) geospatial indexing system. */
7
+ export default class GeohashLayer extends GeoCellLayer {
8
+ static { this.layerName = 'GeohashLayer'; }
9
+ static { this.defaultProps = defaultProps; }
10
+ indexToBounds() {
11
+ const { data, getGeohash } = this.props;
12
+ return {
13
+ data,
14
+ _normalize: false,
15
+ positionFormat: 'XY',
16
+ getPolygon: (x, objectInfo) => getGeohashPolygon(getGeohash(x, objectInfo))
17
+ };
18
+ }
19
+ }
@@ -0,0 +1,50 @@
1
+ const BASE32_CODES = '0123456789bcdefghjkmnpqrstuvwxyz';
2
+ const BASE32_CODES_DICT = {};
3
+ for (let i = 0; i < BASE32_CODES.length; i++) {
4
+ BASE32_CODES_DICT[BASE32_CODES.charAt(i)] = i;
5
+ }
6
+ const MIN_LAT = -90;
7
+ const MAX_LAT = 90;
8
+ const MIN_LON = -180;
9
+ const MAX_LON = 180;
10
+ // Adapted from ngeohash decode_bbox
11
+ export function getGeohashBounds(geohash) {
12
+ let isLon = true;
13
+ let maxLat = MAX_LAT;
14
+ let minLat = MIN_LAT;
15
+ let maxLon = MAX_LON;
16
+ let minLon = MIN_LON;
17
+ let mid;
18
+ let hashValue = 0;
19
+ for (let i = 0, l = geohash.length; i < l; i++) {
20
+ const code = geohash[i].toLowerCase();
21
+ hashValue = BASE32_CODES_DICT[code];
22
+ for (let bits = 4; bits >= 0; bits--) {
23
+ const bit = (hashValue >> bits) & 1;
24
+ if (isLon) {
25
+ mid = (maxLon + minLon) / 2;
26
+ if (bit === 1) {
27
+ minLon = mid;
28
+ }
29
+ else {
30
+ maxLon = mid;
31
+ }
32
+ }
33
+ else {
34
+ mid = (maxLat + minLat) / 2;
35
+ if (bit === 1) {
36
+ minLat = mid;
37
+ }
38
+ else {
39
+ maxLat = mid;
40
+ }
41
+ }
42
+ isLon = !isLon;
43
+ }
44
+ }
45
+ return [minLat, minLon, maxLat, maxLon];
46
+ }
47
+ export function getGeohashPolygon(geohash) {
48
+ const [s, w, n, e] = getGeohashBounds(geohash);
49
+ return [e, n, e, s, w, s, w, n, e, n];
50
+ }
@@ -0,0 +1,12 @@
1
+ import { ArcLayer } from '@deck.gl/layers';
2
+ const defaultProps = {
3
+ getHeight: { type: 'accessor', value: 0 },
4
+ greatCircle: true
5
+ };
6
+ // This layer has been merged into the core ArcLayer
7
+ // Keeping for backward-compatibility
8
+ /** @deprecated Use ArcLayer with `greatCircle: true` instead */
9
+ export default class GreatCircleLayer extends ArcLayer {
10
+ static { this.layerName = 'GreatCircleLayer'; }
11
+ static { this.defaultProps = defaultProps; }
12
+ }
@@ -1,6 +1,6 @@
1
1
  import { H3IndexInput } from 'h3-js';
2
2
  import { AccessorFunction, UpdateParameters, DefaultProps } from '@deck.gl/core';
3
- import GeoCellLayer, { GeoCellLayerProps } from '../geo-cell-layer/GeoCellLayer';
3
+ import GeoCellLayer, { GeoCellLayerProps } from "../geo-cell-layer/GeoCellLayer.js";
4
4
  /** All properties supported by H3ClusterLayer. */
5
5
  export type H3ClusterLayerProps<DataT = unknown> = _H3ClusterLayerProps<DataT> & GeoCellLayerProps<DataT>;
6
6
  /** Properties added by H3ClusterLayer. */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"h3-cluster-layer.d.ts","sourceRoot":"","sources":["../../src/h3-layers/h3-cluster-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAC,MAAM,OAAO,CAAC;AAExD,OAAO,EAAC,gBAAgB,EAAkB,gBAAgB,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAE/F,OAAO,YAAY,EAAE,EAAC,iBAAiB,EAAC,0CAAuC;AAO/E,kDAAkD;AAClD,MAAM,MAAM,mBAAmB,CAAC,KAAK,GAAG,OAAO,IAAI,oBAAoB,CAAC,KAAK,CAAC,GAC5E,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAE3B,0CAA0C;AAC1C,KAAK,oBAAoB,CAAC,KAAK,IAAI;IACjC;;;;OAIG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,cAAc,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,SAAS,EAAE,GAAG,EAAE,CAAE,SAAQ,YAAY,CAC/F,KAAK,EACL,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CACnD;IACC,MAAM,CAAC,SAAS,SAAoB;IACpC,MAAM,CAAC,YAAY,6CAAgB;IAEnC,KAAK,EAAG;QACN,QAAQ,EAAE;YAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;SAAC,EAAE,CAAC;KACrC,CAAC;IAEF,eAAe,IAAI,IAAI;IAIvB,WAAW,CAAC,EAAC,KAAK,EAAE,WAAW,EAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI;IA2B/D,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;CAahD"}
@@ -0,0 +1,47 @@
1
+ import { cellsToMultiPolygon } from 'h3-js';
2
+ import { createIterable } from '@deck.gl/core';
3
+ import { default as H3HexagonLayer } from "./h3-hexagon-layer.js";
4
+ import GeoCellLayer from "../geo-cell-layer/GeoCellLayer.js";
5
+ import { normalizeLongitudes } from "./h3-utils.js";
6
+ const defaultProps = {
7
+ getHexagons: { type: 'accessor', value: (d) => d.hexagons }
8
+ };
9
+ export default class H3ClusterLayer extends GeoCellLayer {
10
+ static { this.layerName = 'H3ClusterLayer'; }
11
+ static { this.defaultProps = defaultProps; }
12
+ initializeState() {
13
+ H3HexagonLayer._checkH3Lib();
14
+ }
15
+ updateState({ props, changeFlags }) {
16
+ if (changeFlags.dataChanged ||
17
+ (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagons)) {
18
+ const { data, getHexagons } = props;
19
+ const polygons = [];
20
+ const { iterable, objectInfo } = createIterable(data);
21
+ for (const object of iterable) {
22
+ objectInfo.index++;
23
+ const hexagons = getHexagons(object, objectInfo);
24
+ const multiPolygon = cellsToMultiPolygon(hexagons, true);
25
+ for (const polygon of multiPolygon) {
26
+ // Normalize polygons to prevent wrapping over the anti-meridian
27
+ for (const ring of polygon) {
28
+ normalizeLongitudes(ring);
29
+ }
30
+ polygons.push(this.getSubLayerRow({ polygon }, object, objectInfo.index));
31
+ }
32
+ }
33
+ this.setState({ polygons });
34
+ }
35
+ }
36
+ indexToBounds() {
37
+ const { getElevation, getFillColor, getLineColor, getLineWidth } = this.props;
38
+ return {
39
+ data: this.state.polygons,
40
+ getPolygon: d => d.polygon,
41
+ getElevation: this.getSubLayerAccessor(getElevation),
42
+ getFillColor: this.getSubLayerAccessor(getFillColor),
43
+ getLineColor: this.getSubLayerAccessor(getLineColor),
44
+ getLineWidth: this.getSubLayerAccessor(getLineWidth)
45
+ };
46
+ }
47
+ }
@@ -0,0 +1,204 @@
1
+ import { getResolution, cellToLatLng, latLngToCell, isPentagon, gridDistance, getHexagonEdgeLengthAvg } from 'h3-js';
2
+ import { CompositeLayer, createIterable } from '@deck.gl/core';
3
+ import { ColumnLayer, PolygonLayer } from '@deck.gl/layers';
4
+ import { flattenPolygon, getHexagonCentroid, h3ToPolygon } from "./h3-utils.js";
5
+ // There is a cost to updating the instanced geometries when using highPrecision: false
6
+ // This constant defines the distance between two hexagons that leads to "significant
7
+ // distortion." Smaller value makes the column layer more sensitive to viewport change.
8
+ const UPDATE_THRESHOLD_KM = 10;
9
+ function mergeTriggers(getHexagon, coverage) {
10
+ let trigger;
11
+ if (getHexagon === undefined || getHexagon === null) {
12
+ trigger = coverage;
13
+ }
14
+ else if (typeof getHexagon === 'object') {
15
+ trigger = { ...getHexagon, coverage };
16
+ }
17
+ else {
18
+ trigger = { getHexagon, coverage };
19
+ }
20
+ return trigger;
21
+ }
22
+ const defaultProps = {
23
+ ...PolygonLayer.defaultProps,
24
+ highPrecision: 'auto',
25
+ coverage: { type: 'number', min: 0, max: 1, value: 1 },
26
+ centerHexagon: null,
27
+ getHexagon: { type: 'accessor', value: (x) => x.hexagon },
28
+ extruded: true
29
+ };
30
+ /**
31
+ * Render hexagons from the [H3](https://h3geo.org/) geospatial indexing system.
32
+ */
33
+ export default class H3HexagonLayer extends CompositeLayer {
34
+ static { this.defaultProps = defaultProps; }
35
+ static { this.layerName = 'H3HexagonLayer'; }
36
+ // See `main/bundle.ts`
37
+ static { this._checkH3Lib = () => { }; }
38
+ initializeState() {
39
+ H3HexagonLayer._checkH3Lib();
40
+ this.state = {
41
+ edgeLengthKM: 0,
42
+ resolution: -1
43
+ };
44
+ }
45
+ shouldUpdateState({ changeFlags }) {
46
+ return this._shouldUseHighPrecision()
47
+ ? changeFlags.propsOrDataChanged
48
+ : changeFlags.somethingChanged;
49
+ }
50
+ updateState({ props, changeFlags }) {
51
+ if (props.highPrecision !== true &&
52
+ (changeFlags.dataChanged ||
53
+ (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagon))) {
54
+ const dataProps = this._calculateH3DataProps();
55
+ this.setState(dataProps);
56
+ }
57
+ this._updateVertices(this.context.viewport);
58
+ }
59
+ _calculateH3DataProps() {
60
+ let resolution = -1;
61
+ let hasPentagon = false;
62
+ let hasMultipleRes = false;
63
+ const { iterable, objectInfo } = createIterable(this.props.data);
64
+ for (const object of iterable) {
65
+ objectInfo.index++;
66
+ const hexId = this.props.getHexagon(object, objectInfo);
67
+ // Take the resolution of the first hex
68
+ const hexResolution = getResolution(hexId);
69
+ if (resolution < 0) {
70
+ resolution = hexResolution;
71
+ if (!this.props.highPrecision)
72
+ break;
73
+ }
74
+ else if (resolution !== hexResolution) {
75
+ hasMultipleRes = true;
76
+ break;
77
+ }
78
+ if (isPentagon(hexId)) {
79
+ hasPentagon = true;
80
+ break;
81
+ }
82
+ }
83
+ return {
84
+ resolution,
85
+ edgeLengthKM: resolution >= 0 ? getHexagonEdgeLengthAvg(resolution, 'km') : 0,
86
+ hasMultipleRes,
87
+ hasPentagon
88
+ };
89
+ }
90
+ _shouldUseHighPrecision() {
91
+ if (this.props.highPrecision === 'auto') {
92
+ const { resolution, hasPentagon, hasMultipleRes } = this.state;
93
+ const { viewport } = this.context;
94
+ return (Boolean(viewport?.resolution) ||
95
+ hasMultipleRes ||
96
+ hasPentagon ||
97
+ (resolution >= 0 && resolution <= 5));
98
+ }
99
+ return this.props.highPrecision;
100
+ }
101
+ _updateVertices(viewport) {
102
+ if (this._shouldUseHighPrecision()) {
103
+ return;
104
+ }
105
+ const { resolution, edgeLengthKM, centerHex } = this.state;
106
+ if (resolution < 0) {
107
+ return;
108
+ }
109
+ const hex = this.props.centerHexagon || latLngToCell(viewport.latitude, viewport.longitude, resolution);
110
+ if (centerHex === hex) {
111
+ return;
112
+ }
113
+ if (centerHex) {
114
+ try {
115
+ const distance = gridDistance(centerHex, hex);
116
+ if (distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {
117
+ return;
118
+ }
119
+ }
120
+ catch {
121
+ // gridDistance throws if the distance could not be computed
122
+ // due to the two indexes very far apart or on opposite sides of a pentagon.
123
+ }
124
+ }
125
+ const { unitsPerMeter } = viewport.distanceScales;
126
+ let vertices = h3ToPolygon(hex);
127
+ const [centerLat, centerLng] = cellToLatLng(hex);
128
+ const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);
129
+ vertices = vertices.map(p => {
130
+ const worldPosition = viewport.projectFlat(p);
131
+ return [
132
+ (worldPosition[0] - centerX) / unitsPerMeter[0],
133
+ (worldPosition[1] - centerY) / unitsPerMeter[1]
134
+ ];
135
+ });
136
+ this.setState({ centerHex: hex, vertices });
137
+ }
138
+ renderLayers() {
139
+ return this._shouldUseHighPrecision() ? this._renderPolygonLayer() : this._renderColumnLayer();
140
+ }
141
+ _getForwardProps() {
142
+ const { elevationScale, material, coverage, extruded, wireframe, stroked, filled, lineWidthUnits, lineWidthScale, lineWidthMinPixels, lineWidthMaxPixels, getFillColor, getElevation, getLineColor, getLineWidth, transitions, updateTriggers } = this.props;
143
+ return {
144
+ elevationScale,
145
+ extruded,
146
+ coverage,
147
+ wireframe,
148
+ stroked,
149
+ filled,
150
+ lineWidthUnits,
151
+ lineWidthScale,
152
+ lineWidthMinPixels,
153
+ lineWidthMaxPixels,
154
+ material,
155
+ getElevation,
156
+ getFillColor,
157
+ getLineColor,
158
+ getLineWidth,
159
+ transitions,
160
+ updateTriggers: {
161
+ getFillColor: updateTriggers.getFillColor,
162
+ getElevation: updateTriggers.getElevation,
163
+ getLineColor: updateTriggers.getLineColor,
164
+ getLineWidth: updateTriggers.getLineWidth
165
+ }
166
+ };
167
+ }
168
+ _renderPolygonLayer() {
169
+ const { data, getHexagon, updateTriggers, coverage } = this.props;
170
+ const SubLayerClass = this.getSubLayerClass('hexagon-cell-hifi', PolygonLayer);
171
+ const forwardProps = this._getForwardProps();
172
+ forwardProps.updateTriggers.getPolygon = mergeTriggers(updateTriggers.getHexagon, coverage);
173
+ return new SubLayerClass(forwardProps, this.getSubLayerProps({
174
+ id: 'hexagon-cell-hifi',
175
+ updateTriggers: forwardProps.updateTriggers
176
+ }), {
177
+ data,
178
+ _normalize: false,
179
+ _windingOrder: 'CCW',
180
+ positionFormat: 'XY',
181
+ getPolygon: (object, objectInfo) => {
182
+ const hexagonId = getHexagon(object, objectInfo);
183
+ return flattenPolygon(h3ToPolygon(hexagonId, coverage));
184
+ }
185
+ });
186
+ }
187
+ _renderColumnLayer() {
188
+ const { data, getHexagon, updateTriggers } = this.props;
189
+ const SubLayerClass = this.getSubLayerClass('hexagon-cell', ColumnLayer);
190
+ const forwardProps = this._getForwardProps();
191
+ forwardProps.updateTriggers.getPosition = updateTriggers.getHexagon;
192
+ return new SubLayerClass(forwardProps, this.getSubLayerProps({
193
+ id: 'hexagon-cell',
194
+ flatShading: true,
195
+ updateTriggers: forwardProps.updateTriggers
196
+ }), {
197
+ data,
198
+ diskResolution: 6, // generate an extruded hexagon as the base geometry
199
+ radius: 1,
200
+ vertices: this.state.vertices,
201
+ getPosition: getHexagonCentroid.bind(null, getHexagon)
202
+ });
203
+ }
204
+ }
@@ -0,0 +1,56 @@
1
+ import { cellToBoundary, cellToLatLng } from 'h3-js';
2
+ import { lerp } from '@math.gl/core';
3
+ // normalize longitudes w.r.t center (refLng), when not provided first vertex
4
+ export function normalizeLongitudes(vertices, refLng) {
5
+ refLng = refLng === undefined ? vertices[0][0] : refLng;
6
+ for (const pt of vertices) {
7
+ const deltaLng = pt[0] - refLng;
8
+ if (deltaLng > 180) {
9
+ pt[0] -= 360;
10
+ }
11
+ else if (deltaLng < -180) {
12
+ pt[0] += 360;
13
+ }
14
+ }
15
+ }
16
+ // scale polygon vertices w.r.t center (hexId)
17
+ export function scalePolygon(hexId, vertices, factor) {
18
+ const [lat, lng] = cellToLatLng(hexId);
19
+ const actualCount = vertices.length;
20
+ // normalize with respect to center
21
+ normalizeLongitudes(vertices, lng);
22
+ // `cellToBoundary` returns same array object for first and last vertex (closed polygon),
23
+ // if so skip scaling the last vertex
24
+ const vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;
25
+ for (let i = 0; i < vertexCount; i++) {
26
+ vertices[i][0] = lerp(lng, vertices[i][0], factor);
27
+ vertices[i][1] = lerp(lat, vertices[i][1], factor);
28
+ }
29
+ }
30
+ // gets hexagon centroid
31
+ export function getHexagonCentroid(getHexagon, object, objectInfo) {
32
+ const hexagonId = getHexagon(object, objectInfo);
33
+ const [lat, lng] = cellToLatLng(hexagonId);
34
+ return [lng, lat];
35
+ }
36
+ export function h3ToPolygon(hexId, coverage = 1) {
37
+ const vertices = cellToBoundary(hexId, true);
38
+ if (coverage !== 1) {
39
+ // scale and normalize vertices w.r.t to center
40
+ scalePolygon(hexId, vertices, coverage);
41
+ }
42
+ else {
43
+ // normalize w.r.t to start vertex
44
+ normalizeLongitudes(vertices);
45
+ }
46
+ return vertices;
47
+ }
48
+ export function flattenPolygon(vertices) {
49
+ const positions = new Float64Array(vertices.length * 2);
50
+ let i = 0;
51
+ for (const pt of vertices) {
52
+ positions[i++] = pt[0];
53
+ positions[i++] = pt[1];
54
+ }
55
+ return positions;
56
+ }