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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/dist/dist.dev.js +2574 -5044
  2. package/dist/geo-cell-layer/GeoCellLayer.js +51 -0
  3. package/{typed → dist}/geohash-layer/geohash-layer.d.ts +1 -1
  4. package/dist/geohash-layer/geohash-layer.d.ts.map +1 -0
  5. package/dist/geohash-layer/geohash-layer.js +19 -0
  6. package/dist/geohash-layer/geohash-utils.js +50 -0
  7. package/dist/great-circle-layer/great-circle-layer.js +12 -0
  8. package/{typed → dist}/h3-layers/h3-cluster-layer.d.ts +1 -1
  9. package/dist/h3-layers/h3-cluster-layer.d.ts.map +1 -0
  10. package/dist/h3-layers/h3-cluster-layer.js +47 -0
  11. package/dist/h3-layers/h3-hexagon-layer.js +204 -0
  12. package/dist/h3-layers/h3-utils.js +56 -0
  13. package/dist/index.cjs +3160 -0
  14. package/dist/index.cjs.map +7 -0
  15. package/dist/index.d.ts +31 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +36 -0
  18. package/dist/mesh-layer/mesh-layer-fragment.glsl.d.ts +3 -0
  19. package/{typed → dist}/mesh-layer/mesh-layer-fragment.glsl.d.ts.map +1 -1
  20. package/dist/mesh-layer/mesh-layer-fragment.glsl.js +33 -0
  21. package/dist/mesh-layer/mesh-layer-vertex.glsl.js +63 -0
  22. package/{typed → dist}/mesh-layer/mesh-layer.d.ts.map +1 -1
  23. package/dist/mesh-layer/mesh-layer.js +128 -0
  24. package/{typed → dist}/mvt-layer/coordinate-transform.d.ts +1 -1
  25. package/{typed → dist}/mvt-layer/coordinate-transform.d.ts.map +1 -1
  26. package/dist/mvt-layer/coordinate-transform.js +41 -0
  27. package/dist/mvt-layer/find-index-binary.d.ts +11 -0
  28. package/dist/mvt-layer/find-index-binary.d.ts.map +1 -0
  29. package/dist/mvt-layer/find-index-binary.js +96 -0
  30. package/{typed → dist}/mvt-layer/mvt-layer.d.ts +13 -11
  31. package/dist/mvt-layer/mvt-layer.d.ts.map +1 -0
  32. package/dist/mvt-layer/mvt-layer.js +305 -0
  33. package/{typed → dist}/quadkey-layer/quadkey-layer.d.ts +1 -1
  34. package/dist/quadkey-layer/quadkey-layer.d.ts.map +1 -0
  35. package/dist/quadkey-layer/quadkey-layer.js +22 -0
  36. package/dist/quadkey-layer/quadkey-utils.js +26 -0
  37. package/dist/s2-layer/s2-geometry.js +123 -0
  38. package/{typed → dist}/s2-layer/s2-layer.d.ts +1 -1
  39. package/dist/s2-layer/s2-layer.d.ts.map +1 -0
  40. package/dist/s2-layer/s2-layer.js +38 -0
  41. package/dist/s2-layer/s2-utils.js +87 -0
  42. package/{typed → dist}/terrain-layer/terrain-layer.d.ts +4 -4
  43. package/dist/terrain-layer/terrain-layer.d.ts.map +1 -0
  44. package/dist/terrain-layer/terrain-layer.js +233 -0
  45. package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts +15 -1
  46. package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts.map +1 -1
  47. package/dist/tile-3d-layer/tile-3d-layer.js +302 -0
  48. package/{typed → dist}/tile-layer/tile-layer.d.ts +14 -5
  49. package/dist/tile-layer/tile-layer.d.ts.map +1 -0
  50. package/dist/tile-layer/tile-layer.js +207 -0
  51. package/dist/tileset-2d/index.d.ts +7 -0
  52. package/dist/tileset-2d/index.d.ts.map +1 -0
  53. package/dist/tileset-2d/index.js +4 -0
  54. package/dist/tileset-2d/memoize.js +41 -0
  55. package/{typed → dist}/tileset-2d/tile-2d-header.d.ts +3 -2
  56. package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
  57. package/dist/tileset-2d/tile-2d-header.js +135 -0
  58. package/dist/tileset-2d/tile-2d-traversal.d.ts +4 -0
  59. package/dist/tileset-2d/tile-2d-traversal.d.ts.map +1 -0
  60. package/dist/tileset-2d/tile-2d-traversal.js +182 -0
  61. package/{typed → dist}/tileset-2d/tileset-2d.d.ts +9 -7
  62. package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
  63. package/dist/tileset-2d/tileset-2d.js +458 -0
  64. package/dist/tileset-2d/types.js +1 -0
  65. package/{typed → dist}/tileset-2d/utils.d.ts +3 -3
  66. package/dist/tileset-2d/utils.d.ts.map +1 -0
  67. package/dist/tileset-2d/utils.js +234 -0
  68. package/{typed → dist}/trips-layer/trips-layer.d.ts +1 -1
  69. package/{typed → dist}/trips-layer/trips-layer.d.ts.map +1 -1
  70. package/dist/trips-layer/trips-layer.js +93 -0
  71. package/dist/wms-layer/utils.js +13 -0
  72. package/dist/wms-layer/wms-layer.js +192 -0
  73. package/dist.min.js +243 -564
  74. package/package.json +30 -23
  75. package/src/index.ts +7 -7
  76. package/src/mesh-layer/mesh-layer-fragment.glsl.ts +1 -9
  77. package/src/mesh-layer/mesh-layer.ts +1 -2
  78. package/src/mvt-layer/coordinate-transform.ts +1 -1
  79. package/src/mvt-layer/find-index-binary.ts +5 -9
  80. package/src/mvt-layer/mvt-layer.ts +36 -25
  81. package/src/terrain-layer/terrain-layer.ts +13 -3
  82. package/src/tile-3d-layer/tile-3d-layer.ts +1 -2
  83. package/src/tile-layer/tile-layer.ts +30 -14
  84. package/src/tileset-2d/tile-2d-header.ts +2 -1
  85. package/src/tileset-2d/tile-2d-traversal.ts +1 -1
  86. package/src/tileset-2d/tileset-2d.ts +14 -7
  87. package/src/tileset-2d/utils.ts +2 -2
  88. package/src/trips-layer/trips-layer.ts +1 -1
  89. package/src/wms-layer/wms-layer.ts +1 -1
  90. package/dist/es5/geo-cell-layer/GeoCellLayer.js +0 -118
  91. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +0 -1
  92. package/dist/es5/geohash-layer/geohash-layer.js +0 -67
  93. package/dist/es5/geohash-layer/geohash-layer.js.map +0 -1
  94. package/dist/es5/geohash-layer/geohash-utils.js +0 -77
  95. package/dist/es5/geohash-layer/geohash-utils.js.map +0 -1
  96. package/dist/es5/great-circle-layer/great-circle-layer.js +0 -48
  97. package/dist/es5/great-circle-layer/great-circle-layer.js.map +0 -1
  98. package/dist/es5/h3-layers/h3-cluster-layer.js +0 -162
  99. package/dist/es5/h3-layers/h3-cluster-layer.js.map +0 -1
  100. package/dist/es5/h3-layers/h3-hexagon-layer.js +0 -351
  101. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +0 -1
  102. package/dist/es5/h3-layers/h3-utils.js +0 -111
  103. package/dist/es5/h3-layers/h3-utils.js.map +0 -1
  104. package/dist/es5/index.js +0 -132
  105. package/dist/es5/index.js.map +0 -1
  106. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js +0 -9
  107. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
  108. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +0 -9
  109. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
  110. package/dist/es5/mesh-layer/mesh-layer.js +0 -217
  111. package/dist/es5/mesh-layer/mesh-layer.js.map +0 -1
  112. package/dist/es5/mvt-layer/coordinate-transform.js +0 -83
  113. package/dist/es5/mvt-layer/coordinate-transform.js.map +0 -1
  114. package/dist/es5/mvt-layer/find-index-binary.js +0 -127
  115. package/dist/es5/mvt-layer/find-index-binary.js.map +0 -1
  116. package/dist/es5/mvt-layer/mvt-layer.js +0 -533
  117. package/dist/es5/mvt-layer/mvt-layer.js.map +0 -1
  118. package/dist/es5/quadkey-layer/quadkey-layer.js +0 -72
  119. package/dist/es5/quadkey-layer/quadkey-layer.js.map +0 -1
  120. package/dist/es5/quadkey-layer/quadkey-utils.js +0 -53
  121. package/dist/es5/quadkey-layer/quadkey-utils.js.map +0 -1
  122. package/dist/es5/s2-layer/s2-geometry.js +0 -158
  123. package/dist/es5/s2-layer/s2-geometry.js.map +0 -1
  124. package/dist/es5/s2-layer/s2-layer.js +0 -67
  125. package/dist/es5/s2-layer/s2-layer.js.map +0 -1
  126. package/dist/es5/s2-layer/s2-utils.js +0 -80
  127. package/dist/es5/s2-layer/s2-utils.js.map +0 -1
  128. package/dist/es5/terrain-layer/terrain-layer.js +0 -347
  129. package/dist/es5/terrain-layer/terrain-layer.js.map +0 -1
  130. package/dist/es5/tile-3d-layer/tile-3d-layer.js +0 -511
  131. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +0 -1
  132. package/dist/es5/tile-layer/tile-layer.js +0 -363
  133. package/dist/es5/tile-layer/tile-layer.js.map +0 -1
  134. package/dist/es5/tileset-2d/index.js +0 -66
  135. package/dist/es5/tileset-2d/index.js.map +0 -1
  136. package/dist/es5/tileset-2d/memoize.js +0 -47
  137. package/dist/es5/tileset-2d/memoize.js.map +0 -1
  138. package/dist/es5/tileset-2d/tile-2d-header.js +0 -250
  139. package/dist/es5/tileset-2d/tile-2d-header.js.map +0 -1
  140. package/dist/es5/tileset-2d/tile-2d-traversal.js +0 -256
  141. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +0 -1
  142. package/dist/es5/tileset-2d/tileset-2d.js +0 -757
  143. package/dist/es5/tileset-2d/tileset-2d.js.map +0 -1
  144. package/dist/es5/tileset-2d/types.js +0 -2
  145. package/dist/es5/tileset-2d/types.js.map +0 -1
  146. package/dist/es5/tileset-2d/utils.js +0 -302
  147. package/dist/es5/tileset-2d/utils.js.map +0 -1
  148. package/dist/es5/trips-layer/trips-layer.js +0 -114
  149. package/dist/es5/trips-layer/trips-layer.js.map +0 -1
  150. package/dist/es5/wms-layer/utils.js +0 -18
  151. package/dist/es5/wms-layer/utils.js.map +0 -1
  152. package/dist/es5/wms-layer/wms-layer.js +0 -376
  153. package/dist/es5/wms-layer/wms-layer.js.map +0 -1
  154. package/dist/esm/geo-cell-layer/GeoCellLayer.js +0 -72
  155. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +0 -1
  156. package/dist/esm/geohash-layer/geohash-layer.js +0 -26
  157. package/dist/esm/geohash-layer/geohash-layer.js.map +0 -1
  158. package/dist/esm/geohash-layer/geohash-utils.js +0 -56
  159. package/dist/esm/geohash-layer/geohash-utils.js.map +0 -1
  160. package/dist/esm/great-circle-layer/great-circle-layer.js +0 -12
  161. package/dist/esm/great-circle-layer/great-circle-layer.js.map +0 -1
  162. package/dist/esm/h3-layers/h3-cluster-layer.js +0 -79
  163. package/dist/esm/h3-layers/h3-cluster-layer.js.map +0 -1
  164. package/dist/esm/h3-layers/h3-hexagon-layer.js +0 -280
  165. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +0 -1
  166. package/dist/esm/h3-layers/h3-utils.js +0 -54
  167. package/dist/esm/h3-layers/h3-utils.js.map +0 -1
  168. package/dist/esm/index.js +0 -17
  169. package/dist/esm/index.js.map +0 -1
  170. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js +0 -56
  171. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
  172. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +0 -85
  173. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
  174. package/dist/esm/mesh-layer/mesh-layer.js +0 -178
  175. package/dist/esm/mesh-layer/mesh-layer.js.map +0 -1
  176. package/dist/esm/mvt-layer/coordinate-transform.js +0 -49
  177. package/dist/esm/mvt-layer/coordinate-transform.js.map +0 -1
  178. package/dist/esm/mvt-layer/find-index-binary.js +0 -99
  179. package/dist/esm/mvt-layer/find-index-binary.js.map +0 -1
  180. package/dist/esm/mvt-layer/mvt-layer.js +0 -427
  181. package/dist/esm/mvt-layer/mvt-layer.js.map +0 -1
  182. package/dist/esm/quadkey-layer/quadkey-layer.js +0 -31
  183. package/dist/esm/quadkey-layer/quadkey-layer.js.map +0 -1
  184. package/dist/esm/quadkey-layer/quadkey-utils.js +0 -24
  185. package/dist/esm/quadkey-layer/quadkey-utils.js.map +0 -1
  186. package/dist/esm/s2-layer/s2-geometry.js +0 -126
  187. package/dist/esm/s2-layer/s2-geometry.js.map +0 -1
  188. package/dist/esm/s2-layer/s2-layer.js +0 -26
  189. package/dist/esm/s2-layer/s2-layer.js.map +0 -1
  190. package/dist/esm/s2-layer/s2-utils.js +0 -69
  191. package/dist/esm/s2-layer/s2-utils.js.map +0 -1
  192. package/dist/esm/terrain-layer/terrain-layer.js +0 -292
  193. package/dist/esm/terrain-layer/terrain-layer.js.map +0 -1
  194. package/dist/esm/tile-3d-layer/tile-3d-layer.js +0 -438
  195. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +0 -1
  196. package/dist/esm/tile-layer/tile-layer.js +0 -299
  197. package/dist/esm/tile-layer/tile-layer.js.map +0 -1
  198. package/dist/esm/tileset-2d/index.js +0 -4
  199. package/dist/esm/tileset-2d/index.js.map +0 -1
  200. package/dist/esm/tileset-2d/memoize.js +0 -40
  201. package/dist/esm/tileset-2d/memoize.js.map +0 -1
  202. package/dist/esm/tileset-2d/tile-2d-header.js +0 -179
  203. package/dist/esm/tileset-2d/tile-2d-header.js.map +0 -1
  204. package/dist/esm/tileset-2d/tile-2d-traversal.js +0 -184
  205. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +0 -1
  206. package/dist/esm/tileset-2d/tileset-2d.js +0 -509
  207. package/dist/esm/tileset-2d/tileset-2d.js.map +0 -1
  208. package/dist/esm/tileset-2d/types.js +0 -2
  209. package/dist/esm/tileset-2d/types.js.map +0 -1
  210. package/dist/esm/tileset-2d/utils.js +0 -233
  211. package/dist/esm/tileset-2d/utils.js.map +0 -1
  212. package/dist/esm/trips-layer/trips-layer.js +0 -88
  213. package/dist/esm/trips-layer/trips-layer.js.map +0 -1
  214. package/dist/esm/wms-layer/utils.js +0 -9
  215. package/dist/esm/wms-layer/utils.js.map +0 -1
  216. package/dist/esm/wms-layer/wms-layer.js +0 -231
  217. package/dist/esm/wms-layer/wms-layer.js.map +0 -1
  218. package/typed/geohash-layer/geohash-layer.d.ts.map +0 -1
  219. package/typed/h3-layers/h3-cluster-layer.d.ts.map +0 -1
  220. package/typed/index.d.ts +0 -31
  221. package/typed/index.d.ts.map +0 -1
  222. package/typed/mesh-layer/mesh-layer-fragment.glsl.d.ts +0 -3
  223. package/typed/mvt-layer/find-index-binary.d.ts +0 -12
  224. package/typed/mvt-layer/find-index-binary.d.ts.map +0 -1
  225. package/typed/mvt-layer/mvt-layer.d.ts.map +0 -1
  226. package/typed/quadkey-layer/quadkey-layer.d.ts.map +0 -1
  227. package/typed/s2-layer/s2-layer.d.ts.map +0 -1
  228. package/typed/terrain-layer/terrain-layer.d.ts.map +0 -1
  229. package/typed/tile-layer/tile-layer.d.ts.map +0 -1
  230. package/typed/tileset-2d/index.d.ts +0 -7
  231. package/typed/tileset-2d/index.d.ts.map +0 -1
  232. package/typed/tileset-2d/tile-2d-header.d.ts.map +0 -1
  233. package/typed/tileset-2d/tile-2d-traversal.d.ts +0 -4
  234. package/typed/tileset-2d/tile-2d-traversal.d.ts.map +0 -1
  235. package/typed/tileset-2d/tileset-2d.d.ts.map +0 -1
  236. package/typed/tileset-2d/utils.d.ts.map +0 -1
  237. /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts +0 -0
  238. /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts.map +0 -0
  239. /package/{typed → dist}/geohash-layer/geohash-utils.d.ts +0 -0
  240. /package/{typed → dist}/geohash-layer/geohash-utils.d.ts.map +0 -0
  241. /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts +0 -0
  242. /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts.map +0 -0
  243. /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts +0 -0
  244. /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts.map +0 -0
  245. /package/{typed → dist}/h3-layers/h3-utils.d.ts +0 -0
  246. /package/{typed → dist}/h3-layers/h3-utils.d.ts.map +0 -0
  247. /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts +0 -0
  248. /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts.map +0 -0
  249. /package/{typed → dist}/mesh-layer/mesh-layer.d.ts +0 -0
  250. /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts +0 -0
  251. /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts.map +0 -0
  252. /package/{typed → dist}/s2-layer/s2-geometry.d.ts +0 -0
  253. /package/{typed → dist}/s2-layer/s2-geometry.d.ts.map +0 -0
  254. /package/{typed → dist}/s2-layer/s2-utils.d.ts +0 -0
  255. /package/{typed → dist}/s2-layer/s2-utils.d.ts.map +0 -0
  256. /package/{typed → dist}/tileset-2d/memoize.d.ts +0 -0
  257. /package/{typed → dist}/tileset-2d/memoize.d.ts.map +0 -0
  258. /package/{typed → dist}/tileset-2d/types.d.ts +0 -0
  259. /package/{typed → dist}/tileset-2d/types.d.ts.map +0 -0
  260. /package/{typed → dist}/wms-layer/utils.d.ts +0 -0
  261. /package/{typed → dist}/wms-layer/utils.d.ts.map +0 -0
  262. /package/{typed → dist}/wms-layer/wms-layer.d.ts +0 -0
  263. /package/{typed → dist}/wms-layer/wms-layer.d.ts.map +0 -0
