@pirireis/webglobeplugins 0.17.1 → 1.0.2

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 (272) hide show
  1. package/Math/{angle-calculation.js → angle-calculation.ts} +18 -14
  2. package/Math/{arc-cdf-points.js → arc-cdf-points.ts} +329 -272
  3. package/Math/{arc-generate-points-exponantial.js → arc-generate-points-exponantial.ts} +299 -254
  4. package/Math/{arc.js → arc.ts} +421 -292
  5. package/Math/bounds/line-bbox.js +225 -186
  6. package/Math/{circle-cdf-points.js → circle-cdf-points.ts} +143 -78
  7. package/Math/{circle.js → circle.ts} +49 -33
  8. package/Math/{constants.js → constants.ts} +12 -4
  9. package/Math/contour/{quadtreecontours.js → quadtreecontours.ts} +371 -300
  10. package/Math/contour/quadtreecontours1.js +336 -298
  11. package/Math/{finite-line-2d.js → finite-line-2d.ts} +68 -58
  12. package/Math/haversine.ts +33 -0
  13. package/Math/index.js +0 -1
  14. package/Math/juction/{arc-plane.js → arc-plane.ts} +203 -143
  15. package/Math/juction/{line-sphere.js → line-sphere.ts} +32 -22
  16. package/Math/juction/{plane-plane.js → plane-plane.ts} +62 -53
  17. package/Math/{line.js → line.ts} +84 -52
  18. package/Math/matrix4.ts +0 -0
  19. package/Math/mesh/mapbox-delaunay.d.ts +74 -0
  20. package/Math/{methods.js → methods.ts} +182 -113
  21. package/Math/{plane.js → plane.ts} +92 -56
  22. package/Math/{quaternion.js → quaternion.ts} +128 -106
  23. package/Math/roadmap.md +10 -0
  24. package/Math/templete-shapes/{grid-visually-equal.js → grid-visually-equal.ts} +118 -65
  25. package/Math/tessellation/constants.ts +1 -0
  26. package/Math/tessellation/methods.ts +79 -0
  27. package/Math/tessellation/nearest-value-padding.ts +147 -0
  28. package/Math/tessellation/roadmap.md +48 -0
  29. package/Math/tessellation/spherical-triangle-area.ts +127 -0
  30. package/Math/tessellation/tile-merger.ts +578 -0
  31. package/Math/tessellation/triangle-tessellation.ts +533 -0
  32. package/Math/tessellation/types.ts +1 -0
  33. package/Math/types.ts +68 -0
  34. package/Math/utils.js +3 -2
  35. package/Math/{vec3.js → vec3.ts} +227 -151
  36. package/Math/xyz-tile.ts +26 -0
  37. package/algorithms/search-binary.js +14 -16
  38. package/altitude-locator/adaptors.js +0 -1
  39. package/altitude-locator/keymethod.js +0 -1
  40. package/altitude-locator/plugin.js +445 -345
  41. package/altitude-locator/types.js +26 -21
  42. package/compass-rose/compass-rose-padding-flat.js +274 -230
  43. package/compass-rose/{compass-text-writer.js → compass-text-writer.ts} +210 -155
  44. package/compass-rose/index.js +3 -3
  45. package/{constants.js → constants.ts} +8 -6
  46. package/heatwave/datamanager.js +168 -149
  47. package/heatwave/heatwave.js +261 -206
  48. package/heatwave/index.js +5 -5
  49. package/heatwave/isobar.js +340 -303
  50. package/heatwave/{texture-point-sampler.js → texture-point-sampler.ts} +220 -187
  51. package/investigation-tools/draw/tiles/adapters.ts +133 -0
  52. package/investigation-tools/draw/tiles/{tiles.js → tiles.ts} +162 -128
  53. package/jest.config.js +6 -7
  54. package/package.json +1 -1
  55. package/pin/pin-object-array1.js +381 -300
  56. package/pin/pin-point-totem1.js +77 -60
  57. package/programs/arrowfield/arrow-field.js +89 -60
  58. package/programs/arrowfield/logic.js +173 -141
  59. package/programs/data2legend/density-to-legend.js +86 -68
  60. package/programs/data2legend/point-to-density-texture.js +84 -67
  61. package/programs/float2legendwithratio/index.js +3 -2
  62. package/programs/float2legendwithratio/logic.js +144 -118
  63. package/programs/float2legendwithratio/object.js +141 -104
  64. package/programs/helpers/blender.js +73 -58
  65. package/programs/helpers/{fadeaway.js → fadeaway.ts} +73 -55
  66. package/programs/index.js +19 -20
  67. package/programs/line-on-globe/circle-accurate-3d.js +112 -85
  68. package/programs/line-on-globe/circle-accurate-flat.js +200 -148
  69. package/programs/line-on-globe/degree-padding-around-circle-3d.js +134 -102
  70. package/programs/line-on-globe/index.js +0 -1
  71. package/programs/line-on-globe/lines-color-instanced-flat.js +99 -80
  72. package/programs/line-on-globe/linestrip/data.ts +29 -0
  73. package/programs/line-on-globe/linestrip/{linestrip.js → linestrip.ts} +152 -93
  74. package/programs/line-on-globe/{naive-accurate-flexible.js → naive-accurate-flexible.ts} +175 -126
  75. package/programs/line-on-globe/util.js +8 -5
  76. package/programs/picking/pickable-polygon-renderer.js +129 -98
  77. package/programs/picking/pickable-renderer.js +130 -98
  78. package/programs/point-on-globe/element-globe-surface-glow.js +122 -93
  79. package/programs/point-on-globe/element-point-glow.js +114 -80
  80. package/programs/point-on-globe/square-pixel-point.js +139 -120
  81. package/programs/polygon-on-globe/roadmap.md +8 -0
  82. package/programs/polygon-on-globe/texture-dem-triangles.ts +290 -0
  83. package/programs/{programcache.js → programcache.ts} +134 -126
  84. package/programs/rings/index.js +1 -1
  85. package/programs/rings/partial-ring/{piece-of-pie.js → piece-of-pie.ts} +222 -152
  86. package/programs/totems/camera-totem-attactment-interface.ts +4 -0
  87. package/programs/totems/{camerauniformblock.js → camerauniformblock.ts} +326 -230
  88. package/programs/totems/{canvas-webglobe-info.js → canvas-webglobe-info.ts} +147 -132
  89. package/programs/totems/dem-textures-manager.ts +368 -0
  90. package/programs/totems/{globe-changes.js → globe-changes.ts} +79 -59
  91. package/programs/totems/gpu-selection-uniform-block.js +127 -99
  92. package/programs/totems/{index.js → index.ts} +2 -2
  93. package/programs/two-d/pixel-padding-for-compass.js +101 -87
  94. package/programs/util.js +19 -14
  95. package/programs/vectorfields/logics/{constants.js → constants.ts} +5 -4
  96. package/programs/vectorfields/logics/drawrectangleparticles.ts +182 -0
  97. package/programs/vectorfields/logics/index.js +4 -2
  98. package/programs/vectorfields/logics/particle-ubo.ts +23 -0
  99. package/programs/vectorfields/logics/{pixelbased.js → pixelbased.ts} +119 -84
  100. package/programs/vectorfields/logics/ubo.js +57 -51
  101. package/programs/vectorfields/{pingpongbuffermanager.js → pingpongbuffermanager.ts} +113 -73
  102. package/publish.bat +62 -0
  103. package/range-tools-on-terrain/bearing-line/{adapters.js → adapters.ts} +154 -114
  104. package/range-tools-on-terrain/bearing-line/{plugin.js → plugin.ts} +569 -457
  105. package/range-tools-on-terrain/bearing-line/types.ts +65 -0
  106. package/range-tools-on-terrain/circle-line-chain/{adapters.js → adapters.ts} +104 -85
  107. package/range-tools-on-terrain/circle-line-chain/{chain-list-map.js → chain-list-map.ts} +446 -382
  108. package/range-tools-on-terrain/circle-line-chain/{plugin.js → plugin.ts} +607 -464
  109. package/range-tools-on-terrain/circle-line-chain/types.ts +43 -0
  110. package/range-tools-on-terrain/range-ring/{adapters.js → adapters.ts} +114 -93
  111. package/range-tools-on-terrain/range-ring/{enum.js → enum.ts} +2 -2
  112. package/range-tools-on-terrain/range-ring/{plugin.js → plugin.ts} +444 -377
  113. package/range-tools-on-terrain/range-ring/rangeringangletext.ts +396 -0
  114. package/range-tools-on-terrain/range-ring/types.ts +30 -0
  115. package/semiplugins/interface.ts +14 -0
  116. package/semiplugins/lightweight/{line-plugin.js → line-plugin.ts} +342 -221
  117. package/semiplugins/lightweight/{piece-of-pie-plugin.js → piece-of-pie-plugin.ts} +275 -200
  118. package/semiplugins/shape-on-terrain/{arc-plugin.js → arc-plugin.ts} +616 -481
  119. package/semiplugins/shape-on-terrain/{circle-plugin.js → circle-plugin.ts} +588 -444
  120. package/semiplugins/shape-on-terrain/goal.md +12 -0
  121. package/semiplugins/shape-on-terrain/{padding-1-degree.js → padding-1-degree.ts} +713 -539
  122. package/semiplugins/shape-on-terrain/terrain-polygon/adapters.ts +69 -0
  123. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +20 -0
  124. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache.ts +149 -0
  125. package/semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.ts +58 -0
  126. package/semiplugins/shape-on-terrain/terrain-polygon/data/manager.ts +4 -0
  127. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +196 -0
  128. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +209 -0
  129. package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.ts +144 -0
  130. package/semiplugins/shape-on-terrain/terrain-polygon/data/random.ts +165 -0
  131. package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +5 -0
  132. package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +37 -0
  133. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.ts +81 -0
  134. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +146 -0
  135. package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +90 -0
  136. package/semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.ts +265 -0
  137. package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +69 -0
  138. package/semiplugins/shell/bbox-renderer/index.ts +2 -0
  139. package/semiplugins/shell/bbox-renderer/{logic.js → logic.ts} +273 -249
  140. package/semiplugins/shell/bbox-renderer/object.ts +129 -0
  141. package/semiplugins/type.ts +8 -0
  142. package/semiplugins/utility/{container-plugin.js → container-plugin.ts} +126 -94
  143. package/semiplugins/utility/{object-pass-container-plugin.js → object-pass-container-plugin.ts} +101 -80
  144. package/shaders/fragment-toy/firework.js +1 -1
  145. package/shaders/fragment-toy/singularity.js +5 -2
  146. package/terrain-plugin.mmd +83 -0
  147. package/tests/Math/arc-sampling-test.js +367 -0
  148. package/tests/Math/arc-sampling-test.ts +429 -0
  149. package/tests/Math/arc.test.ts +77 -0
  150. package/tests/Math/junction/arc-limit.test.ts +7 -0
  151. package/tests/Math/junction/arc-plane-points.test.ts +196 -0
  152. package/tests/Math/junction/arc-plane.test.ts +172 -0
  153. package/tests/Math/junction/line-sphere.test.ts +127 -0
  154. package/tests/Math/junction/plane-plane.test.ts +91 -0
  155. package/tests/Math/plane-test.ts +17 -0
  156. package/tests/Math/plane.test.ts +43 -0
  157. package/tests/Math/vec3.test.ts +33 -0
  158. package/tracks/point-heat-map/adaptors/timetracksplugin-format-to-this.js +78 -63
  159. package/tracks/point-heat-map/index.js +0 -1
  160. package/tracks/point-heat-map/plugin-webworker.js +148 -121
  161. package/tracks/point-heat-map/point-to-heat-map-flow.js +150 -121
  162. package/tracks/point-heat-map/readme.md +15 -0
  163. package/tracks/point-tracks/key-methods.js +3 -2
  164. package/tracks/point-tracks/plugin.js +487 -394
  165. package/tracks/timetracks/adaptors-line-strip.js +79 -65
  166. package/tracks/timetracks/plugin-line-strip.js +295 -240
  167. package/tracks/timetracks/program-line-strip.js +495 -411
  168. package/tracks/timetracks/programpoint-line-strip.js +137 -109
  169. package/tracks/timetracks/readme.md +1 -0
  170. package/tsconfig.json +22 -0
  171. package/types/@pirireis/webglobe.d.ts +102 -0
  172. package/types/delaunator.d.ts +40 -0
  173. package/types/earcut.d.ts +11 -0
  174. package/types/rbush.d.ts +57 -0
  175. package/types.ts +319 -0
  176. package/util/account/bufferoffsetmanager.js +209 -176
  177. package/util/account/create-buffermap-orchastration.ts +85 -0
  178. package/util/account/index.js +6 -3
  179. package/util/account/single-attribute-buffer-management/{buffer-manager.js → buffer-manager.ts} +151 -117
  180. package/util/account/single-attribute-buffer-management/{buffer-orchestrator.js → buffer-orchestrator.ts} +238 -212
  181. package/util/account/single-attribute-buffer-management/{buffer-orchestrator1.js → buffer-orchestrator1.ts} +184 -159
  182. package/util/account/single-attribute-buffer-management/{index.js → index.ts} +11 -4
  183. package/util/account/single-attribute-buffer-management/{object-store.js → object-store.ts} +76 -55
  184. package/util/account/single-attribute-buffer-management/types.ts +43 -0
  185. package/util/account/util.js +22 -18
  186. package/util/algorithms/index.js +0 -1
  187. package/util/algorithms/search-binary.js +26 -25
  188. package/util/build-strategy/{static-dynamic.js → static-dynamic.ts} +50 -41
  189. package/util/check/index.js +0 -1
  190. package/util/check/typecheck.ts +74 -0
  191. package/util/{frame-counter-trigger.js → frame-counter-trigger.ts} +99 -84
  192. package/util/geometry/{index.js → index.ts} +155 -121
  193. package/util/gl-util/buffer/{attribute-loader.js → attribute-loader.ts} +84 -62
  194. package/util/gl-util/buffer/{index.js → index.ts} +6 -3
  195. package/util/gl-util/draw-options/{methods.js → methods.ts} +47 -32
  196. package/util/gl-util/uniform-block/{manager.js → manager.ts} +232 -190
  197. package/util/{webglobe/gldefaultstates.js → globe-default-gl-states.ts} +5 -4
  198. package/util/helper-methods.ts +9 -0
  199. package/util/index.js +9 -10
  200. package/util/interpolation/index.js +0 -1
  201. package/util/interpolation/timetrack/index.js +9 -2
  202. package/util/interpolation/timetrack/timetrack-interpolator.js +94 -79
  203. package/util/interpolation/timetrack/web-worker.js +51 -46
  204. package/util/picking/{fence.js → fence.ts} +47 -41
  205. package/util/picking/picker-displayer.ts +226 -0
  206. package/util/programs/draw-from-pixel-coords.js +201 -164
  207. package/util/programs/{draw-texture-on-canvas.js → draw-texture-on-canvas.ts} +92 -67
  208. package/util/programs/supersampletotextures.js +130 -97
  209. package/util/programs/texturetoglobe.js +153 -128
  210. package/util/shaderfunctions/{geometrytransformations.js → geometrytransformations.ts} +169 -41
  211. package/util/shaderfunctions/index.js +2 -2
  212. package/util/shaderfunctions/nodata.js +4 -2
  213. package/util/shaderfunctions/noisefunctions.js +10 -7
  214. package/util/{webglobjectbuilders.js → webglobjectbuilders.ts} +446 -358
  215. package/vectorfield/arrowfield/adaptor.js +11 -11
  216. package/vectorfield/arrowfield/index.js +3 -3
  217. package/vectorfield/arrowfield/plugin.js +128 -83
  218. package/vectorfield/waveparticles/adaptor.js +16 -15
  219. package/vectorfield/waveparticles/index.js +3 -3
  220. package/vectorfield/waveparticles/plugin.ts +506 -0
  221. package/vectorfield/wind/adapters/image-to-fields.ts +74 -0
  222. package/vectorfield/wind/adapters/types.ts +12 -0
  223. package/vectorfield/wind/{imagetovectorfieldandmagnitude.js → imagetovectorfieldandmagnitude.ts} +78 -56
  224. package/vectorfield/wind/index.js +5 -5
  225. package/vectorfield/wind/plugin-persistant copy.ts +461 -0
  226. package/vectorfield/wind/plugin-persistant.ts +483 -0
  227. package/vectorfield/wind/plugin.js +883 -685
  228. package/vectorfield/wind/vectorfieldimage.js +27 -23
  229. package/write-text/{context-text-bulk.js → context-text-bulk.ts} +285 -200
  230. package/write-text/context-text3.ts +252 -0
  231. package/write-text/{context-text4.js → context-text4.ts} +231 -146
  232. package/write-text/context-textDELETE.js +125 -94
  233. package/write-text/objectarraylabels/{index.js → index.ts} +2 -2
  234. package/write-text/objectarraylabels/objectarraylabels.d.ts +72 -0
  235. package/write-text/objectarraylabels/objectarraylabels.js +247 -200
  236. package/Math/matrix4.js +0 -1
  237. package/Math/tessellation/earcut/adapters.js +0 -37
  238. package/Math/tessellation/hybrid-triangle-tessellation-meta.js +0 -123
  239. package/Math/tessellation/methods.js +0 -46
  240. package/Math/tessellation/shred-input.js +0 -18
  241. package/Math/tessellation/tile-merger.js +0 -298
  242. package/Math/tessellation/tiler.js +0 -50
  243. package/Math/tessellation/triangle-tessellation-meta.js +0 -523
  244. package/Math/tessellation/triangle-tessellation.js +0 -14
  245. package/Math/tessellation/types.js +0 -1
  246. package/Math/tessellation/zoom-catch.js +0 -1
  247. package/Math/types.js +0 -1
  248. package/investigation-tools/draw/tiles/adapters.js +0 -67
  249. package/programs/line-on-globe/linestrip/data.js +0 -4
  250. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +0 -328
  251. package/programs/polygon-on-globe/texture-dem-triangles.js +0 -268
  252. package/programs/vectorfields/logics/drawrectangleparticles.js +0 -114
  253. package/programs/vectorfields/logics/drawrectangleparticles1.js +0 -112
  254. package/programs/vectorfields/logics/ubo-new.js +0 -25
  255. package/range-tools-on-terrain/bearing-line/types.js +0 -1
  256. package/range-tools-on-terrain/circle-line-chain/types.js +0 -1
  257. package/range-tools-on-terrain/range-ring/rangeringangletext.js +0 -331
  258. package/range-tools-on-terrain/range-ring/types.js +0 -9
  259. package/semiplugins/interface.js +0 -1
  260. package/semiplugins/shape-on-terrain/terrain-cover/texture-dem-cover.js +0 -1
  261. package/semiplugins/shell/bbox-renderer/index.js +0 -2
  262. package/semiplugins/shell/bbox-renderer/object.js +0 -65
  263. package/semiplugins/type.js +0 -1
  264. package/types.js +0 -19
  265. package/util/account/create-buffermap-orchastration.js +0 -39
  266. package/util/account/single-attribute-buffer-management/types.js +0 -1
  267. package/util/check/typecheck.js +0 -66
  268. package/util/gl-util/uniform-block/types.js +0 -1
  269. package/util/picking/picker-displayer.js +0 -134
  270. package/util/webglobe/index.js +0 -2
  271. package/vectorfield/waveparticles/plugin.js +0 -290
  272. package/write-text/context-text3.js +0 -167
