@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,233 +0,0 @@
1
- import { getOSMTileIndices } from './tile-2d-traversal';
2
- const TILE_SIZE = 512;
3
- const DEFAULT_EXTENT = [-Infinity, -Infinity, Infinity, Infinity];
4
- export const urlType = {
5
- type: 'object',
6
- value: null,
7
- validate: (value, propType) => propType.optional && value === null || typeof value === 'string' || Array.isArray(value) && value.every(url => typeof url === 'string'),
8
- equal: (value1, value2) => {
9
- if (value1 === value2) {
10
- return true;
11
- }
12
-
13
- if (!Array.isArray(value1) || !Array.isArray(value2)) {
14
- return false;
15
- }
16
-
17
- const len = value1.length;
18
-
19
- if (len !== value2.length) {
20
- return false;
21
- }
22
-
23
- for (let i = 0; i < len; i++) {
24
- if (value1[i] !== value2[i]) {
25
- return false;
26
- }
27
- }
28
-
29
- return true;
30
- }
31
- };
32
-
33
- function transformBox(bbox, modelMatrix) {
34
- const transformedCoords = [modelMatrix.transformAsPoint([bbox[0], bbox[1]]), modelMatrix.transformAsPoint([bbox[2], bbox[1]]), modelMatrix.transformAsPoint([bbox[0], bbox[3]]), modelMatrix.transformAsPoint([bbox[2], bbox[3]])];
35
- const transformedBox = [Math.min(...transformedCoords.map(i => i[0])), Math.min(...transformedCoords.map(i => i[1])), Math.max(...transformedCoords.map(i => i[0])), Math.max(...transformedCoords.map(i => i[1]))];
36
- return transformedBox;
37
- }
38
-
39
- function stringHash(s) {
40
- return Math.abs(s.split('').reduce((a, b) => (a << 5) - a + b.charCodeAt(0) | 0, 0));
41
- }
42
-
43
- export function getURLFromTemplate(template, tile) {
44
- if (!template || !template.length) {
45
- return null;
46
- }
47
-
48
- const {
49
- index,
50
- id
51
- } = tile;
52
-
53
- if (Array.isArray(template)) {
54
- const i = stringHash(id) % template.length;
55
- template = template[i];
56
- }
57
-
58
- let url = template;
59
-
60
- for (const key of Object.keys(index)) {
61
- const regex = new RegExp(`{${key}}`, 'g');
62
- url = url.replace(regex, String(index[key]));
63
- }
64
-
65
- if (Number.isInteger(index.y) && Number.isInteger(index.z)) {
66
- url = url.replace(/\{-y\}/g, String(Math.pow(2, index.z) - index.y - 1));
67
- }
68
-
69
- return url;
70
- }
71
-
72
- function getBoundingBox(viewport, zRange, extent) {
73
- let bounds;
74
-
75
- if (zRange && zRange.length === 2) {
76
- const [minZ, maxZ] = zRange;
77
- const bounds0 = viewport.getBounds({
78
- z: minZ
79
- });
80
- const bounds1 = viewport.getBounds({
81
- z: maxZ
82
- });
83
- bounds = [Math.min(bounds0[0], bounds1[0]), Math.min(bounds0[1], bounds1[1]), Math.max(bounds0[2], bounds1[2]), Math.max(bounds0[3], bounds1[3])];
84
- } else {
85
- bounds = viewport.getBounds();
86
- }
87
-
88
- if (!viewport.isGeospatial) {
89
- return [Math.max(Math.min(bounds[0], extent[2]), extent[0]), Math.max(Math.min(bounds[1], extent[3]), extent[1]), Math.min(Math.max(bounds[2], extent[0]), extent[2]), Math.min(Math.max(bounds[3], extent[1]), extent[3])];
90
- }
91
-
92
- return [Math.max(bounds[0], extent[0]), Math.max(bounds[1], extent[1]), Math.min(bounds[2], extent[2]), Math.min(bounds[3], extent[3])];
93
- }
94
-
95
- export function getCullBounds({
96
- viewport,
97
- z,
98
- cullRect
99
- }) {
100
- const subViewports = viewport.subViewports || [viewport];
101
- return subViewports.map(v => getCullBoundsInViewport(v, z || 0, cullRect));
102
- }
103
-
104
- function getCullBoundsInViewport(viewport, z, cullRect) {
105
- if (!Array.isArray(z)) {
106
- const x = cullRect.x - viewport.x;
107
- const y = cullRect.y - viewport.y;
108
- const {
109
- width,
110
- height
111
- } = cullRect;
112
- const unprojectOption = {
113
- targetZ: z
114
- };
115
- const topLeft = viewport.unproject([x, y], unprojectOption);
116
- const topRight = viewport.unproject([x + width, y], unprojectOption);
117
- const bottomLeft = viewport.unproject([x, y + height], unprojectOption);
118
- const bottomRight = viewport.unproject([x + width, y + height], unprojectOption);
119
- return [Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]), Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]), Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]), Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1])];
120
- }
121
-
122
- const bounds0 = getCullBoundsInViewport(viewport, z[0], cullRect);
123
- const bounds1 = getCullBoundsInViewport(viewport, z[1], cullRect);
124
- return [Math.min(bounds0[0], bounds1[0]), Math.min(bounds0[1], bounds1[1]), Math.max(bounds0[2], bounds1[2]), Math.max(bounds0[3], bounds1[3])];
125
- }
126
-
127
- function getIndexingCoords(bbox, scale, modelMatrixInverse) {
128
- if (modelMatrixInverse) {
129
- const transformedTileIndex = transformBox(bbox, modelMatrixInverse).map(i => i * scale / TILE_SIZE);
130
- return transformedTileIndex;
131
- }
132
-
133
- return bbox.map(i => i * scale / TILE_SIZE);
134
- }
135
-
136
- function getScale(z, tileSize) {
137
- return Math.pow(2, z) * TILE_SIZE / tileSize;
138
- }
139
-
140
- export function osmTile2lngLat(x, y, z) {
141
- const scale = getScale(z, TILE_SIZE);
142
- const lng = x / scale * 360 - 180;
143
- const n = Math.PI - 2 * Math.PI * y / scale;
144
- const lat = 180 / Math.PI * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));
145
- return [lng, lat];
146
- }
147
-
148
- function tile2XY(x, y, z, tileSize) {
149
- const scale = getScale(z, tileSize);
150
- return [x / scale * TILE_SIZE, y / scale * TILE_SIZE];
151
- }
152
-
153
- export function tileToBoundingBox(viewport, x, y, z, tileSize = TILE_SIZE) {
154
- if (viewport.isGeospatial) {
155
- const [west, north] = osmTile2lngLat(x, y, z);
156
- const [east, south] = osmTile2lngLat(x + 1, y + 1, z);
157
- return {
158
- west,
159
- north,
160
- east,
161
- south
162
- };
163
- }
164
-
165
- const [left, top] = tile2XY(x, y, z, tileSize);
166
- const [right, bottom] = tile2XY(x + 1, y + 1, z, tileSize);
167
- return {
168
- left,
169
- top,
170
- right,
171
- bottom
172
- };
173
- }
174
-
175
- function getIdentityTileIndices(viewport, z, tileSize, extent, modelMatrixInverse) {
176
- const bbox = getBoundingBox(viewport, null, extent);
177
- const scale = getScale(z, tileSize);
178
- const [minX, minY, maxX, maxY] = getIndexingCoords(bbox, scale, modelMatrixInverse);
179
- const indices = [];
180
-
181
- for (let x = Math.floor(minX); x < maxX; x++) {
182
- for (let y = Math.floor(minY); y < maxY; y++) {
183
- indices.push({
184
- x,
185
- y,
186
- z
187
- });
188
- }
189
- }
190
-
191
- return indices;
192
- }
193
-
194
- export function getTileIndices({
195
- viewport,
196
- maxZoom,
197
- minZoom,
198
- zRange,
199
- extent,
200
- tileSize = TILE_SIZE,
201
- modelMatrix,
202
- modelMatrixInverse,
203
- zoomOffset = 0
204
- }) {
205
- let z = viewport.isGeospatial ? Math.round(viewport.zoom + Math.log2(TILE_SIZE / tileSize)) + zoomOffset : Math.ceil(viewport.zoom) + zoomOffset;
206
-
207
- if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {
208
- if (!extent) {
209
- return [];
210
- }
211
-
212
- z = minZoom;
213
- }
214
-
215
- if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {
216
- z = maxZoom;
217
- }
218
-
219
- let transformedExtent = extent;
220
-
221
- if (modelMatrix && modelMatrixInverse && extent && !viewport.isGeospatial) {
222
- transformedExtent = transformBox(extent, modelMatrix);
223
- }
224
-
225
- return viewport.isGeospatial ? getOSMTileIndices(viewport, z, zRange, extent) : getIdentityTileIndices(viewport, z, tileSize, transformedExtent || DEFAULT_EXTENT, modelMatrixInverse);
226
- }
227
- export function isURLTemplate(s) {
228
- return /(?=.*{z})(?=.*{x})(?=.*({y}|{-y}))/.test(s);
229
- }
230
- export function isGeoBoundingBox(v) {
231
- return Number.isFinite(v.west) && Number.isFinite(v.north) && Number.isFinite(v.east) && Number.isFinite(v.south);
232
- }
233
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/tileset-2d/utils.ts"],"names":["getOSMTileIndices","TILE_SIZE","DEFAULT_EXTENT","Infinity","urlType","type","value","validate","propType","optional","Array","isArray","every","url","equal","value1","value2","len","length","i","transformBox","bbox","modelMatrix","transformedCoords","transformAsPoint","transformedBox","Math","min","map","max","stringHash","s","abs","split","reduce","a","b","charCodeAt","getURLFromTemplate","template","tile","index","id","key","Object","keys","regex","RegExp","replace","String","Number","isInteger","y","z","pow","getBoundingBox","viewport","zRange","extent","bounds","minZ","maxZ","bounds0","getBounds","bounds1","isGeospatial","getCullBounds","cullRect","subViewports","v","getCullBoundsInViewport","x","width","height","unprojectOption","targetZ","topLeft","unproject","topRight","bottomLeft","bottomRight","getIndexingCoords","scale","modelMatrixInverse","transformedTileIndex","getScale","tileSize","osmTile2lngLat","lng","n","PI","lat","atan","exp","tile2XY","tileToBoundingBox","west","north","east","south","left","top","right","bottom","getIdentityTileIndices","minX","minY","maxX","maxY","indices","floor","push","getTileIndices","maxZoom","minZoom","zoomOffset","round","zoom","log2","ceil","isFinite","transformedExtent","isURLTemplate","test","isGeoBoundingBox"],"mappings":"AAEA,SAAQA,iBAAR,QAAgC,qBAAhC;AAGA,MAAMC,SAAS,GAAG,GAAlB;AACA,MAAMC,cAAsB,GAAG,CAAC,CAACC,QAAF,EAAY,CAACA,QAAb,EAAuBA,QAAvB,EAAiCA,QAAjC,CAA/B;AAIA,OAAO,MAAMC,OAAO,GAAG;AACrBC,EAAAA,IAAI,EAAE,QADe;AAErBC,EAAAA,KAAK,EAAE,IAFc;AAGrBC,EAAAA,QAAQ,EAAE,CAACD,KAAD,EAAQE,QAAR,KACPA,QAAQ,CAACC,QAAT,IAAqBH,KAAK,KAAK,IAAhC,IACA,OAAOA,KAAP,KAAiB,QADjB,IAECI,KAAK,CAACC,OAAN,CAAcL,KAAd,KAAwBA,KAAK,CAACM,KAAN,CAAYC,GAAG,IAAI,OAAOA,GAAP,KAAe,QAAlC,CANN;AAOrBC,EAAAA,KAAK,EAAE,CAACC,MAAD,EAASC,MAAT,KAAoB;AACzB,QAAID,MAAM,KAAKC,MAAf,EAAuB;AACrB,aAAO,IAAP;AACD;;AACD,QAAI,CAACN,KAAK,CAACC,OAAN,CAAcI,MAAd,CAAD,IAA0B,CAACL,KAAK,CAACC,OAAN,CAAcK,MAAd,CAA/B,EAAsD;AACpD,aAAO,KAAP;AACD;;AACD,UAAMC,GAAG,GAAGF,MAAM,CAACG,MAAnB;;AACA,QAAID,GAAG,KAAKD,MAAM,CAACE,MAAnB,EAA2B;AACzB,aAAO,KAAP;AACD;;AACD,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,GAApB,EAAyBE,CAAC,EAA1B,EAA8B;AAC5B,UAAIJ,MAAM,CAACI,CAAD,CAAN,KAAcH,MAAM,CAACG,CAAD,CAAxB,EAA6B;AAC3B,eAAO,KAAP;AACD;AACF;;AACD,WAAO,IAAP;AACD;AAxBoB,CAAhB;;AA2BP,SAASC,YAAT,CAAsBC,IAAtB,EAAoCC,WAApC,EAAkE;AAChE,QAAMC,iBAAiB,GAAG,CAExBD,WAAW,CAACE,gBAAZ,CAA6B,CAACH,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAA7B,CAFwB,EAIxBC,WAAW,CAACE,gBAAZ,CAA6B,CAACH,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAA7B,CAJwB,EAMxBC,WAAW,CAACE,gBAAZ,CAA6B,CAACH,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAA7B,CANwB,EAQxBC,WAAW,CAACE,gBAAZ,CAA6B,CAACH,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAA7B,CARwB,CAA1B;AAUA,QAAMI,cAAsB,GAAG,CAE7BC,IAAI,CAACC,GAAL,CAAS,GAAGJ,iBAAiB,CAACK,GAAlB,CAAsBT,CAAC,IAAIA,CAAC,CAAC,CAAD,CAA5B,CAAZ,CAF6B,EAI7BO,IAAI,CAACC,GAAL,CAAS,GAAGJ,iBAAiB,CAACK,GAAlB,CAAsBT,CAAC,IAAIA,CAAC,CAAC,CAAD,CAA5B,CAAZ,CAJ6B,EAM7BO,IAAI,CAACG,GAAL,CAAS,GAAGN,iBAAiB,CAACK,GAAlB,CAAsBT,CAAC,IAAIA,CAAC,CAAC,CAAD,CAA5B,CAAZ,CAN6B,EAQ7BO,IAAI,CAACG,GAAL,CAAS,GAAGN,iBAAiB,CAACK,GAAlB,CAAsBT,CAAC,IAAIA,CAAC,CAAC,CAAD,CAA5B,CAAZ,CAR6B,CAA/B;AAUA,SAAOM,cAAP;AACD;;AAED,SAASK,UAAT,CAAoBC,CAApB,EAAuC;AACrC,SAAOL,IAAI,CAACM,GAAL,CAASD,CAAC,CAACE,KAAF,CAAQ,EAAR,EAAYC,MAAZ,CAAmB,CAACC,CAAD,EAAIC,CAAJ,KAAW,CAACD,CAAC,IAAI,CAAN,IAAWA,CAAX,GAAeC,CAAC,CAACC,UAAF,CAAa,CAAb,CAAhB,GAAmC,CAAhE,EAAmE,CAAnE,CAAT,CAAP;AACD;;AAED,OAAO,SAASC,kBAAT,CACLC,QADK,EAELC,IAFK,EAMU;AACf,MAAI,CAACD,QAAD,IAAa,CAACA,QAAQ,CAACrB,MAA3B,EAAmC;AACjC,WAAO,IAAP;AACD;;AACD,QAAM;AAACuB,IAAAA,KAAD;AAAQC,IAAAA;AAAR,MAAcF,IAApB;;AAEA,MAAI9B,KAAK,CAACC,OAAN,CAAc4B,QAAd,CAAJ,EAA6B;AAC3B,UAAMpB,CAAC,GAAGW,UAAU,CAACY,EAAD,CAAV,GAAiBH,QAAQ,CAACrB,MAApC;AACAqB,IAAAA,QAAQ,GAAGA,QAAQ,CAACpB,CAAD,CAAnB;AACD;;AAED,MAAIN,GAAG,GAAG0B,QAAV;;AACA,OAAK,MAAMI,GAAX,IAAkBC,MAAM,CAACC,IAAP,CAAYJ,KAAZ,CAAlB,EAAsC;AACpC,UAAMK,KAAK,GAAG,IAAIC,MAAJ,CAAY,IAAGJ,GAAI,GAAnB,EAAuB,GAAvB,CAAd;AACA9B,IAAAA,GAAG,GAAGA,GAAG,CAACmC,OAAJ,CAAYF,KAAZ,EAAmBG,MAAM,CAACR,KAAK,CAACE,GAAD,CAAN,CAAzB,CAAN;AACD;;AAGD,MAAIO,MAAM,CAACC,SAAP,CAAiBV,KAAK,CAACW,CAAvB,KAA6BF,MAAM,CAACC,SAAP,CAAiBV,KAAK,CAACY,CAAvB,CAAjC,EAA4D;AAC1DxC,IAAAA,GAAG,GAAGA,GAAG,CAACmC,OAAJ,CAAY,SAAZ,EAAuBC,MAAM,CAACvB,IAAI,CAAC4B,GAAL,CAAS,CAAT,EAAYb,KAAK,CAACY,CAAlB,IAAuBZ,KAAK,CAACW,CAA7B,GAAiC,CAAlC,CAA7B,CAAN;AACD;;AACD,SAAOvC,GAAP;AACD;;AAKD,SAAS0C,cAAT,CAAwBC,QAAxB,EAA4CC,MAA5C,EAAqEC,MAArE,EAA6F;AAC3F,MAAIC,MAAJ;;AACA,MAAIF,MAAM,IAAIA,MAAM,CAACvC,MAAP,KAAkB,CAAhC,EAAmC;AACjC,UAAM,CAAC0C,IAAD,EAAOC,IAAP,IAAeJ,MAArB;AACA,UAAMK,OAAO,GAAGN,QAAQ,CAACO,SAAT,CAAmB;AAACV,MAAAA,CAAC,EAAEO;AAAJ,KAAnB,CAAhB;AACA,UAAMI,OAAO,GAAGR,QAAQ,CAACO,SAAT,CAAmB;AAACV,MAAAA,CAAC,EAAEQ;AAAJ,KAAnB,CAAhB;AACAF,IAAAA,MAAM,GAAG,CACPjC,IAAI,CAACC,GAAL,CAASmC,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CADO,EAEPtC,IAAI,CAACC,GAAL,CAASmC,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAFO,EAGPtC,IAAI,CAACG,GAAL,CAASiC,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAHO,EAIPtC,IAAI,CAACG,GAAL,CAASiC,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAJO,CAAT;AAMD,GAVD,MAUO;AACLL,IAAAA,MAAM,GAAGH,QAAQ,CAACO,SAAT,EAAT;AACD;;AACD,MAAI,CAACP,QAAQ,CAACS,YAAd,EAA4B;AAC1B,WAAO,CAELvC,IAAI,CAACG,GAAL,CAASH,IAAI,CAACC,GAAL,CAASgC,MAAM,CAAC,CAAD,CAAf,EAAoBD,MAAM,CAAC,CAAD,CAA1B,CAAT,EAAyCA,MAAM,CAAC,CAAD,CAA/C,CAFK,EAGLhC,IAAI,CAACG,GAAL,CAASH,IAAI,CAACC,GAAL,CAASgC,MAAM,CAAC,CAAD,CAAf,EAAoBD,MAAM,CAAC,CAAD,CAA1B,CAAT,EAAyCA,MAAM,CAAC,CAAD,CAA/C,CAHK,EAKLhC,IAAI,CAACC,GAAL,CAASD,IAAI,CAACG,GAAL,CAAS8B,MAAM,CAAC,CAAD,CAAf,EAAoBD,MAAM,CAAC,CAAD,CAA1B,CAAT,EAAyCA,MAAM,CAAC,CAAD,CAA/C,CALK,EAMLhC,IAAI,CAACC,GAAL,CAASD,IAAI,CAACG,GAAL,CAAS8B,MAAM,CAAC,CAAD,CAAf,EAAoBD,MAAM,CAAC,CAAD,CAA1B,CAAT,EAAyCA,MAAM,CAAC,CAAD,CAA/C,CANK,CAAP;AAQD;;AACD,SAAO,CACLhC,IAAI,CAACG,GAAL,CAAS8B,MAAM,CAAC,CAAD,CAAf,EAAoBD,MAAM,CAAC,CAAD,CAA1B,CADK,EAELhC,IAAI,CAACG,GAAL,CAAS8B,MAAM,CAAC,CAAD,CAAf,EAAoBD,MAAM,CAAC,CAAD,CAA1B,CAFK,EAGLhC,IAAI,CAACC,GAAL,CAASgC,MAAM,CAAC,CAAD,CAAf,EAAoBD,MAAM,CAAC,CAAD,CAA1B,CAHK,EAILhC,IAAI,CAACC,GAAL,CAASgC,MAAM,CAAC,CAAD,CAAf,EAAoBD,MAAM,CAAC,CAAD,CAA1B,CAJK,CAAP;AAMD;;AAGD,OAAO,SAASQ,aAAT,CAAuB;AAC5BV,EAAAA,QAD4B;AAE5BH,EAAAA,CAF4B;AAG5Bc,EAAAA;AAH4B,CAAvB,EAWgC;AACrC,QAAMC,YAAY,GAAGZ,QAAQ,CAACY,YAAT,IAAyB,CAACZ,QAAD,CAA9C;AACA,SAAOY,YAAY,CAACxC,GAAb,CAAiByC,CAAC,IAAIC,uBAAuB,CAACD,CAAD,EAAIhB,CAAC,IAAI,CAAT,EAAYc,QAAZ,CAA7C,CAAP;AACD;;AAED,SAASG,uBAAT,CAEEd,QAFF,EAIEH,CAJF,EAMEc,QANF,EAOoC;AAClC,MAAI,CAACzD,KAAK,CAACC,OAAN,CAAc0C,CAAd,CAAL,EAAuB;AACrB,UAAMkB,CAAC,GAAGJ,QAAQ,CAACI,CAAT,GAAaf,QAAQ,CAACe,CAAhC;AACA,UAAMnB,CAAC,GAAGe,QAAQ,CAACf,CAAT,GAAaI,QAAQ,CAACJ,CAAhC;AACA,UAAM;AAACoB,MAAAA,KAAD;AAAQC,MAAAA;AAAR,QAAkBN,QAAxB;AAEA,UAAMO,eAAe,GAAG;AAACC,MAAAA,OAAO,EAAEtB;AAAV,KAAxB;AAEA,UAAMuB,OAAO,GAAGpB,QAAQ,CAACqB,SAAT,CAAmB,CAACN,CAAD,EAAInB,CAAJ,CAAnB,EAA2BsB,eAA3B,CAAhB;AACA,UAAMI,QAAQ,GAAGtB,QAAQ,CAACqB,SAAT,CAAmB,CAACN,CAAC,GAAGC,KAAL,EAAYpB,CAAZ,CAAnB,EAAmCsB,eAAnC,CAAjB;AACA,UAAMK,UAAU,GAAGvB,QAAQ,CAACqB,SAAT,CAAmB,CAACN,CAAD,EAAInB,CAAC,GAAGqB,MAAR,CAAnB,EAAoCC,eAApC,CAAnB;AACA,UAAMM,WAAW,GAAGxB,QAAQ,CAACqB,SAAT,CAAmB,CAACN,CAAC,GAAGC,KAAL,EAAYpB,CAAC,GAAGqB,MAAhB,CAAnB,EAA4CC,eAA5C,CAApB;AAEA,WAAO,CACLhD,IAAI,CAACC,GAAL,CAASiD,OAAO,CAAC,CAAD,CAAhB,EAAqBE,QAAQ,CAAC,CAAD,CAA7B,EAAkCC,UAAU,CAAC,CAAD,CAA5C,EAAiDC,WAAW,CAAC,CAAD,CAA5D,CADK,EAELtD,IAAI,CAACC,GAAL,CAASiD,OAAO,CAAC,CAAD,CAAhB,EAAqBE,QAAQ,CAAC,CAAD,CAA7B,EAAkCC,UAAU,CAAC,CAAD,CAA5C,EAAiDC,WAAW,CAAC,CAAD,CAA5D,CAFK,EAGLtD,IAAI,CAACG,GAAL,CAAS+C,OAAO,CAAC,CAAD,CAAhB,EAAqBE,QAAQ,CAAC,CAAD,CAA7B,EAAkCC,UAAU,CAAC,CAAD,CAA5C,EAAiDC,WAAW,CAAC,CAAD,CAA5D,CAHK,EAILtD,IAAI,CAACG,GAAL,CAAS+C,OAAO,CAAC,CAAD,CAAhB,EAAqBE,QAAQ,CAAC,CAAD,CAA7B,EAAkCC,UAAU,CAAC,CAAD,CAA5C,EAAiDC,WAAW,CAAC,CAAD,CAA5D,CAJK,CAAP;AAMD;;AAED,QAAMlB,OAAO,GAAGQ,uBAAuB,CAACd,QAAD,EAAWH,CAAC,CAAC,CAAD,CAAZ,EAAiBc,QAAjB,CAAvC;AACA,QAAMH,OAAO,GAAGM,uBAAuB,CAACd,QAAD,EAAWH,CAAC,CAAC,CAAD,CAAZ,EAAiBc,QAAjB,CAAvC;AAEA,SAAO,CACLzC,IAAI,CAACC,GAAL,CAASmC,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CADK,EAELtC,IAAI,CAACC,GAAL,CAASmC,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAFK,EAGLtC,IAAI,CAACG,GAAL,CAASiC,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAHK,EAILtC,IAAI,CAACG,GAAL,CAASiC,OAAO,CAAC,CAAD,CAAhB,EAAqBE,OAAO,CAAC,CAAD,CAA5B,CAJK,CAAP;AAMD;;AAED,SAASiB,iBAAT,CAA2B5D,IAA3B,EAAyC6D,KAAzC,EAAwDC,kBAAxD,EAA8F;AAC5F,MAAIA,kBAAJ,EAAwB;AACtB,UAAMC,oBAAoB,GAAGhE,YAAY,CAACC,IAAD,EAAO8D,kBAAP,CAAZ,CAAuCvD,GAAvC,CAC3BT,CAAC,IAAKA,CAAC,GAAG+D,KAAL,GAAcjF,SADQ,CAA7B;AAGA,WAAOmF,oBAAP;AACD;;AACD,SAAO/D,IAAI,CAACO,GAAL,CAAST,CAAC,IAAKA,CAAC,GAAG+D,KAAL,GAAcjF,SAA5B,CAAP;AACD;;AAED,SAASoF,QAAT,CAAkBhC,CAAlB,EAA6BiC,QAA7B,EAAuD;AACrD,SAAQ5D,IAAI,CAAC4B,GAAL,CAAS,CAAT,EAAYD,CAAZ,IAAiBpD,SAAlB,GAA+BqF,QAAtC;AACD;;AAGD,OAAO,SAASC,cAAT,CAAwBhB,CAAxB,EAAmCnB,CAAnC,EAA8CC,CAA9C,EAA2E;AAChF,QAAM6B,KAAK,GAAGG,QAAQ,CAAChC,CAAD,EAAIpD,SAAJ,CAAtB;AACA,QAAMuF,GAAG,GAAIjB,CAAC,GAAGW,KAAL,GAAc,GAAd,GAAoB,GAAhC;AACA,QAAMO,CAAC,GAAG/D,IAAI,CAACgE,EAAL,GAAW,IAAIhE,IAAI,CAACgE,EAAT,GAActC,CAAf,GAAoB8B,KAAxC;AACA,QAAMS,GAAG,GAAI,MAAMjE,IAAI,CAACgE,EAAZ,GAAkBhE,IAAI,CAACkE,IAAL,CAAU,OAAOlE,IAAI,CAACmE,GAAL,CAASJ,CAAT,IAAc/D,IAAI,CAACmE,GAAL,CAAS,CAACJ,CAAV,CAArB,CAAV,CAA9B;AACA,SAAO,CAACD,GAAD,EAAMG,GAAN,CAAP;AACD;;AAED,SAASG,OAAT,CAAiBvB,CAAjB,EAA4BnB,CAA5B,EAAuCC,CAAvC,EAAkDiC,QAAlD,EAAsF;AACpF,QAAMJ,KAAK,GAAGG,QAAQ,CAAChC,CAAD,EAAIiC,QAAJ,CAAtB;AACA,SAAO,CAAEf,CAAC,GAAGW,KAAL,GAAcjF,SAAf,EAA2BmD,CAAC,GAAG8B,KAAL,GAAcjF,SAAxC,CAAP;AACD;;AACD,OAAO,SAAS8F,iBAAT,CACLvC,QADK,EAELe,CAFK,EAGLnB,CAHK,EAILC,CAJK,EAKLiC,QAAgB,GAAGrF,SALd,EAMY;AACjB,MAAIuD,QAAQ,CAACS,YAAb,EAA2B;AACzB,UAAM,CAAC+B,IAAD,EAAOC,KAAP,IAAgBV,cAAc,CAAChB,CAAD,EAAInB,CAAJ,EAAOC,CAAP,CAApC;AACA,UAAM,CAAC6C,IAAD,EAAOC,KAAP,IAAgBZ,cAAc,CAAChB,CAAC,GAAG,CAAL,EAAQnB,CAAC,GAAG,CAAZ,EAAeC,CAAf,CAApC;AACA,WAAO;AAAC2C,MAAAA,IAAD;AAAOC,MAAAA,KAAP;AAAcC,MAAAA,IAAd;AAAoBC,MAAAA;AAApB,KAAP;AACD;;AACD,QAAM,CAACC,IAAD,EAAOC,GAAP,IAAcP,OAAO,CAACvB,CAAD,EAAInB,CAAJ,EAAOC,CAAP,EAAUiC,QAAV,CAA3B;AACA,QAAM,CAACgB,KAAD,EAAQC,MAAR,IAAkBT,OAAO,CAACvB,CAAC,GAAG,CAAL,EAAQnB,CAAC,GAAG,CAAZ,EAAeC,CAAf,EAAkBiC,QAAlB,CAA/B;AACA,SAAO;AAACc,IAAAA,IAAD;AAAOC,IAAAA,GAAP;AAAYC,IAAAA,KAAZ;AAAmBC,IAAAA;AAAnB,GAAP;AACD;;AAED,SAASC,sBAAT,CACEhD,QADF,EAEEH,CAFF,EAGEiC,QAHF,EAIE5B,MAJF,EAKEyB,kBALF,EAME;AACA,QAAM9D,IAAI,GAAGkC,cAAc,CAACC,QAAD,EAAW,IAAX,EAAiBE,MAAjB,CAA3B;AACA,QAAMwB,KAAK,GAAGG,QAAQ,CAAChC,CAAD,EAAIiC,QAAJ,CAAtB;AACA,QAAM,CAACmB,IAAD,EAAOC,IAAP,EAAaC,IAAb,EAAmBC,IAAnB,IAA2B3B,iBAAiB,CAAC5D,IAAD,EAAO6D,KAAP,EAAcC,kBAAd,CAAlD;AACA,QAAM0B,OAAoB,GAAG,EAA7B;;AAMA,OAAK,IAAItC,CAAC,GAAG7C,IAAI,CAACoF,KAAL,CAAWL,IAAX,CAAb,EAA+BlC,CAAC,GAAGoC,IAAnC,EAAyCpC,CAAC,EAA1C,EAA8C;AAC5C,SAAK,IAAInB,CAAC,GAAG1B,IAAI,CAACoF,KAAL,CAAWJ,IAAX,CAAb,EAA+BtD,CAAC,GAAGwD,IAAnC,EAAyCxD,CAAC,EAA1C,EAA8C;AAC5CyD,MAAAA,OAAO,CAACE,IAAR,CAAa;AAACxC,QAAAA,CAAD;AAAInB,QAAAA,CAAJ;AAAOC,QAAAA;AAAP,OAAb;AACD;AACF;;AACD,SAAOwD,OAAP;AACD;;AAQD,OAAO,SAASG,cAAT,CAAwB;AAC7BxD,EAAAA,QAD6B;AAE7ByD,EAAAA,OAF6B;AAG7BC,EAAAA,OAH6B;AAI7BzD,EAAAA,MAJ6B;AAK7BC,EAAAA,MAL6B;AAM7B4B,EAAAA,QAAQ,GAAGrF,SANkB;AAO7BqB,EAAAA,WAP6B;AAQ7B6D,EAAAA,kBAR6B;AAS7BgC,EAAAA,UAAU,GAAG;AATgB,CAAxB,EAoBJ;AACD,MAAI9D,CAAC,GAAGG,QAAQ,CAACS,YAAT,GACJvC,IAAI,CAAC0F,KAAL,CAAW5D,QAAQ,CAAC6D,IAAT,GAAgB3F,IAAI,CAAC4F,IAAL,CAAUrH,SAAS,GAAGqF,QAAtB,CAA3B,IAA8D6B,UAD1D,GAEJzF,IAAI,CAAC6F,IAAL,CAAU/D,QAAQ,CAAC6D,IAAnB,IAA2BF,UAF/B;;AAGA,MAAI,OAAOD,OAAP,KAAmB,QAAnB,IAA+BhE,MAAM,CAACsE,QAAP,CAAgBN,OAAhB,CAA/B,IAA2D7D,CAAC,GAAG6D,OAAnE,EAA4E;AAC1E,QAAI,CAACxD,MAAL,EAAa;AACX,aAAO,EAAP;AACD;;AACDL,IAAAA,CAAC,GAAG6D,OAAJ;AACD;;AACD,MAAI,OAAOD,OAAP,KAAmB,QAAnB,IAA+B/D,MAAM,CAACsE,QAAP,CAAgBP,OAAhB,CAA/B,IAA2D5D,CAAC,GAAG4D,OAAnE,EAA4E;AAC1E5D,IAAAA,CAAC,GAAG4D,OAAJ;AACD;;AACD,MAAIQ,iBAAiB,GAAG/D,MAAxB;;AACA,MAAIpC,WAAW,IAAI6D,kBAAf,IAAqCzB,MAArC,IAA+C,CAACF,QAAQ,CAACS,YAA7D,EAA2E;AACzEwD,IAAAA,iBAAiB,GAAGrG,YAAY,CAACsC,MAAD,EAASpC,WAAT,CAAhC;AACD;;AACD,SAAOkC,QAAQ,CAACS,YAAT,GACHjE,iBAAiB,CAACwD,QAAD,EAAWH,CAAX,EAAcI,MAAd,EAAsBC,MAAtB,CADd,GAEH8C,sBAAsB,CACpBhD,QADoB,EAEpBH,CAFoB,EAGpBiC,QAHoB,EAIpBmC,iBAAiB,IAAIvH,cAJD,EAKpBiF,kBALoB,CAF1B;AASD;AAKD,OAAO,SAASuC,aAAT,CAAuB3F,CAAvB,EAA2C;AAChD,SAAO,qCAAqC4F,IAArC,CAA0C5F,CAA1C,CAAP;AACD;AAED,OAAO,SAAS6F,gBAAT,CAA0BvD,CAA1B,EAAuD;AAC5D,SACEnB,MAAM,CAACsE,QAAP,CAAgBnD,CAAC,CAAC2B,IAAlB,KACA9C,MAAM,CAACsE,QAAP,CAAgBnD,CAAC,CAAC4B,KAAlB,CADA,IAEA/C,MAAM,CAACsE,QAAP,CAAgBnD,CAAC,CAAC6B,IAAlB,CAFA,IAGAhD,MAAM,CAACsE,QAAP,CAAgBnD,CAAC,CAAC8B,KAAlB,CAJF;AAMD","sourcesContent":["import {Viewport} from '@deck.gl/core';\nimport {Matrix4} from '@math.gl/core';\nimport {getOSMTileIndices} from './tile-2d-traversal';\nimport {Bounds, GeoBoundingBox, TileBoundingBox, TileIndex, ZRange} from './types';\n\nconst TILE_SIZE = 512;\nconst DEFAULT_EXTENT: Bounds = [-Infinity, -Infinity, Infinity, Infinity];\n\nexport type URLTemplate = string | string[] | null;\n\nexport const urlType = {\n type: 'object' as const,\n value: null as URLTemplate,\n validate: (value, propType) =>\n (propType.optional && value === null) ||\n typeof value === 'string' ||\n (Array.isArray(value) && value.every(url => typeof url === 'string')),\n equal: (value1, value2) => {\n if (value1 === value2) {\n return true;\n }\n if (!Array.isArray(value1) || !Array.isArray(value2)) {\n return false;\n }\n const len = value1.length;\n if (len !== value2.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (value1[i] !== value2[i]) {\n return false;\n }\n }\n return true;\n }\n};\n\nfunction transformBox(bbox: Bounds, modelMatrix: Matrix4): Bounds {\n const transformedCoords = [\n // top-left\n modelMatrix.transformAsPoint([bbox[0], bbox[1]]),\n // top-right\n modelMatrix.transformAsPoint([bbox[2], bbox[1]]),\n // bottom-left\n modelMatrix.transformAsPoint([bbox[0], bbox[3]]),\n // bottom-right\n modelMatrix.transformAsPoint([bbox[2], bbox[3]])\n ];\n const transformedBox: Bounds = [\n // Minimum x coord\n Math.min(...transformedCoords.map(i => i[0])),\n // Minimum y coord\n Math.min(...transformedCoords.map(i => i[1])),\n // Max x coord\n Math.max(...transformedCoords.map(i => i[0])),\n // Max y coord\n Math.max(...transformedCoords.map(i => i[1]))\n ];\n return transformedBox;\n}\n\nfunction stringHash(s: string): number {\n return Math.abs(s.split('').reduce((a, b) => ((a << 5) - a + b.charCodeAt(0)) | 0, 0));\n}\n\nexport function getURLFromTemplate(\n template: URLTemplate,\n tile: {\n index: TileIndex;\n id: string;\n }\n): string | null {\n if (!template || !template.length) {\n return null;\n }\n const {index, id} = tile;\n\n if (Array.isArray(template)) {\n const i = stringHash(id) % template.length;\n template = template[i];\n }\n\n let url = template;\n for (const key of Object.keys(index)) {\n const regex = new RegExp(`{${key}}`, 'g');\n url = url.replace(regex, String(index[key]));\n }\n\n // Back-compatible support for {-y}\n if (Number.isInteger(index.y) && Number.isInteger(index.z)) {\n url = url.replace(/\\{-y\\}/g, String(Math.pow(2, index.z) - index.y - 1));\n }\n return url;\n}\n\n/**\n * gets the bounding box of a viewport\n */\nfunction getBoundingBox(viewport: Viewport, zRange: number[] | null, extent: Bounds): Bounds {\n let bounds;\n if (zRange && zRange.length === 2) {\n const [minZ, maxZ] = zRange;\n const bounds0 = viewport.getBounds({z: minZ});\n const bounds1 = viewport.getBounds({z: maxZ});\n bounds = [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n } else {\n bounds = viewport.getBounds();\n }\n if (!viewport.isGeospatial) {\n return [\n // Top corner should not be more then bottom corner in either direction\n Math.max(Math.min(bounds[0], extent[2]), extent[0]),\n Math.max(Math.min(bounds[1], extent[3]), extent[1]),\n // Bottom corner should not be less then top corner in either direction\n Math.min(Math.max(bounds[2], extent[0]), extent[2]),\n Math.min(Math.max(bounds[3], extent[1]), extent[3])\n ];\n }\n return [\n Math.max(bounds[0], extent[0]),\n Math.max(bounds[1], extent[1]),\n Math.min(bounds[2], extent[2]),\n Math.min(bounds[3], extent[3])\n ];\n}\n\n/** Get culling bounds in world space */\nexport function getCullBounds({\n viewport,\n z,\n cullRect\n}: {\n /** Current viewport */\n viewport: Viewport;\n /** Current z range */\n z?: ZRange | number | null;\n /** Culling rectangle in screen space */\n cullRect: {x: number; y: number; width: number; height: number};\n}): [number, number, number, number][] {\n const subViewports = viewport.subViewports || [viewport];\n return subViewports.map(v => getCullBoundsInViewport(v, z || 0, cullRect));\n}\n\nfunction getCullBoundsInViewport(\n /** Current viewport */\n viewport: Viewport,\n /** At altitude */\n z: ZRange | number,\n /** Culling rectangle in screen space */\n cullRect: {x: number; y: number; width: number; height: number}\n): [number, number, number, number] {\n if (!Array.isArray(z)) {\n const x = cullRect.x - viewport.x;\n const y = cullRect.y - viewport.y;\n const {width, height} = cullRect;\n\n const unprojectOption = {targetZ: z};\n\n const topLeft = viewport.unproject([x, y], unprojectOption);\n const topRight = viewport.unproject([x + width, y], unprojectOption);\n const bottomLeft = viewport.unproject([x, y + height], unprojectOption);\n const bottomRight = viewport.unproject([x + width, y + height], unprojectOption);\n\n return [\n Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]),\n Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1])\n ];\n }\n\n const bounds0 = getCullBoundsInViewport(viewport, z[0], cullRect);\n const bounds1 = getCullBoundsInViewport(viewport, z[1], cullRect);\n\n return [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n}\n\nfunction getIndexingCoords(bbox: Bounds, scale: number, modelMatrixInverse?: Matrix4): Bounds {\n if (modelMatrixInverse) {\n const transformedTileIndex = transformBox(bbox, modelMatrixInverse).map(\n i => (i * scale) / TILE_SIZE\n );\n return transformedTileIndex as Bounds;\n }\n return bbox.map(i => (i * scale) / TILE_SIZE) as Bounds;\n}\n\nfunction getScale(z: number, tileSize: number): number {\n return (Math.pow(2, z) * TILE_SIZE) / tileSize;\n}\n\n// https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2\nexport function osmTile2lngLat(x: number, y: number, z: number): [number, number] {\n const scale = getScale(z, TILE_SIZE);\n const lng = (x / scale) * 360 - 180;\n const n = Math.PI - (2 * Math.PI * y) / scale;\n const lat = (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\n return [lng, lat];\n}\n\nfunction tile2XY(x: number, y: number, z: number, tileSize: number): [number, number] {\n const scale = getScale(z, tileSize);\n return [(x / scale) * TILE_SIZE, (y / scale) * TILE_SIZE];\n}\nexport function tileToBoundingBox(\n viewport: Viewport,\n x: number,\n y: number,\n z: number,\n tileSize: number = TILE_SIZE\n): TileBoundingBox {\n if (viewport.isGeospatial) {\n const [west, north] = osmTile2lngLat(x, y, z);\n const [east, south] = osmTile2lngLat(x + 1, y + 1, z);\n return {west, north, east, south};\n }\n const [left, top] = tile2XY(x, y, z, tileSize);\n const [right, bottom] = tile2XY(x + 1, y + 1, z, tileSize);\n return {left, top, right, bottom};\n}\n\nfunction getIdentityTileIndices(\n viewport: Viewport,\n z: number,\n tileSize: number,\n extent: Bounds,\n modelMatrixInverse?: Matrix4\n) {\n const bbox = getBoundingBox(viewport, null, extent);\n const scale = getScale(z, tileSize);\n const [minX, minY, maxX, maxY] = getIndexingCoords(bbox, scale, modelMatrixInverse);\n const indices: TileIndex[] = [];\n\n /*\n | TILE | TILE | TILE |\n |(minX) |(maxX)\n */\n for (let x = Math.floor(minX); x < maxX; x++) {\n for (let y = Math.floor(minY); y < maxY; y++) {\n indices.push({x, y, z});\n }\n }\n return indices;\n}\n\n/**\n * Returns all tile indices in the current viewport. If the current zoom level is smaller\n * than minZoom, return an empty array. If the current zoom level is greater than maxZoom,\n * return tiles that are on maxZoom.\n */\n// eslint-disable-next-line complexity\nexport function getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n extent,\n tileSize = TILE_SIZE,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset = 0\n}: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange?: ZRange | null;\n extent?: Bounds;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n}) {\n let z = viewport.isGeospatial\n ? Math.round(viewport.zoom + Math.log2(TILE_SIZE / tileSize)) + zoomOffset\n : Math.ceil(viewport.zoom) + zoomOffset;\n if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {\n if (!extent) {\n return [];\n }\n z = minZoom;\n }\n if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n }\n let transformedExtent = extent;\n if (modelMatrix && modelMatrixInverse && extent && !viewport.isGeospatial) {\n transformedExtent = transformBox(extent, modelMatrix);\n }\n return viewport.isGeospatial\n ? getOSMTileIndices(viewport, z, zRange, extent)\n : getIdentityTileIndices(\n viewport,\n z,\n tileSize,\n transformedExtent || DEFAULT_EXTENT,\n modelMatrixInverse\n );\n}\n\n/**\n * Returns true if s is a valid URL template\n */\nexport function isURLTemplate(s: string): boolean {\n return /(?=.*{z})(?=.*{x})(?=.*({y}|{-y}))/.test(s);\n}\n\nexport function isGeoBoundingBox(v: any): v is GeoBoundingBox {\n return (\n Number.isFinite(v.west) &&\n Number.isFinite(v.north) &&\n Number.isFinite(v.east) &&\n Number.isFinite(v.south)\n );\n}\n"],"file":"utils.js"}
@@ -1,88 +0,0 @@
1
- import { PathLayer } from '@deck.gl/layers';
2
- const defaultProps = {
3
- fadeTrail: true,
4
- trailLength: {
5
- type: 'number',
6
- value: 120,
7
- min: 0
8
- },
9
- currentTime: {
10
- type: 'number',
11
- value: 0,
12
- min: 0
13
- },
14
- getTimestamps: {
15
- type: 'accessor',
16
- value: d => d.timestamps
17
- }
18
- };
19
- export default class TripsLayer extends PathLayer {
20
- getShaders() {
21
- const shaders = super.getShaders();
22
- shaders.inject = {
23
- 'vs:#decl': `\
24
- uniform float trailLength;
25
- in float instanceTimestamps;
26
- in float instanceNextTimestamps;
27
- out float vTime;
28
- `,
29
- 'vs:#main-end': `\
30
- vTime = instanceTimestamps + (instanceNextTimestamps - instanceTimestamps) * vPathPosition.y / vPathLength;
31
- `,
32
- 'fs:#decl': `\
33
- uniform bool fadeTrail;
34
- uniform float trailLength;
35
- uniform float currentTime;
36
- in float vTime;
37
- `,
38
- 'fs:#main-start': `\
39
- if(vTime > currentTime || (fadeTrail && (vTime < currentTime - trailLength))) {
40
- discard;
41
- }
42
- `,
43
- 'fs:DECKGL_FILTER_COLOR': `\
44
- if(fadeTrail) {
45
- color.a *= 1.0 - (currentTime - vTime) / trailLength;
46
- }
47
- `
48
- };
49
- return shaders;
50
- }
51
-
52
- initializeState() {
53
- super.initializeState();
54
- const attributeManager = this.getAttributeManager();
55
- attributeManager.addInstanced({
56
- timestamps: {
57
- size: 1,
58
- accessor: 'getTimestamps',
59
- shaderAttributes: {
60
- instanceTimestamps: {
61
- vertexOffset: 0
62
- },
63
- instanceNextTimestamps: {
64
- vertexOffset: 1
65
- }
66
- }
67
- }
68
- });
69
- }
70
-
71
- draw(params) {
72
- const {
73
- fadeTrail,
74
- trailLength,
75
- currentTime
76
- } = this.props;
77
- params.uniforms = { ...params.uniforms,
78
- fadeTrail,
79
- trailLength,
80
- currentTime
81
- };
82
- super.draw(params);
83
- }
84
-
85
- }
86
- TripsLayer.layerName = 'TripsLayer';
87
- TripsLayer.defaultProps = defaultProps;
88
- //# sourceMappingURL=trips-layer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/trips-layer/trips-layer.ts"],"names":["PathLayer","defaultProps","fadeTrail","trailLength","type","value","min","currentTime","getTimestamps","d","timestamps","TripsLayer","getShaders","shaders","inject","initializeState","attributeManager","getAttributeManager","addInstanced","size","accessor","shaderAttributes","instanceTimestamps","vertexOffset","instanceNextTimestamps","draw","params","props","uniforms","layerName"],"mappings":"AAsBA,SAAQA,SAAR,QAAwC,iBAAxC;AAEA,MAAMC,YAA2C,GAAG;AAClDC,EAAAA,SAAS,EAAE,IADuC;AAElDC,EAAAA,WAAW,EAAE;AAACC,IAAAA,IAAI,EAAE,QAAP;AAAiBC,IAAAA,KAAK,EAAE,GAAxB;AAA6BC,IAAAA,GAAG,EAAE;AAAlC,GAFqC;AAGlDC,EAAAA,WAAW,EAAE;AAACH,IAAAA,IAAI,EAAE,QAAP;AAAiBC,IAAAA,KAAK,EAAE,CAAxB;AAA2BC,IAAAA,GAAG,EAAE;AAAhC,GAHqC;AAIlDE,EAAAA,aAAa,EAAE;AAACJ,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAGI,CAAD,IAAYA,CAAC,CAACC;AAAxC;AAJmC,CAApD;AAkCA,eAAe,MAAMC,UAAN,SAAkEX,SAAlE,CAGb;AAIAY,EAAAA,UAAU,GAAG;AACX,UAAMC,OAAO,GAAG,MAAMD,UAAN,EAAhB;AACAC,IAAAA,OAAO,CAACC,MAAR,GAAiB;AACf,kBAAa;AACnB;AACA;AACA;AACA;AACA,CANqB;AAQf,sBAAiB;AACvB;AACA,CAVqB;AAWf,kBAAa;AACnB;AACA;AACA;AACA;AACA,CAhBqB;AAkBf,wBAAmB;AACzB;AACA;AACA;AACA,CAtBqB;AAwBf,gCAA2B;AACjC;AACA;AACA;AACA;AA5BqB,KAAjB;AA8BA,WAAOD,OAAP;AACD;;AAEDE,EAAAA,eAAe,GAAG;AAChB,UAAMA,eAAN;AAEA,UAAMC,gBAAgB,GAAG,KAAKC,mBAAL,EAAzB;AACAD,IAAAA,gBAAgB,CAAEE,YAAlB,CAA+B;AAC7BR,MAAAA,UAAU,EAAE;AACVS,QAAAA,IAAI,EAAE,CADI;AAEVC,QAAAA,QAAQ,EAAE,eAFA;AAGVC,QAAAA,gBAAgB,EAAE;AAChBC,UAAAA,kBAAkB,EAAE;AAClBC,YAAAA,YAAY,EAAE;AADI,WADJ;AAIhBC,UAAAA,sBAAsB,EAAE;AACtBD,YAAAA,YAAY,EAAE;AADQ;AAJR;AAHR;AADiB,KAA/B;AAcD;;AAEDE,EAAAA,IAAI,CAACC,MAAD,EAAS;AACX,UAAM;AAACxB,MAAAA,SAAD;AAAYC,MAAAA,WAAZ;AAAyBI,MAAAA;AAAzB,QAAwC,KAAKoB,KAAnD;AAEAD,IAAAA,MAAM,CAACE,QAAP,GAAkB,EAChB,GAAGF,MAAM,CAACE,QADM;AAEhB1B,MAAAA,SAFgB;AAGhBC,MAAAA,WAHgB;AAIhBI,MAAAA;AAJgB,KAAlB;AAOA,UAAMkB,IAAN,CAAWC,MAAX;AACD;;AAtED;AAHmBf,U,CAIZkB,S,GAAY,Y;AAJAlB,U,CAKZV,Y,GAAeA,Y","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type {NumericArray} from '@math.gl/core';\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport {PathLayer, PathLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps<TripsLayerProps> = {\n fadeTrail: true,\n trailLength: {type: 'number', value: 120, min: 0},\n currentTime: {type: 'number', value: 0, min: 0},\n getTimestamps: {type: 'accessor', value: (d: any) => d.timestamps}\n};\n\n/** All properties supported by TripsLayer. */\nexport type TripsLayerProps<DataT = unknown> = _TripsLayerProps<DataT> & PathLayerProps<DataT>;\n\n/** Properties added by TripsLayer. */\ntype _TripsLayerProps<DataT = unknown> = {\n /**\n * Whether or not the path fades out.\n * @default true\n */\n fadeTrail?: boolean;\n /**\n * Trail length.\n * @default 120\n */\n trailLength?: number;\n /**\n * The current time of the frame.\n * @default 0\n */\n currentTime?: number;\n /**\n * Timestamp accessor.\n */\n getTimestamps?: AccessorFunction<DataT, NumericArray>;\n};\n\n/** Render animated paths that represent vehicle trips. */\nexport default class TripsLayer<DataT = any, ExtraProps extends {} = {}> extends PathLayer<\n DataT,\n Required<_TripsLayerProps> & ExtraProps\n> {\n static layerName = 'TripsLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n shaders.inject = {\n 'vs:#decl': `\\\nuniform float trailLength;\nin float instanceTimestamps;\nin float instanceNextTimestamps;\nout float vTime;\n`,\n // Timestamp of the vertex\n 'vs:#main-end': `\\\nvTime = instanceTimestamps + (instanceNextTimestamps - instanceTimestamps) * vPathPosition.y / vPathLength;\n`,\n 'fs:#decl': `\\\nuniform bool fadeTrail;\nuniform float trailLength;\nuniform float currentTime;\nin float vTime;\n`,\n // Drop the segments outside of the time window\n 'fs:#main-start': `\\\nif(vTime > currentTime || (fadeTrail && (vTime < currentTime - trailLength))) {\n discard;\n}\n`,\n // Fade the color (currentTime - 100%, end of trail - 0%)\n 'fs:DECKGL_FILTER_COLOR': `\\\nif(fadeTrail) {\n color.a *= 1.0 - (currentTime - vTime) / trailLength;\n}\n`\n };\n return shaders;\n }\n\n initializeState() {\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n attributeManager!.addInstanced({\n timestamps: {\n size: 1,\n accessor: 'getTimestamps',\n shaderAttributes: {\n instanceTimestamps: {\n vertexOffset: 0\n },\n instanceNextTimestamps: {\n vertexOffset: 1\n }\n }\n }\n });\n }\n\n draw(params) {\n const {fadeTrail, trailLength, currentTime} = this.props;\n\n params.uniforms = {\n ...params.uniforms,\n fadeTrail,\n trailLength,\n currentTime\n };\n\n super.draw(params);\n }\n}\n"],"file":"trips-layer.js"}
@@ -1,9 +0,0 @@
1
- import { lngLatToWorld } from '@math.gl/web-mercator';
2
- const HALF_EARTH_CIRCUMFERENCE = 6378137 * Math.PI;
3
- export function WGS84ToPseudoMercator(coord) {
4
- const mercator = lngLatToWorld(coord);
5
- mercator[0] = (mercator[0] / 256 - 1) * HALF_EARTH_CIRCUMFERENCE;
6
- mercator[1] = (mercator[1] / 256 - 1) * HALF_EARTH_CIRCUMFERENCE;
7
- return mercator;
8
- }
9
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/wms-layer/utils.ts"],"names":["lngLatToWorld","HALF_EARTH_CIRCUMFERENCE","Math","PI","WGS84ToPseudoMercator","coord","mercator"],"mappings":"AAAA,SAAQA,aAAR,QAA4B,uBAA5B;AAIA,MAAMC,wBAAwB,GAAG,UAAUC,IAAI,CAACC,EAAhD;AAKA,OAAO,SAASC,qBAAT,CAA+BC,KAA/B,EAA0E;AAC/E,QAAMC,QAAQ,GAAGN,aAAa,CAACK,KAAD,CAA9B;AACAC,EAAAA,QAAQ,CAAC,CAAD,CAAR,GAAc,CAACA,QAAQ,CAAC,CAAD,CAAR,GAAc,GAAd,GAAoB,CAArB,IAA0BL,wBAAxC;AACAK,EAAAA,QAAQ,CAAC,CAAD,CAAR,GAAc,CAACA,QAAQ,CAAC,CAAD,CAAR,GAAc,GAAd,GAAoB,CAArB,IAA0BL,wBAAxC;AACA,SAAOK,QAAP;AACD","sourcesContent":["import {lngLatToWorld} from '@math.gl/web-mercator';\n\n// https://epsg.io/3857\n// +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs\nconst HALF_EARTH_CIRCUMFERENCE = 6378137 * Math.PI;\n\n/** Projects EPSG:4326 to EPSG:3857\n * This is a lightweight replacement of proj4. Use tests to ensure conformance.\n */\nexport function WGS84ToPseudoMercator(coord: [number, number]): [number, number] {\n const mercator = lngLatToWorld(coord);\n mercator[0] = (mercator[0] / 256 - 1) * HALF_EARTH_CIRCUMFERENCE;\n mercator[1] = (mercator[1] / 256 - 1) * HALF_EARTH_CIRCUMFERENCE;\n return mercator;\n}\n"],"file":"utils.js"}
@@ -1,231 +0,0 @@
1
- import { CompositeLayer, COORDINATE_SYSTEM, _deepEqual as deepEqual } from '@deck.gl/core';
2
- import { BitmapLayer } from '@deck.gl/layers';
3
- import { ImageSource, createImageSource } from '@loaders.gl/wms';
4
- import { WGS84ToPseudoMercator } from './utils';
5
- const defaultProps = {
6
- id: 'imagery-layer',
7
- data: '',
8
- serviceType: 'auto',
9
- srs: 'auto',
10
- layers: {
11
- type: 'array',
12
- compare: true,
13
- value: []
14
- },
15
- onMetadataLoad: {
16
- type: 'function',
17
- value: () => {}
18
- },
19
- onMetadataLoadError: {
20
- type: 'function',
21
- value: console.error
22
- },
23
- onImageLoadStart: {
24
- type: 'function',
25
- value: () => {}
26
- },
27
- onImageLoad: {
28
- type: 'function',
29
- value: () => {}
30
- },
31
- onImageLoadError: {
32
- type: 'function',
33
- compare: false,
34
- value: (requestId, error) => console.error(error, requestId)
35
- }
36
- };
37
- export class WMSLayer extends CompositeLayer {
38
- constructor(...args) {
39
- super(...args);
40
- this.state = void 0;
41
- }
42
-
43
- get isLoaded() {
44
- return Boolean(this.state) && this.state.loadCounter === 0 && super.isLoaded;
45
- }
46
-
47
- shouldUpdateState() {
48
- return true;
49
- }
50
-
51
- initializeState() {
52
- this.state._nextRequestId = 0;
53
- this.state.lastRequestId = -1;
54
- this.state.loadCounter = 0;
55
- }
56
-
57
- updateState({
58
- changeFlags,
59
- props,
60
- oldProps
61
- }) {
62
- const {
63
- viewport
64
- } = this.context;
65
-
66
- if (changeFlags.dataChanged || props.serviceType !== oldProps.serviceType) {
67
- this.state.imageSource = this._createImageSource(props);
68
-
69
- this._loadMetadata();
70
-
71
- this.debounce(() => this.loadImage(viewport, 'image source changed'), 0);
72
- } else if (!deepEqual(props.layers, oldProps.layers, 1)) {
73
- this.debounce(() => this.loadImage(viewport, 'layers changed'), 0);
74
- } else if (changeFlags.viewportChanged) {
75
- this.debounce(() => this.loadImage(viewport, 'viewport changed'));
76
- }
77
- }
78
-
79
- finalizeState() {}
80
-
81
- renderLayers() {
82
- const {
83
- bounds,
84
- image,
85
- lastRequestParameters
86
- } = this.state;
87
- return image && new BitmapLayer({ ...this.getSubLayerProps({
88
- id: 'bitmap'
89
- }),
90
- _imageCoordinateSystem: lastRequestParameters.srs === 'EPSG:4326' ? COORDINATE_SYSTEM.LNGLAT : COORDINATE_SYSTEM.CARTESIAN,
91
- bounds,
92
- image
93
- });
94
- }
95
-
96
- async getFeatureInfoText(x, y) {
97
- const {
98
- lastRequestParameters
99
- } = this.state;
100
-
101
- if (lastRequestParameters) {
102
- var _this$state$imageSour, _this$state$imageSour2;
103
-
104
- const featureInfo = await ((_this$state$imageSour = (_this$state$imageSour2 = this.state.imageSource).getFeatureInfoText) === null || _this$state$imageSour === void 0 ? void 0 : _this$state$imageSour.call(_this$state$imageSour2, { ...lastRequestParameters,
105
- query_layers: lastRequestParameters.layers,
106
- x,
107
- y,
108
- info_format: 'application/vnd.ogc.gml'
109
- }));
110
- return featureInfo;
111
- }
112
-
113
- return '';
114
- }
115
-
116
- _createImageSource(props) {
117
- if (props.data instanceof ImageSource) {
118
- return props.data;
119
- }
120
-
121
- if (typeof props.data === 'string') {
122
- return createImageSource({
123
- url: props.data,
124
- loadOptions: props.loadOptions,
125
- type: props.serviceType
126
- });
127
- }
128
-
129
- throw new Error('invalid image source in props.data');
130
- }
131
-
132
- async _loadMetadata() {
133
- const {
134
- imageSource
135
- } = this.state;
136
-
137
- try {
138
- this.state.loadCounter++;
139
- const metadata = await imageSource.getMetadata();
140
-
141
- if (this.state.imageSource === imageSource) {
142
- var _this$getCurrentLayer;
143
-
144
- (_this$getCurrentLayer = this.getCurrentLayer()) === null || _this$getCurrentLayer === void 0 ? void 0 : _this$getCurrentLayer.props.onMetadataLoad(metadata);
145
- }
146
- } catch (error) {
147
- var _this$getCurrentLayer2;
148
-
149
- (_this$getCurrentLayer2 = this.getCurrentLayer()) === null || _this$getCurrentLayer2 === void 0 ? void 0 : _this$getCurrentLayer2.props.onMetadataLoadError(error);
150
- } finally {
151
- this.state.loadCounter--;
152
- }
153
- }
154
-
155
- async loadImage(viewport, reason) {
156
- const {
157
- layers,
158
- serviceType
159
- } = this.props;
160
-
161
- if (serviceType === 'wms' && layers.length === 0) {
162
- return;
163
- }
164
-
165
- const bounds = viewport.getBounds();
166
- const {
167
- width,
168
- height
169
- } = viewport;
170
- const requestId = this.getRequestId();
171
- let {
172
- srs
173
- } = this.props;
174
-
175
- if (srs === 'auto') {
176
- srs = viewport.resolution ? 'EPSG:4326' : 'EPSG:3857';
177
- }
178
-
179
- const requestParams = {
180
- width,
181
- height,
182
- boundingBox: [[bounds[0], bounds[1]], [bounds[2], bounds[3]]],
183
- layers,
184
- crs: srs
185
- };
186
-
187
- if (srs === 'EPSG:3857') {
188
- const min = WGS84ToPseudoMercator([bounds[0], bounds[1]]);
189
- const max = WGS84ToPseudoMercator([bounds[2], bounds[3]]);
190
- requestParams.boundingBox = [min, max];
191
- }
192
-
193
- try {
194
- this.state.loadCounter++;
195
- this.props.onImageLoadStart(requestId);
196
- const image = await this.state.imageSource.getImage(requestParams);
197
-
198
- if (this.state.lastRequestId < requestId) {
199
- var _this$getCurrentLayer3;
200
-
201
- (_this$getCurrentLayer3 = this.getCurrentLayer()) === null || _this$getCurrentLayer3 === void 0 ? void 0 : _this$getCurrentLayer3.props.onImageLoad(requestId);
202
- this.setState({
203
- image,
204
- bounds,
205
- lastRequestParameters: requestParams,
206
- lastRequestId: requestId
207
- });
208
- }
209
- } catch (error) {
210
- var _this$getCurrentLayer4;
211
-
212
- this.raiseError(error, 'Load image');
213
- (_this$getCurrentLayer4 = this.getCurrentLayer()) === null || _this$getCurrentLayer4 === void 0 ? void 0 : _this$getCurrentLayer4.props.onImageLoadError(requestId, error);
214
- } finally {
215
- this.state.loadCounter--;
216
- }
217
- }
218
-
219
- getRequestId() {
220
- return this.state._nextRequestId++;
221
- }
222
-
223
- debounce(fn, ms = 500) {
224
- clearTimeout(this.state._timeoutId);
225
- this.state._timeoutId = setTimeout(() => fn(), ms);
226
- }
227
-
228
- }
229
- WMSLayer.layerName = 'WMSLayer';
230
- WMSLayer.defaultProps = defaultProps;
231
- //# sourceMappingURL=wms-layer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/wms-layer/wms-layer.ts"],"names":["CompositeLayer","COORDINATE_SYSTEM","_deepEqual","deepEqual","BitmapLayer","ImageSource","createImageSource","WGS84ToPseudoMercator","defaultProps","id","data","serviceType","srs","layers","type","compare","value","onMetadataLoad","onMetadataLoadError","console","error","onImageLoadStart","onImageLoad","onImageLoadError","requestId","WMSLayer","state","isLoaded","Boolean","loadCounter","shouldUpdateState","initializeState","_nextRequestId","lastRequestId","updateState","changeFlags","props","oldProps","viewport","context","dataChanged","imageSource","_createImageSource","_loadMetadata","debounce","loadImage","viewportChanged","finalizeState","renderLayers","bounds","image","lastRequestParameters","getSubLayerProps","_imageCoordinateSystem","LNGLAT","CARTESIAN","getFeatureInfoText","x","y","featureInfo","query_layers","info_format","url","loadOptions","Error","metadata","getMetadata","getCurrentLayer","reason","length","getBounds","width","height","getRequestId","resolution","requestParams","boundingBox","crs","min","max","getImage","setState","raiseError","fn","ms","clearTimeout","_timeoutId","setTimeout","layerName"],"mappings":"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","sourcesContent":["// deck.gl, MIT license\n// Attributions:\n// Copyright 2022 Foursquare Labs, Inc.\n\n/* eslint-disable camelcase */ // Some WMS parameters are not in camel case\n/* global setTimeout, clearTimeout */\n\nimport {\n Layer,\n CompositeLayer,\n CompositeLayerProps,\n UpdateParameters,\n DefaultProps,\n Viewport,\n COORDINATE_SYSTEM,\n _deepEqual as deepEqual\n} from '@deck.gl/core';\nimport {BitmapLayer} from '@deck.gl/layers';\nimport type {GetImageParameters, ImageSourceMetadata, ImageType} from '@loaders.gl/loader-utils';\nimport type {ImageServiceType} from '@loaders.gl/wms';\nimport {ImageSource, createImageSource} from '@loaders.gl/wms';\nimport {WGS84ToPseudoMercator} from './utils';\n\n/** All props supported by the TileLayer */\nexport type WMSLayerProps = CompositeLayerProps & _WMSLayerProps;\n\n/** Props added by the TileLayer */\ntype _WMSLayerProps = {\n data: string | ImageSource;\n serviceType?: ImageServiceType | 'auto';\n layers?: string[];\n srs?: 'EPSG:4326' | 'EPSG:3857' | 'auto';\n onMetadataLoad?: (metadata: ImageSourceMetadata) => void;\n onMetadataLoadError?: (error: Error) => void;\n onImageLoadStart?: (requestId: unknown) => void;\n onImageLoad?: (requestId: unknown) => void;\n onImageLoadError?: (requestId: unknown, error: Error) => void;\n};\n\nconst defaultProps: DefaultProps<WMSLayerProps> = {\n id: 'imagery-layer',\n data: '',\n serviceType: 'auto',\n srs: 'auto',\n layers: {type: 'array', compare: true, value: []},\n onMetadataLoad: {type: 'function', value: () => {}},\n // eslint-disable-next-line\n onMetadataLoadError: {type: 'function', value: console.error},\n onImageLoadStart: {type: 'function', value: () => {}},\n onImageLoad: {type: 'function', value: () => {}},\n onImageLoadError: {\n type: 'function',\n compare: false,\n // eslint-disable-next-line\n value: (requestId: unknown, error: Error) => console.error(error, requestId)\n }\n};\n\n/**\n * The layer is used in Hex Tile layer in order to properly discard invisible elements during animation\n */\nexport class WMSLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_WMSLayerProps>\n> {\n static layerName = 'WMSLayer';\n static defaultProps: DefaultProps = defaultProps;\n\n state!: {\n imageSource: ImageSource;\n image: ImageType;\n bounds: [number, number, number, number];\n lastRequestParameters: {\n bbox: [number, number, number, number];\n layers: string[];\n srs: 'EPSG:4326' | 'EPSG:3857';\n width: number;\n height: number;\n };\n lastRequestId: number;\n _nextRequestId: number;\n /** TODO: Change any => setTimeout return type. Different between Node and browser... */\n _timeoutId: any;\n loadCounter: number;\n };\n\n /** Returns true if all async resources are loaded */\n get isLoaded(): boolean {\n // Track the explicit loading done by this layer\n return Boolean(this.state) && this.state.loadCounter === 0 && super.isLoaded;\n }\n\n /** Lets deck.gl know that we want viewport change events */\n override shouldUpdateState(): boolean {\n return true;\n }\n\n override initializeState(): void {\n // intentionally empty, initialization is done in updateState\n this.state._nextRequestId = 0;\n this.state.lastRequestId = -1;\n this.state.loadCounter = 0;\n }\n\n override updateState({changeFlags, props, oldProps}: UpdateParameters<this>): void {\n const {viewport} = this.context;\n\n // Check if data source has changed\n if (changeFlags.dataChanged || props.serviceType !== oldProps.serviceType) {\n this.state.imageSource = this._createImageSource(props);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._loadMetadata();\n this.debounce(() => this.loadImage(viewport, 'image source changed'), 0);\n } else if (!deepEqual(props.layers, oldProps.layers, 1)) {\n this.debounce(() => this.loadImage(viewport, 'layers changed'), 0);\n } else if (changeFlags.viewportChanged) {\n this.debounce(() => this.loadImage(viewport, 'viewport changed'));\n }\n }\n\n override finalizeState(): void {\n // TODO - we could cancel outstanding requests\n }\n\n override renderLayers(): Layer {\n // TODO - which bitmap layer is rendered should depend on the current viewport\n // Currently Studio only uses one viewport\n const {bounds, image, lastRequestParameters} = this.state;\n\n return (\n image &&\n new BitmapLayer({\n ...this.getSubLayerProps({id: 'bitmap'}),\n _imageCoordinateSystem:\n lastRequestParameters.srs === 'EPSG:4326'\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN,\n bounds,\n image\n })\n );\n }\n\n async getFeatureInfoText(x: number, y: number): Promise<string | null> {\n const {lastRequestParameters} = this.state;\n if (lastRequestParameters) {\n // @ts-expect-error Undocumented method\n const featureInfo = await this.state.imageSource.getFeatureInfoText?.({\n ...lastRequestParameters,\n query_layers: lastRequestParameters.layers,\n x,\n y,\n info_format: 'application/vnd.ogc.gml'\n });\n return featureInfo;\n }\n return '';\n }\n\n _createImageSource(props: WMSLayerProps): ImageSource {\n if (props.data instanceof ImageSource) {\n return props.data;\n }\n\n if (typeof props.data === 'string') {\n return createImageSource({\n url: props.data,\n loadOptions: props.loadOptions,\n type: props.serviceType\n });\n }\n\n throw new Error('invalid image source in props.data');\n }\n\n /** Run a getMetadata on the image service */\n async _loadMetadata(): Promise<void> {\n const {imageSource} = this.state;\n try {\n this.state.loadCounter++;\n const metadata = await imageSource.getMetadata();\n\n // If a request takes a long time, it may no longer be expected\n if (this.state.imageSource === imageSource) {\n this.getCurrentLayer()?.props.onMetadataLoad(metadata);\n }\n } catch (error) {\n this.getCurrentLayer()?.props.onMetadataLoadError(error as Error);\n } finally {\n this.state.loadCounter--;\n }\n }\n\n /** Load an image */\n async loadImage(viewport: Viewport, reason: string): Promise<void> {\n const {layers, serviceType} = this.props;\n\n // TODO - move to ImageSource?\n if (serviceType === 'wms' && layers.length === 0) {\n return;\n }\n\n const bounds = viewport.getBounds();\n const {width, height} = viewport;\n const requestId = this.getRequestId();\n let {srs} = this.props;\n if (srs === 'auto') {\n // BitmapLayer only supports LNGLAT or CARTESIAN (Web-Mercator)\n srs = viewport.resolution ? 'EPSG:4326' : 'EPSG:3857';\n }\n const requestParams: GetImageParameters = {\n width,\n height,\n boundingBox: [\n [bounds[0], bounds[1]],\n [bounds[2], bounds[3]]\n ],\n layers,\n crs: srs\n };\n if (srs === 'EPSG:3857') {\n const min = WGS84ToPseudoMercator([bounds[0], bounds[1]]);\n const max = WGS84ToPseudoMercator([bounds[2], bounds[3]]);\n requestParams.boundingBox = [min, max];\n }\n\n try {\n this.state.loadCounter++;\n this.props.onImageLoadStart(requestId);\n\n const image = await this.state.imageSource.getImage(requestParams);\n\n // If a request takes a long time, later requests may have already loaded.\n if (this.state.lastRequestId < requestId) {\n this.getCurrentLayer()?.props.onImageLoad(requestId);\n // Not type safe...\n this.setState({\n image,\n bounds,\n lastRequestParameters: requestParams,\n lastRequestId: requestId\n });\n }\n } catch (error) {\n this.raiseError(error as Error, 'Load image');\n this.getCurrentLayer()?.props.onImageLoadError(requestId, error as Error);\n } finally {\n this.state.loadCounter--;\n }\n }\n\n // HELPERS\n\n /** Global counter for issuing unique request ids */\n private getRequestId(): number {\n return this.state._nextRequestId++;\n }\n\n /** Runs an action in the future, cancels it if the new action is issued before it executes */\n private debounce(fn: Function, ms = 500): void {\n clearTimeout(this.state._timeoutId);\n this.state._timeoutId = setTimeout(() => fn(), ms);\n }\n}\n"],"file":"wms-layer.js"}