@openglobus/og 0.13.8 → 0.13.12
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.
- package/README.md +1 -1
- package/css/og.css +388 -129
- package/dist/@openglobus/og.css +1 -1
- package/dist/@openglobus/og.esm.js +2 -2
- package/dist/@openglobus/og.esm.js.map +1 -1
- package/dist/@openglobus/og.umd.js +2 -2
- package/dist/@openglobus/og.umd.js.map +1 -1
- package/package.json +20 -19
- package/src/og/Globe.js +15 -16
- package/src/og/Object3d.js +33 -0
- package/src/og/control/GeoImageDragControl.js +102 -75
- package/src/og/control/LayerAnimation.js +306 -38
- package/src/og/control/LayerSwitcher.js +506 -159
- package/src/og/control/Lighting.js +27 -27
- package/src/og/control/RulerSwitcher.js +69 -0
- package/src/og/control/UIhelpers.js +146 -0
- package/src/og/control/index.js +3 -1
- package/src/og/control/ruler/RulerScene.js +6 -2
- package/src/og/control/visibleExtent/Segment.js +2 -1
- package/src/og/ellipsoid/wgs84.js +1 -1
- package/src/og/entity/LabelHandler.js +2 -2
- package/src/og/entity/LabelWorker.js +36 -54
- package/src/og/layer/BaseGeoImage.js +347 -312
- package/src/og/layer/CanvasTiles.js +312 -290
- package/src/og/layer/GeoImage.js +222 -214
- package/src/og/layer/GeoVideo.js +291 -291
- package/src/og/layer/Layer.js +71 -30
- package/src/og/layer/Material.js +109 -109
- package/src/og/layer/Vector.js +1 -0
- package/src/og/layer/XYZ.js +20 -12
- package/src/og/light/LightSource.js +364 -363
- package/src/og/math.js +2 -2
- package/src/og/quadTree/Node.js +7 -5
- package/src/og/renderer/Renderer.js +1 -1
- package/src/og/scene/Planet.js +103 -42
- package/src/og/segment/Segment.js +34 -56
- package/src/og/segment/Slice.js +1 -1
- package/src/og/shaders/drawnode.js +1 -1
- package/src/og/terrain/GlobusTerrain.js +31 -20
- package/src/og/terrain/MapboxTerrain.js +1 -1
- package/src/og/utils/BaseWorker.js +46 -0
- package/src/og/utils/GeoImageCreator.js +164 -161
- package/src/og/utils/Loader.js +60 -33
- package/src/og/utils/NormalMapCreator.js +403 -412
- package/src/og/utils/PlainSegmentWorker.js +29 -55
- package/src/og/utils/TerrainWorker.js +572 -589
- package/src/og/utils/functionComposition.js +13 -0
- package/src/og/webgl/Handler.js +42 -41
- package/types/Object3d.d.ts +1 -0
- package/types/camera/PlanetCamera.d.ts +4 -0
- package/types/control/GeoImageDragControl.d.ts +2 -0
- package/types/control/LayerAnimation.d.ts +73 -0
- package/types/control/LayerSwitcher.d.ts +55 -11
- package/types/control/MouseNavigation.d.ts +1 -0
- package/types/control/MouseWheelZoomControl.d.ts +1 -0
- package/types/control/Sun.d.ts +1 -0
- package/types/control/TouchNavigation.d.ts +1 -0
- package/types/control/UIhelpers.d.ts +13 -0
- package/types/control/index.d.ts +2 -1
- package/types/entity/LabelHandler.d.ts +2 -0
- package/types/entity/LabelWorker.d.ts +5 -7
- package/types/layer/BaseGeoImage.d.ts +9 -1
- package/types/layer/CanvasTiles.d.ts +5 -1
- package/types/layer/GeoImage.d.ts +1 -0
- package/types/layer/GeoTexture2d.d.ts +1 -0
- package/types/layer/Layer.d.ts +5 -1
- package/types/layer/Vector.d.ts +7 -0
- package/types/layer/WMS.d.ts +1 -0
- package/types/layer/XYZ.d.ts +8 -6
- package/types/math.d.ts +1 -1
- package/types/quadTree/EntityCollectionNode.d.ts +7 -0
- package/types/quadTree/Node.d.ts +1 -2
- package/types/renderer/Renderer.d.ts +1 -1
- package/types/renderer/RendererEvents.d.ts +16 -0
- package/types/scene/Planet.d.ts +19 -4
- package/types/segment/SegmentLonLat.d.ts +2 -0
- package/types/terrain/BilTerrain.d.ts +6 -0
- package/types/terrain/GlobusTerrain.d.ts +7 -0
- package/types/terrain/MapboxTerrain.d.ts +8 -0
- package/types/utils/BaseWorker.d.ts +14 -0
- package/types/utils/Loader.d.ts +3 -1
- package/types/utils/PlainSegmentWorker.d.ts +4 -6
- package/types/utils/TerrainWorker.d.ts +4 -6
- package/types/utils/functionComposition.d.ts +5 -0
- package/types/webgl/Handler.d.ts +4 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openglobus/og",
|
|
3
|
-
"version": "0.13.
|
|
4
|
-
"description": "[OpenGlobus](
|
|
3
|
+
"version": "0.13.12",
|
|
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"
|
|
7
7
|
},
|
|
@@ -9,16 +9,17 @@
|
|
|
9
9
|
"style": "./css/og.css",
|
|
10
10
|
"types": "./types/index.d.ts",
|
|
11
11
|
"scripts": {
|
|
12
|
-
"api": "jsdoc -
|
|
12
|
+
"api": "jsdoc -r ./src/ -c ./jsdoc.conf.json -d ./api",
|
|
13
13
|
"serve": "ws",
|
|
14
14
|
"build": "rollup -c",
|
|
15
15
|
"webgl": "rollup -c --environment entry:webgl",
|
|
16
16
|
"core": "rollup -c --environment entry:core",
|
|
17
|
-
"test": "jest --env=jsdom",
|
|
17
|
+
"test": "jest --env=jsdom --runInBand --ci --coverage=false",
|
|
18
18
|
"test_watch": "jest --env=jsdom --watch",
|
|
19
19
|
"lint": "eslint -c ./.eslintrc.js src/og",
|
|
20
20
|
"generate_types": "rm -rf types; tsc src/**/*.js --declaration --allowJs --emitDeclarationOnly --outDir types",
|
|
21
|
-
"compile_js_as_ts": "tsc src/og/index.js --AllowJs --checkJs --outDir dist/@openglobus/src/"
|
|
21
|
+
"compile_js_as_ts": "tsc src/og/index.js --AllowJs --checkJs --outDir dist/@openglobus/src/",
|
|
22
|
+
"font": "node ./fonts/index.js"
|
|
22
23
|
},
|
|
23
24
|
"repository": {
|
|
24
25
|
"type": "git",
|
|
@@ -30,7 +31,7 @@
|
|
|
30
31
|
"url": "https://github.com/openglobus/openglobus/issues",
|
|
31
32
|
"email": "mgevlich@gmail.com"
|
|
32
33
|
},
|
|
33
|
-
"homepage": "
|
|
34
|
+
"homepage": "https://www.openglobus.org",
|
|
34
35
|
"exports": {
|
|
35
36
|
".": "./src/og/index.js",
|
|
36
37
|
"./layer": "./src/og/layer/index.js",
|
|
@@ -43,24 +44,24 @@
|
|
|
43
44
|
"./css/og.css": "./css/og.css"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
|
-
"@babel/preset-env": "^7.
|
|
47
|
+
"@babel/preset-env": "^7.18.9",
|
|
47
48
|
"@rollup/plugin-json": "^4.1.0",
|
|
48
|
-
"@types/jest": "^
|
|
49
|
-
"eslint": "^8.
|
|
49
|
+
"@types/jest": "^28.1.6",
|
|
50
|
+
"eslint": "^8.20.0",
|
|
50
51
|
"jaguarjs-jsdoc": "^1.1.0",
|
|
51
|
-
"jest": "^
|
|
52
|
-
"jest-canvas-mock": "^2.
|
|
52
|
+
"jest": "^28.1.3",
|
|
53
|
+
"jest-canvas-mock": "^2.4.0",
|
|
54
|
+
"jest-environment-jsdom": "^28.1.3",
|
|
53
55
|
"jest-webgl-canvas-mock": "^0.2.3",
|
|
54
|
-
"jsdoc": "^3.6.
|
|
55
|
-
"lint-staged": "^
|
|
56
|
-
"local-web-server": "^5.
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"rollup": "^2.66.1",
|
|
56
|
+
"jsdoc": "^3.6.11",
|
|
57
|
+
"lint-staged": "^13.0.3",
|
|
58
|
+
"local-web-server": "^5.2.1",
|
|
59
|
+
"postcss": "^8.4.14",
|
|
60
|
+
"prettier": "^2.7.1",
|
|
61
|
+
"rollup": "^2.77.1",
|
|
61
62
|
"rollup-plugin-postcss": "^4.0.2",
|
|
62
63
|
"rollup-plugin-terser": "^7.0.2",
|
|
63
|
-
"typescript": "^4.
|
|
64
|
+
"typescript": "^4.7.4"
|
|
64
65
|
},
|
|
65
66
|
"lint-staged": {
|
|
66
67
|
"*.{js,ts}": [
|
package/src/og/Globe.js
CHANGED
|
@@ -69,7 +69,7 @@ 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
73
|
*/
|
|
74
74
|
|
|
75
75
|
class Globe {
|
|
@@ -103,15 +103,6 @@ class Globe {
|
|
|
103
103
|
this.div.appendChild(this._canvas);
|
|
104
104
|
this.div.classList.add("ogViewport");
|
|
105
105
|
|
|
106
|
-
document.addEventListener("visibilitychange", () => {
|
|
107
|
-
if (document.visibilityState === 'visible') {
|
|
108
|
-
this.renderer.handler.start();
|
|
109
|
-
this.renderer && this.renderer.resize();
|
|
110
|
-
} else {
|
|
111
|
-
this.renderer.handler.stop();
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
|
|
115
106
|
function _disableWheel(e) {
|
|
116
107
|
e.preventDefault();
|
|
117
108
|
}
|
|
@@ -137,12 +128,13 @@ class Globe {
|
|
|
137
128
|
context: {
|
|
138
129
|
alpha: false,
|
|
139
130
|
antialias: false,
|
|
140
|
-
powerPreference: "high-performance"
|
|
131
|
+
powerPreference: "high-performance",
|
|
132
|
+
premultipliedAlpha: true
|
|
141
133
|
}
|
|
142
134
|
}), {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
135
|
+
autoActivate: false,
|
|
136
|
+
backgroundColor: createColorRGB(options.backgroundColor, new Vec3(115 / 255, 203 / 255, 249 / 255))
|
|
137
|
+
}
|
|
146
138
|
);
|
|
147
139
|
this.renderer.initialize();
|
|
148
140
|
this.renderer.div = this.div;
|
|
@@ -190,9 +182,16 @@ class Globe {
|
|
|
190
182
|
});
|
|
191
183
|
}
|
|
192
184
|
|
|
193
|
-
// Attach terrain provider
|
|
185
|
+
// Attach terrain provider (can be one object or array)
|
|
194
186
|
if (options.terrain) {
|
|
195
|
-
|
|
187
|
+
if (Array.isArray(options.terrain)) {
|
|
188
|
+
this.planet.setTerrain(options.terrain[0]); // If array get the terrain from 1st element
|
|
189
|
+
this.planet._terrainPool = options.terrain;
|
|
190
|
+
} else {
|
|
191
|
+
this.planet.setTerrain(options.terrain);
|
|
192
|
+
this.planet._terrainPool = [options.terrain];
|
|
193
|
+
}
|
|
194
|
+
|
|
196
195
|
} else {
|
|
197
196
|
this.planet.setTerrain(new EmptyTerrain());
|
|
198
197
|
}
|
package/src/og/Object3d.js
CHANGED
|
@@ -31,6 +31,10 @@ class Object3d {
|
|
|
31
31
|
this._normals = data.normals || [];
|
|
32
32
|
} else {
|
|
33
33
|
this._normals = Object3d.getNormals(this._vertices);
|
|
34
|
+
this._indexes = new Array(this._vertices.length);
|
|
35
|
+
for (let i = 0, len = this._indexes.length; i < len; i++) {
|
|
36
|
+
this._indexes[i] = i;
|
|
37
|
+
}
|
|
34
38
|
}
|
|
35
39
|
}
|
|
36
40
|
|
|
@@ -379,6 +383,35 @@ class Object3d {
|
|
|
379
383
|
]
|
|
380
384
|
});
|
|
381
385
|
}
|
|
386
|
+
|
|
387
|
+
static createArrow(back = 0.0, height = 2.1, front = -15) {
|
|
388
|
+
return new Object3d({
|
|
389
|
+
vertices: [
|
|
390
|
+
0, height, 0,
|
|
391
|
+
7, 0, 6,
|
|
392
|
+
0, 0, front,
|
|
393
|
+
|
|
394
|
+
0, 0, back,
|
|
395
|
+
7, 0, 6,
|
|
396
|
+
0, height, 0,
|
|
397
|
+
|
|
398
|
+
-7, 0, 6,
|
|
399
|
+
0, 0, back,
|
|
400
|
+
0, height, 0,
|
|
401
|
+
|
|
402
|
+
-7, 0, 6,
|
|
403
|
+
0, height, 0,
|
|
404
|
+
0, 0, front,
|
|
405
|
+
|
|
406
|
+
-7, 0, 6,
|
|
407
|
+
0, 0, front,
|
|
408
|
+
0, 0, back,
|
|
409
|
+
0, 0, back,
|
|
410
|
+
0, 0, front,
|
|
411
|
+
7, 0, 6
|
|
412
|
+
]
|
|
413
|
+
});
|
|
414
|
+
}
|
|
382
415
|
}
|
|
383
416
|
|
|
384
417
|
export { Object3d };
|
|
@@ -1,76 +1,103 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module og/control/GeoImageDragControl
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
'use strict';
|
|
6
|
-
|
|
7
|
-
import { Control } from './Control.js';
|
|
8
|
-
import { BaseGeoImage } from '../layer/BaseGeoImage.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @module og/control/GeoImageDragControl
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
import { Control } from './Control.js';
|
|
8
|
+
import { BaseGeoImage } from '../layer/BaseGeoImage.js';
|
|
9
|
+
import { elementFactory, btnClickHandler } from "./UIhelpers.js";
|
|
10
|
+
|
|
11
|
+
class GeoImageDragControl extends Control {
|
|
12
|
+
constructor(options = {}) {
|
|
13
|
+
super(options);
|
|
14
|
+
this._cornerIndex = -1;
|
|
15
|
+
this._catchCorner = false;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
oninit() {
|
|
19
|
+
let p = this.planet;
|
|
20
|
+
this.createDraggerButton();
|
|
21
|
+
|
|
22
|
+
p.events.on('layeradd', function (e) {
|
|
23
|
+
this._bindLayer(e);
|
|
24
|
+
}, this);
|
|
25
|
+
|
|
26
|
+
for (let i = 0; i < p.layers.length; i++) {
|
|
27
|
+
if (p.layers[i] instanceof BaseGeoImage) {
|
|
28
|
+
this._bindLayer(p.layers[i]);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
btnClickHandler('og-geo-image-dragger-menu-btn', null, null, '#og-geo-image-dragger-menu-icon'); // btn_id, dialog_id, dialog_selector, icon_id
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Create a button to activate-deactivate control
|
|
35
|
+
createDraggerButton() {
|
|
36
|
+
let btn = elementFactory('div', {
|
|
37
|
+
id: 'og-geo-image-dragger-menu-btn',
|
|
38
|
+
class: 'og-geo-image-dragger og-menu-btn og-OFF'
|
|
39
|
+
},
|
|
40
|
+
elementFactory('div', { id: 'og-geo-image-dragger-menu-icon', class: 'og-icon-holder' }));
|
|
41
|
+
this.renderer.div.appendChild(btn);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
_bindLayer(layer) {
|
|
45
|
+
if (layer instanceof BaseGeoImage) { // if the layer is a geoImage layer
|
|
46
|
+
|
|
47
|
+
var p = this.planet;
|
|
48
|
+
|
|
49
|
+
layer.events.on('mousemove', function (ms) {
|
|
50
|
+
var btn = document.getElementById('og-geo-image-dragger-menu-btn');
|
|
51
|
+
var btn_off = btn.classList.contains('og-OFF');
|
|
52
|
+
if (this._active && !btn_off) { // active layer and button ON
|
|
53
|
+
if (this._catchCorner) {// mouse is catching a corner
|
|
54
|
+
var corners = layer.getCornersLonLat();
|
|
55
|
+
corners[this._cornerIndex] = p.getLonLatFromPixelTerrain(ms, true);
|
|
56
|
+
layer.setCornersLonLat(corners);
|
|
57
|
+
} else { // mouse isn't catching
|
|
58
|
+
this._cornerIndex = -1;
|
|
59
|
+
for (var i = 0; i < layer._cornersWgs84.length; i++) {
|
|
60
|
+
var ground = p.getLonLatFromPixelTerrain(ms, true);
|
|
61
|
+
// mouse is near
|
|
62
|
+
if (ground && p.ellipsoid.getGreatCircleDistance(layer._cornersWgs84[i], ground) / p.getDistanceFromPixel(ms, true) <= 0.05) {
|
|
63
|
+
this._cornerIndex = i;
|
|
64
|
+
document.body.style.cursor = 'move';
|
|
65
|
+
break;
|
|
66
|
+
// mouse is far
|
|
67
|
+
} else {
|
|
68
|
+
document.body.style.cursor = 'auto';
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
layer.events.on("mouseleave", function () {
|
|
76
|
+
document.body.style.cursor = 'auto';
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
}, this);
|
|
80
|
+
|
|
81
|
+
layer.events.on('ldown', function (ms) {
|
|
82
|
+
if (this._active && this._cornerIndex !== -1) {
|
|
83
|
+
this._catchCorner = true;
|
|
84
|
+
ms.renderer.controls.mouseNavigation.deactivate();
|
|
85
|
+
}
|
|
86
|
+
}, this);
|
|
87
|
+
|
|
88
|
+
layer.events.on('lup', function (ms) {
|
|
89
|
+
if (this._active) {
|
|
90
|
+
this._catchCorner = false;
|
|
91
|
+
ms.renderer.controls.mouseNavigation.activate();
|
|
92
|
+
}
|
|
93
|
+
}, this);
|
|
94
|
+
|
|
95
|
+
layer.events.on('rdblclick', function () {
|
|
96
|
+
alert(layer.getID());
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
76
103
|
export { GeoImageDragControl };
|