@loaders.gl/tile-converter 3.1.0-beta.2 → 3.1.1

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 (153) hide show
  1. package/dist/bundle.js +2413 -1590
  2. package/dist/converter.min.js +20 -20
  3. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +429 -189
  4. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  5. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +306 -209
  6. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  7. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +8 -4
  8. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
  9. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +13 -13
  10. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
  11. package/dist/es5/3d-tiles-converter/json-templates/tileset.js +51 -32
  12. package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +1 -1
  13. package/dist/es5/bundle.js +1 -1
  14. package/dist/es5/bundle.js.map +1 -1
  15. package/dist/es5/deps-installer/deps-installer.js +61 -17
  16. package/dist/es5/deps-installer/deps-installer.js.map +1 -1
  17. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +55 -16
  18. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  19. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js +33 -9
  20. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
  21. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +103 -93
  22. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  23. package/dist/es5/i3s-converter/helpers/geometry-converter.d.ts +5 -1
  24. package/dist/es5/i3s-converter/helpers/geometry-converter.js +547 -336
  25. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  26. package/dist/es5/i3s-converter/helpers/node-debug.js +27 -31
  27. package/dist/es5/i3s-converter/helpers/node-debug.js.map +1 -1
  28. package/dist/es5/i3s-converter/helpers/node-pages.js +209 -101
  29. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
  30. package/dist/es5/i3s-converter/i3s-converter.js +1645 -700
  31. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  32. package/dist/es5/i3s-converter/json-templates/layers.js +213 -177
  33. package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -1
  34. package/dist/es5/i3s-converter/json-templates/metadata.js +24 -20
  35. package/dist/es5/i3s-converter/json-templates/metadata.js.map +1 -1
  36. package/dist/es5/i3s-converter/json-templates/node.js +92 -74
  37. package/dist/es5/i3s-converter/json-templates/node.js.map +1 -1
  38. package/dist/es5/i3s-converter/json-templates/scene-server.js +34 -28
  39. package/dist/es5/i3s-converter/json-templates/scene-server.js.map +1 -1
  40. package/dist/es5/i3s-converter/json-templates/shared-resources.js +162 -107
  41. package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +1 -1
  42. package/dist/es5/i3s-converter/json-templates/store.js +4 -2
  43. package/dist/es5/i3s-converter/json-templates/store.js.map +1 -1
  44. package/dist/es5/i3s-converter/types.js +2 -0
  45. package/dist/es5/i3s-converter/types.js.map +1 -0
  46. package/dist/es5/i3s-server/app.js +6 -6
  47. package/dist/es5/i3s-server/app.js.map +1 -1
  48. package/dist/es5/i3s-server/controllers/index-controller.js +60 -20
  49. package/dist/es5/i3s-server/controllers/index-controller.js.map +1 -1
  50. package/dist/es5/i3s-server/routes/index.js +41 -14
  51. package/dist/es5/i3s-server/routes/index.js.map +1 -1
  52. package/dist/es5/index.js +4 -4
  53. package/dist/es5/lib/utils/{compress-utils.d.ts → compress-util.d.ts} +0 -0
  54. package/dist/es5/lib/utils/compress-util.js +345 -123
  55. package/dist/es5/lib/utils/compress-util.js.map +1 -1
  56. package/dist/es5/lib/utils/file-utils.js +98 -20
  57. package/dist/es5/lib/utils/file-utils.js.map +1 -1
  58. package/dist/es5/lib/utils/lod-conversion-utils.js +9 -9
  59. package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -1
  60. package/dist/es5/lib/utils/statistic-utills.js +152 -41
  61. package/dist/es5/lib/utils/statistic-utills.js.map +1 -1
  62. package/dist/es5/pgm-loader.js +31 -4
  63. package/dist/es5/pgm-loader.js.map +1 -1
  64. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +7 -6
  65. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  66. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +7 -0
  67. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  68. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
  69. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js +1 -1
  70. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
  71. package/dist/esm/3d-tiles-converter/json-templates/tileset.js +12 -9
  72. package/dist/esm/3d-tiles-converter/json-templates/tileset.js.map +1 -1
  73. package/dist/esm/deps-installer/deps-installer.js +2 -6
  74. package/dist/esm/deps-installer/deps-installer.js.map +1 -1
  75. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +35 -3
  76. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  77. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js +2 -2
  78. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
  79. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  80. package/dist/esm/i3s-converter/helpers/geometry-converter.d.ts +5 -1
  81. package/dist/esm/i3s-converter/helpers/geometry-converter.js +50 -16
  82. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  83. package/dist/esm/i3s-converter/helpers/node-debug.js +2 -4
  84. package/dist/esm/i3s-converter/helpers/node-debug.js.map +1 -1
  85. package/dist/esm/i3s-converter/helpers/node-pages.js +15 -4
  86. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
  87. package/dist/esm/i3s-converter/i3s-converter.js +147 -62
  88. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  89. package/dist/esm/i3s-converter/json-templates/layers.js +37 -27
  90. package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -1
  91. package/dist/esm/i3s-converter/json-templates/metadata.js +2 -2
  92. package/dist/esm/i3s-converter/json-templates/metadata.js.map +1 -1
  93. package/dist/esm/i3s-converter/json-templates/node.js +16 -12
  94. package/dist/esm/i3s-converter/json-templates/node.js.map +1 -1
  95. package/dist/esm/i3s-converter/json-templates/scene-server.js +2 -2
  96. package/dist/esm/i3s-converter/json-templates/scene-server.js.map +1 -1
  97. package/dist/esm/i3s-converter/json-templates/shared-resources.js +19 -14
  98. package/dist/esm/i3s-converter/json-templates/shared-resources.js.map +1 -1
  99. package/dist/esm/i3s-converter/json-templates/store.js.map +1 -1
  100. package/dist/esm/i3s-converter/types.js +2 -0
  101. package/dist/esm/i3s-converter/types.js.map +1 -0
  102. package/dist/esm/lib/utils/{compress-utils.d.ts → compress-util.d.ts} +0 -0
  103. package/dist/esm/pgm-loader.js +3 -3
  104. package/dist/esm/pgm-loader.js.map +1 -1
  105. package/package.json +16 -14
  106. package/src/3d-tiles-converter/3d-tiles-converter.ts +21 -20
  107. package/src/3d-tiles-converter/helpers/{b3dm-converter.js → b3dm-converter.ts} +19 -2
  108. package/src/3d-tiles-converter/helpers/{i3s-obb-to-3d-tiles-obb.js → i3s-obb-to-3d-tiles-obb.ts} +16 -1
  109. package/src/3d-tiles-converter/helpers/texture-atlas.ts +4 -4
  110. package/src/3d-tiles-converter/json-templates/{tileset.js → tileset.ts} +9 -9
  111. package/src/deps-installer/deps-installer.js +2 -2
  112. package/src/i3s-converter/helpers/coordinate-converter.ts +62 -9
  113. package/src/i3s-converter/helpers/{create-scene-server-path.js → create-scene-server-path.ts} +2 -2
  114. package/src/i3s-converter/helpers/{geometry-attributes.js → geometry-attributes.ts} +4 -4
  115. package/src/i3s-converter/helpers/geometry-converter.d.ts +5 -1
  116. package/src/i3s-converter/helpers/geometry-converter.js +63 -13
  117. package/src/i3s-converter/helpers/{node-debug.js → node-debug.ts} +3 -2
  118. package/src/i3s-converter/helpers/{node-pages.js → node-pages.ts} +41 -26
  119. package/src/i3s-converter/i3s-converter.ts +204 -133
  120. package/src/i3s-converter/json-templates/{layers.js → layers.ts} +29 -27
  121. package/src/i3s-converter/json-templates/{metadata.js → metadata.ts} +2 -2
  122. package/src/i3s-converter/json-templates/{node.js → node.ts} +12 -12
  123. package/src/i3s-converter/json-templates/{scene-server.js → scene-server.ts} +2 -2
  124. package/src/i3s-converter/json-templates/{shared-resources.js → shared-resources.ts} +14 -14
  125. package/src/i3s-converter/json-templates/{store.js → store.ts} +0 -0
  126. package/src/i3s-converter/types.ts +14 -0
  127. package/src/lib/utils/{compress-utils.d.ts → compress-util.d.ts} +0 -0
  128. package/src/pgm-loader.ts +2 -2
  129. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.d.ts +0 -23
  130. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts +0 -16
  131. package/dist/es5/i3s-converter/helpers/node-pages.d.ts +0 -144
  132. package/dist/es5/lib/geoid-height-model.d.ts +0 -41
  133. package/dist/es5/lib/geoid-height-model.js +0 -149
  134. package/dist/es5/lib/geoid-height-model.js.map +0 -1
  135. package/dist/es5/lib/pgm-parser.d.ts +0 -14
  136. package/dist/es5/lib/pgm-parser.js +0 -192
  137. package/dist/es5/lib/pgm-parser.js.map +0 -1
  138. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.d.ts +0 -23
  139. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts +0 -16
  140. package/dist/esm/i3s-converter/helpers/node-pages.d.ts +0 -144
  141. package/dist/esm/lib/geoid-height-model.d.ts +0 -41
  142. package/dist/esm/lib/geoid-height-model.js +0 -140
  143. package/dist/esm/lib/geoid-height-model.js.map +0 -1
  144. package/dist/esm/lib/pgm-parser.d.ts +0 -14
  145. package/dist/esm/lib/pgm-parser.js +0 -183
  146. package/dist/esm/lib/pgm-parser.js.map +0 -1
  147. package/src/3d-tiles-converter/helpers/b3dm-converter.d.ts +0 -23
  148. package/src/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.d.ts +0 -16
  149. package/src/i3s-converter/helpers/node-pages.d.ts +0 -144
  150. package/src/lib/geoid-height-model.d.ts +0 -41
  151. package/src/lib/geoid-height-model.js +0 -239
  152. package/src/lib/pgm-parser.d.ts +0 -14
  153. package/src/lib/pgm-parser.js +0 -179
