@openglobus/og 0.11.2 → 0.11.7
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/package.json +13 -13
- package/src/og/Clock.js +10 -10
- package/src/og/Events.js +8 -6
- package/src/og/Extent.js +82 -41
- package/src/og/Globe.js +25 -13
- package/src/og/ImageCanvas.js +22 -16
- package/src/og/LonLat.js +16 -13
- package/src/og/Popup.js +21 -14
- package/src/og/QueueArray.js +6 -2
- package/src/og/Rectangle.js +11 -6
- package/src/og/Stack.js +5 -2
- package/src/og/ajax.js +21 -33
- package/src/og/astro/astro.js +5 -5
- package/src/og/astro/earth.js +22 -16
- package/src/og/astro/jd.js +23 -18
- package/src/og/astro/orbit.js +13 -11
- package/src/og/astro/rotation.js +17 -8
- package/src/og/bv/Box.js +7 -3
- package/src/og/bv/Sphere.js +14 -11
- package/src/og/camera/Camera.js +51 -54
- package/src/og/camera/Frustum.js +29 -18
- package/src/og/camera/PlanetCamera.js +32 -23
- package/src/og/control/CompassButton.js +5 -1
- package/src/og/control/Control.js +12 -10
- package/src/og/control/DebugInfo.js +4 -1
- package/src/og/control/EarthCoordinates.js +54 -33
- package/src/og/control/KeyboardNavigation.js +10 -10
- package/src/og/control/LayerSwitcher.js +22 -21
- package/src/og/control/Lighting.js +34 -3
- package/src/og/control/MouseNavigation.js +1 -1
- package/src/og/control/ScaleControl.js +1 -1
- package/src/og/control/SegmentBoundVisualization.js +6 -7
- package/src/og/control/ShowFps.js +13 -8
- package/src/og/control/SimpleNavigation.js +6 -8
- package/src/og/control/Sun.js +25 -15
- package/src/og/control/ToggleWireframe.js +4 -4
- package/src/og/control/TouchNavigation.js +44 -33
- package/src/og/control/ZoomControl.js +41 -25
- package/src/og/ellipsoid/Ellipsoid.js +162 -66
- package/src/og/ellipsoid/wgs84.js +4 -4
- package/src/og/entity/BaseBillboard.js +100 -56
- package/src/og/entity/Billboard.js +14 -10
- package/src/og/entity/BillboardHandler.js +317 -60
- package/src/og/entity/Entity.js +100 -68
- package/src/og/entity/EntityCollection.js +70 -47
- package/src/og/entity/GeoObject.js +228 -0
- package/src/og/entity/GeoObjectHandler.js +910 -0
- package/src/og/entity/Geometry.js +27 -24
- package/src/og/entity/GeometryHandler.js +596 -124
- package/src/og/entity/Label.js +80 -49
- package/src/og/entity/LabelHandler.js +45 -244
- package/src/og/entity/LabelWorker.js +218 -0
- package/src/og/entity/Object3d.js +504 -0
- package/src/og/entity/PointCloud.js +80 -32
- package/src/og/entity/PointCloudHandler.js +8 -8
- package/src/og/entity/Polyline.js +16 -16
- package/src/og/entity/Ray.js +60 -27
- package/src/og/entity/Strip.js +77 -48
- package/src/og/entity/StripHandler.js +26 -26
- package/src/og/entity/index.js +8 -16
- package/src/og/layer/BaseGeoImage.js +54 -23
- package/src/og/layer/CanvasTiles.js +24 -24
- package/src/og/layer/GeoImage.js +9 -9
- package/src/og/layer/GeoVideo.js +3 -3
- package/src/og/layer/KML.js +63 -37
- package/src/og/layer/Layer.js +44 -21
- package/src/og/layer/Material.js +23 -20
- package/src/og/layer/Vector.js +114 -68
- package/src/og/layer/WMS.js +34 -17
- package/src/og/layer/XYZ.js +48 -46
- package/src/og/light/LightSource.js +46 -39
- package/src/og/math/Mat3.js +34 -22
- package/src/og/math/Mat4.js +603 -459
- package/src/og/math/Plane.js +21 -20
- package/src/og/math/Quat.js +182 -139
- package/src/og/math/Ray.js +38 -33
- package/src/og/math/Vec2.js +85 -75
- package/src/og/math/Vec3.js +142 -112
- package/src/og/math/Vec4.js +27 -31
- package/src/og/math/coder.js +10 -10
- package/src/og/math.js +12 -12
- package/src/og/proj/EPSG3857.js +4 -4
- package/src/og/proj/EPSG4326.js +4 -4
- package/src/og/proj/Proj.js +4 -6
- package/src/og/quadTree/Node.js +8 -8
- package/src/og/renderer/Renderer.js +59 -52
- package/src/og/renderer/RendererEvents.js +50 -27
- package/src/og/scene/BaseNode.js +7 -8
- package/src/og/scene/Planet.js +102 -103
- package/src/og/scene/RenderNode.js +28 -21
- package/src/og/segment/Segment.js +26 -21
- package/src/og/segment/SegmentLonLat.js +5 -5
- package/src/og/shaders/drawnode.js +135 -142
- package/src/og/shaders/geoObject.js +211 -0
- package/src/og/shaders/pointCloud.js +41 -41
- package/src/og/shaders/shape.js +12 -18
- package/src/og/shaders/skybox.js +36 -36
- package/src/og/shaders/toneMapping.js +1 -0
- package/src/og/shapes/BaseShape.js +126 -54
- package/src/og/shapes/Icosphere.js +29 -14
- package/src/og/shapes/Sphere.js +12 -15
- package/src/og/terrain/BilTerrain.js +1 -0
- package/src/og/terrain/EmptyTerrain.js +2 -2
- package/src/og/terrain/GlobusTerrain.js +9 -9
- package/src/og/utils/FontAtlas.js +6 -2
- package/src/og/utils/TextureAtlas.js +22 -24
- package/src/og/utils/VectorTileCreator.js +1 -3
- package/src/og/utils/shared.js +16 -16
- package/src/og/webgl/Framebuffer.js +88 -40
- package/src/og/webgl/Handler.js +243 -169
- package/src/og/webgl/Multisample.js +47 -19
- package/src/og/webgl/Program.js +79 -34
- package/src/og/webgl/ProgramController.js +17 -13
- package/src/og/webgl/callbacks.js +8 -8
- package/src/og/inherits.js +0 -8
- package/src/og/utils/polylabel.js +0 -176
- package/types/Clock.d.ts +0 -90
- package/types/Deferred.d.ts +0 -6
- package/types/Events.d.ts +0 -73
- package/types/Extent.d.ts +0 -166
- package/types/Globe.d.ts +0 -75
- package/types/ImageCanvas.d.ts +0 -121
- package/types/Lock.d.ts +0 -12
- package/types/LonLat.d.ts +0 -108
- package/types/Popup.d.ts +0 -38
- package/types/QueueArray.d.ts +0 -15
- package/types/Rectangle.d.ts +0 -74
- package/types/Stack.d.ts +0 -15
- package/types/ajax.d.ts +0 -24
- package/types/arial.d.ts +0 -48
- package/types/astro/astro.d.ts +0 -38
- package/types/astro/earth.d.ts +0 -6
- package/types/astro/jd.d.ts +0 -254
- package/types/bv/Box.d.ts +0 -25
- package/types/bv/Sphere.d.ts +0 -38
- package/types/bv/index.d.ts +0 -3
- package/types/camera/Camera.d.ts +0 -303
- package/types/camera/Frustum.d.ts +0 -129
- package/types/camera/PlanetCamera.d.ts +0 -223
- package/types/camera/index.d.ts +0 -3
- package/types/cons.d.ts +0 -40
- package/types/control/CompassButton.d.ts +0 -18
- package/types/control/Control.d.ts +0 -101
- package/types/control/DebugInfo.d.ts +0 -16
- package/types/control/EarthCoordinates.d.ts +0 -47
- package/types/control/EarthNavigation.d.ts +0 -42
- package/types/control/GeoImageDragControl.d.ts +0 -6
- package/types/control/KeyboardNavigation.d.ts +0 -22
- package/types/control/LayerSwitcher.d.ts +0 -23
- package/types/control/Lighting.d.ts +0 -16
- package/types/control/MouseNavigation.d.ts +0 -51
- package/types/control/ScaleControl.d.ts +0 -22
- package/types/control/ShowFps.d.ts +0 -12
- package/types/control/SimpleNavigation.d.ts +0 -28
- package/types/control/Sun.d.ts +0 -52
- package/types/control/ToggleWireframe.d.ts +0 -12
- package/types/control/TouchNavigation.d.ts +0 -50
- package/types/control/ZoomControl.d.ts +0 -28
- package/types/control/index.d.ts +0 -17
- package/types/ellipsoid/Ellipsoid.d.ts +0 -142
- package/types/ellipsoid/index.d.ts +0 -3
- package/types/ellipsoid/wgs84.d.ts +0 -5
- package/types/entity/BaseBillboard.d.ts +0 -208
- package/types/entity/Billboard.d.ts +0 -94
- package/types/entity/BillboardHandler.d.ts +0 -74
- package/types/entity/Entity.d.ts +0 -331
- package/types/entity/EntityCollection.d.ts +0 -303
- package/types/entity/Geometry.d.ts +0 -73
- package/types/entity/GeometryHandler.d.ts +0 -76
- package/types/entity/Label.d.ts +0 -194
- package/types/entity/LabelHandler.d.ts +0 -24
- package/types/entity/PointCloud.d.ts +0 -174
- package/types/entity/PointCloudHandler.d.ts +0 -38
- package/types/entity/Polyline.d.ts +0 -304
- package/types/entity/PolylineHandler.d.ts +0 -18
- package/types/entity/Ray.d.ts +0 -123
- package/types/entity/RayHandler.d.ts +0 -67
- package/types/entity/ShapeHandler.d.ts +0 -22
- package/types/entity/Strip.d.ts +0 -118
- package/types/entity/StripHandler.d.ts +0 -38
- package/types/entity/index.d.ts +0 -8
- package/types/index.core.d.ts +0 -65
- package/types/index.d.ts +0 -45
- package/types/index.webgl.d.ts +0 -7
- package/types/inherits.d.ts +0 -4
- package/types/input/KeyboardHandler.d.ts +0 -10
- package/types/input/MouseHandler.d.ts +0 -5
- package/types/input/TouchHandler.d.ts +0 -5
- package/types/input/input.d.ts +0 -34
- package/types/layer/BaseGeoImage.d.ts +0 -107
- package/types/layer/CanvasTiles.d.ts +0 -75
- package/types/layer/GeoImage.d.ts +0 -65
- package/types/layer/GeoTexture2d.d.ts +0 -8
- package/types/layer/GeoVideo.d.ts +0 -80
- package/types/layer/KML.d.ts +0 -58
- package/types/layer/Layer.d.ts +0 -321
- package/types/layer/Material.d.ts +0 -48
- package/types/layer/Vector.d.ts +0 -228
- package/types/layer/WMS.d.ts +0 -66
- package/types/layer/XYZ.d.ts +0 -130
- package/types/layer/index.d.ts +0 -10
- package/types/light/LightSource.d.ts +0 -177
- package/types/math/Line2.d.ts +0 -11
- package/types/math/Line3.d.ts +0 -10
- package/types/math/Mat3.d.ts +0 -63
- package/types/math/Mat4.d.ts +0 -173
- package/types/math/Plane.d.ts +0 -17
- package/types/math/Quat.d.ts +0 -376
- package/types/math/Ray.d.ts +0 -81
- package/types/math/Vec2.d.ts +0 -308
- package/types/math/Vec3.d.ts +0 -459
- package/types/math/Vec4.d.ts +0 -161
- package/types/math/coder.d.ts +0 -42
- package/types/math/index.d.ts +0 -11
- package/types/math.d.ts +0 -261
- package/types/mercator.d.ts +0 -92
- package/types/proj/EPSG3857.d.ts +0 -5
- package/types/proj/EPSG4326.d.ts +0 -5
- package/types/proj/Proj.d.ts +0 -42
- package/types/quadTree/EntityCollectionNode.d.ts +0 -34
- package/types/quadTree/Node.d.ts +0 -61
- package/types/quadTree/quadTree.d.ts +0 -40
- package/types/renderer/Renderer.d.ts +0 -296
- package/types/renderer/RendererEvents.d.ts +0 -230
- package/types/res/images.d.ts +0 -3
- package/types/scene/Axes.d.ts +0 -11
- package/types/scene/BaseNode.d.ts +0 -60
- package/types/scene/Planet.d.ts +0 -574
- package/types/scene/RenderNode.d.ts +0 -143
- package/types/scene/SkyBox.d.ts +0 -10
- package/types/scene/index.d.ts +0 -4
- package/types/segment/Segment.d.ts +0 -271
- package/types/segment/SegmentLonLat.d.ts +0 -62
- package/types/segment/segmentHelper.d.ts +0 -13
- package/types/shaders/billboard.d.ts +0 -3
- package/types/shaders/depth.d.ts +0 -2
- package/types/shaders/drawnode.d.ts +0 -7
- package/types/shaders/label.d.ts +0 -4
- package/types/shaders/pointCloud.d.ts +0 -2
- package/types/shaders/polyline.d.ts +0 -3
- package/types/shaders/ray.d.ts +0 -2
- package/types/shaders/screenFrame.d.ts +0 -2
- package/types/shaders/shape.d.ts +0 -4
- package/types/shaders/skybox.d.ts +0 -2
- package/types/shaders/toneMapping.d.ts +0 -2
- package/types/shapes/BaseShape.d.ts +0 -247
- package/types/shapes/Sphere.d.ts +0 -41
- package/types/terrain/BilTerrain.d.ts +0 -8
- package/types/terrain/EmptyTerrain.d.ts +0 -72
- package/types/terrain/Geoid.d.ts +0 -26
- package/types/terrain/GlobusTerrain.d.ts +0 -153
- package/types/terrain/MapboxTerrain.d.ts +0 -8
- package/types/terrain/index.d.ts +0 -5
- package/types/utils/FontAtlas.d.ts +0 -14
- package/types/utils/GeoImageCreator.d.ts +0 -30
- package/types/utils/ImagesCacheManager.d.ts +0 -10
- package/types/utils/Loader.d.ts +0 -25
- package/types/utils/NormalMapCreator.d.ts +0 -39
- package/types/utils/PlainSegmentWorker.d.ts +0 -10
- package/types/utils/TerrainWorker.d.ts +0 -9
- package/types/utils/TextureAtlas.d.ts +0 -111
- package/types/utils/VectorTileCreator.d.ts +0 -16
- package/types/utils/colorTable.d.ts +0 -143
- package/types/utils/earcut.d.ts +0 -6
- package/types/utils/shared.d.ts +0 -230
- package/types/webgl/Framebuffer.d.ts +0 -135
- package/types/webgl/Handler.d.ts +0 -372
- package/types/webgl/Multisample.d.ts +0 -89
- package/types/webgl/Program.d.ts +0 -155
- package/types/webgl/ProgramController.d.ts +0 -84
- package/types/webgl/callbacks.d.ts +0 -1
- package/types/webgl/index.d.ts +0 -6
- package/types/webgl/types.d.ts +0 -2
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* @module og/ellipsoid/Ellipsoid
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
"use strict";
|
|
6
6
|
|
|
7
|
-
import * as math from
|
|
8
|
-
import { Vec3 } from
|
|
9
|
-
import { LonLat } from
|
|
7
|
+
import * as math from "../math.js";
|
|
8
|
+
import { Vec3 } from "../math/Vec3.js";
|
|
9
|
+
import { LonLat } from "../LonLat.js";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Class represents a plant ellipsoid.
|
|
@@ -15,6 +15,10 @@ import { LonLat } from '../LonLat.js';
|
|
|
15
15
|
* @param {number} polarSize - Polar ellipsoid size.
|
|
16
16
|
*/
|
|
17
17
|
class Ellipsoid {
|
|
18
|
+
/**
|
|
19
|
+
* @param {number} equatorialSize - Equatorial ellipsoid size.
|
|
20
|
+
* @param {number} polarSize - Polar ellipsoid size.
|
|
21
|
+
*/
|
|
18
22
|
constructor(equatorialSize, polarSize) {
|
|
19
23
|
this._a = equatorialSize;
|
|
20
24
|
this._b = polarSize;
|
|
@@ -40,8 +44,10 @@ class Ellipsoid {
|
|
|
40
44
|
}
|
|
41
45
|
|
|
42
46
|
static getRelativeBearing(a, b) {
|
|
43
|
-
let a_y = Math.cos(a),
|
|
44
|
-
|
|
47
|
+
let a_y = Math.cos(a),
|
|
48
|
+
a_x = Math.sin(a),
|
|
49
|
+
b_y = Math.cos(b),
|
|
50
|
+
b_x = Math.sin(b);
|
|
45
51
|
let c = a_y * b_x - b_y * a_x,
|
|
46
52
|
d = a_x * b_x + a_y * b_y;
|
|
47
53
|
if (c > 0.0) {
|
|
@@ -71,7 +77,7 @@ class Ellipsoid {
|
|
|
71
77
|
|
|
72
78
|
var l3 = l1 + Math.atan2(By, Math.cos(f1) + Bx);
|
|
73
79
|
|
|
74
|
-
return new LonLat((l3 * math.DEGREES + 540) % 360 - 180, f3 * math.DEGREES);
|
|
80
|
+
return new LonLat(((l3 * math.DEGREES + 540) % 360) - 180, f3 * math.DEGREES);
|
|
75
81
|
}
|
|
76
82
|
|
|
77
83
|
/**
|
|
@@ -82,15 +88,25 @@ class Ellipsoid {
|
|
|
82
88
|
* @returns {LonLat} Intermediate point between points.
|
|
83
89
|
*/
|
|
84
90
|
static getIntermediatePointOnGreatCircle(lonLat1, lonLat2, fraction) {
|
|
85
|
-
var f1 = lonLat1.lat * math.RADIANS,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
91
|
+
var f1 = lonLat1.lat * math.RADIANS,
|
|
92
|
+
l1 = lonLat1.lon * math.RADIANS;
|
|
93
|
+
var f2 = lonLat2.lat * math.RADIANS,
|
|
94
|
+
l2 = lonLat2.lon * math.RADIANS;
|
|
95
|
+
|
|
96
|
+
var sinf1 = Math.sin(f1),
|
|
97
|
+
cosf1 = Math.cos(f1),
|
|
98
|
+
sinl1 = Math.sin(l1),
|
|
99
|
+
cosl1 = Math.cos(l1);
|
|
100
|
+
var sinf2 = Math.sin(f2),
|
|
101
|
+
cosf2 = Math.cos(f2),
|
|
102
|
+
sinl2 = Math.sin(l2),
|
|
103
|
+
cosl2 = Math.cos(l2);
|
|
90
104
|
|
|
91
105
|
var df = f2 - f1,
|
|
92
106
|
dl = l2 - l1;
|
|
93
|
-
var a =
|
|
107
|
+
var a =
|
|
108
|
+
Math.sin(df / 2) * Math.sin(df / 2) +
|
|
109
|
+
Math.cos(f1) * Math.cos(f2) * Math.sin(dl / 2) * Math.sin(dl / 2);
|
|
94
110
|
var d = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
95
111
|
|
|
96
112
|
var A = Math.sin((1 - fraction) * d) / Math.sin(d);
|
|
@@ -103,12 +119,15 @@ class Ellipsoid {
|
|
|
103
119
|
var f3 = Math.atan2(z, Math.sqrt(x * x + y * y));
|
|
104
120
|
var l3 = Math.atan2(y, x);
|
|
105
121
|
|
|
106
|
-
return new LonLat((l3 * math.DEGREES + 540) % 360 - 180, f3 * math.DEGREES);
|
|
122
|
+
return new LonLat(((l3 * math.DEGREES + 540) % 360) - 180, f3 * math.DEGREES);
|
|
107
123
|
}
|
|
108
124
|
|
|
109
125
|
static getRhumbBearing(lonLat1, lonLat2) {
|
|
110
126
|
var dLon = (lonLat2.lon - lonLat1.lon) * math.RADIANS;
|
|
111
|
-
var dPhi = Math.log(
|
|
127
|
+
var dPhi = Math.log(
|
|
128
|
+
Math.tan((lonLat2.lat * math.RADIANS) / 2 + Math.PI / 4) /
|
|
129
|
+
Math.tan((lonLat1.lat * math.RADIANS) / 2 + Math.PI / 4)
|
|
130
|
+
);
|
|
112
131
|
if (Math.abs(dLon) > Math.PI) {
|
|
113
132
|
if (dLon > 0) {
|
|
114
133
|
dLon = (2 * Math.PI - dLon) * -1;
|
|
@@ -120,8 +139,10 @@ class Ellipsoid {
|
|
|
120
139
|
}
|
|
121
140
|
|
|
122
141
|
static getBearing(lonLat1, lonLat2) {
|
|
123
|
-
var f1 = lonLat1.lat * math.RADIANS,
|
|
124
|
-
|
|
142
|
+
var f1 = lonLat1.lat * math.RADIANS,
|
|
143
|
+
l1 = lonLat1.lon * math.RADIANS;
|
|
144
|
+
var f2 = lonLat2.lat * math.RADIANS,
|
|
145
|
+
l2 = lonLat2.lon * math.RADIANS;
|
|
125
146
|
var y = Math.sin(l2 - l1) * Math.cos(f2);
|
|
126
147
|
var x = Math.cos(f1) * Math.sin(f2) - Math.sin(f1) * Math.cos(f2) * Math.cos(l2 - l1);
|
|
127
148
|
return Math.atan2(y, x) * math.DEGREES;
|
|
@@ -138,8 +159,7 @@ class Ellipsoid {
|
|
|
138
159
|
f2 = lonLat2.lat * math.RADIANS;
|
|
139
160
|
var dl = (lonLat2.lon - lonLat1.lon) * math.RADIANS;
|
|
140
161
|
var y = Math.sin(dl) * Math.cos(f2);
|
|
141
|
-
var x = Math.cos(f1) * Math.sin(f2) -
|
|
142
|
-
Math.sin(f1) * Math.cos(f2) * Math.cos(dl);
|
|
162
|
+
var x = Math.cos(f1) * Math.sin(f2) - Math.sin(f1) * Math.cos(f2) * Math.cos(dl);
|
|
143
163
|
var D = Math.atan2(y, x);
|
|
144
164
|
return (D * math.DEGREES + 360) % 360;
|
|
145
165
|
}
|
|
@@ -162,19 +182,30 @@ class Ellipsoid {
|
|
|
162
182
|
var df = f2 - f1,
|
|
163
183
|
dl = l2 - l1;
|
|
164
184
|
|
|
165
|
-
var d12 =
|
|
185
|
+
var d12 =
|
|
186
|
+
2 *
|
|
187
|
+
Math.asin(
|
|
188
|
+
Math.sqrt(
|
|
189
|
+
Math.sin(df / 2) * Math.sin(df / 2) +
|
|
190
|
+
Math.cos(f1) * Math.cos(f2) * Math.sin(dl / 2) * Math.sin(dl / 2)
|
|
191
|
+
)
|
|
192
|
+
);
|
|
166
193
|
if (d12 == 0) return null;
|
|
167
194
|
|
|
168
195
|
// initial/final bearings between points
|
|
169
|
-
var Da = Math.acos(
|
|
196
|
+
var Da = Math.acos(
|
|
197
|
+
(Math.sin(f2) - Math.sin(f1) * Math.cos(d12)) / (Math.sin(d12) * Math.cos(f1))
|
|
198
|
+
);
|
|
170
199
|
if (isNaN(Da)) Da = 0; // protect against rounding
|
|
171
|
-
var Db = Math.acos(
|
|
200
|
+
var Db = Math.acos(
|
|
201
|
+
(Math.sin(f1) - Math.sin(f2) * Math.cos(d12)) / (Math.sin(d12) * Math.cos(f2))
|
|
202
|
+
);
|
|
172
203
|
|
|
173
204
|
var D12 = Math.sin(l2 - l1) > 0 ? Da : 2 * Math.PI - Da;
|
|
174
205
|
var D21 = Math.sin(l2 - l1) > 0 ? 2 * Math.PI - Db : Db;
|
|
175
206
|
|
|
176
|
-
var a1 = (D13 - D12 + Math.PI) % (2 * Math.PI) - Math.PI;
|
|
177
|
-
var a2 = (D21 - D23 + Math.PI) % (2 * Math.PI) - Math.PI;
|
|
207
|
+
var a1 = ((D13 - D12 + Math.PI) % (2 * Math.PI)) - Math.PI;
|
|
208
|
+
var a2 = ((D21 - D23 + Math.PI) % (2 * Math.PI)) - Math.PI;
|
|
178
209
|
|
|
179
210
|
if (Math.sin(a1) == 0 && Math.sin(a2) == 0) return null; // infinite intersections
|
|
180
211
|
if (Math.sin(a1) * Math.sin(a2) < 0) return null; // ambiguous intersection
|
|
@@ -183,13 +214,23 @@ class Ellipsoid {
|
|
|
183
214
|
// a2 = Math.abs(a2);
|
|
184
215
|
// ... Ed Williams takes abs of a1/a2, but seems to break calculation?
|
|
185
216
|
|
|
186
|
-
var a3 = Math.acos(
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
var
|
|
217
|
+
var a3 = Math.acos(
|
|
218
|
+
-Math.cos(a1) * Math.cos(a2) + Math.sin(a1) * Math.sin(a2) * Math.cos(d12)
|
|
219
|
+
);
|
|
220
|
+
var d13 = Math.atan2(
|
|
221
|
+
Math.sin(d12) * Math.sin(a1) * Math.sin(a2),
|
|
222
|
+
Math.cos(a2) + Math.cos(a1) * Math.cos(a3)
|
|
223
|
+
);
|
|
224
|
+
var f3 = Math.asin(
|
|
225
|
+
Math.sin(f1) * Math.cos(d13) + Math.cos(f1) * Math.sin(d13) * Math.cos(D13)
|
|
226
|
+
);
|
|
227
|
+
var dl13 = Math.atan2(
|
|
228
|
+
Math.sin(D13) * Math.sin(d13) * Math.cos(f1),
|
|
229
|
+
Math.cos(d13) - Math.sin(f1) * Math.sin(f3)
|
|
230
|
+
);
|
|
190
231
|
var l3 = l1 + dl13;
|
|
191
232
|
|
|
192
|
-
return new LonLat((l3 * math.DEGREES + 540) % 360 - 180, f3 * math.DEGREES);
|
|
233
|
+
return new LonLat(((l3 * math.DEGREES + 540) % 360) - 180, f3 * math.DEGREES);
|
|
193
234
|
}
|
|
194
235
|
|
|
195
236
|
/**
|
|
@@ -226,7 +267,7 @@ class Ellipsoid {
|
|
|
226
267
|
* Gets cartesian ECEF from Wgs84 geodetic coordiantes.
|
|
227
268
|
* @public
|
|
228
269
|
* @param {LonLat} lonlat - Degrees geodetic coordiantes.
|
|
229
|
-
* @returns {
|
|
270
|
+
* @returns {Vec3} -
|
|
230
271
|
*/
|
|
231
272
|
lonLatToCartesian(lonlat) {
|
|
232
273
|
var latrad = math.RADIANS * lonlat.lat,
|
|
@@ -240,15 +281,16 @@ class Ellipsoid {
|
|
|
240
281
|
return new Vec3(
|
|
241
282
|
nc * Math.sin(lonrad),
|
|
242
283
|
(N * (1.0 - this._e2) + lonlat.height) * slt,
|
|
243
|
-
nc * Math.cos(lonrad)
|
|
284
|
+
nc * Math.cos(lonrad)
|
|
285
|
+
);
|
|
244
286
|
}
|
|
245
287
|
|
|
246
288
|
/**
|
|
247
289
|
* Gets cartesian ECEF from Wgs84 geodetic coordiantes.
|
|
248
290
|
* @public
|
|
249
291
|
* @param {LonLat} lonlat - Degrees geodetic coordiantes.
|
|
250
|
-
* @param {
|
|
251
|
-
* @returns {
|
|
292
|
+
* @param {Vec3} res - Output result.
|
|
293
|
+
* @returns {Vec3} -
|
|
252
294
|
*/
|
|
253
295
|
lonLatToCartesianRes(lonlat, res) {
|
|
254
296
|
var latrad = math.RADIANS * lonlat.lat,
|
|
@@ -272,7 +314,7 @@ class Ellipsoid {
|
|
|
272
314
|
* @param {Number} lon - Longitude.
|
|
273
315
|
* @param {Number} lat - Latitude.
|
|
274
316
|
* @param {Number} height - Height.
|
|
275
|
-
* @returns {
|
|
317
|
+
* @returns {Vec3} -
|
|
276
318
|
*/
|
|
277
319
|
geodeticToCartesian(lon, lat, height = 0) {
|
|
278
320
|
var latrad = math.RADIANS * lat,
|
|
@@ -286,17 +328,20 @@ class Ellipsoid {
|
|
|
286
328
|
return new Vec3(
|
|
287
329
|
nc * Math.sin(lonrad),
|
|
288
330
|
(N * (1 - this._e2) + height) * slt,
|
|
289
|
-
nc * Math.cos(lonrad)
|
|
331
|
+
nc * Math.cos(lonrad)
|
|
332
|
+
);
|
|
290
333
|
}
|
|
291
334
|
|
|
292
335
|
/**
|
|
293
336
|
* Gets Wgs84 geodetic coordiantes from cartesian ECEF.
|
|
294
337
|
* @public
|
|
295
|
-
* @param {
|
|
338
|
+
* @param {Vec3} cartesian - Cartesian coordinates.
|
|
296
339
|
* @returns {LonLat} -
|
|
297
340
|
*/
|
|
298
341
|
cartesianToLonLat(cartesian) {
|
|
299
|
-
var x = cartesian.z,
|
|
342
|
+
var x = cartesian.z,
|
|
343
|
+
y = cartesian.x,
|
|
344
|
+
z = cartesian.y;
|
|
300
345
|
var ecc2 = this._e2;
|
|
301
346
|
var ecc22 = this._e22;
|
|
302
347
|
var r2 = x * x + y * y;
|
|
@@ -305,24 +350,37 @@ class Ellipsoid {
|
|
|
305
350
|
var f = 54.0 * this._b2 * z2;
|
|
306
351
|
var g = r2 + (1.0 - ecc2) * z2 + ecc2 * (this._a2 - this._b2);
|
|
307
352
|
var g2 = g * g;
|
|
308
|
-
var c = ecc22 * f * r2 / (g2 * g);
|
|
309
|
-
var s = Math.pow(
|
|
310
|
-
var p = f / (3.0 * Math.pow(
|
|
353
|
+
var c = (ecc22 * f * r2) / (g2 * g);
|
|
354
|
+
var s = Math.pow(1.0 + c + Math.sqrt(c * (c + 2.0)), 0.33333333333333333);
|
|
355
|
+
var p = f / (3.0 * Math.pow(1.0 + s + 1.0 / s, 2.0) * g2);
|
|
311
356
|
var q = Math.sqrt(1.0 + 2.0 * ecc22 * p);
|
|
312
|
-
var recc2r0 =
|
|
357
|
+
var recc2r0 =
|
|
358
|
+
r -
|
|
359
|
+
ecc2 *
|
|
360
|
+
(-(p * ecc2 * r) / 1 +
|
|
361
|
+
q +
|
|
362
|
+
Math.sqrt(
|
|
363
|
+
0.5 * this._a2 * (1.0 + 1.0 / q) -
|
|
364
|
+
(p * (1.0 - ecc2) * z2) / (q * (1.0 + q)) -
|
|
365
|
+
0.5 * p * r2
|
|
366
|
+
));
|
|
313
367
|
var recc2r02 = recc2r0 * recc2r0;
|
|
314
368
|
var v = Math.sqrt(recc2r02 + (1.0 - ecc2) * z2);
|
|
315
|
-
var z0 = this._b2 * z / (this._a * v);
|
|
369
|
+
var z0 = (this._b2 * z) / (this._a * v);
|
|
316
370
|
var lat = Math.atan((z + this._k2 * z0) / r) * math.DEGREES;
|
|
317
371
|
var lon = Math.atan2(y, x) * math.DEGREES;
|
|
318
|
-
return new LonLat(
|
|
372
|
+
return new LonLat(
|
|
373
|
+
lon,
|
|
374
|
+
lat,
|
|
375
|
+
cartesian.length() - this.geodeticToCartesian(lon, lat).length()
|
|
376
|
+
);
|
|
319
377
|
}
|
|
320
378
|
|
|
321
379
|
/**
|
|
322
380
|
* Gets ellipsoid surface normal.
|
|
323
381
|
* @public
|
|
324
|
-
* @param {
|
|
325
|
-
* @returns {
|
|
382
|
+
* @param {Vec3} coord - Spatial coordiantes.
|
|
383
|
+
* @returns {Vec3} -
|
|
326
384
|
*/
|
|
327
385
|
getSurfaceNormal3v(coord) {
|
|
328
386
|
var r2 = this._invRadii2;
|
|
@@ -335,11 +393,22 @@ class Ellipsoid {
|
|
|
335
393
|
|
|
336
394
|
getBearingDestination(lonLat1, bearing, distance) {
|
|
337
395
|
bearing = bearing * math.RADIANS;
|
|
338
|
-
var nlon = (lonLat1.lon + 540) % 360 - 180;
|
|
339
|
-
var f1 = lonLat1.lat * math.RADIANS,
|
|
396
|
+
var nlon = ((lonLat1.lon + 540) % 360) - 180;
|
|
397
|
+
var f1 = lonLat1.lat * math.RADIANS,
|
|
398
|
+
l1 = nlon * math.RADIANS;
|
|
340
399
|
var dR = distance / this._a;
|
|
341
|
-
var f2 = Math.asin(
|
|
342
|
-
|
|
400
|
+
var f2 = Math.asin(
|
|
401
|
+
Math.sin(f1) * Math.cos(dR) + Math.cos(f1) * Math.sin(dR) * Math.cos(bearing)
|
|
402
|
+
);
|
|
403
|
+
return new LonLat(
|
|
404
|
+
(l1 +
|
|
405
|
+
Math.atan2(
|
|
406
|
+
Math.sin(bearing) * Math.sin(dR) * Math.cos(f1),
|
|
407
|
+
Math.cos(dR) - Math.sin(f1) * Math.sin(f2)
|
|
408
|
+
)) *
|
|
409
|
+
math.DEGREES,
|
|
410
|
+
f2 * math.DEGREES
|
|
411
|
+
);
|
|
343
412
|
}
|
|
344
413
|
|
|
345
414
|
/**
|
|
@@ -351,8 +420,12 @@ class Ellipsoid {
|
|
|
351
420
|
getGreatCircleDistance(lonLat1, lonLat2) {
|
|
352
421
|
var dLat = (lonLat2.lat - lonLat1.lat) * math.RADIANS;
|
|
353
422
|
var dLon = (lonLat2.lon - lonLat1.lon) * math.RADIANS;
|
|
354
|
-
var a =
|
|
355
|
-
Math.sin(
|
|
423
|
+
var a =
|
|
424
|
+
Math.sin(dLat / 2.0) * Math.sin(dLat / 2.0) +
|
|
425
|
+
Math.sin(dLon / 2.0) *
|
|
426
|
+
Math.sin(dLon / 2) *
|
|
427
|
+
Math.cos(lonLat1.lat * math.RADIANS) *
|
|
428
|
+
Math.cos(lonLat2.lat * math.RADIANS);
|
|
356
429
|
return this._a * 2.0 * Math.atan2(Math.sqrt(a), Math.sqrt(1.0 - a));
|
|
357
430
|
}
|
|
358
431
|
|
|
@@ -373,28 +446,52 @@ class Ellipsoid {
|
|
|
373
446
|
sinAlpha1 = Math.sin(alpha1),
|
|
374
447
|
cosAlpha1 = Math.cos(alpha1),
|
|
375
448
|
tanU1 = (1 - f) * Math.tan(lat1 * math.RADIANS),
|
|
376
|
-
cosU1 = 1 / Math.sqrt(
|
|
449
|
+
cosU1 = 1 / Math.sqrt(1 + tanU1 * tanU1),
|
|
450
|
+
sinU1 = tanU1 * cosU1,
|
|
377
451
|
sigma1 = Math.atan2(tanU1, cosAlpha1),
|
|
378
452
|
sinAlpha = cosU1 * sinAlpha1,
|
|
379
453
|
cosSqAlpha = 1 - sinAlpha * sinAlpha,
|
|
380
|
-
uSq = cosSqAlpha * (a * a - b * b) / (b * b),
|
|
381
|
-
A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq))),
|
|
382
|
-
B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq))),
|
|
454
|
+
uSq = (cosSqAlpha * (a * a - b * b)) / (b * b),
|
|
455
|
+
A = 1 + (uSq / 16384) * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq))),
|
|
456
|
+
B = (uSq / 1024) * (256 + uSq * (-128 + uSq * (74 - 47 * uSq))),
|
|
383
457
|
sigma = s / (b * A),
|
|
384
458
|
sigmaP = 2 * Math.PI;
|
|
385
459
|
while (Math.abs(sigma - sigmaP) > 1e-12) {
|
|
386
460
|
var cos2SigmaM = Math.cos(2 * sigma1 + sigma),
|
|
387
461
|
sinSigma = Math.sin(sigma),
|
|
388
462
|
cosSigma = Math.cos(sigma),
|
|
389
|
-
deltaSigma =
|
|
463
|
+
deltaSigma =
|
|
464
|
+
B *
|
|
465
|
+
sinSigma *
|
|
466
|
+
(cos2SigmaM +
|
|
467
|
+
(B / 4) *
|
|
468
|
+
(cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM) -
|
|
469
|
+
(B / 6) *
|
|
470
|
+
cos2SigmaM *
|
|
471
|
+
(-3 + 4 * sinSigma * sinSigma) *
|
|
472
|
+
(-3 + 4 * cos2SigmaM * cos2SigmaM)));
|
|
390
473
|
sigmaP = sigma;
|
|
391
474
|
sigma = s / (b * A) + deltaSigma;
|
|
392
475
|
}
|
|
393
476
|
var tmp = sinU1 * sinSigma - cosU1 * cosSigma * cosAlpha1,
|
|
394
|
-
lat2 = Math.atan2(
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
477
|
+
lat2 = Math.atan2(
|
|
478
|
+
sinU1 * cosSigma + cosU1 * sinSigma * cosAlpha1,
|
|
479
|
+
(1 - f) * Math.sqrt(sinAlpha * sinAlpha + tmp * tmp)
|
|
480
|
+
),
|
|
481
|
+
lambda = Math.atan2(
|
|
482
|
+
sinSigma * sinAlpha1,
|
|
483
|
+
cosU1 * cosSigma - sinU1 * sinSigma * cosAlpha1
|
|
484
|
+
),
|
|
485
|
+
C = (f / 16) * cosSqAlpha * (4 + f * (4 - 3 * cosSqAlpha)),
|
|
486
|
+
L =
|
|
487
|
+
lambda -
|
|
488
|
+
(1 - C) *
|
|
489
|
+
f *
|
|
490
|
+
sinAlpha *
|
|
491
|
+
(sigma +
|
|
492
|
+
C *
|
|
493
|
+
sinSigma *
|
|
494
|
+
(cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM))),
|
|
398
495
|
revAz = Math.atan2(sinAlpha, -tmp); // final bearing
|
|
399
496
|
return new LonLat(lon1 + L * math.DEGREES, lat2 * math.DEGREES);
|
|
400
497
|
}
|
|
@@ -403,12 +500,11 @@ class Ellipsoid {
|
|
|
403
500
|
* Returns ray vector hit ellipsoid coordinates.
|
|
404
501
|
* If the ray doesn't hit ellipsoid returns null.
|
|
405
502
|
* @public
|
|
406
|
-
* @param {
|
|
407
|
-
* @param {
|
|
408
|
-
* @returns {
|
|
503
|
+
* @param {Vec3} origin - Ray origin point.
|
|
504
|
+
* @param {Vec3} direction - Ray direction.
|
|
505
|
+
* @returns {Vec3} -
|
|
409
506
|
*/
|
|
410
507
|
hitRay(origin, direction) {
|
|
411
|
-
|
|
412
508
|
var q = this._invRadii.mul(origin);
|
|
413
509
|
var w = this._invRadii.mul(direction);
|
|
414
510
|
|
|
@@ -466,7 +562,7 @@ class Ellipsoid {
|
|
|
466
562
|
// qw >= 0.0. Looking outward or tangent.
|
|
467
563
|
return null;
|
|
468
564
|
}
|
|
469
|
-
}
|
|
565
|
+
}
|
|
470
566
|
}
|
|
471
567
|
|
|
472
|
-
export { Ellipsoid };
|
|
568
|
+
export { Ellipsoid };
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* @module og/ellipsoid/wgs84
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
"use strict";
|
|
6
6
|
|
|
7
|
-
import { Ellipsoid } from
|
|
7
|
+
import { Ellipsoid } from "./Ellipsoid.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* WGS84 ellipsoid object.
|
|
11
|
-
* @type {
|
|
11
|
+
* @type {Ellipsoid}
|
|
12
12
|
*/
|
|
13
|
-
export const wgs84 = new Ellipsoid(6378137.
|
|
13
|
+
export const wgs84 = new Ellipsoid(6378137.0, 6356752.3142);
|