@openglobus/og 0.13.12 → 0.14.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 (80) hide show
  1. package/README.md +1 -4
  2. package/css/og.css +1 -1
  3. package/dist/@openglobus/og.css +1 -1
  4. package/dist/@openglobus/og.esm.js +2 -2
  5. package/dist/@openglobus/og.esm.js.map +1 -1
  6. package/dist/@openglobus/og.umd.js +2 -2
  7. package/dist/@openglobus/og.umd.js.map +1 -1
  8. package/package.json +2 -2
  9. package/src/og/Globe.js +14 -4
  10. package/src/og/camera/Camera.js +7 -7
  11. package/src/og/camera/PlanetCamera.js +1 -1
  12. package/src/og/control/LayerSwitcher.js +48 -31
  13. package/src/og/control/MouseNavigation.js +2 -2
  14. package/src/og/control/ScaleControl.js +30 -10
  15. package/src/og/control/SimpleSkyBackground.js +184 -0
  16. package/src/og/control/Sun.js +3 -2
  17. package/src/og/ellipsoid/Ellipsoid.js +119 -92
  18. package/src/og/ellipsoid/wgs84.js +13 -13
  19. package/src/og/entity/Entity.js +3 -3
  20. package/src/og/entity/GeometryHandler.js +1341 -1337
  21. package/src/og/entity/Polyline.js +0 -16
  22. package/src/og/entity/Ray.js +0 -10
  23. package/src/og/entity/RayHandler.js +3 -44
  24. package/src/og/entity/Strip.js +1 -6
  25. package/src/og/index.js +106 -95
  26. package/src/og/layer/GeoVideo.js +1 -0
  27. package/src/og/layer/Layer.js +62 -3
  28. package/src/og/layer/XYZ.js +4 -3
  29. package/src/og/math/Line3.js +140 -139
  30. package/src/og/math/Plane.js +118 -117
  31. package/src/og/math/Ray.js +242 -239
  32. package/src/og/math/Vec3.js +56 -37
  33. package/src/og/math/Vec4.js +3 -4
  34. package/src/og/math.js +21 -21
  35. package/src/og/quadTree/EarthQuadTreeStrategy.js +29 -0
  36. package/src/og/quadTree/MarsQuadTreeStrategy.js +27 -0
  37. package/src/og/quadTree/Node.js +55 -218
  38. package/src/og/quadTree/QuadTreeStrategy.js +93 -0
  39. package/src/og/quadTree/Wgs84QuadTreeStrategy.js +26 -0
  40. package/src/og/renderer/Renderer.js +13 -12
  41. package/src/og/renderer/RendererEvents.js +1065 -1065
  42. package/src/og/scene/Planet.js +84 -273
  43. package/src/og/segment/Segment.js +18 -25
  44. package/src/og/segment/SegmentLonLat.js +34 -31
  45. package/src/og/segment/SegmentLonLatWgs84.js +41 -0
  46. package/src/og/shaders/ray.js +13 -6
  47. package/src/og/shaders/toneMapping.js +5 -5
  48. package/src/og/terrain/GlobusTerrain.js +3 -2
  49. package/src/og/terrain/MapboxTerrain.js +231 -52
  50. package/src/og/utils/quadTreeType.js +11 -0
  51. package/src/og/utils/shared.js +942 -942
  52. package/src/og/webgl/Handler.js +22 -9
  53. package/types/Globe.d.ts +7 -0
  54. package/types/camera/Camera.d.ts +3 -3
  55. package/types/camera/PlanetCamera.d.ts +1 -1
  56. package/types/control/LayerSwitcher.d.ts +1 -1
  57. package/types/control/ScaleControl.d.ts +2 -1
  58. package/types/control/SimpleSkyBackground.d.ts +11 -0
  59. package/types/control/Sun.d.ts +2 -1
  60. package/types/ellipsoid/Ellipsoid.d.ts +3 -2
  61. package/types/entity/Ray.d.ts +0 -3
  62. package/types/entity/RayHandler.d.ts +0 -4
  63. package/types/index.d.ts +6 -1
  64. package/types/layer/Layer.d.ts +8 -0
  65. package/types/math/Vec3.d.ts +19 -16
  66. package/types/math/Vec4.d.ts +2 -3
  67. package/types/math.d.ts +20 -20
  68. package/types/quadTree/EarthQuadTreeStrategy.d.ts +3 -0
  69. package/types/quadTree/MarsQuadTreeStrategy.d.ts +3 -0
  70. package/types/quadTree/Node.d.ts +0 -1
  71. package/types/quadTree/QuadTreeStrategy.d.ts +21 -0
  72. package/types/quadTree/Wgs84QuadTreeStrategy.d.ts +3 -0
  73. package/types/renderer/Renderer.d.ts +1 -1
  74. package/types/scene/Planet.d.ts +6 -24
  75. package/types/segment/Segment.d.ts +4 -4
  76. package/types/segment/SegmentLonLat.d.ts +6 -2
  77. package/types/segment/SegmentLonLatWgs84.d.ts +4 -0
  78. package/types/terrain/MapboxTerrain.d.ts +2 -1
  79. package/types/utils/quadTreeType.d.ts +8 -0
  80. package/types/webgl/Handler.d.ts +4 -1
