@deck.gl/geo-layers 9.0.0-beta.2 → 9.0.0-beta.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 (245) hide show
  1. package/dist/dist.dev.js +2796 -7199
  2. package/dist/geo-cell-layer/GeoCellLayer.js +51 -0
  3. package/dist/geohash-layer/geohash-layer.js +19 -0
  4. package/dist/geohash-layer/geohash-utils.js +50 -0
  5. package/dist/great-circle-layer/great-circle-layer.js +12 -0
  6. package/dist/h3-layers/h3-cluster-layer.js +47 -0
  7. package/dist/h3-layers/h3-hexagon-layer.js +204 -0
  8. package/dist/h3-layers/h3-utils.js +56 -0
  9. package/dist/index.cjs +3199 -0
  10. package/dist/index.cjs.map +7 -0
  11. package/{typed → dist}/index.d.ts +5 -5
  12. package/{typed → dist}/index.d.ts.map +1 -1
  13. package/dist/index.js +36 -0
  14. package/dist/{esm/mesh-layer → mesh-layer}/mesh-layer-fragment.glsl.js +0 -1
  15. package/dist/{esm/mesh-layer → mesh-layer}/mesh-layer-vertex.glsl.js +0 -1
  16. package/dist/mesh-layer/mesh-layer.js +129 -0
  17. package/{typed → dist}/mvt-layer/coordinate-transform.d.ts +1 -1
  18. package/{typed → dist}/mvt-layer/coordinate-transform.d.ts.map +1 -1
  19. package/dist/mvt-layer/coordinate-transform.js +41 -0
  20. package/dist/mvt-layer/find-index-binary.d.ts +11 -0
  21. package/dist/mvt-layer/find-index-binary.d.ts.map +1 -0
  22. package/dist/mvt-layer/find-index-binary.js +96 -0
  23. package/{typed → dist}/mvt-layer/mvt-layer.d.ts +6 -5
  24. package/dist/mvt-layer/mvt-layer.d.ts.map +1 -0
  25. package/dist/mvt-layer/mvt-layer.js +305 -0
  26. package/dist/quadkey-layer/quadkey-layer.js +22 -0
  27. package/dist/quadkey-layer/quadkey-utils.js +26 -0
  28. package/dist/s2-layer/s2-geometry.js +123 -0
  29. package/dist/s2-layer/s2-layer.js +38 -0
  30. package/dist/s2-layer/s2-utils.js +87 -0
  31. package/{typed → dist}/terrain-layer/terrain-layer.d.ts +3 -3
  32. package/dist/terrain-layer/terrain-layer.d.ts.map +1 -0
  33. package/dist/terrain-layer/terrain-layer.js +233 -0
  34. package/dist/tile-3d-layer/tile-3d-layer.js +302 -0
  35. package/{typed → dist}/tile-layer/tile-layer.d.ts +3 -3
  36. package/dist/tile-layer/tile-layer.d.ts.map +1 -0
  37. package/dist/tile-layer/tile-layer.js +204 -0
  38. package/dist/tileset-2d/index.js +4 -0
  39. package/dist/tileset-2d/memoize.js +41 -0
  40. package/{typed → dist}/tileset-2d/tile-2d-header.d.ts +2 -1
  41. package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
  42. package/dist/tileset-2d/tile-2d-header.js +135 -0
  43. package/{typed → dist}/tileset-2d/tile-2d-traversal.d.ts +1 -1
  44. package/{typed → dist}/tileset-2d/tile-2d-traversal.d.ts.map +1 -1
  45. package/dist/tileset-2d/tile-2d-traversal.js +182 -0
  46. package/{typed → dist}/tileset-2d/tileset-2d.d.ts +4 -4
  47. package/{typed → dist}/tileset-2d/tileset-2d.d.ts.map +1 -1
  48. package/dist/tileset-2d/tileset-2d.js +456 -0
  49. package/dist/tileset-2d/types.js +1 -0
  50. package/{typed → dist}/tileset-2d/utils.d.ts +2 -2
  51. package/dist/tileset-2d/utils.d.ts.map +1 -0
  52. package/dist/tileset-2d/utils.js +234 -0
  53. package/dist/trips-layer/trips-layer.js +93 -0
  54. package/dist/wms-layer/utils.js +13 -0
  55. package/dist/wms-layer/wms-layer.js +192 -0
  56. package/dist.min.js +27 -162
  57. package/package.json +32 -18
  58. package/src/index.ts +5 -5
  59. package/src/mvt-layer/coordinate-transform.ts +1 -1
  60. package/src/mvt-layer/find-index-binary.ts +5 -9
  61. package/src/mvt-layer/mvt-layer.ts +19 -15
  62. package/src/terrain-layer/terrain-layer.ts +13 -3
  63. package/src/tile-layer/tile-layer.ts +8 -9
  64. package/src/tileset-2d/tile-2d-header.ts +2 -1
  65. package/src/tileset-2d/tile-2d-traversal.ts +1 -1
  66. package/src/tileset-2d/tileset-2d.ts +7 -3
  67. package/src/tileset-2d/utils.ts +2 -2
  68. package/src/wms-layer/wms-layer.ts +1 -1
  69. package/dist/es5/geo-cell-layer/GeoCellLayer.js +0 -118
  70. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +0 -1
  71. package/dist/es5/geohash-layer/geohash-layer.js +0 -67
  72. package/dist/es5/geohash-layer/geohash-layer.js.map +0 -1
  73. package/dist/es5/geohash-layer/geohash-utils.js +0 -77
  74. package/dist/es5/geohash-layer/geohash-utils.js.map +0 -1
  75. package/dist/es5/great-circle-layer/great-circle-layer.js +0 -48
  76. package/dist/es5/great-circle-layer/great-circle-layer.js.map +0 -1
  77. package/dist/es5/h3-layers/h3-cluster-layer.js +0 -162
  78. package/dist/es5/h3-layers/h3-cluster-layer.js.map +0 -1
  79. package/dist/es5/h3-layers/h3-hexagon-layer.js +0 -351
  80. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +0 -1
  81. package/dist/es5/h3-layers/h3-utils.js +0 -111
  82. package/dist/es5/h3-layers/h3-utils.js.map +0 -1
  83. package/dist/es5/index.js +0 -132
  84. package/dist/es5/index.js.map +0 -1
  85. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js +0 -9
  86. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
  87. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +0 -9
  88. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
  89. package/dist/es5/mesh-layer/mesh-layer.js +0 -217
  90. package/dist/es5/mesh-layer/mesh-layer.js.map +0 -1
  91. package/dist/es5/mvt-layer/coordinate-transform.js +0 -83
  92. package/dist/es5/mvt-layer/coordinate-transform.js.map +0 -1
  93. package/dist/es5/mvt-layer/find-index-binary.js +0 -127
  94. package/dist/es5/mvt-layer/find-index-binary.js.map +0 -1
  95. package/dist/es5/mvt-layer/mvt-layer.js +0 -533
  96. package/dist/es5/mvt-layer/mvt-layer.js.map +0 -1
  97. package/dist/es5/quadkey-layer/quadkey-layer.js +0 -72
  98. package/dist/es5/quadkey-layer/quadkey-layer.js.map +0 -1
  99. package/dist/es5/quadkey-layer/quadkey-utils.js +0 -53
  100. package/dist/es5/quadkey-layer/quadkey-utils.js.map +0 -1
  101. package/dist/es5/s2-layer/s2-geometry.js +0 -158
  102. package/dist/es5/s2-layer/s2-geometry.js.map +0 -1
  103. package/dist/es5/s2-layer/s2-layer.js +0 -67
  104. package/dist/es5/s2-layer/s2-layer.js.map +0 -1
  105. package/dist/es5/s2-layer/s2-utils.js +0 -80
  106. package/dist/es5/s2-layer/s2-utils.js.map +0 -1
  107. package/dist/es5/terrain-layer/terrain-layer.js +0 -347
  108. package/dist/es5/terrain-layer/terrain-layer.js.map +0 -1
  109. package/dist/es5/tile-3d-layer/tile-3d-layer.js +0 -511
  110. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +0 -1
  111. package/dist/es5/tile-layer/tile-layer.js +0 -363
  112. package/dist/es5/tile-layer/tile-layer.js.map +0 -1
  113. package/dist/es5/tileset-2d/index.js +0 -66
  114. package/dist/es5/tileset-2d/index.js.map +0 -1
  115. package/dist/es5/tileset-2d/memoize.js +0 -47
  116. package/dist/es5/tileset-2d/memoize.js.map +0 -1
  117. package/dist/es5/tileset-2d/tile-2d-header.js +0 -250
  118. package/dist/es5/tileset-2d/tile-2d-header.js.map +0 -1
  119. package/dist/es5/tileset-2d/tile-2d-traversal.js +0 -256
  120. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +0 -1
  121. package/dist/es5/tileset-2d/tileset-2d.js +0 -757
  122. package/dist/es5/tileset-2d/tileset-2d.js.map +0 -1
  123. package/dist/es5/tileset-2d/types.js +0 -2
  124. package/dist/es5/tileset-2d/types.js.map +0 -1
  125. package/dist/es5/tileset-2d/utils.js +0 -302
  126. package/dist/es5/tileset-2d/utils.js.map +0 -1
  127. package/dist/es5/trips-layer/trips-layer.js +0 -114
  128. package/dist/es5/trips-layer/trips-layer.js.map +0 -1
  129. package/dist/es5/wms-layer/utils.js +0 -18
  130. package/dist/es5/wms-layer/utils.js.map +0 -1
  131. package/dist/es5/wms-layer/wms-layer.js +0 -376
  132. package/dist/es5/wms-layer/wms-layer.js.map +0 -1
  133. package/dist/esm/geo-cell-layer/GeoCellLayer.js +0 -72
  134. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +0 -1
  135. package/dist/esm/geohash-layer/geohash-layer.js +0 -26
  136. package/dist/esm/geohash-layer/geohash-layer.js.map +0 -1
  137. package/dist/esm/geohash-layer/geohash-utils.js +0 -56
  138. package/dist/esm/geohash-layer/geohash-utils.js.map +0 -1
  139. package/dist/esm/great-circle-layer/great-circle-layer.js +0 -12
  140. package/dist/esm/great-circle-layer/great-circle-layer.js.map +0 -1
  141. package/dist/esm/h3-layers/h3-cluster-layer.js +0 -79
  142. package/dist/esm/h3-layers/h3-cluster-layer.js.map +0 -1
  143. package/dist/esm/h3-layers/h3-hexagon-layer.js +0 -280
  144. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +0 -1
  145. package/dist/esm/h3-layers/h3-utils.js +0 -54
  146. package/dist/esm/h3-layers/h3-utils.js.map +0 -1
  147. package/dist/esm/index.js +0 -17
  148. package/dist/esm/index.js.map +0 -1
  149. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
  150. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
  151. package/dist/esm/mesh-layer/mesh-layer.js +0 -178
  152. package/dist/esm/mesh-layer/mesh-layer.js.map +0 -1
  153. package/dist/esm/mvt-layer/coordinate-transform.js +0 -49
  154. package/dist/esm/mvt-layer/coordinate-transform.js.map +0 -1
  155. package/dist/esm/mvt-layer/find-index-binary.js +0 -99
  156. package/dist/esm/mvt-layer/find-index-binary.js.map +0 -1
  157. package/dist/esm/mvt-layer/mvt-layer.js +0 -427
  158. package/dist/esm/mvt-layer/mvt-layer.js.map +0 -1
  159. package/dist/esm/quadkey-layer/quadkey-layer.js +0 -31
  160. package/dist/esm/quadkey-layer/quadkey-layer.js.map +0 -1
  161. package/dist/esm/quadkey-layer/quadkey-utils.js +0 -24
  162. package/dist/esm/quadkey-layer/quadkey-utils.js.map +0 -1
  163. package/dist/esm/s2-layer/s2-geometry.js +0 -126
  164. package/dist/esm/s2-layer/s2-geometry.js.map +0 -1
  165. package/dist/esm/s2-layer/s2-layer.js +0 -26
  166. package/dist/esm/s2-layer/s2-layer.js.map +0 -1
  167. package/dist/esm/s2-layer/s2-utils.js +0 -69
  168. package/dist/esm/s2-layer/s2-utils.js.map +0 -1
  169. package/dist/esm/terrain-layer/terrain-layer.js +0 -292
  170. package/dist/esm/terrain-layer/terrain-layer.js.map +0 -1
  171. package/dist/esm/tile-3d-layer/tile-3d-layer.js +0 -438
  172. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +0 -1
  173. package/dist/esm/tile-layer/tile-layer.js +0 -299
  174. package/dist/esm/tile-layer/tile-layer.js.map +0 -1
  175. package/dist/esm/tileset-2d/index.js +0 -4
  176. package/dist/esm/tileset-2d/index.js.map +0 -1
  177. package/dist/esm/tileset-2d/memoize.js +0 -40
  178. package/dist/esm/tileset-2d/memoize.js.map +0 -1
  179. package/dist/esm/tileset-2d/tile-2d-header.js +0 -179
  180. package/dist/esm/tileset-2d/tile-2d-header.js.map +0 -1
  181. package/dist/esm/tileset-2d/tile-2d-traversal.js +0 -184
  182. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +0 -1
  183. package/dist/esm/tileset-2d/tileset-2d.js +0 -509
  184. package/dist/esm/tileset-2d/tileset-2d.js.map +0 -1
  185. package/dist/esm/tileset-2d/types.js +0 -2
  186. package/dist/esm/tileset-2d/types.js.map +0 -1
  187. package/dist/esm/tileset-2d/utils.js +0 -233
  188. package/dist/esm/tileset-2d/utils.js.map +0 -1
  189. package/dist/esm/trips-layer/trips-layer.js +0 -88
  190. package/dist/esm/trips-layer/trips-layer.js.map +0 -1
  191. package/dist/esm/wms-layer/utils.js +0 -9
  192. package/dist/esm/wms-layer/utils.js.map +0 -1
  193. package/dist/esm/wms-layer/wms-layer.js +0 -231
  194. package/dist/esm/wms-layer/wms-layer.js.map +0 -1
  195. package/typed/mvt-layer/find-index-binary.d.ts +0 -12
  196. package/typed/mvt-layer/find-index-binary.d.ts.map +0 -1
  197. package/typed/mvt-layer/mvt-layer.d.ts.map +0 -1
  198. package/typed/terrain-layer/terrain-layer.d.ts.map +0 -1
  199. package/typed/tile-layer/tile-layer.d.ts.map +0 -1
  200. package/typed/tileset-2d/tile-2d-header.d.ts.map +0 -1
  201. package/typed/tileset-2d/utils.d.ts.map +0 -1
  202. /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts +0 -0
  203. /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts.map +0 -0
  204. /package/{typed → dist}/geohash-layer/geohash-layer.d.ts +0 -0
  205. /package/{typed → dist}/geohash-layer/geohash-layer.d.ts.map +0 -0
  206. /package/{typed → dist}/geohash-layer/geohash-utils.d.ts +0 -0
  207. /package/{typed → dist}/geohash-layer/geohash-utils.d.ts.map +0 -0
  208. /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts +0 -0
  209. /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts.map +0 -0
  210. /package/{typed → dist}/h3-layers/h3-cluster-layer.d.ts +0 -0
  211. /package/{typed → dist}/h3-layers/h3-cluster-layer.d.ts.map +0 -0
  212. /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts +0 -0
  213. /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts.map +0 -0
  214. /package/{typed → dist}/h3-layers/h3-utils.d.ts +0 -0
  215. /package/{typed → dist}/h3-layers/h3-utils.d.ts.map +0 -0
  216. /package/{typed → dist}/mesh-layer/mesh-layer-fragment.glsl.d.ts +0 -0
  217. /package/{typed → dist}/mesh-layer/mesh-layer-fragment.glsl.d.ts.map +0 -0
  218. /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts +0 -0
  219. /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts.map +0 -0
  220. /package/{typed → dist}/mesh-layer/mesh-layer.d.ts +0 -0
  221. /package/{typed → dist}/mesh-layer/mesh-layer.d.ts.map +0 -0
  222. /package/{typed → dist}/quadkey-layer/quadkey-layer.d.ts +0 -0
  223. /package/{typed → dist}/quadkey-layer/quadkey-layer.d.ts.map +0 -0
  224. /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts +0 -0
  225. /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts.map +0 -0
  226. /package/{typed → dist}/s2-layer/s2-geometry.d.ts +0 -0
  227. /package/{typed → dist}/s2-layer/s2-geometry.d.ts.map +0 -0
  228. /package/{typed → dist}/s2-layer/s2-layer.d.ts +0 -0
  229. /package/{typed → dist}/s2-layer/s2-layer.d.ts.map +0 -0
  230. /package/{typed → dist}/s2-layer/s2-utils.d.ts +0 -0
  231. /package/{typed → dist}/s2-layer/s2-utils.d.ts.map +0 -0
  232. /package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts +0 -0
  233. /package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts.map +0 -0
  234. /package/{typed → dist}/tileset-2d/index.d.ts +0 -0
  235. /package/{typed → dist}/tileset-2d/index.d.ts.map +0 -0
  236. /package/{typed → dist}/tileset-2d/memoize.d.ts +0 -0
  237. /package/{typed → dist}/tileset-2d/memoize.d.ts.map +0 -0
  238. /package/{typed → dist}/tileset-2d/types.d.ts +0 -0
  239. /package/{typed → dist}/tileset-2d/types.d.ts.map +0 -0
  240. /package/{typed → dist}/trips-layer/trips-layer.d.ts +0 -0
  241. /package/{typed → dist}/trips-layer/trips-layer.d.ts.map +0 -0
  242. /package/{typed → dist}/wms-layer/utils.d.ts +0 -0
  243. /package/{typed → dist}/wms-layer/utils.d.ts.map +0 -0
  244. /package/{typed → dist}/wms-layer/wms-layer.d.ts +0 -0
  245. /package/{typed → dist}/wms-layer/wms-layer.d.ts.map +0 -0
