@openglobus/og 0.13.10 → 0.14.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +1 -4
  2. package/dist/@openglobus/og.esm.js +2 -2
  3. package/dist/@openglobus/og.esm.js.map +1 -1
  4. package/dist/@openglobus/og.umd.js +2 -2
  5. package/dist/@openglobus/og.umd.js.map +1 -1
  6. package/package.json +2 -2
  7. package/src/og/Globe.js +14 -6
  8. package/src/og/control/Sun.js +3 -2
  9. package/src/og/entity/GeometryHandler.js +3 -3
  10. package/src/og/entity/LabelHandler.js +1 -4
  11. package/src/og/entity/LabelWorker.js +10 -13
  12. package/src/og/index.js +106 -95
  13. package/src/og/layer/GeoVideo.js +1 -0
  14. package/src/og/layer/Layer.js +13 -12
  15. package/src/og/layer/XYZ.js +4 -3
  16. package/src/og/quadTree/EarthQuadTreeStrategy.js +29 -0
  17. package/src/og/quadTree/MarsQuadTreeStrategy.js +27 -0
  18. package/src/og/quadTree/Node.js +53 -216
  19. package/src/og/quadTree/QuadTreeStrategy.js +93 -0
  20. package/src/og/quadTree/Wgs84QuadTreeStrategy.js +26 -0
  21. package/src/og/scene/Planet.js +20 -156
  22. package/src/og/segment/Segment.js +18 -25
  23. package/src/og/segment/SegmentLonLat.js +34 -31
  24. package/src/og/segment/SegmentLonLatWgs84.js +41 -0
  25. package/src/og/utils/quadTreeType.js +11 -0
  26. package/types/Globe.d.ts +7 -0
  27. package/types/control/Sun.d.ts +2 -1
  28. package/types/entity/LabelWorker.d.ts +1 -1
  29. package/types/index.d.ts +6 -1
  30. package/types/quadTree/EarthQuadTreeStrategy.d.ts +3 -0
  31. package/types/quadTree/MarsQuadTreeStrategy.d.ts +3 -0
  32. package/types/quadTree/Node.d.ts +0 -1
  33. package/types/quadTree/QuadTreeStrategy.d.ts +21 -0
  34. package/types/quadTree/Wgs84QuadTreeStrategy.d.ts +3 -0
  35. package/types/scene/Planet.d.ts +2 -24
  36. package/types/segment/Segment.d.ts +4 -4
  37. package/types/segment/SegmentLonLat.d.ts +6 -2
  38. package/types/segment/SegmentLonLatWgs84.d.ts +4 -0
  39. package/types/utils/quadTreeType.d.ts +8 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openglobus/og",
3
- "version": "0.13.10",
3
+ "version": "0.14.10",
4
4
  "description": "[OpenGlobus](https://www.openglobus.org/) is a javascript library designed to display interactive 3d maps and planets with map tiles, imagery and vector data, markers and 3d objects. It uses the WebGL technology, open source and completely free.",
5
5
  "directories": {
6
6
  "example": "./sandbox"
@@ -81,4 +81,4 @@
81
81
  "globe",
82
82
  "og"
83
83
  ]
84
- }
84
+ }
package/src/og/Globe.js CHANGED
@@ -69,7 +69,8 @@ const PLANET_NAME_PREFIX = "globus_planet_";
69
69
  * @param {Number} [options.maxEqualZoomAltitude=15000000.0] - Maximal altitude since segments on the screen bacame the same zoom level
70
70
  * @param {Number} [options.minEqualZoomAltitude=10000.0] - Minimal altitude since segments on the screen bacame the same zoom level
71
71
  * @param {Number} [options.minEqualZoomCameraSlope=0.8] - Minimal camera slope above te globe where segments on the screen bacame the same zoom level