@@ -1,18 +0,0 @@
1
- import earcut from "earcut";
2
- import { createTriangleTessellationMeta } from "./triangle-tessellation-meta";
3
- function shredInput(vertices, holes, zoomLevel) {
4
- const result = [];
5
- const triangles = earcut(vertices, holes, 2);
6
- for (let i = 0; i < triangles.length; i += 3) {
7
- const idx1 = triangles[i] * 2;
8
- const idx2 = triangles[i + 1] * 2;
9
- const idx3 = triangles[i + 2] * 2;
10
- const p1 = [vertices[idx1], vertices[idx1 + 1]];
11
- const p2 = [vertices[idx2], vertices[idx2 + 1]];
12
- const p3 = [vertices[idx3], vertices[idx3 + 1]];
13
- const triangleMeta = createTriangleTessellationMeta(p1, p2, p3);
14
- result.push(triangleMeta);
15
- }
16
- // cut triangles into smaller pieces based on zoom level...
17
- return result;
18
- }
@@ -1,298 +0,0 @@
1
- function displayTileMetaData(tilesMetaData) {
2
- // show maxZoom minZoom
3
- console.log(`Max Level: ${tilesMetaData.maxLevel}
4
- Min Level: ${tilesMetaData.minLevel}`);
5
- }
6
- function keyMethod(row, column, level) {
7
- return `${level}_${row}_${column}`;
8
- }
9
- function calculateParentTile(row, column, level) {
10
- return {
11
- row: Math.floor(row / 2),
12
- column: Math.floor(column / 2),
13
- level: level - 1
14
- };
15
- }
16
- function createMapAndMetaData(tiles) {
17
- const tileMap = new Map();
18
- let maxLevel = -Infinity;
19
- let minLevel = Infinity;
20
- const tileLimitsByZoom = new Map();
21
- for (const tile of tiles) {
22
- const key = keyMethod(tile.row, tile.column, tile.level);
23
- tileMap.set(key, tile);
24
- if (tile.level > maxLevel) {
25
- maxLevel = tile.level;
26
- }
27
- if (tile.level < minLevel) {
28
- minLevel = tile.level;
29
- }
30
- if (!tileLimitsByZoom.has(tile.level)) {
31
- tileLimitsByZoom.set(tile.level, {
32
- minRow: tile.row,
33
- maxRow: tile.row,
34
- minCol: tile.column,
35
- maxCol: tile.column
36
- });
37
- }
38
- else {
39
- const limits = tileLimitsByZoom.get(tile.level);
40
- if (tile.row < limits.minRow)
41
- limits.minRow = tile.row;
42
- if (tile.row > limits.maxRow)
43
- limits.maxRow = tile.row;
44
- if (tile.column < limits.minCol)
45
- limits.minCol = tile.column;
46
- if (tile.column > limits.maxCol)
47
- limits.maxCol = tile.column;
48
- }
49
- }
50
- return {
51
- tileMap,
52
- maxLevel,
53
- minLevel,
54
- tileLimitsByZoom
55
- };
56
- }
57
- function populateTileIntoHigherZoomLevel(tileMesh, tileDimensionLength, targetDimensionLength) {
58
- const newMesh = new Array(targetDimensionLength).fill(0).map(() => new Float32Array(targetDimensionLength));
59
- // use linear interpolation to populate
60
- for (let row = 0; row < targetDimensionLength; row++) {
61
- for (let col = 0; col < targetDimensionLength; col++) {
62
- const srcRow = row * (tileDimensionLength - 1) / (targetDimensionLength - 1);
63
- const srcCol = col * (tileDimensionLength - 1) / (targetDimensionLength - 1);
64
- const srcRowLow = Math.floor(srcRow);
65
- const srcRowHigh = Math.min(Math.ceil(srcRow), tileDimensionLength - 1);
66
- const srcColLow = Math.floor(srcCol);
67
- const srcColHigh = Math.min(Math.ceil(srcCol), tileDimensionLength - 1);
68
- const topLeft = tileMesh[srcRowLow][srcColLow];
69
- const topRight = tileMesh[srcRowLow][srcColHigh];
70
- const bottomLeft = tileMesh[srcRowHigh][srcColLow];
71
- const bottomRight = tileMesh[srcRowHigh][srcColHigh];
72
- const top = topLeft + (topRight - topLeft) * (srcCol - srcColLow);
73
- const bottom = bottomLeft + (bottomRight - bottomLeft) * (srcCol - srcColLow);
74
- newMesh[row][col] = top + (bottom - top) * (srcRow - srcRowLow);
75
- }
76
- }
77
- return newMesh;
78
- }
79
- // This function is correct, assuming its inputs are prepared properly.
80
- // This function is correct, assuming its inputs are prepared properly.
81
- function moveMeshToMergedMesh(targetMesh, targetDimensionLength, sourceMesh, sourceDimensionLength, startX, startY) {
82
- for (let row = 0; row < sourceDimensionLength; row++) {
83
- for (let col = 0; col < sourceDimensionLength; col++) {
84
- const targetIndex = (startY + row) * targetDimensionLength + (startX + col);
85
- // Check if source value exists
86
- if (sourceMesh[row] === undefined || sourceMesh[row][col] === undefined) {
87
- console.warn(`Source data missing at [${row}][${col}]`);
88
- continue;
89
- }
90
- const value = sourceMesh[row][col];
91
- if (isNaN(value)) {
92
- console.warn(`NaN value found in source mesh at row: ${row}, col: ${col}`);
93
- }
94
- ;
95
- if (targetIndex >= targetMesh.length) {
96
- console.warn(`⚠️ Target index out of bounds: ${targetIndex} >= ${targetMesh.length}`);
97
- continue;
98
- }
99
- targetMesh[targetIndex] = value;
100
- }
101
- }
102
- }
103
- function limitCheck(limit, limitRange = 12) {
104
- const rowRange = limit.maxRow - limit.minRow + 1;
105
- const colRange = limit.maxCol - limit.minCol + 1;
106
- if (rowRange > limitRange || colRange > limitRange) {
107
- console.warn(`Tile limit range exceeded: Row Range = ${rowRange}, Col Range = ${colRange}, Limit Range = ${limitRange}`);
108
- throw new Error("Tile limit range exceeded");
109
- }
110
- }
111
- function mergeTiles(tilesMetaData, mergeCount = 8, tileDimensionLength = 5, processLimit = 6) {
112
- const mergedMeshDimLength = tileDimensionLength * mergeCount - (mergeCount - 1);
113
- const processedTiles = new Set();
114
- const result = [];
115
- for (let zoom = tilesMetaData.maxLevel; zoom >= tilesMetaData.minLevel; zoom--) {
116
- let processedTileCountFromCurrentLevel = 0;
117
- let processedTileCountFromParentLevel = 0;
118
- if (tilesMetaData.maxLevel - zoom >= processLimit) {
119
- break;
120
- }
121
- const limits = tilesMetaData.tileLimitsByZoom.get(zoom);
122
- const mergedMesh = new Float32Array(mergedMeshDimLength * mergedMeshDimLength).fill(0);
123
- const bboxLimit = {
124
- ur: { x: -Infinity, y: -Infinity },
125
- ll: { x: Infinity, y: Infinity }
126
- };
127
- if (!limits)
128
- continue;
129
- limitCheck(limits, 12);
130
- for (let row = limits.minRow; row <= limits.maxRow; row++) {
131
- for (let col = limits.minCol; col <= limits.maxCol; col++) {
132
- const key = keyMethod(row, col, zoom);
133
- if (processedTiles.has(key)) {
134
- continue;
135
- }
136
- const tile = tilesMetaData.tileMap.get(key);
137
- if (tile) {
138
- // move tile mesh to merged mesh
139
- moveMeshToMergedMesh(mergedMesh, mergedMeshDimLength, tile.mesh, tileDimensionLength, (row - limits.minRow) * (tileDimensionLength - 1), (col - limits.minCol) * (tileDimensionLength - 1));
140
- // moveMeshToMergedMesh2(
141
- // mergedMesh, mergedMeshDimLength,
142
- // (row + col) % 2 === 0 ? 0.1 : 0,
143
- // tileDimensionLength,
144
- // (row - limits.minRow) * (tileDimensionLength - 1), (col - limits.minCol) * (tileDimensionLength - 1)
145
- // );
146
- processedTiles.add(key);
147
- processedTileCountFromCurrentLevel++;
148
- // update bbox
149
- if (tile.bbox.ll.x < bboxLimit.ll.x)
150
- bboxLimit.ll.x = tile.bbox.ll.x;
151
- if (tile.bbox.ll.y < bboxLimit.ll.y)
152
- bboxLimit.ll.y = tile.bbox.ll.y;
153
- if (tile.bbox.ur.x > bboxLimit.ur.x)
154
- bboxLimit.ur.x = tile.bbox.ur.x;
155
- if (tile.bbox.ur.y > bboxLimit.ur.y)
156
- bboxLimit.ur.y = tile.bbox.ur.y;
157
- /**
158
- } else {
159
- // try to find parent tile
160
- const parent = calculateParentTile(row, col, zoom);
161
- const parentKey = keyMethod(parent.row, parent.column, parent.level);
162
- const parentTile = tilesMetaData.tileMap.get(parentKey);
163
-
164
- if (parentTile) {
165
- // Parent's 4 children at current zoom level
166
- const parentTopLeftChildRow = parent.row * 2;
167
- const parentTopLeftChildCol = parent.column * 2;
168
- const topLeftChildKey = keyMethod(parentTopLeftChildRow, parentTopLeftChildCol, zoom);
169
-
170
- // Only process parent once
171
- if (!processedTiles.has(topLeftChildKey)) {
172
- // Check if parent's area is within or overlaps the current limits
173
- const parentBottomRightChildRow = parentTopLeftChildRow + 1;
174
- const parentBottomRightChildCol = parentTopLeftChildCol + 1;
175
-
176
- // Check if parent's children overlap with current zoom's limits
177
- if (parentTopLeftChildRow > limits.maxRow ||
178
- parentBottomRightChildRow < limits.minRow ||
179
- parentTopLeftChildCol > limits.maxCol ||
180
- parentBottomRightChildCol < limits.minCol) {
181
- // Parent doesn't overlap, skip
182
- processedTiles.add(key);
183
- continue;
184
- }
185
-
186
- // Upscale parent to cover all 4 children
187
- const parentTileUpscaledMesh = populateTileIntoHigherZoomLevel(
188
- parentTile.mesh,
189
- tileDimensionLength,
190
- tileDimensionLength * 2 - 1
191
- );
192
-
193
- // Calculate destination position (parent's top-left child position)
194
- // Clamp to limits to handle edge cases
195
- const actualStartRow = Math.max(parentTopLeftChildRow, limits.minRow);
196
- const actualStartCol = Math.max(parentTopLeftChildCol, limits.minCol);
197
-
198
- const destRow = (actualStartRow - limits.minRow) * (tileDimensionLength - 1);
199
- const destCol = (actualStartCol - limits.minCol) * (tileDimensionLength - 1);
200
-
201
- // Calculate source offset if parent starts before limits
202
- const srcRowOffset = (actualStartRow - parentTopLeftChildRow) * (tileDimensionLength - 1);
203
- const srcColOffset = (actualStartCol - parentTopLeftChildCol) * (tileDimensionLength - 1);
204
-
205
- // Calculate how much to copy
206
- const actualEndRow = Math.min(parentBottomRightChildRow, limits.maxRow);
207
- const actualEndCol = Math.min(parentBottomRightChildCol, limits.maxCol);
208
-
209
- const copyRows = (actualEndRow - actualStartRow + 1) * (tileDimensionLength - 1);
210
- const copyCols = (actualEndCol - actualStartCol + 1) * (tileDimensionLength - 1);
211
-
212
- // Copy only the visible portion
213
- moveMeshToMergedMeshPartial(
214
- mergedMesh,
215
- mergedMeshDimLength,
216
- parentTileUpscaledMesh,
217
- tileDimensionLength * 2 - 1,
218
- destRow,
219
- destCol,
220
- srcRowOffset,
221
- srcColOffset,
222
- copyRows,
223
- copyCols
224
- );
225
-
226
- // Mark all 4 child positions as processed (even if out of bounds)
227
- for (let dr = 0; dr < 2; dr++) {
228
- for (let dc = 0; dc < 2; dc++) {
229
- const childRow = parentTopLeftChildRow + dr;
230
- const childCol = parentTopLeftChildCol + dc;
231
- const childKey = keyMethod(childRow, childCol, zoom);
232
- processedTiles.add(childKey);
233
- }
234
- }
235
-
236
- processedTileCountFromParentLevel++;
237
-
238
- // Update bbox (use actual parent bbox, not child bbox)
239
- if (parentTile.bbox.ll.x < bboxLimit.ll.x) bboxLimit.ll.x = parentTile.bbox.ll.x;
240
- if (parentTile.bbox.ll.y < bboxLimit.ll.y) bboxLimit.ll.y = parentTile.bbox.ll.y;
241
- if (parentTile.bbox.ur.x > bboxLimit.ur.x) bboxLimit.ur.x = parentTile.bbox.ur.x;
242
- if (parentTile.bbox.ur.y > bboxLimit.ur.y) bboxLimit.ur.y = parentTile.bbox.ur.y;
243
- } else {
244
- // Already processed via parent
245
- processedTiles.add(key);
246
- }
247
- } else {
248
- // No parent available
249
- processedTiles.add(key);
250
- }
251
-
252
- */
253
- }
254
- }
255
- }
256
- const rowRatio = (limits.maxRow - limits.minRow + 1) / mergeCount;
257
- const colRatio = (limits.maxCol - limits.minCol + 1) / mergeCount;
258
- // console.log(`Zoom ${zoom}: Processed ${processedTileCountFromCurrentLevel} from current level, ${processedTileCountFromParentLevel} from parent level. Coverage: ${(rowRatio * 100).toFixed(1)}% x ${(colRatio * 100).toFixed(1)}%`);
259
- result.push({ mesh: mergedMesh, bbox: bboxLimit, zoom: zoom, coverRatio: { x: rowRatio, y: colRatio } });
260
- }
261
- return result;
262
- }
263
- export function mergeMeshes(tiles, mergeCount = 12, tileDimensionLength = 5, processLimit = 6) {
264
- // filter out tiles with NaN values
265
- // return returnTop6tiles(tiles);
266
- const tilesMetaData = createMapAndMetaData(tiles);
267
- const mergedTiles = mergeTiles(tilesMetaData, mergeCount, tileDimensionLength, processLimit);
268
- return mergedTiles;
269
- }
270
- function returnTop6tiles(tiles) {
271
- const tilesMetaData = createMapAndMetaData(tiles);
272
- const hightestZoom = tilesMetaData.maxLevel;
273
- const result = [];
274
- let counter = 6;
275
- function tileToMergedTileInfo(tile) {
276
- const mesh = new Float32Array(tile.mesh[0].length * tile.mesh[0].length);
277
- for (let row = 0; row < tile.mesh[0].length; row++) {
278
- for (let col = 0; col < tile.mesh[0].length; col++) {
279
- mesh[row * tile.mesh[0].length + col] = tile.mesh[0][row * tile.mesh[0].length + col];
280
- }
281
- }
282
- return {
283
- mesh: mesh,
284
- zoom: tile.level,
285
- bbox: tile.bbox,
286
- coverRatio: { x: 1, y: 1 },
287
- };
288
- }
289
- for (const tile of tiles) {
290
- if (counter === 0)
291
- break;
292
- if (tile.level === hightestZoom) {
293
- result.push(tileToMergedTileInfo(tile));
294
- counter--;
295
- }
296
- }
297
- return result;
298
- }
@@ -1,50 +0,0 @@
1
- "use strict";
2
- // /**
3
- // * Find length in x and y for a tile in given zoom level (in wgs84)
4
- // * Find tile cuts for given line represented by two points
5
- // * Find inner position of point in tile
6
- // *
7
- // */
8
- // import { LongLat } from "../../types";
9
- // export function tileLength(zoom: number): LongLat {
10
- // const tileSize = 256; // in pixels
11
- // const worldSize = tileSize * Math.pow(2, zoom);
12
- // const latLength = 180 / worldSize;
13
- // const lonLength = 360 / worldSize;
14
- // return [lonLength, latLength];
15
- // }
16
- // // export function tileCuts(p1: LongLat, p2: LongLat, zoom: number): LongLat[] {
17
- // // const cuts: LongLat[] = [];
18
- // // const tileSize = 256;
19
- // // const worldSize = tileSize * Math.pow(2, zoom);
20
- // // const latLength = 180 / worldSize;
21
- // // const lonLength = 360 / worldSize;
22
- // // const x1 = (p1[0] + 180) / lonLength;
23
- // // const y1 = (90 - p1[1]) / latLength;
24
- // // const x2 = (p2[0] + 180) / lonLength;
25
- // // const y2 = (90 - p2[1]) / latLength;
26
- // // const dx = x2 - x1;
27
- // // const dy = y2 - y1;
28
- // // const steps = Math.max(Math.abs(dx), Math.abs(dy));
29
- // // const xStep = dx / steps;
30
- // // const yStep = dy / steps;
31
- // // let x = x1;
32
- // // let y = y1;
33
- // // for (let i = 0; i <= steps; i++) {
34
- // // const tileX = Math.floor(x);
35
- // // const tileY = Math.floor(y);
36
- // // const cutX = tileX * lonLength - 180;
37
- // // const cutY = 90 - tileY * latLength;
38
- // // const cut: LongLat = [cutX, cutY];
39
- // // if (cuts.length === 0 || (cuts[cuts.length - 1][0] !== cut[0] || cuts[cuts.length - 1][1] !== cut[1])) {
40
- // // cuts.push(cut);
41
- // // }
42
- // // x += xStep;
43
- // // y += yStep;
44
- // // }
45
- // // return cuts;
46
- // // }
47
- // // function fillTriangle(p1: LongLat, p2: LongLat, p3: LongLat, zoom: number): {positions:LongLat[], indices:number[]} {
48
- // // // this function fills the triangle triangle iteratively
49
- // // //
50
- // // }