@@ -1,427 +0,0 @@
1
- import { log, COORDINATE_SYSTEM } from '@deck.gl/core';
2
- import { GeoJsonLayer } from '@deck.gl/layers';
3
- import { ClipExtension } from '@deck.gl/extensions';
4
- import { Matrix4 } from '@math.gl/core';
5
- import { MVTWorkerLoader } from '@loaders.gl/mvt';
6
- import { binaryToGeojson } from '@loaders.gl/gis';
7
- import { transform } from './coordinate-transform';
8
- import findIndexBinary from './find-index-binary';
9
- import TileLayer from '../tile-layer/tile-layer';
10
- import { urlType, getURLFromTemplate, isGeoBoundingBox, isURLTemplate } from '../tileset-2d';
11
- const WORLD_SIZE = 512;
12
- const defaultProps = { ...GeoJsonLayer.defaultProps,
13
- data: urlType,
14
- onDataLoad: {
15
- type: 'function',
16
- value: null,
17
- optional: true,
18
- compare: false
19
- },
20
- uniqueIdProperty: '',
21
- highlightedFeatureId: null,
22
- loaders: [MVTWorkerLoader],
23
- binary: true
24
- };
25
- export default class MVTLayer extends TileLayer {
26
- constructor(...args) {
27
- super(...args);
28
- this.state = void 0;
29
- }
30
-
31
- initializeState() {
32
- super.initializeState();
33
- const binary = this.context.viewport.resolution !== undefined ? false : this.props.binary;
34
- this.setState({
35
- binary,
36
- data: null,
37
- tileJSON: null
38
- });
39
- }
40
-
41
- get isLoaded() {
42
- return Boolean(this.state && this.state.data && this.state.tileset && super.isLoaded);
43
- }
44
-
45
- updateState({
46
- props,
47
- oldProps,
48
- context,
49
- changeFlags
50
- }) {
51
- var _this$state;
52
-
53
- if (changeFlags.dataChanged) {
54
- this._updateTileData();
55
- }
56
-
57
- if ((_this$state = this.state) !== null && _this$state !== void 0 && _this$state.data) {
58
- super.updateState({
59
- props,
60
- oldProps,
61
- context,
62
- changeFlags
63
- });
64
-
65
- this._setWGS84PropertyForTiles();
66
- }
67
-
68
- const {
69
- highlightColor
70
- } = props;
71
-
72
- if (highlightColor !== oldProps.highlightColor && Array.isArray(highlightColor)) {
73
- this.setState({
74
- highlightColor
75
- });
76
- }
77
- }
78
-
79
- async _updateTileData() {
80
- let data = this.props.data;
81
- let tileJSON = null;
82
-
83
- if (typeof data === 'string' && !isURLTemplate(data)) {
84
- const {
85
- onDataLoad,
86
- fetch
87
- } = this.props;
88
- this.setState({
89
- data: null,
90
- tileJSON: null
91
- });
92
-
93
- try {
94
- tileJSON = await fetch(data, {
95
- propName: 'data',
96
- layer: this,
97
- loaders: []
98
- });
99
- } catch (error) {
100
- this.raiseError(error, 'loading TileJSON');
101
- data = null;
102
- }
103
-
104
- if (onDataLoad) {
105
- onDataLoad(tileJSON, {
106
- propName: 'data',
107
- layer: this
108
- });
109
- }
110
- } else if (data.tilejson) {
111
- tileJSON = data;
112
- }
113
-
114
- if (tileJSON) {
115
- data = tileJSON.tiles;
116
- }
117
-
118
- this.setState({
119
- data,
120
- tileJSON
121
- });
122
- }
123
-
124
- _getTilesetOptions() {
125
- const opts = super._getTilesetOptions();
126
-
127
- const tileJSON = this.state.tileJSON;
128
- const {
129
- minZoom,
130
- maxZoom
131
- } = this.props;
132
-
133
- if (tileJSON) {
134
- if (Number.isFinite(tileJSON.minzoom) && tileJSON.minzoom > minZoom) {
135
- opts.minZoom = tileJSON.minzoom;
136
- }
137
-
138
- if (Number.isFinite(tileJSON.maxzoom) && (!Number.isFinite(maxZoom) || tileJSON.maxzoom < maxZoom)) {
139
- opts.maxZoom = tileJSON.maxzoom;
140
- }
141
- }
142
-
143
- return opts;
144
- }
145
-
146
- renderLayers() {
147
- var _this$state2;
148
-
149
- if (!((_this$state2 = this.state) !== null && _this$state2 !== void 0 && _this$state2.data)) return null;
150
- return super.renderLayers();
151
- }
152
-
153
- getTileData(loadProps) {
154
- var _loadOptions;
155
-
156
- const {
157
- data,
158
- binary
159
- } = this.state;
160
- const {
161
- index,
162
- signal
163
- } = loadProps;
164
- const url = getURLFromTemplate(data, loadProps);
165
-
166
- if (!url) {
167
- return Promise.reject('Invalid URL');
168
- }
169
-
170
- let loadOptions = this.getLoadOptions();
171
- const {
172
- fetch
173
- } = this.props;
174
- loadOptions = { ...loadOptions,
175
- mimeType: 'application/x-protobuf',
176
- mvt: { ...((_loadOptions = loadOptions) === null || _loadOptions === void 0 ? void 0 : _loadOptions.mvt),
177
- coordinates: this.context.viewport.resolution ? 'wgs84' : 'local',
178
- tileIndex: index
179
- },
180
- gis: binary ? {
181
- format: 'binary'
182
- } : {}
183
- };
184
- return fetch(url, {
185
- propName: 'data',
186
- layer: this,
187
- loadOptions,
188
- signal
189
- });
190
- }
191
-
192
- renderSubLayers(props) {
193
- const {
194
- x,
195
- y,
196
- z
197
- } = props.tile.index;
198
- const worldScale = Math.pow(2, z);
199
- const xScale = WORLD_SIZE / worldScale;
200
- const yScale = -xScale;
201
- const xOffset = WORLD_SIZE * x / worldScale;
202
- const yOffset = WORLD_SIZE * (1 - y / worldScale);
203
- const modelMatrix = new Matrix4().scale([xScale, yScale, 1]);
204
- props.autoHighlight = false;
205
-
206
- if (!this.context.viewport.resolution) {
207
- props.modelMatrix = modelMatrix;
208
- props.coordinateOrigin = [xOffset, yOffset, 0];
209
- props.coordinateSystem = COORDINATE_SYSTEM.CARTESIAN;
210
- props.extensions = [...(props.extensions || []), new ClipExtension()];
211
- }
212
-
213
- const subLayers = super.renderSubLayers(props);
214
-
215
- if (this.state.binary && !(subLayers instanceof GeoJsonLayer)) {
216
- log.warn('renderSubLayers() must return GeoJsonLayer when using binary:true')();
217
- }
218
-
219
- return subLayers;
220
- }
221
-
222
- _updateAutoHighlight(info) {
223
- const {
224
- uniqueIdProperty
225
- } = this.props;
226
- const {
227
- hoveredFeatureId,
228
- hoveredFeatureLayerName
229
- } = this.state;
230
- const hoveredFeature = info.object;
231
- let newHoveredFeatureId;
232
- let newHoveredFeatureLayerName;
233
-
234
- if (hoveredFeature) {
235
- newHoveredFeatureId = getFeatureUniqueId(hoveredFeature, uniqueIdProperty);
236
- newHoveredFeatureLayerName = getFeatureLayerName(hoveredFeature);
237
- }
238
-
239
- let {
240
- highlightColor
241
- } = this.props;
242
-
243
- if (typeof highlightColor === 'function') {
244
- highlightColor = highlightColor(info);
245
- }
246
-
247
- if (hoveredFeatureId !== newHoveredFeatureId || hoveredFeatureLayerName !== newHoveredFeatureLayerName) {
248
- this.setState({
249
- highlightColor,
250
- hoveredFeatureId: newHoveredFeatureId,
251
- hoveredFeatureLayerName: newHoveredFeatureLayerName
252
- });
253
- }
254
- }
255
-
256
- getPickingInfo(params) {
257
- const info = super.getPickingInfo(params);
258
- const isWGS84 = Boolean(this.context.viewport.resolution);
259
-
260
- if (this.state.binary && info.index !== -1) {
261
- const {
262
- data
263
- } = params.sourceLayer.props;
264
- info.object = binaryToGeojson(data, {
265
- globalFeatureId: info.index
266
- });
267
- }
268
-
269
- if (info.object && !isWGS84) {
270
- info.object = transformTileCoordsToWGS84(info.object, info.tile.bbox, this.context.viewport);
271
- }
272
-
273
- return info;
274
- }
275
-
276
- getSubLayerPropsByTile(tile) {
277
- return {
278
- highlightedObjectIndex: this.getHighlightedObjectIndex(tile),
279
- highlightColor: this.state.highlightColor
280
- };
281
- }
282
-
283
- getHighlightedObjectIndex(tile) {
284
- const {
285
- hoveredFeatureId,
286
- hoveredFeatureLayerName,
287
- binary
288
- } = this.state;
289
- const {
290
- uniqueIdProperty,
291
- highlightedFeatureId
292
- } = this.props;
293
- const data = tile.content;
294
- const isHighlighted = isFeatureIdDefined(highlightedFeatureId);
295
- const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId) || isHighlighted;
296
-
297
- if (!isFeatureIdPresent) {
298
- return -1;
299
- }
300
-
301
- const featureIdToHighlight = isHighlighted ? highlightedFeatureId : hoveredFeatureId;
302
-
303
- if (Array.isArray(data)) {
304
- return data.findIndex(feature => {
305
- const isMatchingId = getFeatureUniqueId(feature, uniqueIdProperty) === featureIdToHighlight;
306
- const isMatchingLayer = isHighlighted || getFeatureLayerName(feature) === hoveredFeatureLayerName;
307
- return isMatchingId && isMatchingLayer;
308
- });
309
- } else if (data && binary) {
310
- return findIndexBinary(data, uniqueIdProperty, featureIdToHighlight, isHighlighted ? '' : hoveredFeatureLayerName);
311
- }
312
-
313
- return -1;
314
- }
315
-
316
- _pickObjects(maxObjects) {
317
- const {
318
- deck,
319
- viewport
320
- } = this.context;
321
- const width = viewport.width;
322
- const height = viewport.height;
323
- const x = viewport.x;
324
- const y = viewport.y;
325
- const layerIds = [this.id];
326
- return deck.pickObjects({
327
- x,
328
- y,
329
- width,
330
- height,
331
- layerIds,
332
- maxObjects
333
- });
334
- }
335
-
336
- getRenderedFeatures(maxFeatures = null) {
337
- const features = this._pickObjects(maxFeatures);
338
-
339
- const featureCache = new Set();
340
- const renderedFeatures = [];
341
-
342
- for (const f of features) {
343
- const featureId = getFeatureUniqueId(f.object, this.props.uniqueIdProperty);
344
-
345
- if (featureId === undefined) {
346
- renderedFeatures.push(f.object);
347
- } else if (!featureCache.has(featureId)) {
348
- featureCache.add(featureId);
349
- renderedFeatures.push(f.object);
350
- }
351
- }
352
-
353
- return renderedFeatures;
354
- }
355
-
356
- _setWGS84PropertyForTiles() {
357
- const propName = 'dataInWGS84';
358
- const tileset = this.state.tileset;
359
- tileset.selectedTiles.forEach(tile => {
360
- if (!tile.hasOwnProperty(propName)) {
361
- Object.defineProperty(tile, propName, {
362
- get: () => {
363
- if (!tile.content) {
364
- return null;
365
- }
366
-
367
- if (this.state.binary && Array.isArray(tile.content) && !tile.content.length) {
368
- return [];
369
- }
370
-
371
- const {
372
- bbox
373
- } = tile;
374
-
375
- if (tile._contentWGS84 === undefined && isGeoBoundingBox(bbox)) {
376
- const content = this.state.binary ? binaryToGeojson(tile.content) : tile.content;
377
- tile._contentWGS84 = content.map(feature => transformTileCoordsToWGS84(feature, bbox, this.context.viewport));
378
- }
379
-
380
- return tile._contentWGS84;
381
- }
382
- });
383
- }
384
- });
385
- }
386
-
387
- }
388
- MVTLayer.layerName = 'MVTLayer';
389
- MVTLayer.defaultProps = defaultProps;
390
-
391
- function getFeatureUniqueId(feature, uniqueIdProperty) {
392
- if (feature.properties && uniqueIdProperty) {
393
- return feature.properties[uniqueIdProperty];
394
- }
395
-
396
- if ('id' in feature) {
397
- return feature.id;
398
- }
399
-
400
- return undefined;
401
- }
402
-
403
- function getFeatureLayerName(feature) {
404
- var _feature$properties;
405
-
406
- return ((_feature$properties = feature.properties) === null || _feature$properties === void 0 ? void 0 : _feature$properties.layerName) || null;
407
- }
408
-
409
- function isFeatureIdDefined(value) {
410
- return value !== undefined && value !== null && value !== '';
411
- }
412
-
413
- function transformTileCoordsToWGS84(object, bbox, viewport) {
414
- const feature = { ...object,
415
- geometry: {
416
- type: object.geometry.type
417
- }
418
- };
419
- Object.defineProperty(feature.geometry, 'coordinates', {
420
- get: () => {
421
- const wgs84Geom = transform(object.geometry, bbox, viewport);
422
- return wgs84Geom.coordinates;
423
- }
424
- });
425
- return feature;
426
- }
427
- //# sourceMappingURL=mvt-layer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/mvt-layer/mvt-layer.ts"],"names":["log","COORDINATE_SYSTEM","GeoJsonLayer","ClipExtension","Matrix4","MVTWorkerLoader","binaryToGeojson","transform","findIndexBinary","TileLayer","urlType","getURLFromTemplate","isGeoBoundingBox","isURLTemplate","WORLD_SIZE","defaultProps","data","onDataLoad","type","value","optional","compare","uniqueIdProperty","highlightedFeatureId","loaders","binary","MVTLayer","state","initializeState","context","viewport","resolution","undefined","props","setState","tileJSON","isLoaded","Boolean","tileset","updateState","oldProps","changeFlags","dataChanged","_updateTileData","_setWGS84PropertyForTiles","highlightColor","Array","isArray","fetch","propName","layer","error","raiseError","tilejson","tiles","_getTilesetOptions","opts","minZoom","maxZoom","Number","isFinite","minzoom","maxzoom","renderLayers","getTileData","loadProps","index","signal","url","Promise","reject","loadOptions","getLoadOptions","mimeType","mvt","coordinates","tileIndex","gis","format","renderSubLayers","x","y","z","tile","worldScale","Math","pow","xScale","yScale","xOffset","yOffset","modelMatrix","scale","autoHighlight","coordinateOrigin","coordinateSystem","CARTESIAN","extensions","subLayers","warn","_updateAutoHighlight","info","hoveredFeatureId","hoveredFeatureLayerName","hoveredFeature","object","newHoveredFeatureId","newHoveredFeatureLayerName","getFeatureUniqueId","getFeatureLayerName","getPickingInfo","params","isWGS84","sourceLayer","globalFeatureId","transformTileCoordsToWGS84","bbox","getSubLayerPropsByTile","highlightedObjectIndex","getHighlightedObjectIndex","content","isHighlighted","isFeatureIdDefined","isFeatureIdPresent","featureIdToHighlight","findIndex","feature","isMatchingId","isMatchingLayer","_pickObjects","maxObjects","deck","width","height","layerIds","id","pickObjects","getRenderedFeatures","maxFeatures","features","featureCache","Set","renderedFeatures","f","featureId","push","has","add","selectedTiles","forEach","hasOwnProperty","Object","defineProperty","get","length","_contentWGS84","map","layerName","properties","geometry","wgs84Geom"],"mappings":"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","sourcesContent":["import {\n Layer,\n LayersList,\n log,\n PickingInfo,\n UpdateParameters,\n GetPickingInfoParams,\n Viewport,\n COORDINATE_SYSTEM,\n DefaultProps\n} from '@deck.gl/core';\nimport {GeoJsonLayer, GeoJsonLayerProps} from '@deck.gl/layers';\nimport {ClipExtension} from '@deck.gl/extensions';\n\nimport {Matrix4} from '@math.gl/core';\nimport {MVTWorkerLoader} from '@loaders.gl/mvt';\nimport {binaryToGeojson} from '@loaders.gl/gis';\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {BinaryFeatureCollection} from '@loaders.gl/schema';\nimport type {Feature} from 'geojson';\n\nimport {transform} from './coordinate-transform';\nimport findIndexBinary from './find-index-binary';\n\nimport TileLayer, {TiledPickingInfo, TileLayerProps} from '../tile-layer/tile-layer';\n\nimport type {Tileset2DProps, TileLoadProps, GeoBoundingBox} from '../tileset-2d';\nimport {\n urlType,\n Tileset2D,\n Tile2DHeader,\n getURLFromTemplate,\n URLTemplate,\n isGeoBoundingBox,\n isURLTemplate\n} from '../tileset-2d';\n\nconst WORLD_SIZE = 512;\n\nconst defaultProps: DefaultProps<MVTLayerProps> = {\n ...GeoJsonLayer.defaultProps,\n data: urlType,\n onDataLoad: {type: 'function', value: null, optional: true, compare: false},\n uniqueIdProperty: '',\n highlightedFeatureId: null,\n loaders: [MVTWorkerLoader],\n binary: true\n};\n\nexport type TileJson = {\n tilejson: string;\n tiles: string[];\n // eslint-disable-next-line camelcase\n vector_layers: any[];\n attribution?: string;\n scheme?: string;\n maxzoom?: number;\n minzoom?: number;\n version?: string;\n};\n\ntype ParsedMvtTile = Feature[] | BinaryFeatureCollection;\n\n/** All props supported by the MVTLayer */\nexport type MVTLayerProps = _MVTLayerProps &\n Omit<GeoJsonLayerProps, 'data'> &\n TileLayerProps<ParsedMvtTile>;\n\n/** Props added by the MVTLayer */\nexport type _MVTLayerProps = {\n /** Called if `data` is a TileJSON URL when it is successfully fetched. */\n onDataLoad?: ((tilejson: TileJson | null) => void) | null;\n\n /** Needed for highlighting a feature split across two or more tiles. */\n uniqueIdProperty?: string;\n\n /** A feature with ID corresponding to the supplied value will be highlighted. */\n highlightedFeatureId?: string | number | null;\n\n /**\n * Use tile data in binary format.\n *\n * @default true\n */\n binary?: boolean;\n\n /**\n * Loaders used to transform tiles into `data` property passed to `renderSubLayers`.\n *\n * @default [MVTWorkerLoader] from `@loaders.gl/mvt`\n */\n loaders?: Loader[];\n};\n\ntype ContentWGS84Cache = {_contentWGS84?: Feature[]};\n\n/** Render data formatted as [Mapbox Vector Tiles](https://docs.mapbox.com/vector-tiles/specification/). */\nexport default class MVTLayer<ExtraProps extends {} = {}> extends TileLayer<\n ParsedMvtTile,\n Required<_MVTLayerProps> & ExtraProps\n> {\n static layerName = 'MVTLayer';\n static defaultProps = defaultProps;\n\n state!: TileLayer<ParsedMvtTile>['state'] & {\n binary: boolean;\n data: URLTemplate;\n tileJSON: any;\n highlightColor: number[];\n hoveredFeatureId: number | string | null;\n hoveredFeatureLayerName: string | null;\n };\n\n initializeState(): void {\n super.initializeState();\n // GlobeView doesn't work well with binary data\n const binary = this.context.viewport.resolution !== undefined ? false : this.props.binary;\n this.setState({\n binary,\n data: null,\n tileJSON: null\n });\n }\n\n get isLoaded(): boolean {\n return Boolean(this.state && this.state.data && this.state.tileset && super.isLoaded);\n }\n\n updateState({props, oldProps, context, changeFlags}: UpdateParameters<this>) {\n if (changeFlags.dataChanged) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._updateTileData();\n }\n\n if (this.state?.data) {\n super.updateState({props, oldProps, context, changeFlags});\n this._setWGS84PropertyForTiles();\n }\n const {highlightColor} = props;\n if (highlightColor !== oldProps.highlightColor && Array.isArray(highlightColor)) {\n this.setState({highlightColor});\n }\n }\n\n /* eslint-disable complexity */\n private async _updateTileData(): Promise<void> {\n let data: any = this.props.data;\n let tileJSON: any = null;\n\n if (typeof data === 'string' && !isURLTemplate(data)) {\n const {onDataLoad, fetch} = this.props;\n this.setState({data: null, tileJSON: null});\n try {\n tileJSON = await fetch(data, {propName: 'data', layer: this, loaders: []});\n } catch (error: any) {\n this.raiseError(error, 'loading TileJSON');\n data = null;\n }\n\n if (onDataLoad) {\n onDataLoad(tileJSON, {propName: 'data', layer: this});\n }\n } else if (data.tilejson) {\n tileJSON = data;\n }\n\n if (tileJSON) {\n data = tileJSON.tiles;\n }\n\n this.setState({data, tileJSON});\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const opts = super._getTilesetOptions();\n const tileJSON: TileJson | null | undefined = this.state.tileJSON;\n const {minZoom, maxZoom} = this.props;\n\n if (tileJSON) {\n if (Number.isFinite(tileJSON.minzoom) && (tileJSON.minzoom as number) > (minZoom as number)) {\n opts.minZoom = tileJSON.minzoom;\n }\n\n if (\n Number.isFinite(tileJSON.maxzoom) &&\n (!Number.isFinite(maxZoom) || (tileJSON.maxzoom as number) < (maxZoom as number))\n ) {\n opts.maxZoom = tileJSON.maxzoom;\n }\n }\n return opts;\n }\n\n /* eslint-disable complexity */\n\n renderLayers(): Layer | null | LayersList {\n if (!this.state?.data) return null;\n return super.renderLayers();\n }\n\n getTileData(loadProps: TileLoadProps): Promise<ParsedMvtTile> {\n const {data, binary} = this.state;\n const {index, signal} = loadProps;\n\n const url = getURLFromTemplate(data, loadProps);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n let loadOptions = this.getLoadOptions();\n const {fetch} = this.props;\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/x-protobuf',\n mvt: {\n ...loadOptions?.mvt,\n coordinates: this.context.viewport.resolution ? 'wgs84' : 'local',\n tileIndex: index\n // Local worker debug\n // workerUrl: `modules/mvt/dist/mvt-loader.worker.js`\n // Set worker to null to skip web workers\n // workerUrl: null\n },\n gis: binary ? {format: 'binary'} : {}\n };\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: ParsedMvtTile;\n _offset: number;\n tile: Tile2DHeader<ParsedMvtTile>;\n }\n ): Layer | null | LayersList {\n const {x, y, z} = props.tile.index;\n const worldScale = Math.pow(2, z);\n\n const xScale = WORLD_SIZE / worldScale;\n const yScale = -xScale;\n\n const xOffset = (WORLD_SIZE * x) / worldScale;\n const yOffset = WORLD_SIZE * (1 - y / worldScale);\n\n const modelMatrix = new Matrix4().scale([xScale, yScale, 1]);\n\n props.autoHighlight = false;\n\n if (!this.context.viewport.resolution) {\n props.modelMatrix = modelMatrix;\n props.coordinateOrigin = [xOffset, yOffset, 0];\n props.coordinateSystem = COORDINATE_SYSTEM.CARTESIAN;\n props.extensions = [...(props.extensions || []), new ClipExtension()];\n }\n\n const subLayers = super.renderSubLayers(props);\n\n if (this.state.binary && !(subLayers instanceof GeoJsonLayer)) {\n log.warn('renderSubLayers() must return GeoJsonLayer when using binary:true')();\n }\n\n return subLayers;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const {uniqueIdProperty} = this.props;\n\n const {hoveredFeatureId, hoveredFeatureLayerName} = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId;\n let newHoveredFeatureLayerName;\n\n if (hoveredFeature) {\n newHoveredFeatureId = getFeatureUniqueId(hoveredFeature, uniqueIdProperty);\n newHoveredFeatureLayerName = getFeatureLayerName(hoveredFeature);\n }\n let {highlightColor} = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n\n if (\n hoveredFeatureId !== newHoveredFeatureId ||\n hoveredFeatureLayerName !== newHoveredFeatureLayerName\n ) {\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId,\n hoveredFeatureLayerName: newHoveredFeatureLayerName\n });\n }\n }\n\n getPickingInfo(params: GetPickingInfoParams): TiledPickingInfo {\n const info = super.getPickingInfo(params);\n\n const isWGS84 = Boolean(this.context.viewport.resolution);\n\n if (this.state.binary && info.index !== -1) {\n const {data} = params.sourceLayer!.props;\n info.object = binaryToGeojson(data as BinaryFeatureCollection, {\n globalFeatureId: info.index\n }) as Feature;\n }\n if (info.object && !isWGS84) {\n info.object = transformTileCoordsToWGS84(\n info.object,\n info.tile!.bbox as GeoBoundingBox, // eslint-disable-line\n this.context.viewport\n );\n }\n\n return info;\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader<ParsedMvtTile>): Record<string, any> {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n private getHighlightedObjectIndex(tile: Tile2DHeader<ParsedMvtTile>): number {\n const {hoveredFeatureId, hoveredFeatureLayerName, binary} = this.state;\n const {uniqueIdProperty, highlightedFeatureId} = this.props;\n const data = tile.content;\n\n const isHighlighted = isFeatureIdDefined(highlightedFeatureId);\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId) || isHighlighted;\n\n if (!isFeatureIdPresent) {\n return -1;\n }\n\n const featureIdToHighlight = isHighlighted ? highlightedFeatureId : hoveredFeatureId;\n\n // Iterable data\n if (Array.isArray(data)) {\n return data.findIndex(feature => {\n const isMatchingId = getFeatureUniqueId(feature, uniqueIdProperty) === featureIdToHighlight;\n const isMatchingLayer =\n isHighlighted || getFeatureLayerName(feature) === hoveredFeatureLayerName;\n return isMatchingId && isMatchingLayer;\n });\n\n // Non-iterable data\n } else if (data && binary) {\n // Get the feature index of the selected item to highlight\n return findIndexBinary(\n data,\n uniqueIdProperty,\n featureIdToHighlight!,\n isHighlighted ? '' : hoveredFeatureLayerName!\n );\n }\n\n return -1;\n }\n\n private _pickObjects(maxObjects: number | null): PickingInfo[] {\n const {deck, viewport} = this.context;\n const width = viewport.width;\n const height = viewport.height;\n const x = viewport.x;\n const y = viewport.y;\n const layerIds = [this.id];\n return deck!.pickObjects({x, y, width, height, layerIds, maxObjects});\n }\n\n /** Get the rendered features in the current viewport. */\n getRenderedFeatures(maxFeatures: number | null = null): Feature[] {\n const features = this._pickObjects(maxFeatures);\n const featureCache = new Set();\n const renderedFeatures: Feature[] = [];\n\n for (const f of features) {\n const featureId = getFeatureUniqueId(f.object, this.props.uniqueIdProperty);\n\n if (featureId === undefined) {\n // we have no id for the feature, we just add to the list\n renderedFeatures.push(f.object as Feature);\n } else if (!featureCache.has(featureId)) {\n // Add removing duplicates\n featureCache.add(featureId);\n renderedFeatures.push(f.object as Feature);\n }\n }\n\n return renderedFeatures;\n }\n\n private _setWGS84PropertyForTiles(): void {\n const propName = 'dataInWGS84';\n const tileset: Tileset2D = this.state.tileset!;\n\n // @ts-expect-error selectedTiles are always initialized when tile is being processed\n tileset.selectedTiles.forEach((tile: Tile2DHeader & ContentWGS84Cache) => {\n if (!tile.hasOwnProperty(propName)) {\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(tile, propName, {\n get: () => {\n // Still loading or encountered an error\n if (!tile.content) {\n return null;\n }\n\n if (this.state.binary && Array.isArray(tile.content) && !tile.content.length) {\n // TODO: @loaders.gl/mvt returns [] when no content. It should return a valid empty binary.\n // https://github.com/visgl/loaders.gl/pull/1137\n return [];\n }\n\n const {bbox} = tile;\n if (tile._contentWGS84 === undefined && isGeoBoundingBox(bbox)) {\n // Create a cache to transform only once\n\n const content = this.state.binary ? binaryToGeojson(tile.content) : tile.content;\n tile._contentWGS84 = content.map(feature =>\n transformTileCoordsToWGS84(feature, bbox, this.context.viewport)\n );\n }\n return tile._contentWGS84;\n }\n });\n }\n });\n }\n}\n\nfunction getFeatureUniqueId(feature: Feature, uniqueIdProperty: string | undefined) {\n if (feature.properties && uniqueIdProperty) {\n return feature.properties[uniqueIdProperty];\n }\n\n if ('id' in feature) {\n return feature.id;\n }\n\n return undefined;\n}\n\nfunction getFeatureLayerName(feature: Feature): string | null {\n return feature.properties?.layerName || null;\n}\n\nfunction isFeatureIdDefined(value: unknown): boolean {\n return value !== undefined && value !== null && value !== '';\n}\n\nfunction transformTileCoordsToWGS84(\n object: Feature,\n bbox: GeoBoundingBox,\n viewport: Viewport\n): Feature {\n const feature = {\n ...object,\n geometry: {\n type: object.geometry.type\n }\n };\n\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(feature.geometry, 'coordinates', {\n get: () => {\n const wgs84Geom = transform(object.geometry, bbox, viewport);\n return wgs84Geom.coordinates;\n }\n });\n\n return feature as Feature;\n}\n"],"file":"mvt-layer.js"}
@@ -1,31 +0,0 @@
1
- import GeoCellLayer from '../geo-cell-layer/GeoCellLayer';
2
- import { getQuadkeyPolygon } from './quadkey-utils';
3
- const defaultProps = {
4
- getQuadkey: {
5
- type: 'accessor',
6
- value: d => d.quadkey
7
- }
8
- };
9
- export default class QuadkeyLayer extends GeoCellLayer {
10
- indexToBounds() {
11
- const {
12
- data,
13
- extruded,
14
- getQuadkey
15
- } = this.props;
16
- const coverage = extruded ? 0.99 : 1;
17
- return {
18
- data,
19
- _normalize: false,
20
- positionFormat: 'XY',
21
- getPolygon: (x, objectInfo) => getQuadkeyPolygon(getQuadkey(x, objectInfo), coverage),
22
- updateTriggers: {
23
- getPolygon: coverage
24
- }
25
- };
26
- }
27
-
28
- }
29
- QuadkeyLayer.layerName = 'QuadkeyLayer';
30
- QuadkeyLayer.defaultProps = defaultProps;
31
- //# sourceMappingURL=quadkey-layer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/quadkey-layer/quadkey-layer.ts"],"names":["GeoCellLayer","getQuadkeyPolygon","defaultProps","getQuadkey","type","value","d","quadkey","QuadkeyLayer","indexToBounds","data","extruded","props","coverage","_normalize","positionFormat","getPolygon","x","objectInfo","updateTriggers","layerName"],"mappings":"AACA,OAAOA,YAAP,MAA8C,gCAA9C;AACA,SAAQC,iBAAR,QAAgC,iBAAhC;AAEA,MAAMC,YAA6C,GAAG;AACpDC,EAAAA,UAAU,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAGC,CAAD,IAAYA,CAAC,CAACC;AAAxC;AADwC,CAAtD;AAmBA,eAAe,MAAMC,YAAN,SAAoER,YAApE,CAGb;AAIAS,EAAAA,aAAa,GAA0C;AACrD,UAAM;AAACC,MAAAA,IAAD;AAAOC,MAAAA,QAAP;AAAiBR,MAAAA;AAAjB,QAA+B,KAAKS,KAA1C;AAEA,UAAMC,QAAQ,GAAGF,QAAQ,GAAG,IAAH,GAAU,CAAnC;AAEA,WAAO;AACLD,MAAAA,IADK;AAELI,MAAAA,UAAU,EAAE,KAFP;AAGLC,MAAAA,cAAc,EAAE,IAHX;AAKLC,MAAAA,UAAU,EAAE,CAACC,CAAD,EAAWC,UAAX,KAA0BjB,iBAAiB,CAACE,UAAU,CAACc,CAAD,EAAIC,UAAJ,CAAX,EAA4BL,QAA5B,CALlD;AAMLM,MAAAA,cAAc,EAAE;AAACH,QAAAA,UAAU,EAAEH;AAAb;AANX,KAAP;AAQD;;AAjBD;AAHmBL,Y,CAIZY,S,GAAY,c;AAJAZ,Y,CAKZN,Y,GAAeA,Y","sourcesContent":["import {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {getQuadkeyPolygon} from './quadkey-utils';\n\nconst defaultProps: DefaultProps<QuadkeyLayerProps> = {\n getQuadkey: {type: 'accessor', value: (d: any) => d.quadkey}\n};\n\n/** All properties supported by QuadkeyLayer. */\nexport type QuadkeyLayerProps<DataT = unknown> = _QuadkeyLayerProps<DataT> &\n GeoCellLayerProps<DataT>;\n\n/** Properties added by QuadkeyLayer. */\ntype _QuadkeyLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `quadkey` property of data object.\n */\n getQuadkey?: AccessorFunction<DataT, string>;\n};\n\n/** Render filled and/or stroked polygons based on the [Quadkey](https://towardsdatascience.com/geospatial-indexing-with-quadkeys-d933dff01496) geospatial indexing system. */\nexport default class QuadkeyLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_QuadkeyLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'QuadkeyLayer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, extruded, getQuadkey} = this.props;\n // To avoid z-fighting reduce polygon footprint when extruding\n const coverage = extruded ? 0.99 : 1;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n\n getPolygon: (x: DataT, objectInfo) => getQuadkeyPolygon(getQuadkey(x, objectInfo), coverage),\n updateTriggers: {getPolygon: coverage}\n };\n }\n}\n"],"file":"quadkey-layer.js"}
@@ -1,24 +0,0 @@
1
- import { worldToLngLat } from '@math.gl/web-mercator';
2
- const TILE_SIZE = 512;
3
- export function quadkeyToWorldBounds(quadkey, coverage) {
4
- let x = 0;
5
- let y = 0;
6
- let mask = 1 << quadkey.length;
7
- const scale = mask / TILE_SIZE;
8
-
9
- for (let i = 0; i < quadkey.length; i++) {
10
- mask >>= 1;
11
- const q = parseInt(quadkey[i]);
12
- if (q % 2) x |= mask;
13
- if (q > 1) y |= mask;
14
- }
15
-
16
- return [[x / scale, TILE_SIZE - y / scale], [(x + coverage) / scale, TILE_SIZE - (y + coverage) / scale]];
17
- }
18
- export function getQuadkeyPolygon(quadkey, coverage = 1) {
19
- const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey, coverage);
20
- const [w, n] = worldToLngLat(topLeft);
21
- const [e, s] = worldToLngLat(bottomRight);
22
- return [e, n, e, s, w, s, w, n, e, n];
23
- }
24
- //# sourceMappingURL=quadkey-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/quadkey-layer/quadkey-utils.ts"],"names":["worldToLngLat","TILE_SIZE","quadkeyToWorldBounds","quadkey","coverage","x","y","mask","length","scale","i","q","parseInt","getQuadkeyPolygon","topLeft","bottomRight","w","n","e","s"],"mappings":"AAAA,SAAQA,aAAR,QAA4B,uBAA5B;AAEA,MAAMC,SAAS,GAAG,GAAlB;AAEA,OAAO,SAASC,oBAAT,CAA8BC,OAA9B,EAA+CC,QAA/C,EAAuF;AAC5F,MAAIC,CAAC,GAAG,CAAR;AACA,MAAIC,CAAC,GAAG,CAAR;AACA,MAAIC,IAAI,GAAG,KAAKJ,OAAO,CAACK,MAAxB;AACA,QAAMC,KAAK,GAAGF,IAAI,GAAGN,SAArB;;AAEA,OAAK,IAAIS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGP,OAAO,CAACK,MAA5B,EAAoCE,CAAC,EAArC,EAAyC;AACvCH,IAAAA,IAAI,KAAK,CAAT;AACA,UAAMI,CAAC,GAAGC,QAAQ,CAACT,OAAO,CAACO,CAAD,CAAR,CAAlB;AACA,QAAIC,CAAC,GAAG,CAAR,EAAWN,CAAC,IAAIE,IAAL;AACX,QAAII,CAAC,GAAG,CAAR,EAAWL,CAAC,IAAIC,IAAL;AACZ;;AACD,SAAO,CACL,CAACF,CAAC,GAAGI,KAAL,EAAYR,SAAS,GAAGK,CAAC,GAAGG,KAA5B,CADK,EAEL,CAAC,CAACJ,CAAC,GAAGD,QAAL,IAAiBK,KAAlB,EAAyBR,SAAS,GAAG,CAACK,CAAC,GAAGF,QAAL,IAAiBK,KAAtD,CAFK,CAAP;AAID;AAED,OAAO,SAASI,iBAAT,CAA2BV,OAA3B,EAA4CC,QAAQ,GAAG,CAAvD,EAAoE;AACzE,QAAM,CAACU,OAAD,EAAUC,WAAV,IAAyBb,oBAAoB,CAACC,OAAD,EAAUC,QAAV,CAAnD;AACA,QAAM,CAACY,CAAD,EAAIC,CAAJ,IAASjB,aAAa,CAACc,OAAD,CAA5B;AACA,QAAM,CAACI,CAAD,EAAIC,CAAJ,IAASnB,aAAa,CAACe,WAAD,CAA5B;AACA,SAAO,CAACG,CAAD,EAAID,CAAJ,EAAOC,CAAP,EAAUC,CAAV,EAAaH,CAAb,EAAgBG,CAAhB,EAAmBH,CAAnB,EAAsBC,CAAtB,EAAyBC,CAAzB,EAA4BD,CAA5B,CAAP;AACD","sourcesContent":["import {worldToLngLat} from '@math.gl/web-mercator';\n\nconst TILE_SIZE = 512;\n\nexport function quadkeyToWorldBounds(quadkey: string, coverage: number): [number[], number[]] {\n let x = 0;\n let y = 0;\n let mask = 1 << quadkey.length;\n const scale = mask / TILE_SIZE;\n\n for (let i = 0; i < quadkey.length; i++) {\n mask >>= 1;\n const q = parseInt(quadkey[i]);\n if (q % 2) x |= mask;\n if (q > 1) y |= mask;\n }\n return [\n [x / scale, TILE_SIZE - y / scale],\n [(x + coverage) / scale, TILE_SIZE - (y + coverage) / scale]\n ];\n}\n\nexport function getQuadkeyPolygon(quadkey: string, coverage = 1): number[] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey, coverage);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n"],"file":"quadkey-utils.js"}
@@ -1,126 +0,0 @@
1
- import Long from 'long';
2
- const FACE_BITS = 3;
3
- const MAX_LEVEL = 30;
4
- const POS_BITS = 2 * MAX_LEVEL + 1;
5
- const RADIAN_TO_DEGREE = 180 / Math.PI;
6
- export function IJToST(ij, order, offsets) {
7
- const maxSize = 1 << order;
8
- return [(ij[0] + offsets[0]) / maxSize, (ij[1] + offsets[1]) / maxSize];
9
- }
10
-
11
- function singleSTtoUV(st) {
12
- if (st >= 0.5) {
13
- return 1 / 3.0 * (4 * st * st - 1);
14
- }
15
-
16
- return 1 / 3.0 * (1 - 4 * (1 - st) * (1 - st));
17
- }
18
-
19
- export function STToUV(st) {
20
- return [singleSTtoUV(st[0]), singleSTtoUV(st[1])];
21
- }
22
- export function FaceUVToXYZ(face, [u, v]) {
23
- switch (face) {
24
- case 0:
25
- return [1, u, v];
26
-
27
- case 1:
28
- return [-u, 1, v];
29
-
30
- case 2:
31
- return [-u, -v, 1];
32
-
33
- case 3:
34
- return [-1, -v, -u];
35
-
36
- case 4:
37
- return [v, -1, -u];
38
-
39
- case 5:
40
- return [v, u, -1];
41
-
42
- default:
43
- throw new Error('Invalid face');
44
- }
45
- }
46
- export function XYZToLngLat([x, y, z]) {
47
- const lat = Math.atan2(z, Math.sqrt(x * x + y * y));
48
- const lng = Math.atan2(y, x);
49
- return [lng * RADIAN_TO_DEGREE, lat * RADIAN_TO_DEGREE];
50
- }
51
- export function toHilbertQuadkey(idS) {
52
- let bin = Long.fromString(idS, true, 10).toString(2);
53
-
54
- while (bin.length < FACE_BITS + POS_BITS) {
55
- bin = '0' + bin;
56
- }
57
-
58
- const lsbIndex = bin.lastIndexOf('1');
59
- const faceB = bin.substring(0, 3);
60
- const posB = bin.substring(3, lsbIndex);
61
- const levelN = posB.length / 2;
62
- const faceS = Long.fromString(faceB, true, 2).toString(10);
63
- let posS = Long.fromString(posB, true, 2).toString(4);
64
-
65
- while (posS.length < levelN) {
66
- posS = '0' + posS;
67
- }
68
-
69
- return `${faceS}/${posS}`;
70
- }
71
-
72
- function rotateAndFlipQuadrant(n, point, rx, ry) {
73
- if (ry === 0) {
74
- if (rx === 1) {
75
- point[0] = n - 1 - point[0];
76
- point[1] = n - 1 - point[1];
77
- }
78
-
79
- const x = point[0];
80
- point[0] = point[1];
81
- point[1] = x;
82
- }
83
- }
84
-
85
- export function FromHilbertQuadKey(hilbertQuadkey) {
86
- const parts = hilbertQuadkey.split('/');
87
- const face = parseInt(parts[0], 10);
88
- const position = parts[1];
89
- const maxLevel = position.length;
90
- const point = [0, 0];
91
- let level;
92
-
93
- for (let i = maxLevel - 1; i >= 0; i--) {
94
- level = maxLevel - i;
95
- const bit = position[i];
96
- let rx = 0;
97
- let ry = 0;
98
-
99
- if (bit === '1') {
100
- ry = 1;
101
- } else if (bit === '2') {
102
- rx = 1;
103
- ry = 1;
104
- } else if (bit === '3') {
105
- rx = 1;
106
- }
107
-
108
- const val = Math.pow(2, level - 1);
109
- rotateAndFlipQuadrant(val, point, rx, ry);
110
- point[0] += val * rx;
111
- point[1] += val * ry;
112
- }
113
-
114
- if (face % 2 === 1) {
115
- const t = point[0];
116
- point[0] = point[1];
117
- point[1] = t;
118
- }
119
-
120
- return {
121
- face,
122
- ij: point,
123
- level
124
- };
125
- }
126
- //# sourceMappingURL=s2-geometry.js.map