72
- * @param {Number} [options.loadingBatchSize=12] -
72
+ * @param {Number} [options.loadingBatchSize=12] -
73
+ * @param {Number} [options.quadTreeStrategyPrototype] - Prototype of quadTree. QuadTreeStrategy for Earth is default.
73
74
  */
74
75
 
75
76
  class Globe {
@@ -128,13 +129,12 @@ class Globe {
128
129
  context: {
129
130
  alpha: false,
130
131
  antialias: false,
131
- powerPreference: "high-performance",
132
132
  premultipliedAlpha: true
133
133
  }
134
134
  }), {
135
- autoActivate: false,
136
- backgroundColor: createColorRGB(options.backgroundColor, new Vec3(115 / 255, 203 / 255, 249 / 255))
137
- }
135
+ autoActivate: false,
136
+ backgroundColor: createColorRGB(options.backgroundColor, new Vec3(115 / 255, 203 / 255, 249 / 255))
137
+ }
138
138
  );
139
139
  this.renderer.initialize();
140
140
  this.renderer.div = this.div;
@@ -158,6 +158,13 @@ class Globe {
158
158
  */
159
159
  this._planetName = options.name ? options.name : PLANET_NAME_PREFIX + Globe._staticCounter;
160
160
 
161
+ /**
162
+ * quad tree type.
163
+ * @private
164
+ * @type {Number}
165
+ */
166
+ this._quadTreeType = options.quadTreeType;
167
+
161
168
  if (options.atmosphere) {
162
169
  /**
163
170
  * Render node renders a planet.
@@ -178,7 +185,8 @@ class Globe {
178
185
  maxEqualZoomAltitude: options.maxEqualZoomAltitude,
179
186
  minEqualZoomAltitude: options.minEqualZoomAltitude,
180
187
  minEqualZoomCameraSlope: options.minEqualZoomCameraSlope,
181
- loadingBatchSize: options.loadingBatchSize
188
+ quadTreeStrategyPrototype: options.quadTreeStrategyPrototype,
189
+ maxLoadingRequests: options.maxLoadingRequests
182
190
  });
183
191
  }
184
192
 
@@ -10,7 +10,6 @@ import { LightSource } from "../light/LightSource.js";
10
10
  import { Quat } from "../math/Quat.js";
11
11
  import { Vec3 } from "../math/Vec3.js";
12
12
 
13
- const ACTIVATION_HEIGHT = 12079000.0;
14
13
  /**
15
14
  * Real Sun geocentric position control that place the Sun on the right place by the Earth.
16
15
  * @class
@@ -39,6 +38,8 @@ class Sun extends Control {
39
38
  */
40
39
  // this._isCameraSunlight = false;
41
40
 
41
+ this.activationHeight = options.activationHeight || 12079000.0;
42
+
42
43
  this.offsetVertical = options.offsetVertical || -5000000;
43
44
 
44
45
  this.offsetHorizontal = options.offsetHorizontal || 5000000;
@@ -106,7 +107,7 @@ class Sun extends Control {
106
107
  this._currDate = this._clockPtr.currentDate;
107
108
  if (!this._stopped) {
108
109
  var cam = this.renderer.activeCamera;
109
- if (cam.getHeight() < ACTIVATION_HEIGHT || !this._active) {
110
+ if (cam.getHeight() < this.activationHeight || !this._active) {
110
111
  this._lightOn = true;
111
112
  this._f = 1;
112
113
  var n = cam.eye.normal(),
@@ -1030,9 +1030,9 @@ class GeometryHandler {
1030
1030
  _updatePlanet() {
1031
1031
  var p = this._layer._planet;
1032
1032
  if (p) {
1033
- this._refreshPlanetNode(p._quadTree);
1034
- this._refreshPlanetNode(p._quadTreeNorth);
1035
- this._refreshPlanetNode(p._quadTreeSouth);
1033
+ p.quadTreeStrategy.quadTreeList.forEach(quadTree => {
1034
+ this._refreshPlanetNode(quadTree);
1035
+ });
1036
1036
  }
1037
1037
  this._updatedGeometryArr.length = 0;
1038
1038
  this._updatedGeometryArr = [];
@@ -85,8 +85,7 @@ class LabelHandler extends BillboardHandler {
85
85
  }
86
86
 
87
87
  _addLabelToArrays(label) {
88
- this._renderer.labelWorker.make(label);
89
- console.time(`label${label.id}`)
88
+ this._renderer.labelWorker.make({ handler: this, label: label });
90
89
  }
91
90
 
92
91
  assignFontAtlas(label) {
@@ -122,8 +121,6 @@ class LabelHandler extends BillboardHandler {
122
121
  label.update();
123
122
 
124
123
  this.refresh();
125
- console.timeEnd(`label${label.id}`)
126
- console.log(label)
127
124
  }
128
125
  }
129
126
 
@@ -14,33 +14,30 @@ class LabelWorker extends BaseWorker {
14
14
  }
15
15
 
16
16
  _onMessage(e) {
17
+ let s = this._source.get(e.data.id);
17
18
 
18
- let label = this._source.get(e.data.id);
19
-
20
- if (label._lockId === LOCK_UPDATE) {
19
+ if (s.label._lockId === LOCK_UPDATE) {
21
20
  requestAnimationFrame(() => {
22
- this.make(label);
21
+ this.make({ handler: s.handler, label: s.label });
23
22
  });
24
23
  } else {
25
- label._handler.workerCallback(e.data, label);
24
+ s.handler.workerCallback(e.data, s.label);
26
25
  }
27
26
 
28
27
  this._source.delete(e.data.id);
29
- super._onMessage(e)
30
-
31
- this.check();
32
28
  }
33
29
 
34
30
 
35
- make() {
36
- const label = arguments[0],
37
- handler = label._handler;
31
+ make(data) {
32
+ let label = data.label,
33
+ handler = data.handler;
34
+
38
35
  if (handler._entityCollection) {
39
36
 
40
37
  if (this._workerQueue.length) {
41
38
  var w = this._workerQueue.pop();
42
39
 
43
- this._source.set(this._id, label);
40
+ this._source.set(this._id, data);
44
41
 
45
42
  let labelData = new Float32Array([
46
43
  /*0*/this._id++,
@@ -67,7 +64,7 @@ class LabelWorker extends BaseWorker {
67
64
  labelData.buffer,
68
65
  ]);
69
66
  } else {
70
- this._pendingQueue.push(label);
67
+ this._pendingQueue.push(data);
71
68
  }
72
69
  }
73
70
  }
package/src/og/index.js CHANGED
@@ -1,96 +1,107 @@
1
- 'use strict';
2
-
3
- import * as jd from './astro/jd.js';
4
- import * as math from './math.js';
5
- import * as mercator from './mercator.js';
6
- import * as utils from './utils/shared.js';
7
-
8
- import * as control from './control/index.js';
9
- import * as layer from './layer/index.js';
10
- import * as bv from './bv/index.js';
11
- import * as scene from './scene/index.js';
12
- import * as entity from './entity/index.js';
13
- import * as webgl from './webgl/index.js';
14
- import * as terrain from './terrain/index.js';
15
-
16
- import { Globe } from './Globe.js';
17
-
18
- import { Geoid } from './terrain/Geoid.js';
19
-
20
- import { input } from './input/input.js';
21
-
22
- import { Ellipsoid, wgs84 } from './ellipsoid/index.js';
23
-
24
- import { Camera, PlanetCamera } from './camera/index.js';
25
-
26
- import { Line2, Line3, Mat3, Mat4, Plane, Quat, Ray, Vec2, Vec3, Vec4 } from './math/index.js';
27
-
28
- import { Renderer } from './renderer/Renderer.js';
29
-
30
- import { LightSource } from './light/LightSource.js';
31
-
32
- import { Clock } from './Clock.js';
33
- import { Events } from './Events.js';
34
- import { Extent } from './Extent.js';
35
- import { LonLat } from './LonLat.js';
36
- import { RenderNode } from './scene/RenderNode.js';
37
-
38
- import { Popup } from './Popup.js';
39
-
40
- import pkg from "../../package.json";
41
-
42
- const { Handler } = webgl, { Control } = control;
43
- const { Layer } = layer;
44
- const {
45
- EntityCollection,
46
- Entity
47
- } = entity;
48
-
49
- const version = {
50
- version: pkg.version
51
- };
52
-
53
- export {
54
- version,
55
- bv,
56
- jd,
57
- math,
58
- mercator,
59
- utils,
60
- input,
61
- Layer,
62
- layer,
63
- terrain,
64
- Control,
65
- control,
66
- webgl,
67
- wgs84,
68
- Camera,
69
- Ellipsoid,
70
- PlanetCamera,
71
- Globe,
72
- LightSource,
73
- EntityCollection,
74
- Handler,
75
- Renderer,
76
- Clock,
77
- Events,
78
- Extent,
79
- LonLat,
80
- scene,
81
- RenderNode,
82
- Line2,
83
- Line3,
84
- Mat3,
85
- Mat4,
86
- Plane,
87
- Quat,
88
- Ray,
89
- Vec2,
90
- Vec3,
91
- Vec4,
92
- entity,
93
- Entity,
94
- Geoid,
95
- Popup
1
+ 'use strict';
2
+
3
+ import * as jd from './astro/jd.js';
4
+ import * as math from './math.js';
5
+ import * as mercator from './mercator.js';
6
+ import * as utils from './utils/shared.js';
7
+
8
+ import * as control from './control/index.js';
9
+ import * as layer from './layer/index.js';
10
+ import * as bv from './bv/index.js';
11
+ import * as scene from './scene/index.js';
12
+ import * as entity from './entity/index.js';
13
+ import * as webgl from './webgl/index.js';
14
+ import * as terrain from './terrain/index.js';
15
+
16
+ import { Globe } from './Globe.js';
17
+
18
+ import { Geoid } from './terrain/Geoid.js';
19
+
20
+ import { input } from './input/input.js';
21
+
22
+ import { Ellipsoid, wgs84 } from './ellipsoid/index.js';
23
+
24
+ import { Camera, PlanetCamera } from './camera/index.js';
25
+
26
+ import { Line2, Line3, Mat3, Mat4, Plane, Quat, Ray, Vec2, Vec3, Vec4 } from './math/index.js';
27
+
28
+ import { Renderer } from './renderer/Renderer.js';
29
+
30
+ import { LightSource } from './light/LightSource.js';
31
+
32
+ import { Clock } from './Clock.js';
33
+ import { Events } from './Events.js';
34
+ import { Extent } from './Extent.js';
35
+ import { LonLat } from './LonLat.js';
36
+ import { RenderNode } from './scene/RenderNode.js';
37
+
38
+ import { Popup } from './Popup.js';
39
+
40
+ import { QuadTreeStrategy } from './quadTree/QuadTreeStrategy.js';
41
+ import { MarsQuadTreeStrategy } from './quadTree/MarsQuadTreeStrategy.js';
42
+ import { EarthQuadTreeStrategy } from './quadTree/EarthQuadTreeStrategy.js';
43
+ import { Wgs84QuadTreeStrategy } from './quadTree/Wgs84QuadTreeStrategy.js';
44
+ import { quadTreeStrategyType } from './utils/quadTreeType.js';
45
+
46
+ import pkg from "../../package.json";
47
+
48
+ const { Handler } = webgl, { Control } = control;
49
+ const { Layer } = layer;
50
+ const {
51
+ EntityCollection,
52
+ Entity
53
+ } = entity;
54
+
55
+ const version = {
56
+ version: pkg.version
57
+ };
58
+
59
+ export {
60
+ version,
61
+ bv,
62
+ jd,
63
+ math,
64
+ mercator,
65
+ utils,
66
+ input,
67
+ Layer,
68
+ layer,
69
+ terrain,
70
+ Control,
71
+ control,
72
+ webgl,
73
+ wgs84,
74
+ Camera,
75
+ Ellipsoid,
76
+ PlanetCamera,
77
+ Globe,
78
+ LightSource,
79
+ EntityCollection,
80
+ Handler,
81
+ Renderer,
82
+ Clock,
83
+ Events,
84
+ Extent,
85
+ LonLat,
86
+ scene,
87
+ RenderNode,
88
+ Line2,
89
+ Line3,
90
+ Mat3,
91
+ Mat4,
92
+ Plane,
93
+ Quat,
94
+ Ray,
95
+ Vec2,
96
+ Vec3,
97
+ Vec4,
98
+ entity,
99
+ Entity,
100
+ Geoid,
101
+ Popup,
102
+ QuadTreeStrategy,
103
+ MarsQuadTreeStrategy,
104
+ EarthQuadTreeStrategy,
105
+ Wgs84QuadTreeStrategy,
106
+ quadTreeStrategyType
96
107
  };
@@ -156,6 +156,7 @@ class GeoVideo extends BaseGeoImage {
156
156
  }
157
157
  } else {
158
158
  this._video = document.createElement("video");
159
+ this._video.crossOrigin = "Anonymous";
159
160
  let that = this;
160
161
  this._video.addEventListener("canplay", function () {
161
162
  that._onCanPlay(this);
@@ -545,9 +545,10 @@ class Layer {
545
545
  let p = this._planet,
546
546
  maxZoom = Math.max(...this._preLoadZoomLevels);
547
547
 
548
- this._preLoadRecursive(p._quadTreeSouth, maxZoom);
549
- this._preLoadRecursive(p._quadTreeNorth, maxZoom);
550
- this._preLoadRecursive(p._quadTree, maxZoom);
548
+ for (let i = 0, len = p.quadTreeStrategy.quadTreeList.length; i < len; i++) {
549
+ this._preLoadRecursive(p.quadTreeStrategy.quadTreeList[i], maxZoom);
550
+ }
551
+
551
552
  }
552
553
  }
553
554
 
@@ -654,24 +655,24 @@ class Layer {
654
655
  redraw() {
655
656
  if (this._planet) {
656
657
  this._planet._quadTree.traverseTree((n) => {
657
- if (n.segment.materials[this._id]) {
658
- n.segment.materials[this._id].clear();
659
- }
658
+ if (n.segment.materials[this._id]) {
659
+ n.segment.materials[this._id].clear();
660
660
  }
661
+ }
661
662
  );
662
663
 
663
664
  this._planet._quadTreeNorth.traverseTree((n) => {
664
- if (n.segment.materials[this._id]) {
665
- n.segment.materials[this._id].clear();
666
- }
665
+ if (n.segment.materials[this._id]) {
666
+ n.segment.materials[this._id].clear();
667
667
  }
668
+ }
668
669
  );
669
670
 
670
671
  this._planet._quadTreeSouth.traverseTree((n) => {
671
- if (n.segment.materials[this._id]) {
672
- n.segment.materials[this._id].clear();
673
- }
672
+ if (n.segment.materials[this._id]) {
673
+ n.segment.materials[this._id].clear();
674
674
  }
675
+ }
675
676
  );
676
677
  }
677
678
  }
@@ -9,6 +9,7 @@ import { EPSG3857 } from "../proj/EPSG3857.js";
9
9
  import { Layer } from "./Layer.js";
10
10
  import { stringTemplate } from "../utils/shared.js";
11
11
  import { RENDERING } from "../quadTree/quadTree.js";
12
+ import { EPSG4326 } from "../proj/EPSG4326.js";
12
13
 
13
14
  /**
14
15
  * Represents an imagery tiles source provider.
@@ -143,7 +144,7 @@ class XYZ extends Layer {
143
144
  }
144
145
 
145
146
  _checkSegment(segment) {
146
- return segment._projection.id === EPSG3857.id;
147
+ return segment._projection.id === this._planet.quadTreeStrategy.projection.id;// EPSG4326.id;// EPSG3857.id;
147
148
  }
148
149
 
149
150
  /**
@@ -251,7 +252,7 @@ class XYZ extends Layer {
251
252
  applyMaterial(material, forceLoading) {
252
253
  if (material.isReady) {
253
254
  return material.texOffset;
254
- } else if (material.segment.tileZoom <= this.minNativeZoom) {
255
+ } else if (material.segment.tileZoom < this.minNativeZoom) {
255
256
  material.textureNotExists();
256
257
  } else {
257
258
 
@@ -317,7 +318,7 @@ class XYZ extends Layer {
317
318
  clearMaterial(material) {
318
319
  if (material.isReady && material.textureExists) {
319
320
  !material.texture.default &&
320
- material.segment.handler.gl.deleteTexture(material.texture);
321
+ material.segment.handler.gl.deleteTexture(material.texture);
321
322
  material.texture = null;
322
323
 
323
324
  if (material.image) {
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ import { QuadTreeStrategy } from "./QuadTreeStrategy.js"
3
+ import * as mercator from "../mercator.js";
4
+ import { Segment } from "../segment/Segment.js";
5
+ import { SegmentLonLat } from "../segment/SegmentLonLat.js";
6
+ import * as quadTree from "../quadTree/quadTree.js";
7
+ import { Extent } from "../Extent.js";
8
+ import { Node } from "../quadTree/Node.js";
9
+
10
+ export class EarthQuadTreeStrategy extends QuadTreeStrategy {
11
+ constructor(options = {}) {
12
+ super(options);
13
+ this.name = "earth";
14
+ }
15
+
16
+ init() {
17
+ this._quadTreeList = [
18
+ new Node(Segment, this.planet, quadTree.NW, null, 0, 0,
19
+ Extent.createFromArray([-20037508.34, -20037508.34, 20037508.34, 20037508.34])
20
+ ),
21
+ new Node(SegmentLonLat, this.planet, quadTree.NW, null, 0, 0,
22
+ Extent.createFromArray([-180, mercator.MAX_LAT, 180, 90])
23
+ ),
24
+ new Node(SegmentLonLat, this.planet, quadTree.NW, null, 0, 0,
25
+ Extent.createFromArray([-180, -90, 180, mercator.MIN_LAT])
26
+ )
27
+ ];
28
+ }
29
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ import { QuadTreeStrategy } from "./QuadTreeStrategy.js"
3
+ import { SegmentLonLatWgs84 } from "../segment/SegmentLonLatWgs84.js";
4
+ import * as quadTree from "../quadTree/quadTree.js";
5
+ import { Extent } from "../Extent.js";
6
+ import { Node } from "../quadTree/Node.js";
7
+ import { EPSG4326 } from "../proj/EPSG4326.js";
8
+
9
+
10
+ export class MarsQuadTreeStrategy extends QuadTreeStrategy {
11
+ constructor(options = {}) {
12
+ super(options);
13
+ this.name = "mars";
14
+ this.projection = EPSG4326;
15
+ }
16
+
17
+ init() {
18
+ let earthQuadTreeSouth = new Node(SegmentLonLatWgs84, this.planet, quadTree.NW, null, 0, 0,
19
+ Extent.createFromArray([-180, -90, 0, 90])
20
+ );
21
+ let earthQuadTreeWest = new Node(SegmentLonLatWgs84, this.planet, quadTree.NW, null, 0, 0,
22
+ Extent.createFromArray([0, -90, 180, 90])
23
+ );
24
+ this._quadTreeList.push(earthQuadTreeSouth);
25
+ this._quadTreeList.push(earthQuadTreeWest);
26
+ }
27
+ }