@@ -1,184 +0,0 @@
1
- import { WebMercatorViewport, _GlobeViewport } from '@deck.gl/core';
2
- import { CullingVolume, Plane, AxisAlignedBoundingBox, makeOrientedBoundingBoxFromPoints } from '@math.gl/culling';
3
- import { lngLatToWorld } from '@math.gl/web-mercator';
4
- import { osmTile2lngLat } from './utils';
5
- const TILE_SIZE = 512;
6
- const MAX_MAPS = 3;
7
- const REF_POINTS_5 = [[0.5, 0.5], [0, 0], [0, 1], [1, 0], [1, 1]];
8
- const REF_POINTS_9 = REF_POINTS_5.concat([[0, 0.5], [0.5, 0], [1, 0.5], [0.5, 1]]);
9
- const REF_POINTS_11 = REF_POINTS_9.concat([[0.25, 0.5], [0.75, 0.5]]);
10
-
11
- class OSMNode {
12
- constructor(x, y, z) {
13
- this.x = void 0;
14
- this.y = void 0;
15
- this.z = void 0;
16
- this.childVisible = void 0;
17
- this.selected = void 0;
18
- this._children = void 0;
19
- this.x = x;
20
- this.y = y;
21
- this.z = z;
22
- }
23
-
24
- get children() {
25
- if (!this._children) {
26
- const x = this.x * 2;
27
- const y = this.y * 2;
28
- const z = this.z + 1;
29
- this._children = [new OSMNode(x, y, z), new OSMNode(x, y + 1, z), new OSMNode(x + 1, y, z), new OSMNode(x + 1, y + 1, z)];
30
- }
31
-
32
- return this._children;
33
- }
34
-
35
- update(params) {
36
- const {
37
- viewport,
38
- cullingVolume,
39
- elevationBounds,
40
- minZ,
41
- maxZ,
42
- bounds,
43
- offset,
44
- project
45
- } = params;
46
- const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);
47
-
48
- if (bounds && !this.insideBounds(bounds)) {
49
- return false;
50
- }
51
-
52
- const isInside = cullingVolume.computeVisibility(boundingVolume);
53
-
54
- if (isInside < 0) {
55
- return false;
56
- }
57
-
58
- if (!this.childVisible) {
59
- let {
60
- z
61
- } = this;
62
-
63
- if (z < maxZ && z >= minZ) {
64
- const distance = boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale / viewport.height;
65
- z += Math.floor(Math.log2(distance));
66
- }
67
-
68
- if (z >= maxZ) {
69
- this.selected = true;
70
- return true;
71
- }
72
- }
73
-
74
- this.selected = false;
75
- this.childVisible = true;
76
-
77
- for (const child of this.children) {
78
- child.update(params);
79
- }
80
-
81
- return true;
82
- }
83
-
84
- getSelected(result = []) {
85
- if (this.selected) {
86
- result.push(this);
87
- }
88
-
89
- if (this._children) {
90
- for (const node of this._children) {
91
- node.getSelected(result);
92
- }
93
- }
94
-
95
- return result;
96
- }
97
-
98
- insideBounds([minX, minY, maxX, maxY]) {
99
- const scale = Math.pow(2, this.z);
100
- const extent = TILE_SIZE / scale;
101
- return this.x * extent < maxX && this.y * extent < maxY && (this.x + 1) * extent > minX && (this.y + 1) * extent > minY;
102
- }
103
-
104
- getBoundingVolume(zRange, worldOffset, project) {
105
- if (project) {
106
- const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;
107
- const refPointPositions = [];
108
-
109
- for (const p of refPoints) {
110
- const lngLat = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);
111
- lngLat[2] = zRange[0];
112
- refPointPositions.push(project(lngLat));
113
-
114
- if (zRange[0] !== zRange[1]) {
115
- lngLat[2] = zRange[1];
116
- refPointPositions.push(project(lngLat));
117
- }
118
- }
119
-
120
- return makeOrientedBoundingBoxFromPoints(refPointPositions);
121
- }
122
-
123
- const scale = Math.pow(2, this.z);
124
- const extent = TILE_SIZE / scale;
125
- const originX = this.x * extent + worldOffset * TILE_SIZE;
126
- const originY = TILE_SIZE - (this.y + 1) * extent;
127
- return new AxisAlignedBoundingBox([originX, originY, zRange[0]], [originX + extent, originY + extent, zRange[1]]);
128
- }
129
-
130
- }
131
-
132
- export function getOSMTileIndices(viewport, maxZ, zRange, bounds) {
133
- const project = viewport instanceof _GlobeViewport && viewport.resolution ? viewport.projectPosition : null;
134
- const planes = Object.values(viewport.getFrustumPlanes()).map(({
135
- normal,
136
- distance
137
- }) => new Plane(normal.clone().negate(), distance));
138
- const cullingVolume = new CullingVolume(planes);
139
- const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];
140
- const elevationMin = zRange && zRange[0] * unitsPerMeter || 0;
141
- const elevationMax = zRange && zRange[1] * unitsPerMeter || 0;
142
- const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;
143
-
144
- if (bounds) {
145
- const [minLng, minLat, maxLng, maxLat] = bounds;
146
- const topLeft = lngLatToWorld([minLng, maxLat]);
147
- const bottomRight = lngLatToWorld([maxLng, minLat]);
148
- bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];
149
- }
150
-
151
- const root = new OSMNode(0, 0, 0);
152
- const traversalParams = {
153
- viewport,
154
- project,
155
- cullingVolume,
156
- elevationBounds: [elevationMin, elevationMax],
157
- minZ,
158
- maxZ,
159
- bounds,
160
- offset: 0
161
- };
162
- root.update(traversalParams);
163
-
164
- if (viewport instanceof WebMercatorViewport && viewport.subViewports && viewport.subViewports.length > 1) {
165
- traversalParams.offset = -1;
166
-
167
- while (root.update(traversalParams)) {
168
- if (--traversalParams.offset < -MAX_MAPS) {
169
- break;
170
- }
171
- }
172
-
173
- traversalParams.offset = 1;
174
-
175
- while (root.update(traversalParams)) {
176
- if (++traversalParams.offset > MAX_MAPS) {
177
- break;
178
- }
179
- }
180
- }
181
-
182
- return root.getSelected();
183
- }
184
- //# sourceMappingURL=tile-2d-traversal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/tileset-2d/tile-2d-traversal.ts"],"names":["WebMercatorViewport","_GlobeViewport","CullingVolume","Plane","AxisAlignedBoundingBox","makeOrientedBoundingBoxFromPoints","lngLatToWorld","osmTile2lngLat","TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","constructor","x","y","z","childVisible","selected","_children","children","update","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","child","getSelected","result","push","node","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","getOSMTileIndices","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","clone","negate","unitsPerMeter","distanceScales","elevationMin","elevationMax","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["import {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\n\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [\n [0.5, 0.5],\n [0, 0],\n [0, 1],\n [1, 0],\n [1, 1]\n]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([\n [0, 0.5],\n [0.5, 0],\n [1, 0.5],\n [0.5, 1]\n]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([\n [0.25, 0.5],\n [0.75, 0.5]\n]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n x: number;\n y: number;\n z: number;\n\n private childVisible?: boolean;\n private selected?: boolean;\n\n private _children?: OSMNode[];\n\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n // eslint-disable-next-line complexity\n update(params: {\n viewport: Viewport;\n project: ((xyz: number[]) => number[]) | null;\n cullingVolume: CullingVolume;\n elevationBounds: ZRange;\n minZ: number;\n maxZ: number;\n bounds?: Bounds;\n offset: number;\n }) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result: OSMNode[] = []): OSMNode[] {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]: Bounds): boolean {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(\n zRange: ZRange,\n worldOffset: number,\n project: ((xyz: number[]) => number[]) | null\n ) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions: number[][] = [];\n for (const p of refPoints) {\n const lngLat: number[] = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\n// eslint-disable-next-line complexity\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange?: ZRange | null,\n bounds?: Bounds\n): TileIndex[] {\n const project: ((xyz: number[]) => number[]) | null =\n viewport instanceof _GlobeViewport && viewport.resolution\n ? // eslint-disable-next-line @typescript-eslint/unbound-method\n viewport.projectPosition\n : null;\n\n // Get the culling volume of the current camera\n const planes: Plane[] = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;\n\n // Map extent to OSM position\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax] as ZRange,\n minZ,\n maxZ,\n bounds,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (\n viewport instanceof WebMercatorViewport &&\n viewport.subViewports &&\n viewport.subViewports.length > 1\n ) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n"],"file":"tile-2d-traversal.js"}