@@ -2,10 +2,15 @@ import { getTileExtent } from "../mercator.js";
2
2
  import { Layer } from "../layer/Layer.js";
3
3
  import { GlobusTerrain } from "./GlobusTerrain.js";
4
4
  import { isPowerOfTwo } from "../math.js";
5
+ import * as mercator from "../mercator.js";
5
6
 
6
7
  const KEY =
7
8
  "pk.eyJ1IjoiZm94bXVsZGVyODMiLCJhIjoiY2pqYmR3dG5oM2Z1bzNrczJqYm5pODhuNSJ9.Y4DRmEPhb-XSlCR9CAXACQ";
8
9
 
10
+ const rgb2Height = (r, g, b) => {
11
+ return -10000 + 0.1 * (r * 256 * 256 + g * 256 + b);
12
+ };
13
+
9
14
  class MapboxTerrain extends GlobusTerrain {
10
15
  constructor(name, options = {}) {
11
16
  super(name || "mapbox", options);
@@ -39,10 +44,12 @@ class MapboxTerrain extends GlobusTerrain {
39
44
  this._imageSize = options.imageSize || 256;
40
45
 
41
46
  this._ctx = this._createTemporalCanvas(this._imageSize);
47
+
48
+ this._imageDataCache = {};
42
49
  }
43
50
 
44
51
  isBlur(segment) {
45
- if (segment.tileZoom >= 13) {
52
+ if (segment.tileZoom >= 16) {
46
53
  return true;
47
54
  }
48
55
  return false;
@@ -52,15 +59,19 @@ class MapboxTerrain extends GlobusTerrain {
52
59
  let canvas = document.createElement("canvas");
53
60
  canvas.width = size;
54
61
  canvas.height = size;
55
- return canvas.getContext("2d");
62
+ return canvas.getContext("2d",
63
+ {
64
+ willReadFrequently: true
65
+ });
56
66
  }
57
67
 
58
- _createHeights(data, tileIndex, tileX, tileY, tileZoom, extent) {
59
- const SIZE = data.width;
68
+ _createHeights(data, tileIndex, tileX, tileY, tileZoom, extent, preventChildren) {
60
69
 
61
- this._ctx.clearRect(0, 0, SIZE, SIZE);
70
+ this._ctx.clearRect(0, 0, this._imageSize, this._imageSize);
62
71
  this._ctx.drawImage(data, 0, 0);
63
- let rgbaData = this._ctx.getImageData(0, 0, SIZE, SIZE).data;
72
+ let rgbaData = this._ctx.getImageData(0, 0, this._imageSize, this._imageSize).data;
73
+
74
+ const SIZE = data.width;
64
75
 
65
76
  //
66
77
  //Non power of two images
@@ -71,25 +82,42 @@ class MapboxTerrain extends GlobusTerrain {
71
82
  return outCurrenElevations;
72
83
  }
73
84
 
74
- // TODO:
75
- //if (this._imageSize === this.plainGridSize) {
76
- // let elevationsSize = (this.plainGridSize + 1) * (this.plainGridSize + 1);
77
- // let d = SIZE / this.plainGridSize;
85
+ if (this._imageSize === this.plainGridSize) {
86
+ let elevationsSize = (this.plainGridSize + 1) * (this.plainGridSize + 1);
87
+ let outCurrenElevations = new Float32Array(elevationsSize);
88
+ for (let k = 0, len = this._imageSize * this._imageSize; k < len; k++) {
89
+ let j = k % this._imageSize,
90
+ i = Math.floor(k / this._imageSize);
91
+ let fromInd4 = k * 4;
92
+ let h = rgb2Height(rgbaData[fromInd4], rgbaData[fromInd4 + 1], rgbaData[fromInd4 + 2]);
93
+ outCurrenElevations[i * (this._imageSize + 1) + j] = h;
94
+ }
95
+
96
+ for (let i = 0, len = this._imageSize; i < len; i++) {
97
+ let j = this._imageSize - 1;
98
+ let fromInd4 = (i * this._imageSize + j) * 4;
99
+ let h = rgb2Height(rgbaData[fromInd4], rgbaData[fromInd4 + 1], rgbaData[fromInd4 + 2]);
100
+ outCurrenElevations[i * (this._imageSize + 1) + this._imageSize] = h;
101
+ }
78
102
 
79
- // let outCurrenElevations = new Float32Array(elevationsSize);
103
+ for (let j = 0, len = this._imageSize; j < len; j++) {
104
+ let i = this._imageSize - 1;
105
+ let fromInd4 = (i * this._imageSize + j) * 4;
106
+ let h = rgb2Height(rgbaData[fromInd4], rgbaData[fromInd4 + 1], rgbaData[fromInd4 + 2]);
107
+ outCurrenElevations[this._imageSize * (this._imageSize + 1) + j] = h;
108
+ }
80
109
 
81
- // for (let i = 0, len = outCurrenElevations.length; i < len; i++) {
82
- // let i4 = i * 4;
83
- // outCurrenElevations[i] = -10000 + 0.1 * (rgbaData[i4] * 256 * 256 + rgbaData[i4 + 1] * 256 + rgbaData[i4 + 2]);
84
- // }
110
+ let h = rgb2Height(rgbaData[rgbaData.length - 4], rgbaData[rgbaData.length - 3], rgbaData[rgbaData.length - 2]);
111
+ outCurrenElevations[outCurrenElevations.length - 1] = h;
85
112
 
86
- // return outCurrenElevations;
87
- //}
113
+ return outCurrenElevations;
114
+ }
88
115
 
89
116
  //
90
117
  // Power of two images
91
118
  //
92
119
  let elevationsSize = (this.plainGridSize + 1) * (this.plainGridSize + 1);
120
+
93
121
  let d = SIZE / this.plainGridSize;
94
122
 
95
123
  let outCurrenElevations = new Float32Array(elevationsSize);
@@ -102,40 +130,99 @@ class MapboxTerrain extends GlobusTerrain {
102
130
  }
103
131
  }
104
132
 
105
- extractElevationTilesMapbox(
106
- rgbaData,
107
- this.noDataValues,
108
- outCurrenElevations,
109
- outChildrenElevations
110
- );
133
+ if (preventChildren) {
134
+ extractElevationTilesMapboxNoChildren(rgbaData, this.noDataValues, outCurrenElevations);
135
+ } else {
136
+ extractElevationTilesMapbox(
137
+ rgbaData,
138
+ this.noDataValues,
139
+ outCurrenElevations,
140
+ outChildrenElevations
141
+ );
142
+ }
111
143
 
112
144
  this._elevationCache[tileIndex] = {
113
145
  heights: outCurrenElevations,
114
146
  extent: extent//segment.getExtent()
115
147
  };
116
148
 
117
- for (let i = 0; i < d; i++) {
118
- for (let j = 0; j < d; j++) {
119
- let x = tileX * 2 + j,
120
- y = tileY * 2 + i,
121
- z = tileZoom + 1;
122
- let tileIndex = Layer.getTileIndex(x, y, z);
123
- this._elevationCache[tileIndex] = {
124
- heights: outChildrenElevations[i][j],
125
- extent: getTileExtent(x, y, z)
126
- };
149
+ if (!preventChildren) {
150
+ for (let i = 0; i < d; i++) {
151
+ for (let j = 0; j < d; j++) {
152
+ let x = tileX * 2 + j,
153
+ y = tileY * 2 + i,
154
+ z = tileZoom + 1;
155
+ let tileIndex = Layer.getTileIndex(x, y, z);
156
+ this._elevationCache[tileIndex] = {
157
+ heights: outChildrenElevations[i][j],
158
+ extent: getTileExtent(x, y, z)
159
+ };
160
+ }
127
161
  }
128
162
  }
129
163
 
130
164
  return outCurrenElevations;
131
165
  }
166
+
167
+ getHeightAsync(lonLat, callback, zoom) {
168
+ if (!lonLat || lonLat.lat > mercator.MAX_LAT || lonLat.lat < mercator.MIN_LAT) {
169
+ callback(0);
170
+ return true;
171
+ }
172
+
173
+ let z = zoom || this.maxZoom,
174
+ size = mercator.POLE2 / Math.pow(2, z),
175
+ merc = mercator.forward(lonLat),
176
+ x = Math.floor((mercator.POLE + merc.lon) / size),
177
+ y = Math.floor((mercator.POLE - merc.lat) / size);
178
+
179
+ let tileIndex = Layer.getTileIndex(x, y, z),
180
+ extent = mercator.getTileExtent(x, y, z);
181
+
182
+ let sizeImgW = extent.getWidth() / (this._imageSize - 1),
183
+ sizeImgH = extent.getHeight() / (this._imageSize - 1);
184
+
185
+ let i = this._imageSize - Math.ceil((merc.lat - extent.southWest.lat) / sizeImgH) - 1,
186
+ j = Math.floor((merc.lon - extent.southWest.lon) / sizeImgW);
187
+ let index = (i * this._imageSize + j) * 4;
188
+
189
+ if (this._imageDataCache[tileIndex]) {
190
+ let data = this._imageDataCache[tileIndex];
191
+ callback(rgb2Height(data[index], data[index + 1], data[index + 2]));
192
+ return true;
193
+ }
194
+
195
+ if (!this._fetchCache[tileIndex]) {
196
+ let url = this._buildURL(x, y, z);
197
+ this._fetchCache[tileIndex] = this._loader.fetch({
198
+ src: url,
199
+ type: this._dataType
200
+ });
201
+ }
202
+
203
+ this._fetchCache[tileIndex].then((response) => {
204
+ if (response.status === "ready") {
205
+ this._ctx.clearRect(0, 0, this._imageSize, this._imageSize);
206
+ this._ctx.drawImage(response.data, 0, 0);
207
+ let data = this._ctx.getImageData(0, 0, 256, 256).data;
208
+ this._imageDataCache[tileIndex] = data;
209
+ callback(rgb2Height(data[index], data[index + 1], data[index + 2]));
210
+ } else if (response.status === "error") {
211
+ callback(0);
212
+ } else {
213
+ this._fetchCache[tileIndex] = null;
214
+ delete this._fetchCache[tileIndex];
215
+ }
216
+ });
217
+
218
+ return false;
219
+ }
132
220
  }
133
221
 
134
222
  function extractElevationTilesMapboxNonPowerOfTwo(rgbaData, outCurrenElevations) {
135
223
  for (let i = 0, len = outCurrenElevations.length; i < len; i++) {
136
224
  let i4 = i * 4;
137
- outCurrenElevations[i] =
138
- -10000 + 0.1 * (rgbaData[i4] * 256 * 256 + rgbaData[i4 + 1] * 256 + rgbaData[i4 + 2]);
225
+ outCurrenElevations[i] = rgb2Height(rgbaData[i4], rgbaData[i4 + 1], rgbaData[i4 + 2]);
139
226
  }
140
227
  }
141
228
 
@@ -161,8 +248,8 @@ function extractElevationTilesMapbox(
161
248
  ) {
162
249
  let k4 = k * 4;
163
250
 
164
- let height =
165
- -10000 + 0.1 * (rgbaData[k4] * 256 * 256 + rgbaData[k4 + 1] * 256 + rgbaData[k4 + 2]);
251
+ let height = rgb2Height(rgbaData[k4], rgbaData[k4 + 1], rgbaData[k4 + 2]);
252
+ //-10000 + 0.1 * (rgbaData[k4] * 256 * 256 + rgbaData[k4 + 1] * 256 + rgbaData[k4 + 2]);
166
253
 
167
254
  let isNoDataCurrent = MapboxTerrain.checkNoDataValue(noDataValues, height),
168
255
  isNoDataRight = false,
@@ -189,9 +276,8 @@ function extractElevationTilesMapbox(
189
276
 
190
277
  if ((j + 1) % destSize === 0 && j !== sourceSize - 1) {
191
278
  //current tile
192
- rightHeight =
193
- -10000 +
194
- 0.1 * (rgbaData[k4 + 4] * 256 * 256 + rgbaData[k4 + 5] * 256 + rgbaData[k4 + 6]);
279
+ rightHeight = rgb2Height(rgbaData[k4 + 4], rgbaData[k4 + 5], rgbaData[k4 + 6]);
280
+ // -10000 + 0.1 * (rgbaData[k4 + 4] * 256 * 256 + rgbaData[k4 + 5] * 256 + rgbaData[k4 + 6]);
195
281
 
196
282
  isNoDataRight = MapboxTerrain.checkNoDataValue(noDataValues, rightHeight);
197
283
 
@@ -217,12 +303,8 @@ function extractElevationTilesMapbox(
217
303
  //current tile
218
304
  sourceSize4 = sourceSize * 4;
219
305
 
220
- bottomHeight =
221
- -10000 +
222
- 0.1 *
223
- (rgbaData[k4 + sourceSize4] * 256 * 256 +
224
- rgbaData[k4 + sourceSize4 + 1] * 256 +
225
- rgbaData[k4 + sourceSize4 + 2]);
306
+ bottomHeight = rgb2Height(rgbaData[k4 + sourceSize4], rgbaData[k4 + sourceSize4 + 1], rgbaData[k4 + sourceSize4 + 2]);
307
+ // -10000 + 0.1 * (rgbaData[k4 + sourceSize4] * 256 * 256 + rgbaData[k4 + sourceSize4 + 1] * 256 + rgbaData[k4 + sourceSize4 + 2]);
226
308
 
227
309
  isNoDataBottom = MapboxTerrain.checkNoDataValue(noDataValues, bottomHeight);
228
310
 
@@ -251,12 +333,8 @@ function extractElevationTilesMapbox(
251
333
  i !== sourceSize - 1
252
334
  ) {
253
335
  //current tile
254
- let rightBottomHeight =
255
- -10000 +
256
- 0.1 *
257
- (rgbaData[k4 + sourceSize4 + 4] * 256 * 256 +
258
- rgbaData[k4 + sourceSize4 + 5] * 256 +
259
- rgbaData[k4 + sourceSize4 + 6]);
336
+ let rightBottomHeight = rgb2Height(rgbaData[k4 + sourceSize4 + 4], rgbaData[k4 + sourceSize4 + 5], rgbaData[k4 + sourceSize4 + 6]);
337
+ // -10000 + 0.1 * (rgbaData[k4 + sourceSize4 + 4] * 256 * 256 + rgbaData[k4 + sourceSize4 + 5] * 256 + rgbaData[k4 + sourceSize4 + 6]);
260
338
 
261
339
  let isNoDataRightBottom = MapboxTerrain.checkNoDataValue(
262
340
  noDataValues,
@@ -289,4 +367,105 @@ function extractElevationTilesMapbox(
289
367
  }
290
368
  }
291
369
 
370
+ function extractElevationTilesMapboxNoChildren(
371
+ rgbaData,
372
+ noDataValues,
373
+ outCurrenElevations
374
+ ) {
375
+ let destSize = Math.sqrt(outCurrenElevations.length) - 1;
376
+ let sourceSize = Math.sqrt(rgbaData.length / 4);
377
+ let dt = sourceSize / destSize;
378
+
379
+ let rightHeight = 0,
380
+ bottomHeight = 0,
381
+ sourceSize4 = 0;
382
+
383
+ for (
384
+ let k = 0, currIndex = 0, sourceDataLength = rgbaData.length / 4;
385
+ k < sourceDataLength;
386
+ k++
387
+ ) {
388
+ let k4 = k * 4;
389
+
390
+ let height = rgb2Height(rgbaData[k4], rgbaData[k4 + 1], rgbaData[k4 + 2]);
391
+ //-10000 + 0.1 * (rgbaData[k4] * 256 * 256 + rgbaData[k4 + 1] * 256 + rgbaData[k4 + 2]);
392
+
393
+ let isNoDataCurrent = MapboxTerrain.checkNoDataValue(noDataValues, height),
394
+ isNoDataRight = false,
395
+ isNoDataBottom = false;
396
+
397
+ let i = Math.floor(k / sourceSize),
398
+ j = k % sourceSize;
399
+
400
+ let tileX = Math.floor(j / destSize),
401
+ tileY = Math.floor(i / destSize);
402
+
403
+ if ((i + tileY) % dt === 0 && (j + tileX) % dt === 0) {
404
+ outCurrenElevations[currIndex++] = height;
405
+ }
406
+
407
+ if ((j + 1) % destSize === 0 && j !== sourceSize - 1) {
408
+ //current tile
409
+ rightHeight = rgb2Height(rgbaData[k4 + 4], rgbaData[k4 + 5], rgbaData[k4 + 6]);
410
+ //-10000 + 0.1 * (rgbaData[k4 + 4] * 256 * 256 + rgbaData[k4 + 5] * 256 + rgbaData[k4 + 6]);
411
+
412
+ isNoDataRight = MapboxTerrain.checkNoDataValue(noDataValues, rightHeight);
413
+
414
+ let middleHeight = height;
415
+
416
+ if (!(isNoDataCurrent || isNoDataRight)) {
417
+ middleHeight = (height + rightHeight) * 0.5;
418
+ }
419
+
420
+ if ((i + tileY) % dt === 0) {
421
+ outCurrenElevations[currIndex++] = middleHeight;
422
+ }
423
+ }
424
+
425
+ if ((i + 1) % destSize === 0 && i !== sourceSize - 1) {
426
+ //current tile
427
+ sourceSize4 = sourceSize * 4;
428
+
429
+ bottomHeight = rgb2Height(rgbaData[k4 + sourceSize4], rgbaData[k4 + sourceSize4 + 1], rgbaData[k4 + sourceSize4 + 2]);
430
+ // -10000 + 0.1 * (rgbaData[k4 + sourceSize4] * 256 * 256 + rgbaData[k4 + sourceSize4 + 1] * 256 + rgbaData[k4 + sourceSize4 + 2]);
431
+
432
+ isNoDataBottom = MapboxTerrain.checkNoDataValue(noDataValues, bottomHeight);
433
+
434
+ let middleHeight = (height + bottomHeight) * 0.5;
435
+
436
+ if (!(isNoDataCurrent || isNoDataBottom)) {
437
+ middleHeight = (height + bottomHeight) * 0.5;
438
+ }
439
+
440
+ if ((j + tileX) % dt === 0) {
441
+ outCurrenElevations[currIndex++] = middleHeight;
442
+ }
443
+ }
444
+
445
+ if (
446
+ (j + 1) % destSize === 0 &&
447
+ j !== sourceSize - 1 &&
448
+ (i + 1) % destSize === 0 &&
449
+ i !== sourceSize - 1
450
+ ) {
451
+ //current tile
452
+ let rightBottomHeight = rgb2Height(rgbaData[k4 + sourceSize4 + 4], rgbaData[k4 + sourceSize4 + 5], rgbaData[k4 + sourceSize4 + 6]);
453
+ // -10000 + 0.1 * (rgbaData[k4 + sourceSize4 + 4] * 256 * 256 + rgbaData[k4 + sourceSize4 + 5] * 256 + rgbaData[k4 + sourceSize4 + 6]);
454
+
455
+ let isNoDataRightBottom = MapboxTerrain.checkNoDataValue(
456
+ noDataValues,
457
+ rightBottomHeight
458
+ );
459
+
460
+ let middleHeight = height;
461
+
462
+ if (!(isNoDataCurrent || isNoDataRight || isNoDataBottom || isNoDataRightBottom)) {
463
+ middleHeight = (height + rightHeight + bottomHeight + rightBottomHeight) * 0.25;
464
+ }
465
+
466
+ outCurrenElevations[currIndex++] = middleHeight;
467
+ }
468
+ }
469
+ }
470
+
292
471
  export { MapboxTerrain };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ import { EarthQuadTreeStrategy } from "../quadTree/EarthQuadTreeStrategy.js";
4
+ import { MarsQuadTreeStrategy } from "../quadTree/MarsQuadTreeStrategy.js";
5
+ import { Wgs84QuadTreeStrategy } from "../quadTree/Wgs84QuadTreeStrategy.js";
6
+
7
+ export const quadTreeStrategyType = {
8
+ earth: EarthQuadTreeStrategy,
9
+ mars: MarsQuadTreeStrategy,
10
+ wgs84: Wgs84QuadTreeStrategy
11
+ }