@@ -1,140 +0,0 @@
1
- const c0_ = 240;
2
- const c3_ = [9, -18, -88, 0, 96, 90, 0, 0, -60, -20, -9, 18, 8, 0, -96, 30, 0, 0, 60, -20, 9, -88, -18, 90, 96, 0, -20, -60, 0, 0, 186, -42, -42, -150, -96, -150, 60, 60, 60, 60, 54, 162, -78, 30, -24, -90, -60, 60, -60, 60, -9, -32, 18, 30, 24, 0, 20, -60, 0, 0, -9, 8, 18, 30, -96, 0, -20, 60, 0, 0, 54, -78, 162, -90, -24, 30, 60, -60, 60, -60, -54, 78, 78, 90, 144, 90, -60, -60, -60, -60, 9, -8, -18, -30, -24, 0, 20, 60, 0, 0, -9, 18, -32, 0, 24, 30, 0, 0, -60, 20, 9, -18, -8, 0, -24, -30, 0, 0, 60, 20];
3
- const c0n_ = 372;
4
- const c3n_ = [0, 0, -131, 0, 138, 144, 0, 0, -102, -31, 0, 0, 7, 0, -138, 42, 0, 0, 102, -31, 62, 0, -31, 0, 0, -62, 0, 0, 0, 31, 124, 0, -62, 0, 0, -124, 0, 0, 0, 62, 124, 0, -62, 0, 0, -124, 0, 0, 0, 62, 62, 0, -31, 0, 0, -62, 0, 0, 0, 31, 0, 0, 45, 0, -183, -9, 0, 93, 18, 0, 0, 0, 216, 0, 33, 87, 0, -93, 12, -93, 0, 0, 156, 0, 153, 99, 0, -93, -12, -93, 0, 0, -45, 0, -3, 9, 0, 93, -18, 0, 0, 0, -55, 0, 48, 42, 0, 0, -84, 31, 0, 0, -7, 0, -48, -42, 0, 0, 84, 31];
5
- const c0s_ = 372;
6
- const c3s_ = [18, -36, -122, 0, 120, 135, 0, 0, -84, -31, -18, 36, -2, 0, -120, 51, 0, 0, 84, -31, 36, -165, -27, 93, 147, -9, 0, -93, 18, 0, 210, 45, -111, -93, -57, -192, 0, 93, 12, 93, 162, 141, -75, -93, -129, -180, 0, 93, -12, 93, -36, -21, 27, 93, 39, 9, 0, -93, -18, 0, 0, 0, 62, 0, 0, 31, 0, 0, 0, -31, 0, 0, 124, 0, 0, 62, 0, 0, 0, -62, 0, 0, 124, 0, 0, 62, 0, 0, 0, -62, 0, 0, 62, 0, 0, 31, 0, 0, 0, -31, -18, 36, -64, 0, 66, 51, 0, 0, -102, 31, 18, -36, 2, 0, -66, -51, 0, 0, 102, 31];
7
- const stencilsize_ = 12;
8
- const nterms_ = (3 + 1) * (3 + 2) / 2;
9
- const PIXEL_SIZE = 2;
10
- export class GeoidHeightModel {
11
- constructor(options) {
12
- this.options = options;
13
- this._v00 = 0;
14
- this._v01 = 0;
15
- this._v10 = 0;
16
- this._v11 = 0;
17
- this._t = [];
18
- this._ix = this.options._width;
19
- this._iy = this.options._height;
20
- }
21
-
22
- getHeight(lat, lon) {
23
- lat = Math.abs(lat) > 90 ? NaN : lat;
24
-
25
- if (isNaN(lat) || isNaN(lon)) {
26
- return NaN;
27
- }
28
-
29
- const rem = _remainder(lon, 360);
30
-
31
- lon = rem !== -180 ? rem : 180;
32
- let fx = lon * this.options._rlonres;
33
- let fy = -lat * this.options._rlatres;
34
- let ix = Math.floor(fx);
35
- let iy = Math.min(Math.round((this.options._height - 1) / 2 - 1), Math.floor(fy));
36
- fx -= ix;
37
- fy -= iy;
38
- iy += (this.options._height - 1) / 2;
39
- ix += ix < 0 ? this.options._width : ix >= this.options._width ? -this.options._width : 0;
40
- let v00 = 0;
41
- let v01 = 0;
42
- let v10 = 0;
43
- let v11 = 0;
44
- let t = new Array(nterms_);
45
-
46
- if (!(ix === this._ix && iy === this._iy)) {
47
- if (!this.options.cubic) {
48
- v00 = this._rawval(ix, iy);
49
- v01 = this._rawval(ix + 1, iy);
50
- v10 = this._rawval(ix, iy + 1);
51
- v11 = this._rawval(ix + 1, iy + 1);
52
- } else {
53
- const v = [this._rawval(ix, iy - 1), this._rawval(ix + 1, iy - 1), this._rawval(ix - 1, iy), this._rawval(ix, iy), this._rawval(ix + 1, iy), this._rawval(ix + 2, iy), this._rawval(ix - 1, iy + 1), this._rawval(ix, iy + 1), this._rawval(ix + 1, iy + 1), this._rawval(ix + 2, iy + 1), this._rawval(ix, iy + 2), this._rawval(ix + 1, iy + 2)];
54
- let c3x = c3n_;
55
-
56
- if (iy !== 0) {
57
- c3x = iy === this.options._height - 2 ? c3s_ : c3_;
58
- }
59
-
60
- let c0x = c0n_;
61
-
62
- if (iy !== 0) {
63
- c0x = iy === this.options._height - 2 ? c0s_ : c0_;
64
- }
65
-
66
- for (let i = 0; i < nterms_; ++i) {
67
- t[i] = 0;
68
-
69
- for (let j = 0; j < stencilsize_; ++j) {
70
- t[i] += v[j] * c3x[nterms_ * j + i];
71
- }
72
-
73
- t[i] /= c0x;
74
- }
75
- }
76
- } else if (!this.options.cubic) {
77
- v00 = this._v00;
78
- v01 = this._v01;
79
- v10 = this._v10;
80
- v11 = this._v11;
81
- } else {
82
- t = this._t;
83
- }
84
-
85
- if (!this.options.cubic) {
86
- const a = (1 - fx) * v00 + fx * v01;
87
- const b = (1 - fx) * v10 + fx * v11;
88
- const c = (1 - fy) * a + fy * b;
89
- const h = this.options._offset + this.options._scale * c;
90
- this._ix = ix;
91
- this._iy = iy;
92
- this._v00 = v00;
93
- this._v01 = v01;
94
- this._v10 = v10;
95
- this._v11 = v11;
96
- return h;
97
- }
98
-
99
- let h = t[0] + fx * (t[1] + fx * (t[3] + fx * t[6])) + fy * (t[2] + fx * (t[4] + fx * t[7]) + fy * (t[5] + fx * t[8] + fy * t[9]));
100
- h = this.options._offset + this.options._scale * h;
101
- this._ix = ix;
102
- this._iy = iy;
103
- this._t = t;
104
- return h;
105
- }
106
-
107
- _rawval(ix, iy) {
108
- if (ix < 0) {
109
- ix += this.options._width;
110
- } else if (ix >= this.options._width) {
111
- ix -= this.options._width;
112
- }
113
-
114
- if (iy < 0 || iy >= this.options._height) {
115
- iy = iy < 0 ? -iy : 2 * (this.options._height - 1) - iy;
116
- ix += (ix < this.options._width / 2 ? 1 : -1) * this.options._width / 2;
117
- }
118
-
119
- const bufferPosition = this.options._datastart + PIXEL_SIZE * (iy * this.options._swidth + ix);
120
- const a = this.options.data[bufferPosition];
121
- const b = this.options.data[bufferPosition + 1];
122
- const r = a << 8 | b;
123
- return r;
124
- }
125
-
126
- }
127
-
128
- function _remainder(x, y) {
129
- y = Math.abs(y);
130
-
131
- let z = _fmod(x, y);
132
-
133
- if (2 * Math.abs(z) === y) z -= _fmod(x, 2 * y) - z;else if (2 * Math.abs(z) > y) z += z < 0 ? y : -y;
134
- return z;
135
- }
136
-
137
- function _fmod(x, y) {
138
- return x - Math.floor(x / y) * y;
139
- }
140
- //# sourceMappingURL=geoid-height-model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/geoid-height-model.js"],"names":["c0_","c3_","c0n_","c3n_","c0s_","c3s_","stencilsize_","nterms_","PIXEL_SIZE","GeoidHeightModel","constructor","options","_v00","_v01","_v10","_v11","_t","_ix","_width","_iy","_height","getHeight","lat","lon","Math","abs","NaN","isNaN","rem","_remainder","fx","_rlonres","fy","_rlatres","ix","floor","iy","min","round","v00","v01","v10","v11","t","Array","cubic","_rawval","v","c3x","c0x","i","j","a","b","c","h","_offset","_scale","bufferPosition","_datastart","_swidth","data","r","x","y","z","_fmod"],"mappings":"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","sourcesContent":["/**\n * Code is ported from GeographicLib-1.50.1\n * https://geographiclib.sourceforge.io/html/index.html\n * Location: /GeographicLib-1.50.1/src/Geoid.cpp\n * /GeographicLib-1.50.1/include/GeographicLib/Geoid.hpp\n * /GeographicLib-1.50.1/src/Math.cpp\n *\n * File header:\n * * \\file Geoid.cpp (Geoid.hpp)\n * * \\brief Implementation for GeographicLib::Geoid class\n * *\n * * Copyright (c) Charles Karney (2009-2018) <charles@karney.com> and licensed\n * * under the MIT/X11 License. For more information, see\n * * https://geographiclib.sourceforge.io/\n **********************************************************************/\n\nconst c0_ = 240;\n\n// prettier-ignore\nconst c3_ = [\n 9, -18, -88, 0, 96, 90, 0, 0, -60, -20,\n -9, 18, 8, 0, -96, 30, 0, 0, 60, -20,\n 9, -88, -18, 90, 96, 0, -20, -60, 0, 0,\n 186, -42, -42, -150, -96, -150, 60, 60, 60, 60,\n 54, 162, -78, 30, -24, -90, -60, 60, -60, 60,\n -9, -32, 18, 30, 24, 0, 20, -60, 0, 0,\n -9, 8, 18, 30, -96, 0, -20, 60, 0, 0,\n 54, -78, 162, -90, -24, 30, 60, -60, 60, -60,\n -54, 78, 78, 90, 144, 90, -60, -60, -60, -60,\n 9, -8, -18, -30, -24, 0, 20, 60, 0, 0,\n -9, 18, -32, 0, 24, 30, 0, 0, -60, 20,\n 9, -18, -8, 0, -24, -30, 0, 0, 60, 20\n];\n\nconst c0n_ = 372;\n\n// prettier-ignore\nconst c3n_ = [\n 0, 0, -131, 0, 138, 144, 0, 0, -102, -31,\n 0, 0, 7, 0, -138, 42, 0, 0, 102, -31,\n 62, 0, -31, 0, 0, -62, 0, 0, 0, 31,\n 124, 0, -62, 0, 0, -124, 0, 0, 0, 62,\n 124, 0, -62, 0, 0, -124, 0, 0, 0, 62,\n 62, 0, -31, 0, 0, -62, 0, 0, 0, 31,\n 0, 0, 45, 0, -183, -9, 0, 93, 18, 0,\n 0, 0, 216, 0, 33, 87, 0, -93, 12, -93,\n 0, 0, 156, 0, 153, 99, 0, -93, -12, -93,\n 0, 0, -45, 0, -3, 9, 0, 93, -18, 0,\n 0, 0, -55, 0, 48, 42, 0, 0, -84, 31,\n 0, 0, -7, 0, -48, -42, 0, 0, 84, 31,\n];\n\nconst c0s_ = 372;\n\n// prettier-ignore\nconst c3s_ = [\n 18, -36, -122, 0, 120, 135, 0, 0, -84, -31,\n -18, 36, -2, 0, -120, 51, 0, 0, 84, -31,\n 36, -165, -27, 93, 147, -9, 0, -93, 18, 0,\n 210, 45, -111, -93, -57, -192, 0, 93, 12, 93,\n 162, 141, -75, -93, -129, -180, 0, 93, -12, 93,\n -36, -21, 27, 93, 39, 9, 0, -93, -18, 0,\n 0, 0, 62, 0, 0, 31, 0, 0, 0, -31,\n 0, 0, 124, 0, 0, 62, 0, 0, 0, -62,\n 0, 0, 124, 0, 0, 62, 0, 0, 0, -62,\n 0, 0, 62, 0, 0, 31, 0, 0, 0, -31,\n -18, 36, -64, 0, 66, 51, 0, 0, -102, 31,\n 18, -36, 2, 0, -66, -51, 0, 0, 102, 31,\n];\nconst stencilsize_ = 12;\nconst nterms_ = ((3 + 1) * (3 + 2)) / 2; // for a cubic fit\nconst PIXEL_SIZE = 2;\n\nexport class GeoidHeightModel {\n constructor(options) {\n this.options = options;\n this._v00 = 0;\n this._v01 = 0;\n this._v10 = 0;\n this._v11 = 0;\n this._t = [];\n\n this._ix = this.options._width;\n this._iy = this.options._height;\n }\n\n // eslint-disable-next-line max-statements, complexity\n getHeight(lat, lon) {\n // C++: Math::LatFix(lat)\n lat = Math.abs(lat) > 90 ? NaN : lat;\n\n if (isNaN(lat) || isNaN(lon)) {\n return NaN;\n }\n\n // C++: Math::AngNormalize(lon)\n const rem = _remainder(lon, 360);\n lon = rem !== -180 ? rem : 180;\n\n let fx = lon * this.options._rlonres;\n let fy = -lat * this.options._rlatres;\n let ix = Math.floor(fx);\n let iy = Math.min(Math.round((this.options._height - 1) / 2 - 1), Math.floor(fy));\n fx -= ix;\n fy -= iy;\n iy += (this.options._height - 1) / 2;\n ix += ix < 0 ? this.options._width : ix >= this.options._width ? -this.options._width : 0;\n let v00 = 0;\n let v01 = 0;\n let v10 = 0;\n let v11 = 0;\n let t = new Array(nterms_);\n if (!(ix === this._ix && iy === this._iy)) {\n if (!this.options.cubic) {\n v00 = this._rawval(ix, iy);\n v01 = this._rawval(ix + 1, iy);\n v10 = this._rawval(ix, iy + 1);\n v11 = this._rawval(ix + 1, iy + 1);\n } else {\n const v = [\n this._rawval(ix, iy - 1),\n this._rawval(ix + 1, iy - 1),\n this._rawval(ix - 1, iy),\n this._rawval(ix, iy),\n this._rawval(ix + 1, iy),\n this._rawval(ix + 2, iy),\n this._rawval(ix - 1, iy + 1),\n this._rawval(ix, iy + 1),\n this._rawval(ix + 1, iy + 1),\n this._rawval(ix + 2, iy + 1),\n this._rawval(ix, iy + 2),\n this._rawval(ix + 1, iy + 2)\n ];\n\n let c3x = c3n_;\n if (iy !== 0) {\n c3x = iy === this.options._height - 2 ? c3s_ : c3_;\n }\n let c0x = c0n_;\n if (iy !== 0) {\n c0x = iy === this.options._height - 2 ? c0s_ : c0_;\n }\n for (let i = 0; i < nterms_; ++i) {\n t[i] = 0;\n // eslint-disable-next-line max-depth\n for (let j = 0; j < stencilsize_; ++j) {\n t[i] += v[j] * c3x[nterms_ * j + i];\n }\n t[i] /= c0x;\n }\n }\n } else if (!this.options.cubic) {\n // same cell; used cached coefficients\n v00 = this._v00;\n v01 = this._v01;\n v10 = this._v10;\n v11 = this._v11;\n } else {\n t = this._t;\n }\n\n if (!this.options.cubic) {\n const a = (1 - fx) * v00 + fx * v01;\n const b = (1 - fx) * v10 + fx * v11;\n const c = (1 - fy) * a + fy * b;\n const h = this.options._offset + this.options._scale * c;\n this._ix = ix;\n this._iy = iy;\n this._v00 = v00;\n this._v01 = v01;\n this._v10 = v10;\n this._v11 = v11;\n return h;\n }\n let h =\n t[0] +\n fx * (t[1] + fx * (t[3] + fx * t[6])) +\n fy * (t[2] + fx * (t[4] + fx * t[7]) + fy * (t[5] + fx * t[8] + fy * t[9]));\n h = this.options._offset + this.options._scale * h;\n this._ix = ix;\n this._iy = iy;\n this._t = t;\n return h;\n }\n\n /**\n * Method seeks for particular data in th pgm buffer\n * Code is ported from corresponding method\n * in /GeographicLib-1.50.1/include/GeographicLib/Geoid.hpp\n * @param {number} ix - longituge parameter\n * @param {number} iy - latitude parameter\n * @returns {number} data from pgm binary buffer\n */\n _rawval(ix, iy) {\n if (ix < 0) {\n ix += this.options._width;\n } else if (ix >= this.options._width) {\n ix -= this.options._width;\n }\n if (iy < 0 || iy >= this.options._height) {\n iy = iy < 0 ? -iy : 2 * (this.options._height - 1) - iy;\n ix += ((ix < this.options._width / 2 ? 1 : -1) * this.options._width) / 2;\n }\n const bufferPosition = this.options._datastart + PIXEL_SIZE * (iy * this.options._swidth + ix);\n // initial values to suppress warnings in case get fails\n const a = this.options.data[bufferPosition];\n const b = this.options.data[bufferPosition + 1];\n const r = (a << 8) | b;\n return r;\n }\n}\n\n/**\n * Method calculates remainder of float numbers division\n * Code is ported from corresponding method\n * in /GeographicLib-1.50.1/src/Math.cpp\n * Math::remainder(T x, T y)\n * @param {number} x - numerator\n * @param {number} y - denominator\n * @returns {number} - remainder\n */\nfunction _remainder(x, y) {\n y = Math.abs(y); // The result doesn't depend on the sign of y\n let z = _fmod(x, y);\n if (2 * Math.abs(z) === y) z -= _fmod(x, 2 * y) - z;\n // Implement ties to even\n else if (2 * Math.abs(z) > y) z += z < 0 ? y : -y; // Fold remaining cases to (-y/2, y/2)\n return z;\n}\n\n/**\n * Computes the floating-point remainder of the division operation x/y\n * @param {number} x - numerator\n * @param {number} y - denominator\n * @returns {number} - remainder\n */\nfunction _fmod(x, y) {\n return x - Math.floor(x / y) * y;\n}\n"],"file":"geoid-height-model.js"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Parse header of "Earth Gravity Model" *.pgm file
3
- * The implementation is ported from GeographicLib-1.50.1
4
- * https://geographiclib.sourceforge.io/html/index.html
5
- */
6
-
7
- /**
8
- * Parse "Earth Gravity Model" loaded from a *.pgm file
9
- * https://geographiclib.sourceforge.io/html/geoid.html
10
- * @param {Uint8Array} data - binary buffer of pgm file
11
- * @param {Object} options - loader options
12
- * @returns {GeoidHeightModel} - instance of GeoidHeightModel class
13
- */
14
- export function parsePgm(data, options);
@@ -1,183 +0,0 @@
1
- import { GeoidHeightModel } from './geoid-height-model';
2
- const ENDL = 10;
3
- const PIXEL_MAX = 65535;
4
- export function parsePgm(data, options) {
5
- const getline = _getLineGenerator(data);
6
-
7
- let currentLine = getline.next();
8
-
9
- if (currentLine.done || currentLine.value.line !== 'P5') {
10
- throw new Error('Geoid model file: File not in PGM format');
11
- }
12
-
13
- let _offset = Number.MAX_VALUE;
14
- let _scale = 0;
15
-
16
- let _maxerror = -1;
17
-
18
- let _rmserror = -1;
19
-
20
- let _description = 'NONE';
21
- let _datetime = 'UNKNOWN';
22
- let _width = 0;
23
- let _height = 0;
24
- let _datastart = null;
25
- let _swidth = null;
26
-
27
- do {
28
- currentLine = getline.next();
29
- const s = currentLine.value.line;
30
-
31
- if (!s.length) {
32
- continue;
33
- }
34
-
35
- if (s[0] === '#') {
36
- const sArr = s.split(' ');
37
- const commentId = sArr[0];
38
- const key = sArr[1];
39
-
40
- if (commentId !== '#' || !key) {
41
- continue;
42
- }
43
-
44
- const infoArr = sArr.length > 2 ? sArr.slice(2) : [];
45
-
46
- if (key === 'Description') {
47
- _description = infoArr.join(' ');
48
- } else if (key === 'DateTime') {
49
- _datetime = infoArr.join(' ');
50
- } else if (key === 'Offset') {
51
- if (!sArr[2]) {
52
- throw new Error('Geoid model file: Error reading offset');
53
- }
54
-
55
- _offset = parseInt(sArr[2], 10);
56
- } else if (key === 'Scale') {
57
- if (!sArr[2]) {
58
- throw new Error('Geoid model file: Error reading scale');
59
- }
60
-
61
- _scale = parseFloat(sArr[2]);
62
- } else if (key === (options.cubic ? 'MaxCubicError' : 'MaxBilinearError')) {
63
- if (isFinite(parseFloat(sArr[2]))) {
64
- _maxerror = parseFloat(sArr[2]);
65
- }
66
- } else if (key === (options.cubic ? 'RMSCubicError' : 'RMSBilinearError')) {
67
- if (isFinite(parseFloat(sArr[2]))) {
68
- _rmserror = parseFloat(sArr[2]);
69
- }
70
- }
71
- } else {
72
- let sArr = s.split(' ');
73
- sArr = sArr.filter(testString => testString !== '');
74
- _width = parseInt(sArr[0], 10);
75
- _height = parseInt(sArr[1], 10);
76
-
77
- if (!(_width && _height)) {
78
- throw new Error('Geoid model file: Error reading raster size');
79
- }
80
-
81
- break;
82
- }
83
- } while (!currentLine.done);
84
-
85
- currentLine = getline.next();
86
- const maxval = parseInt(currentLine.value.line, 10);
87
-
88
- if (currentLine.done) {
89
- throw new Error('Geoid model file: Error reading maxval');
90
- }
91
-
92
- if (maxval !== PIXEL_MAX) {
93
- throw new Error('Geoid model file: Incorrect value of maxval');
94
- }
95
-
96
- _datastart = currentLine.value.offset;
97
- _swidth = _width;
98
-
99
- if (_offset === Number.MAX_VALUE) {
100
- throw new Error('Geoid model file: Offset not set');
101
- }
102
-
103
- if (_scale === 0) {
104
- throw new Error('Geoid model file: Scale not set');
105
- }
106
-
107
- if (_scale < 0) {
108
- throw new Error('Geoid model file: Scale must be positive');
109
- }
110
-
111
- if (_height < 2 || _width < 2) {
112
- throw new Error('Geoid model file: Raster size too small');
113
- }
114
-
115
- if (_width & 1) {
116
- throw new Error('Geoid model file: Raster width is odd');
117
- }
118
-
119
- if (!(_height & 1)) {
120
- throw new Error('Geoid model file: Raster height is even');
121
- }
122
-
123
- const _rlonres = _width / 360;
124
-
125
- const _rlatres = (_height - 1) / 180;
126
-
127
- return new GeoidHeightModel({
128
- cubic: options.cubic,
129
- _width,
130
- _height,
131
- _rlonres,
132
- _rlatres,
133
- _offset,
134
- _scale,
135
- _swidth,
136
- _datastart,
137
- _maxerror,
138
- _rmserror,
139
- _description,
140
- _datetime,
141
- data
142
- });
143
- }
144
-
145
- function* _getLineGenerator(data) {
146
- let offset = 0;
147
-
148
- do {
149
- const endLineIndex = data.indexOf(ENDL, offset);
150
-
151
- if (endLineIndex !== -1) {
152
- const line = data.subarray(offset, endLineIndex);
153
- offset = endLineIndex + 1;
154
- yield {
155
- offset,
156
- line: _getStringFromCharArray(line)
157
- };
158
- } else {
159
- const line = data.subarray(offset, data.length);
160
- offset = data.length;
161
- yield {
162
- offset,
163
- line: _getStringFromCharArray(line)
164
- };
165
- }
166
- } while (offset < data.length);
167
-
168
- return {
169
- offset,
170
- line: ''
171
- };
172
- }
173
-
174
- function _getStringFromCharArray(array) {
175
- let s = '';
176
-
177
- for (const char of array) {
178
- s += String.fromCharCode(char);
179
- }
180
-
181
- return s;
182
- }
183
- //# sourceMappingURL=pgm-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/pgm-parser.js"],"names":["GeoidHeightModel","ENDL","PIXEL_MAX","parsePgm","data","options","getline","_getLineGenerator","currentLine","next","done","value","line","Error","_offset","Number","MAX_VALUE","_scale","_maxerror","_rmserror","_description","_datetime","_width","_height","_datastart","_swidth","s","length","sArr","split","commentId","key","infoArr","slice","join","parseInt","parseFloat","cubic","isFinite","filter","testString","maxval","offset","_rlonres","_rlatres","endLineIndex","indexOf","subarray","_getStringFromCharArray","array","char","String","fromCharCode"],"mappings":"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","sourcesContent":["/**\n * Parsing code is ported from GeographicLib-1.50.1\n * https://geographiclib.sourceforge.io/html/index.html\n * Location: /GeographicLib-1.50.1/src/Geoid.cpp\n *\n * File header:\n * * \\file Geoid.cpp\n * * \\brief Implementation for GeographicLib::Geoid class\n * *\n * * Copyright (c) Charles Karney (2009-2018) <charles@karney.com> and licensed\n * * under the MIT/X11 License. For more information, see\n * * https://geographiclib.sourceforge.io/\n **********************************************************************/\n\nimport {GeoidHeightModel} from './geoid-height-model';\n\nconst ENDL = 10;\nconst PIXEL_MAX = 65535;\n\n// eslint-disable-next-line\nexport function parsePgm(data, options) {\n const getline = _getLineGenerator(data);\n let currentLine = getline.next();\n if (currentLine.done || currentLine.value.line !== 'P5') {\n throw new Error('Geoid model file: File not in PGM format');\n }\n let _offset = Number.MAX_VALUE;\n let _scale = 0;\n let _maxerror = -1;\n let _rmserror = -1;\n let _description = 'NONE';\n let _datetime = 'UNKNOWN';\n let _width = 0;\n let _height = 0;\n let _datastart = null;\n let _swidth = null;\n do {\n currentLine = getline.next();\n const s = currentLine.value.line;\n if (!s.length) {\n continue; // eslint-disable-line no-continue\n }\n if (s[0] === '#') {\n const sArr = s.split(' ');\n const commentId = sArr[0];\n const key = sArr[1];\n if (commentId !== '#' || !key) {\n continue; // eslint-disable-line no-continue\n }\n const infoArr = sArr.length > 2 ? sArr.slice(2) : [];\n if (key === 'Description') {\n _description = infoArr.join(' ');\n } else if (key === 'DateTime') {\n _datetime = infoArr.join(' ');\n } else if (key === 'Offset') {\n // eslint-disable-next-line max-depth\n if (!sArr[2]) {\n throw new Error('Geoid model file: Error reading offset');\n }\n _offset = parseInt(sArr[2], 10);\n } else if (key === 'Scale') {\n // eslint-disable-next-line max-depth\n if (!sArr[2]) {\n throw new Error('Geoid model file: Error reading scale');\n }\n _scale = parseFloat(sArr[2]);\n } else if (key === (options.cubic ? 'MaxCubicError' : 'MaxBilinearError')) {\n // It's not an error if the error can't be read\n // eslint-disable-next-line max-depth\n if (isFinite(parseFloat(sArr[2]))) {\n _maxerror = parseFloat(sArr[2]);\n }\n } else if (key === (options.cubic ? 'RMSCubicError' : 'RMSBilinearError')) {\n // It's not an error if the error can't be read\n // eslint-disable-next-line max-depth\n if (isFinite(parseFloat(sArr[2]))) {\n _rmserror = parseFloat(sArr[2]);\n }\n }\n } else {\n let sArr = s.split(' ');\n sArr = sArr.filter((testString) => testString !== '');\n _width = parseInt(sArr[0], 10);\n _height = parseInt(sArr[1], 10);\n if (!(_width && _height)) {\n throw new Error('Geoid model file: Error reading raster size');\n }\n break;\n }\n } while (!currentLine.done);\n\n currentLine = getline.next();\n const maxval = parseInt(currentLine.value.line, 10);\n if (currentLine.done) {\n throw new Error('Geoid model file: Error reading maxval');\n }\n if (maxval !== PIXEL_MAX) {\n throw new Error('Geoid model file: Incorrect value of maxval');\n }\n // Add 1 for whitespace after maxval\n _datastart = currentLine.value.offset;\n _swidth = _width;\n\n if (_offset === Number.MAX_VALUE) {\n throw new Error('Geoid model file: Offset not set');\n }\n if (_scale === 0) {\n throw new Error('Geoid model file: Scale not set');\n }\n if (_scale < 0) {\n throw new Error('Geoid model file: Scale must be positive');\n }\n if (_height < 2 || _width < 2) {\n // Coarsest grid spacing is 180deg.\n throw new Error('Geoid model file: Raster size too small');\n }\n if (_width & 1) {\n // This is so that longitude grids can be extended thru the poles.\n throw new Error('Geoid model file: Raster width is odd');\n }\n if (!(_height & 1)) {\n // This is so that latitude grid includes the equator.\n throw new Error('Geoid model file: Raster height is even');\n }\n\n const _rlonres = _width / 360;\n const _rlatres = (_height - 1) / 180;\n return new GeoidHeightModel({\n cubic: options.cubic,\n _width,\n _height,\n _rlonres,\n _rlatres,\n _offset,\n _scale,\n _swidth,\n _datastart,\n _maxerror,\n _rmserror,\n _description,\n _datetime,\n data\n });\n}\n\n/**\n * Yields strings from pgm file (splitted by 10 - new line symbol)\n * @param {Uint8Array} data - binary buffer of pgm file\n * @returns {Generator}\n */\nfunction* _getLineGenerator(data) {\n let offset = 0;\n do {\n const endLineIndex = data.indexOf(ENDL, offset);\n if (endLineIndex !== -1) {\n const line = data.subarray(offset, endLineIndex);\n offset = endLineIndex + 1;\n yield {offset, line: _getStringFromCharArray(line)};\n } else {\n const line = data.subarray(offset, data.length);\n offset = data.length;\n yield {offset, line: _getStringFromCharArray(line)};\n }\n } while (offset < data.length);\n return {offset, line: ''};\n}\n\n/**\n * Converts Uint8Array of char-codes to string\n * @param {Uint8Array} array - binary buffer of pgm file\n * @returns {string}\n */\nfunction _getStringFromCharArray(array) {\n let s = '';\n for (const char of array) {\n s += String.fromCharCode(char);\n }\n return s;\n}\n"],"file":"pgm-parser.js"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Converts content of an I3S node to *.b3dm's file content
3
- */
4
- export default class B3dmConverter {
5
- rtcCenter: Float32Array;
6
- i3sTile: any;
7
-
8
- constructor();
9
-
10
- /**
11
- * The starter of content conversion
12
- * @param i3sTile - Tile3D instance for I3S node
13
- * @returns - encoded content
14
- */
15
- convert(i3sTile: Object, attributes?: any): ArrayBuffer;
16
-
17
- /**
18
- * Build and encode gltf
19
- * @param i3sTile - Tile3D instance for I3S node
20
- * @returns - encoded glb content
21
- */
22
- buildGltf(i3sTile): ArrayBuffer;
23
- }
@@ -1,16 +0,0 @@
1
- import {GeoidHeightModel} from '@loaders.gl/tile-converter/lib/geoid-height-model';
2
-
3
- /**
4
- * Convert quaternion-based OBB to half-axes-based OBB
5
- * @param i3SObb quaternion based OBB
6
- * @param geoidHeightModel the Earth Gravity Model instance
7
- * @returns number[12] 3DTiles OBB https://github.com/CesiumGS/3d-tiles/tree/master/specification#box
8
- */
9
- export function i3sObbTo3dTilesObb(
10
- i3SObb: {
11
- center: number[];
12
- halfSize: number[];
13
- quaternion: number[];
14
- },
15
- geoidHeightModel: GeoidHeightModel
16
- ): number[];
@@ -1,144 +0,0 @@
1
- /**
2
- * Represents one page node
3
- * {@link https://github.com/Esri/i3s-spec/blob/master/docs/1.7/node.cmn.md}
4
- */
5
- export type PageNodeType = {
6
- lodThreshold: number;
7
- obb: any;
8
- children: any[];
9
- mesh?: {
10
- geometry: {
11
- resource?: number;
12
- definition?: number;
13
- };
14
- material?: {
15
- resource?: number;
16
- definition?: number;
17
- };
18
- };
19
- };
20
-
21
- /**
22
- * class NodePages - wrapper of nodePages array
23
- *
24
- * @example
25
- * import writeFile from './helpers/write-file';
26
- *
27
- * // create an instance of the class
28
- * const nodePages = new NodePages(writeFile, HARDCODED_NODES_PER_PAGE);
29
- * ...
30
- * // push root node
31
- * const parentId = nodePages.push({
32
- lodThreshold: HARDCODED_MAX_SCREEN_THRESHOLD_SQ,
33
- obb: coordinates.obb,
34
- children: []
35
- });
36
- * ...
37
- * // push node with parent relation
38
- * const nodeInPage = {
39
- lodThreshold: HARDCODED_MAX_SCREEN_THRESHOLD_SQ,
40
- obb: coordinates.obb,
41
- children: [],
42
- mesh: {
43
- geometry: {
44
- definition: 0
45
- }
46
- }
47
- };
48
- * const nodeId = this.nodePages.push(nodeInPage, parentId);
49
- * ...
50
- * // save all the nodePages in the end of pushing all the nodes
51
- * await this.nodePages.save(layers0path);
52
- */
53
- export default class NodePages {
54
- readonly nodesPerPage: number;
55
- readonly nodesCounter: number;
56
- readonly writeFile: any;
57
- readonly nodePages: {nodes: PageNodeType[]}[];
58
-
59
- /**
60
- * @constructs
61
- * Create a nodePages instance.
62
- * @param writeFileFunc - function to save one nodePage into a file
63
- * @param nodesPerPage - length limit for one nodePage. An additional nodePage is created when this limit is met
64
- */
65
- constructor(writeFileFunc, nodesPerPage);
66
-
67
- /**
68
- * Setup function to save node pages
69
- * @param func - function which should be used to save node pages
70
- */
71
- useWriteFunction(func: Function): void;
72
-
73
- /**
74
- * Get the node by its end-to-end index
75
- * @param id - end-to-end index of the node
76
- * @return the node object
77
- */
78
- getNodeById(id: number): object;
79
-
80
- /**
81
- * Add a child id into the parent node.children array
82
- * @param parentId - end-to-end parent node index
83
- * @param childId - end-to-end child node index
84
- */
85
- addChildRelation(parentId: number, childId: number): void;
86
-
87
- /**
88
- * Update resource index in node.mesh object
89
- * @param {object} node - node object
90
- */
91
- updateResourceInMesh(node: object): void;
92
-
93
- /**
94
- * Update material in node.mesh object by node id
95
- * @param id - end-to-end index of the node
96
- * @param materialId - id from scene layer materialDefinitions
97
- */
98
- updateMaterialByNodeId(id: number, materialId: number);
99
-
100
- /**
101
- * Update vertexCount in node.mesh.geometry object by node id
102
- * @param id - end-to-end index of the node
103
- * @param vertexCount - vertex count for particular node
104
- */
105
- updateVertexCountByNodeId(id: number, vertexCount: number);
106
-
107
- /**
108
- * Update resource in node.mesh.attribute object by node id
109
- * @param id - end-to-end index of the node
110
- */
111
- updateNodeAttributeByNodeId(id: number);
112
-
113
- /**
114
- * Update featureCount in node.mesh.geometry object by node id
115
- * @param id - end-to-end index of the node
116
- * @param featureCount - features count of the node
117
- */
118
- updateFeatureCountByNodeId(id: number, featureCount: number);
119
-
120
- /**
121
- * Update texelCountHint in node.mesh.material object by node id
122
- * @param id - end-to-end index of the node
123
- * @param texelCountHint - texelCountHint of particular node
124
- */
125
- updateTexelCountHintByNodeId(id: number, texelCountHint: number);
126
-
127
- /**
128
- * Put new node in nodePages array
129
- * @param node - node object
130
- * @param parentId - index of parent node
131
- * @return
132
- */
133
- push(node: PageNodeType, parentId?: number): number;
134
-
135
- /**
136
- * Save all the node pages
137
- * Run this method when all nodes is pushed in nodePages
138
- * @param {string} layers0path - path of layer
139
- * @param {Object} fileMap - fileMap which keep info for slpk archive
140
- * @param {boolean} slpk
141
- * @return {promise}
142
- */
143
- save(layers0path: string, fileMap: Object, slpk: boolean): Promise<void>;
144
- }
@@ -1,41 +0,0 @@
1
- /**
2
- * class GeoidHeightModel - "Gravity Height Model"
3
- * Calculates difference between mean see level height and WGS84 ellipsoid height
4
- * Input data have to be loaded from "Earth Gravity Model" *.pgm file with "PGMLoader"
5
- * A particular model file can be loaded on https://geographiclib.sourceforge.io/html/geoid.html
6
- *
7
- * The implementation is ported from GeographicLib-1.50.1
8
- */
9
- export class GeoidHeightModel {
10
- /**
11
- * @constructs
12
- * Create a GeoidHeightModel instance.
13
- * @param options - object which includes parameters parsed from *.pgm header
14
- * @param options.data - binary buffer of *.pgm file
15
- */
16
- constructor(options: {
17
- cubic: boolean;
18
- _width: number;
19
- _height: number;
20
- _rlonres: number;
21
- _rlatres: number;
22
- _offset: number;
23
- _scale: number;
24
- _swidth: number;
25
- _datastart: number;
26
- _maxerror: number;
27
- _rmserror: number;
28
- _description: string;
29
- _datetime: string;
30
- data: Uint8Array;
31
- });
32
-
33
- /**
34
- * Calculates difference between mean see level height and WGS84 ellipsoid height
35
- * Code is ported from /GeographicLib-1.50.1/src/Geoid.cpp
36
- * @param lat - latitude
37
- * @param lon - longitude
38
- * @returns height in meters
39
- */
40
- getHeight(lat: number, lon: number): number;
41
- }