@math.gl/geospatial 3.5.3 → 3.6.0-alpha.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 (56) hide show
  1. package/dist/constants.d.ts +12 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/constants.js +22 -0
  4. package/dist/ellipsoid/ellipsoid.d.ts +68 -0
  5. package/dist/ellipsoid/ellipsoid.d.ts.map +1 -0
  6. package/dist/ellipsoid/ellipsoid.js +132 -0
  7. package/dist/ellipsoid/helpers/ellipsoid-transform.d.ts +2 -0
  8. package/dist/ellipsoid/helpers/ellipsoid-transform.d.ts.map +1 -0
  9. package/dist/ellipsoid/helpers/ellipsoid-transform.js +124 -0
  10. package/dist/ellipsoid/helpers/scale-to-geodetic-surface.d.ts +3 -0
  11. package/dist/ellipsoid/helpers/scale-to-geodetic-surface.d.ts.map +1 -0
  12. package/dist/ellipsoid/helpers/scale-to-geodetic-surface.js +70 -0
  13. package/dist/es5/constants.js +4 -4
  14. package/dist/es5/constants.js.map +1 -1
  15. package/dist/es5/ellipsoid/ellipsoid.js +123 -161
  16. package/dist/es5/ellipsoid/ellipsoid.js.map +1 -1
  17. package/dist/es5/ellipsoid/helpers/ellipsoid-transform.js +25 -21
  18. package/dist/es5/ellipsoid/helpers/ellipsoid-transform.js.map +1 -1
  19. package/dist/es5/ellipsoid/helpers/scale-to-geodetic-surface.js +39 -46
  20. package/dist/es5/ellipsoid/helpers/scale-to-geodetic-surface.js.map +1 -1
  21. package/dist/es5/index.js +2 -2
  22. package/dist/es5/index.js.map +1 -1
  23. package/dist/es5/type-utils.js +13 -19
  24. package/dist/es5/type-utils.js.map +1 -1
  25. package/dist/esm/constants.js.map +1 -1
  26. package/dist/esm/ellipsoid/ellipsoid.js +22 -7
  27. package/dist/esm/ellipsoid/ellipsoid.js.map +1 -1
  28. package/dist/esm/ellipsoid/helpers/ellipsoid-transform.js.map +1 -1
  29. package/dist/esm/ellipsoid/helpers/scale-to-geodetic-surface.js +1 -2
  30. package/dist/esm/ellipsoid/helpers/scale-to-geodetic-surface.js.map +1 -1
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/esm/type-utils.js +3 -3
  33. package/dist/esm/type-utils.js.map +1 -1
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +2 -0
  37. package/dist/type-utils.d.ts +24 -0
  38. package/dist/type-utils.d.ts.map +1 -0
  39. package/dist/type-utils.js +94 -0
  40. package/package.json +5 -5
  41. package/src/{constants.js → constants.ts} +0 -0
  42. package/src/ellipsoid/{ellipsoid.js → ellipsoid.ts} +96 -35
  43. package/src/ellipsoid/helpers/{ellipsoid-transform.js → ellipsoid-transform.ts} +0 -0
  44. package/src/ellipsoid/helpers/{scale-to-geodetic-surface.js → scale-to-geodetic-surface.ts} +0 -0
  45. package/src/{index.js → index.ts} +0 -0
  46. package/src/type-utils.ts +143 -0
  47. package/dist/es5/ellipsoid/ellipsoid.d.ts +0 -95
  48. package/dist/es5/index.d.ts +0 -1
  49. package/dist/es5/type-utils.d.ts +0 -55
  50. package/dist/esm/ellipsoid/ellipsoid.d.ts +0 -95
  51. package/dist/esm/index.d.ts +0 -1
  52. package/dist/esm/type-utils.d.ts +0 -55
  53. package/src/ellipsoid/ellipsoid.d.ts +0 -95
  54. package/src/index.d.ts +0 -1
  55. package/src/type-utils.d.ts +0 -55
  56. package/src/type-utils.js +0 -71
@@ -2,18 +2,12 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports.default = void 0;
11
9
 
12
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
11
 
18
12
  var _core = require("@math.gl/core");
19
13
 
@@ -23,28 +17,33 @@ var _constants = require("../constants");
23
17
 
24
18
  var _typeUtils = require("../type-utils");
25
19
 
26
- var _scaleToGeodeticSurface2 = _interopRequireDefault(require("./helpers/scale-to-geodetic-surface"));
20
+ var _scaleToGeodeticSurface = _interopRequireDefault(require("./helpers/scale-to-geodetic-surface"));
27
21
 
28
22
  var _ellipsoidTransform = _interopRequireDefault(require("./helpers/ellipsoid-transform"));
29
23
 
30
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
-
32
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
-
34
- var scratchVector = new _core.Vector3();
35
- var scratchNormal = new _core.Vector3();
36
- var scratchK = new _core.Vector3();
37
- var scratchPosition = new _core.Vector3();
38
- var scratchHeight = new _core.Vector3();
39
- var scratchCartesian = new _core.Vector3();
40
- var wgs84;
41
-
42
- var Ellipsoid = function () {
43
- function Ellipsoid() {
44
- var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0.0;
45
- var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.0;
46
- var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.0;
47
- (0, _classCallCheck2.default)(this, Ellipsoid);
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+
28
+ const scratchVector = new _core.Vector3();
29
+ const scratchNormal = new _core.Vector3();
30
+ const scratchK = new _core.Vector3();
31
+ const scratchPosition = new _core.Vector3();
32
+ const scratchHeight = new _core.Vector3();
33
+ const scratchCartesian = new _core.Vector3();
34
+ let wgs84;
35
+
36
+ class Ellipsoid {
37
+ constructor(x = 0.0, y = 0.0, z = 0.0) {
38
+ (0, _defineProperty2.default)(this, "radii", void 0);
39
+ (0, _defineProperty2.default)(this, "radiiSquared", void 0);
40
+ (0, _defineProperty2.default)(this, "radiiToTheFourth", void 0);
41
+ (0, _defineProperty2.default)(this, "oneOverRadii", void 0);
42
+ (0, _defineProperty2.default)(this, "oneOverRadiiSquared", void 0);
43
+ (0, _defineProperty2.default)(this, "minimumRadius", void 0);
44
+ (0, _defineProperty2.default)(this, "maximumRadius", void 0);
45
+ (0, _defineProperty2.default)(this, "centerToleranceSquared", _core._MathUtils.EPSILON1);
46
+ (0, _defineProperty2.default)(this, "squaredXOverSquaredZ", void 0);
48
47
  (0, _core.assert)(x >= 0.0);
49
48
  (0, _core.assert)(y >= 0.0);
50
49
  (0, _core.assert)(z >= 0.0);
@@ -55,7 +54,6 @@ var Ellipsoid = function () {
55
54
  this.oneOverRadiiSquared = new _core.Vector3(x === 0.0 ? 0.0 : 1.0 / (x * x), y === 0.0 ? 0.0 : 1.0 / (y * y), z === 0.0 ? 0.0 : 1.0 / (z * z));
56
55
  this.minimumRadius = Math.min(x, y, z);
57
56
  this.maximumRadius = Math.max(x, y, z);
58
- this.centerToleranceSquared = _core._MathUtils.EPSILON1;
59
57
 
60
58
  if (this.radiiSquared.z !== 0) {
61
59
  this.squaredXOverSquaredZ = this.radiiSquared.x / this.radiiSquared.z;
@@ -64,142 +62,106 @@ var Ellipsoid = function () {
64
62
  Object.freeze(this);
65
63
  }
66
64
 
67
- (0, _createClass2.default)(Ellipsoid, [{
68
- key: "equals",
69
- value: function equals(right) {
70
- return this === right || Boolean(right && this.radii.equals(right.radii));
71
- }
72
- }, {
73
- key: "toString",
74
- value: function toString() {
75
- return this.radii.toString();
76
- }
77
- }, {
78
- key: "cartographicToCartesian",
79
- value: function cartographicToCartesian(cartographic) {
80
- var result = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0];
81
- var normal = scratchNormal;
82
- var k = scratchK;
83
-
84
- var _cartographic = (0, _slicedToArray2.default)(cartographic, 3),
85
- height = _cartographic[2];
86
-
87
- this.geodeticSurfaceNormalCartographic(cartographic, normal);
88
- k.copy(this.radiiSquared).scale(normal);
89
- var gamma = Math.sqrt(normal.dot(k));
90
- k.scale(1 / gamma);
91
- normal.scale(height);
92
- k.add(normal);
93
- return k.to(result);
94
- }
95
- }, {
96
- key: "cartesianToCartographic",
97
- value: function cartesianToCartographic(cartesian) {
98
- var result = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0];
99
- scratchCartesian.from(cartesian);
100
- var point = this.scaleToGeodeticSurface(scratchCartesian, scratchPosition);
101
-
102
- if (!point) {
103
- return undefined;
104
- }
105
-
106
- var normal = this.geodeticSurfaceNormal(point, scratchNormal);
107
- var h = scratchHeight;
108
- h.copy(scratchCartesian).subtract(point);
109
- var longitude = Math.atan2(normal.y, normal.x);
110
- var latitude = Math.asin(normal.z);
111
- var height = Math.sign(vec3.dot(h, scratchCartesian)) * vec3.length(h);
112
- return (0, _typeUtils.toCartographicFromRadians)([longitude, latitude, height], result);
113
- }
114
- }, {
115
- key: "eastNorthUpToFixedFrame",
116
- value: function eastNorthUpToFixedFrame(origin) {
117
- var result = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new _core.Matrix4();
118
- return (0, _ellipsoidTransform.default)(this, 'east', 'north', 'up', origin, result);
119
- }
120
- }, {
121
- key: "localFrameToFixedFrame",
122
- value: function localFrameToFixedFrame(firstAxis, secondAxis, thirdAxis, origin) {
123
- var result = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new _core.Matrix4();
124
- return (0, _ellipsoidTransform.default)(this, firstAxis, secondAxis, thirdAxis, origin, result);
125
- }
126
- }, {
127
- key: "geocentricSurfaceNormal",
128
- value: function geocentricSurfaceNormal(cartesian) {
129
- var result = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0];
130
- return scratchVector.from(cartesian).normalize().to(result);
131
- }
132
- }, {
133
- key: "geodeticSurfaceNormalCartographic",
134
- value: function geodeticSurfaceNormalCartographic(cartographic) {
135
- var result = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0];
136
- var cartographicVectorRadians = (0, _typeUtils.fromCartographicToRadians)(cartographic);
137
- var longitude = cartographicVectorRadians[0];
138
- var latitude = cartographicVectorRadians[1];
139
- var cosLatitude = Math.cos(latitude);
140
- scratchVector.set(cosLatitude * Math.cos(longitude), cosLatitude * Math.sin(longitude), Math.sin(latitude)).normalize();
141
- return scratchVector.to(result);
142
- }
143
- }, {
144
- key: "geodeticSurfaceNormal",
145
- value: function geodeticSurfaceNormal(cartesian) {
146
- var result = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0];
147
- return scratchVector.from(cartesian).scale(this.oneOverRadiiSquared).normalize().to(result);
148
- }
149
- }, {
150
- key: "scaleToGeodeticSurface",
151
- value: function scaleToGeodeticSurface(cartesian, result) {
152
- return (0, _scaleToGeodeticSurface2.default)(cartesian, this, result);
153
- }
154
- }, {
155
- key: "scaleToGeocentricSurface",
156
- value: function scaleToGeocentricSurface(cartesian) {
157
- var result = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0];
158
- scratchPosition.from(cartesian);
159
- var positionX = scratchPosition.x;
160
- var positionY = scratchPosition.y;
161
- var positionZ = scratchPosition.z;
162
- var oneOverRadiiSquared = this.oneOverRadiiSquared;
163
- var beta = 1.0 / Math.sqrt(positionX * positionX * oneOverRadiiSquared.x + positionY * positionY * oneOverRadiiSquared.y + positionZ * positionZ * oneOverRadiiSquared.z);
164
- return scratchPosition.multiplyScalar(beta).to(result);
165
- }
166
- }, {
167
- key: "transformPositionToScaledSpace",
168
- value: function transformPositionToScaledSpace(position) {
169
- var result = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0];
170
- return scratchPosition.from(position).scale(this.oneOverRadii).to(result);
171
- }
172
- }, {
173
- key: "transformPositionFromScaledSpace",
174
- value: function transformPositionFromScaledSpace(position) {
175
- var result = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0];
176
- return scratchPosition.from(position).scale(this.radii).to(result);
177
- }
178
- }, {
179
- key: "getSurfaceNormalIntersectionWithZAxis",
180
- value: function getSurfaceNormalIntersectionWithZAxis(position) {
181
- var buffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.0;
182
- var result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0, 0];
183
- (0, _core.assert)((0, _core.equals)(this.radii.x, this.radii.y, _core._MathUtils.EPSILON15));
184
- (0, _core.assert)(this.radii.z > 0);
185
- scratchPosition.from(position);
186
- var z = scratchPosition.z * (1 - this.squaredXOverSquaredZ);
187
-
188
- if (Math.abs(z) >= this.radii.z - buffer) {
189
- return undefined;
190
- }
191
-
192
- return scratchPosition.set(0.0, 0.0, z).to(result);
65
+ equals(right) {
66
+ return this === right || Boolean(right && this.radii.equals(right.radii));
67
+ }
68
+
69
+ toString() {
70
+ return this.radii.toString();
71
+ }
72
+
73
+ cartographicToCartesian(cartographic, result = [0, 0, 0]) {
74
+ const normal = scratchNormal;
75
+ const k = scratchK;
76
+ const [,, height] = cartographic;
77
+ this.geodeticSurfaceNormalCartographic(cartographic, normal);
78
+ k.copy(this.radiiSquared).scale(normal);
79
+ const gamma = Math.sqrt(normal.dot(k));
80
+ k.scale(1 / gamma);
81
+ normal.scale(height);
82
+ k.add(normal);
83
+ return k.to(result);
84
+ }
85
+
86
+ cartesianToCartographic(cartesian, result = [0, 0, 0]) {
87
+ scratchCartesian.from(cartesian);
88
+ const point = this.scaleToGeodeticSurface(scratchCartesian, scratchPosition);
89
+
90
+ if (!point) {
91
+ return undefined;
193
92
  }
194
- }], [{
195
- key: "WGS84",
196
- get: function get() {
197
- wgs84 = wgs84 || new Ellipsoid(_constants.WGS84_RADIUS_X, _constants.WGS84_RADIUS_Y, _constants.WGS84_RADIUS_Z);
198
- return wgs84;
93
+
94
+ const normal = this.geodeticSurfaceNormal(point, scratchNormal);
95
+ const h = scratchHeight;
96
+ h.copy(scratchCartesian).subtract(point);
97
+ const longitude = Math.atan2(normal.y, normal.x);
98
+ const latitude = Math.asin(normal.z);
99
+ const height = Math.sign(vec3.dot(h, scratchCartesian)) * vec3.length(h);
100
+ return (0, _typeUtils.toCartographicFromRadians)([longitude, latitude, height], result);
101
+ }
102
+
103
+ eastNorthUpToFixedFrame(origin, result = new _core.Matrix4()) {
104
+ return (0, _ellipsoidTransform.default)(this, 'east', 'north', 'up', origin, result);
105
+ }
106
+
107
+ localFrameToFixedFrame(firstAxis, secondAxis, thirdAxis, origin, result = new _core.Matrix4()) {
108
+ return (0, _ellipsoidTransform.default)(this, firstAxis, secondAxis, thirdAxis, origin, result);
109
+ }
110
+
111
+ geocentricSurfaceNormal(cartesian, result = [0, 0, 0]) {
112
+ return scratchVector.from(cartesian).normalize().to(result);
113
+ }
114
+
115
+ geodeticSurfaceNormalCartographic(cartographic, result = [0, 0, 0]) {
116
+ const cartographicVectorRadians = (0, _typeUtils.fromCartographicToRadians)(cartographic);
117
+ const longitude = cartographicVectorRadians[0];
118
+ const latitude = cartographicVectorRadians[1];
119
+ const cosLatitude = Math.cos(latitude);
120
+ scratchVector.set(cosLatitude * Math.cos(longitude), cosLatitude * Math.sin(longitude), Math.sin(latitude)).normalize();
121
+ return scratchVector.to(result);
122
+ }
123
+
124
+ geodeticSurfaceNormal(cartesian, result = [0, 0, 0]) {
125
+ return scratchVector.from(cartesian).scale(this.oneOverRadiiSquared).normalize().to(result);
126
+ }
127
+
128
+ scaleToGeodeticSurface(cartesian, result) {
129
+ return (0, _scaleToGeodeticSurface.default)(cartesian, this, result);
130
+ }
131
+
132
+ scaleToGeocentricSurface(cartesian, result = [0, 0, 0]) {
133
+ scratchPosition.from(cartesian);
134
+ const positionX = scratchPosition.x;
135
+ const positionY = scratchPosition.y;
136
+ const positionZ = scratchPosition.z;
137
+ const oneOverRadiiSquared = this.oneOverRadiiSquared;
138
+ const beta = 1.0 / Math.sqrt(positionX * positionX * oneOverRadiiSquared.x + positionY * positionY * oneOverRadiiSquared.y + positionZ * positionZ * oneOverRadiiSquared.z);
139
+ return scratchPosition.multiplyScalar(beta).to(result);
140
+ }
141
+
142
+ transformPositionToScaledSpace(position, result = [0, 0, 0]) {
143
+ return scratchPosition.from(position).scale(this.oneOverRadii).to(result);
144
+ }
145
+
146
+ transformPositionFromScaledSpace(position, result = [0, 0, 0]) {
147
+ return scratchPosition.from(position).scale(this.radii).to(result);
148
+ }
149
+
150
+ getSurfaceNormalIntersectionWithZAxis(position, buffer = 0.0, result = [0, 0, 0]) {
151
+ (0, _core.assert)((0, _core.equals)(this.radii.x, this.radii.y, _core._MathUtils.EPSILON15));
152
+ (0, _core.assert)(this.radii.z > 0);
153
+ scratchPosition.from(position);
154
+ const z = scratchPosition.z * (1 - this.squaredXOverSquaredZ);
155
+
156
+ if (Math.abs(z) >= this.radii.z - buffer) {
157
+ return undefined;
199
158
  }
200
- }]);
201
- return Ellipsoid;
202
- }();
159
+
160
+ return scratchPosition.set(0.0, 0.0, z).to(result);
161
+ }
162
+
163
+ }
203
164
 
204
165
  exports.default = Ellipsoid;
166
+ (0, _defineProperty2.default)(Ellipsoid, "WGS84", new Ellipsoid(_constants.WGS84_RADIUS_X, _constants.WGS84_RADIUS_Y, _constants.WGS84_RADIUS_Z));
205
167
  //# sourceMappingURL=ellipsoid.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ellipsoid/ellipsoid.js"],"names":["scratchVector","Vector3","scratchNormal","scratchK","scratchPosition","scratchHeight","scratchCartesian","wgs84","Ellipsoid","x","y","z","radii","radiiSquared","radiiToTheFourth","oneOverRadii","oneOverRadiiSquared","minimumRadius","Math","min","maximumRadius","max","centerToleranceSquared","_MathUtils","EPSILON1","squaredXOverSquaredZ","Object","freeze","right","Boolean","equals","toString","cartographic","result","normal","k","height","geodeticSurfaceNormalCartographic","copy","scale","gamma","sqrt","dot","add","to","cartesian","from","point","scaleToGeodeticSurface","undefined","geodeticSurfaceNormal","h","subtract","longitude","atan2","latitude","asin","sign","vec3","length","origin","Matrix4","firstAxis","secondAxis","thirdAxis","normalize","cartographicVectorRadians","cosLatitude","cos","set","sin","positionX","positionY","positionZ","beta","multiplyScalar","position","buffer","EPSILON15","abs","WGS84_RADIUS_X","WGS84_RADIUS_Y","WGS84_RADIUS_Z"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n/* eslint-disable */\nimport {Vector3, Matrix4, toRadians, toDegrees, assert, equals, _MathUtils} from '@math.gl/core';\nimport * as vec3 from 'gl-matrix/vec3';\n\nimport {WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z} from '../constants';\nimport {fromCartographicToRadians, toCartographicFromRadians} from '../type-utils';\n\nimport scaleToGeodeticSurface from './helpers/scale-to-geodetic-surface';\nimport localFrameToFixedFrame from './helpers/ellipsoid-transform';\n\nconst scratchVector = new Vector3();\nconst scratchNormal = new Vector3();\nconst scratchK = new Vector3();\nconst scratchPosition = new Vector3();\nconst scratchHeight = new Vector3();\nconst scratchCartesian = new Vector3();\n\nlet wgs84;\n\n// A quadratic surface defined in Cartesian coordinates by the equation\n// <code>(x / a)^2 + (y / b)^2 + (z / c)^2 = 1</code>. Primarily used\n// to represent the shape of planetary bodies.\nexport default class Ellipsoid {\n // An Ellipsoid instance initialized to the WGS84 standard.\n static get WGS84() {\n wgs84 = wgs84 || new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z);\n return wgs84;\n }\n\n // Creates an Ellipsoid from a Cartesian specifying the radii in x, y, and z directions.\n constructor(x = 0.0, y = 0.0, z = 0.0) {\n assert(x >= 0.0);\n assert(y >= 0.0);\n assert(z >= 0.0);\n\n this.radii = new Vector3(x, y, z);\n\n this.radiiSquared = new Vector3(x * x, y * y, z * z);\n\n this.radiiToTheFourth = new Vector3(x * x * x * x, y * y * y * y, z * z * z * z);\n\n this.oneOverRadii = new Vector3(\n x === 0.0 ? 0.0 : 1.0 / x,\n y === 0.0 ? 0.0 : 1.0 / y,\n z === 0.0 ? 0.0 : 1.0 / z\n );\n\n this.oneOverRadiiSquared = new Vector3(\n x === 0.0 ? 0.0 : 1.0 / (x * x),\n y === 0.0 ? 0.0 : 1.0 / (y * y),\n z === 0.0 ? 0.0 : 1.0 / (z * z)\n );\n\n this.minimumRadius = Math.min(x, y, z);\n\n this.maximumRadius = Math.max(x, y, z);\n\n this.centerToleranceSquared = _MathUtils.EPSILON1;\n\n if (this.radiiSquared.z !== 0) {\n this.squaredXOverSquaredZ = this.radiiSquared.x / this.radiiSquared.z;\n }\n\n Object.freeze(this);\n }\n\n // Compares this Ellipsoid against the provided Ellipsoid componentwise and returns\n equals(right) {\n return this === right || Boolean(right && this.radii.equals(right.radii));\n }\n\n // Creates a string representing this Ellipsoid in the format '(radii.x, radii.y, radii.z)'.\n toString() {\n return this.radii.toString();\n }\n\n // Converts the provided cartographic to Cartesian representation.\n cartographicToCartesian(cartographic, result = [0, 0, 0]) {\n const normal = scratchNormal;\n const k = scratchK;\n\n const [, , height] = cartographic;\n this.geodeticSurfaceNormalCartographic(cartographic, normal);\n k.copy(this.radiiSquared).scale(normal);\n\n const gamma = Math.sqrt(normal.dot(k));\n k.scale(1 / gamma);\n\n normal.scale(height);\n\n k.add(normal);\n\n return k.to(result);\n }\n\n // Converts the provided cartesian to cartographic (lng/lat/z) representation.\n // The cartesian is undefined at the center of the ellipsoid.\n cartesianToCartographic(cartesian, result = [0, 0, 0]) {\n scratchCartesian.from(cartesian);\n const point = this.scaleToGeodeticSurface(scratchCartesian, scratchPosition);\n\n if (!point) {\n return undefined;\n }\n\n const normal = this.geodeticSurfaceNormal(point, scratchNormal);\n\n const h = scratchHeight;\n h.copy(scratchCartesian).subtract(point);\n\n const longitude = Math.atan2(normal.y, normal.x);\n const latitude = Math.asin(normal.z);\n const height = Math.sign(vec3.dot(h, scratchCartesian)) * vec3.length(h);\n\n return toCartographicFromRadians([longitude, latitude, height], result);\n }\n\n // Computes a 4x4 transformation matrix from a reference frame with an east-north-up axes\n // centered at the provided origin to the provided ellipsoid's fixed reference frame.\n eastNorthUpToFixedFrame(origin, result = new Matrix4()) {\n return localFrameToFixedFrame(this, 'east', 'north', 'up', origin, result);\n }\n\n // Computes a 4x4 transformation matrix from a reference frame centered at\n // the provided origin to the ellipsoid's fixed reference frame.\n localFrameToFixedFrame(firstAxis, secondAxis, thirdAxis, origin, result = new Matrix4()) {\n return localFrameToFixedFrame(this, firstAxis, secondAxis, thirdAxis, origin, result);\n }\n\n // Computes the unit vector directed from the center of this ellipsoid toward\n // the provided Cartesian position.\n geocentricSurfaceNormal(cartesian, result = [0, 0, 0]) {\n return scratchVector.from(cartesian).normalize().to(result);\n }\n\n // Computes the normal of the plane tangent to the surface of the ellipsoid at provided position.\n geodeticSurfaceNormalCartographic(cartographic, result = [0, 0, 0]) {\n const cartographicVectorRadians = fromCartographicToRadians(cartographic);\n\n const longitude = cartographicVectorRadians[0];\n const latitude = cartographicVectorRadians[1];\n\n const cosLatitude = Math.cos(latitude);\n\n scratchVector\n .set(cosLatitude * Math.cos(longitude), cosLatitude * Math.sin(longitude), Math.sin(latitude))\n .normalize();\n\n return scratchVector.to(result);\n }\n\n // Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position.\n geodeticSurfaceNormal(cartesian, result = [0, 0, 0]) {\n return scratchVector.from(cartesian).scale(this.oneOverRadiiSquared).normalize().to(result);\n }\n\n // Scales the provided Cartesian position along the geodetic surface normal\n // so that it is on the surface of this ellipsoid. If the position is\n // at the center of the ellipsoid, this function returns undefined.\n scaleToGeodeticSurface(cartesian, result) {\n return scaleToGeodeticSurface(cartesian, this, result);\n }\n\n // Scales the provided Cartesian position along the geocentric surface normal\n // so that it is on the surface of this ellipsoid.\n scaleToGeocentricSurface(cartesian, result = [0, 0, 0]) {\n scratchPosition.from(cartesian);\n\n const positionX = scratchPosition.x;\n const positionY = scratchPosition.y;\n const positionZ = scratchPosition.z;\n const oneOverRadiiSquared = this.oneOverRadiiSquared;\n\n const beta =\n 1.0 /\n Math.sqrt(\n positionX * positionX * oneOverRadiiSquared.x +\n positionY * positionY * oneOverRadiiSquared.y +\n positionZ * positionZ * oneOverRadiiSquared.z\n );\n\n return scratchPosition.multiplyScalar(beta).to(result);\n }\n\n // Transforms a Cartesian X, Y, Z position to the ellipsoid-scaled space by multiplying\n // its components by the result of `Ellipsoid#oneOverRadii`\n transformPositionToScaledSpace(position, result = [0, 0, 0]) {\n return scratchPosition.from(position).scale(this.oneOverRadii).to(result);\n }\n\n // Transforms a Cartesian X, Y, Z position from the ellipsoid-scaled space by multiplying\n // its components by the result of `Ellipsoid#radii`.\n transformPositionFromScaledSpace(position, result = [0, 0, 0]) {\n return scratchPosition.from(position).scale(this.radii).to(result);\n }\n\n // Computes a point which is the intersection of the surface normal with the z-axis.\n getSurfaceNormalIntersectionWithZAxis(position, buffer = 0.0, result = [0, 0, 0]) {\n // Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)\n assert(equals(this.radii.x, this.radii.y, _MathUtils.EPSILON15));\n assert(this.radii.z > 0);\n\n scratchPosition.from(position);\n const z = scratchPosition.z * (1 - this.squaredXOverSquaredZ);\n\n if (Math.abs(z) >= this.radii.z - buffer) {\n return undefined;\n }\n\n return scratchPosition.set(0.0, 0.0, z).to(result);\n }\n}\n"],"file":"ellipsoid.js"}
1
+ {"version":3,"sources":["../../../src/ellipsoid/ellipsoid.ts"],"names":["scratchVector","Vector3","scratchNormal","scratchK","scratchPosition","scratchHeight","scratchCartesian","wgs84","Ellipsoid","constructor","x","y","z","_MathUtils","EPSILON1","radii","radiiSquared","radiiToTheFourth","oneOverRadii","oneOverRadiiSquared","minimumRadius","Math","min","maximumRadius","max","squaredXOverSquaredZ","Object","freeze","equals","right","Boolean","toString","cartographicToCartesian","cartographic","result","normal","k","height","geodeticSurfaceNormalCartographic","copy","scale","gamma","sqrt","dot","add","to","cartesianToCartographic","cartesian","from","point","scaleToGeodeticSurface","undefined","geodeticSurfaceNormal","h","subtract","longitude","atan2","latitude","asin","sign","vec3","length","eastNorthUpToFixedFrame","origin","Matrix4","localFrameToFixedFrame","firstAxis","secondAxis","thirdAxis","geocentricSurfaceNormal","normalize","cartographicVectorRadians","cosLatitude","cos","set","sin","scaleToGeocentricSurface","positionX","positionY","positionZ","beta","multiplyScalar","transformPositionToScaledSpace","position","transformPositionFromScaledSpace","getSurfaceNormalIntersectionWithZAxis","buffer","EPSILON15","abs","WGS84_RADIUS_X","WGS84_RADIUS_Y","WGS84_RADIUS_Z"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n/* eslint-disable */\nimport {\n Vector3,\n Matrix4,\n toRadians,\n toDegrees,\n assert,\n equals,\n _MathUtils,\n NumericArray\n} from '@math.gl/core';\nimport * as vec3 from 'gl-matrix/vec3';\n\nimport {WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z} from '../constants';\nimport {fromCartographicToRadians, toCartographicFromRadians} from '../type-utils';\n\nimport scaleToGeodeticSurface from './helpers/scale-to-geodetic-surface';\nimport localFrameToFixedFrame from './helpers/ellipsoid-transform';\n\nconst scratchVector = new Vector3();\nconst scratchNormal = new Vector3();\nconst scratchK = new Vector3();\nconst scratchPosition = new Vector3();\nconst scratchHeight = new Vector3();\nconst scratchCartesian = new Vector3();\n\nlet wgs84;\n\n/**\n * A quadratic surface defined in Cartesian coordinates by the equation\n * `(x / a)^2 + (y / b)^2 + (z / c)^2 = 1`. Primarily used\n * to represent the shape of planetary bodies.\n */\nexport default class Ellipsoid {\n /** An Ellipsoid instance initialized to the WGS84 standard. */\n static readonly WGS84 = new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z);\n\n readonly radii: Vector3;\n readonly radiiSquared: Vector3;\n readonly radiiToTheFourth: Vector3;\n readonly oneOverRadii: Vector3;\n readonly oneOverRadiiSquared: Vector3;\n readonly minimumRadius: number;\n readonly maximumRadius: number;\n readonly centerToleranceSquared: number = _MathUtils.EPSILON1;\n readonly squaredXOverSquaredZ: number;\n\n /** Creates an Ellipsoid from a Cartesian specifying the radii in x, y, and z directions. */\n constructor(x: number, y: number, z: number);\n constructor();\n\n constructor(x = 0.0, y = 0.0, z = 0.0) {\n assert(x >= 0.0);\n assert(y >= 0.0);\n assert(z >= 0.0);\n\n this.radii = new Vector3(x, y, z);\n\n this.radiiSquared = new Vector3(x * x, y * y, z * z);\n\n this.radiiToTheFourth = new Vector3(x * x * x * x, y * y * y * y, z * z * z * z);\n\n this.oneOverRadii = new Vector3(\n x === 0.0 ? 0.0 : 1.0 / x,\n y === 0.0 ? 0.0 : 1.0 / y,\n z === 0.0 ? 0.0 : 1.0 / z\n );\n\n this.oneOverRadiiSquared = new Vector3(\n x === 0.0 ? 0.0 : 1.0 / (x * x),\n y === 0.0 ? 0.0 : 1.0 / (y * y),\n z === 0.0 ? 0.0 : 1.0 / (z * z)\n );\n\n this.minimumRadius = Math.min(x, y, z);\n\n this.maximumRadius = Math.max(x, y, z);\n\n if (this.radiiSquared.z !== 0) {\n this.squaredXOverSquaredZ = this.radiiSquared.x / this.radiiSquared.z;\n }\n\n Object.freeze(this);\n }\n\n /** Compares this Ellipsoid against the provided Ellipsoid componentwise */\n equals(right: Ellipsoid): boolean {\n return this === right || Boolean(right && this.radii.equals(right.radii));\n }\n\n /** Creates a string representing this Ellipsoid in the format '(radii.x, radii.y, radii.z)'. */\n toString(): string {\n return this.radii.toString();\n }\n\n /** Converts the provided cartographic to Cartesian representation. */\n cartographicToCartesian(cartographic: number[], result: Vector3): Vector3;\n cartographicToCartesian(cartographic: number[], result?: number[]): number[];\n\n cartographicToCartesian(cartographic, result = [0, 0, 0]) {\n const normal = scratchNormal;\n const k = scratchK;\n\n const [, , height] = cartographic;\n this.geodeticSurfaceNormalCartographic(cartographic, normal);\n k.copy(this.radiiSquared).scale(normal);\n\n const gamma = Math.sqrt(normal.dot(k));\n k.scale(1 / gamma);\n\n normal.scale(height);\n\n k.add(normal);\n\n return k.to(result);\n }\n\n /** Converts the provided cartesian to cartographic (lng/lat/z) representation.\n * The cartesian is undefined at the center of the ellipsoid. */\n cartesianToCartographic(cartesian: number[], result: Vector3): Vector3;\n cartesianToCartographic(cartesian: number[], result?: number[]): number[];\n\n cartesianToCartographic(cartesian, result = [0, 0, 0]) {\n scratchCartesian.from(cartesian);\n const point = this.scaleToGeodeticSurface(scratchCartesian, scratchPosition);\n\n if (!point) {\n return undefined;\n }\n\n const normal = this.geodeticSurfaceNormal(point, scratchNormal);\n\n const h = scratchHeight;\n h.copy(scratchCartesian).subtract(point);\n\n const longitude = Math.atan2(normal.y, normal.x);\n const latitude = Math.asin(normal.z);\n const height = Math.sign(vec3.dot(h, scratchCartesian)) * vec3.length(h);\n\n return toCartographicFromRadians([longitude, latitude, height], result);\n }\n\n /** Computes a 4x4 transformation matrix from a reference frame with an east-north-up axes\n * centered at the provided origin to the provided ellipsoid's fixed reference frame. */\n eastNorthUpToFixedFrame(origin: number[], result?: Matrix4): Matrix4;\n eastNorthUpToFixedFrame(origin: number[], result: number[]): number[];\n\n eastNorthUpToFixedFrame(origin, result = new Matrix4()) {\n return localFrameToFixedFrame(this, 'east', 'north', 'up', origin, result);\n }\n\n /** Computes a 4x4 transformation matrix from a reference frame centered at\n * the provided origin to the ellipsoid's fixed reference frame.\n */\n localFrameToFixedFrame(\n firstAxis: string,\n secondAxis: string,\n thirdAxis: string,\n origin: Readonly<NumericArray>,\n result?: Matrix4\n ): Matrix4;\n localFrameToFixedFrame<Matrix4T>(\n firstAxis: string,\n secondAxis: string,\n thirdAxis: string,\n origin: Readonly<NumericArray>,\n result: number[]\n ): number[];\n\n // Computes a 4x4 transformation matrix from a reference frame centered at\n // the provided origin to the ellipsoid's fixed reference frame.\n localFrameToFixedFrame(firstAxis, secondAxis, thirdAxis, origin, result = new Matrix4()) {\n return localFrameToFixedFrame(this, firstAxis, secondAxis, thirdAxis, origin, result);\n }\n\n /** Computes the unit vector directed from the center of this ellipsoid toward\n * the provided Cartesian position. */\n geocentricSurfaceNormal(cartesian: number[], result?: number[]): number[];\n geocentricSurfaceNormal<NumArray>(cartesian: number[], result: NumArray): NumArray;\n geocentricSurfaceNormal(cartesian, result = [0, 0, 0]) {\n return scratchVector.from(cartesian).normalize().to(result);\n }\n\n /** Computes the normal of the plane tangent to the surface of the ellipsoid at provided position. */\n geodeticSurfaceNormalCartographic<NumArray>(cartographic: number[], result: NumArray): NumArray;\n geodeticSurfaceNormalCartographic(cartographic: number[]): number[];\n geodeticSurfaceNormalCartographic(cartographic, result = [0, 0, 0]) {\n const cartographicVectorRadians = fromCartographicToRadians(cartographic);\n\n const longitude = cartographicVectorRadians[0];\n const latitude = cartographicVectorRadians[1];\n\n const cosLatitude = Math.cos(latitude);\n\n scratchVector\n .set(cosLatitude * Math.cos(longitude), cosLatitude * Math.sin(longitude), Math.sin(latitude))\n .normalize();\n\n return scratchVector.to(result);\n }\n\n /** Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position. */\n geodeticSurfaceNormal<NumArrayT>(cartesian: number[], result: NumArrayT): NumArrayT;\n geodeticSurfaceNormal(cartesian: number[]): number[];\n geodeticSurfaceNormal(cartesian, result = [0, 0, 0]) {\n return scratchVector.from(cartesian).scale(this.oneOverRadiiSquared).normalize().to(result);\n }\n\n /** Scales the provided Cartesian position along the geodetic surface normal\n * so that it is on the surface of this ellipsoid. If the position is\n * at the center of the ellipsoid, this function returns undefined. */\n scaleToGeodeticSurface(cartesian: number[], result?: number[]): number[];\n scaleToGeodeticSurface(cartesian, result) {\n return scaleToGeodeticSurface(cartesian, this, result);\n }\n\n /** Scales the provided Cartesian position along the geocentric surface normal\n * so that it is on the surface of this ellipsoid. */\n scaleToGeocentricSurface(cartesian: number[], result?: number[]): number[];\n scaleToGeocentricSurface(cartesian, result = [0, 0, 0]) {\n scratchPosition.from(cartesian);\n\n const positionX = scratchPosition.x;\n const positionY = scratchPosition.y;\n const positionZ = scratchPosition.z;\n const oneOverRadiiSquared = this.oneOverRadiiSquared;\n\n const beta =\n 1.0 /\n Math.sqrt(\n positionX * positionX * oneOverRadiiSquared.x +\n positionY * positionY * oneOverRadiiSquared.y +\n positionZ * positionZ * oneOverRadiiSquared.z\n );\n\n return scratchPosition.multiplyScalar(beta).to(result);\n }\n\n /** Transforms a Cartesian X, Y, Z position to the ellipsoid-scaled space by multiplying\n * its components by the result of `Ellipsoid#oneOverRadii` */\n transformPositionToScaledSpace(position: number[], result?: number[]): number[];\n transformPositionToScaledSpace(position, result = [0, 0, 0]) {\n return scratchPosition.from(position).scale(this.oneOverRadii).to(result);\n }\n\n /** Transforms a Cartesian X, Y, Z position from the ellipsoid-scaled space by multiplying\n * its components by the result of `Ellipsoid#radii`. */\n transformPositionFromScaledSpace(position: number[], result?: number[]): number[];\n transformPositionFromScaledSpace(position, result = [0, 0, 0]) {\n return scratchPosition.from(position).scale(this.radii).to(result);\n }\n\n /** Computes a point which is the intersection of the surface normal with the z-axis. */\n getSurfaceNormalIntersectionWithZAxis(\n position: number[],\n buffer?: number,\n result?: number[]\n ): number[];\n getSurfaceNormalIntersectionWithZAxis(position, buffer = 0.0, result = [0, 0, 0]) {\n // Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)\n assert(equals(this.radii.x, this.radii.y, _MathUtils.EPSILON15));\n assert(this.radii.z > 0);\n\n scratchPosition.from(position);\n const z = scratchPosition.z * (1 - this.squaredXOverSquaredZ);\n\n if (Math.abs(z) >= this.radii.z - buffer) {\n return undefined;\n }\n\n return scratchPosition.set(0.0, 0.0, z).to(result);\n }\n}\n"],"file":"ellipsoid.js"}
@@ -7,9 +7,9 @@ exports.default = localFrameToFixedFrame;
7
7
 
8
8
  var _core = require("@math.gl/core");
9
9
 
10
- var EPSILON14 = 1e-14;
11
- var scratchOrigin = new _core.Vector3();
12
- var VECTOR_PRODUCT_LOCAL_FRAME = {
10
+ const EPSILON14 = 1e-14;
11
+ const scratchOrigin = new _core.Vector3();
12
+ const VECTOR_PRODUCT_LOCAL_FRAME = {
13
13
  up: {
14
14
  south: 'east',
15
15
  north: 'west',
@@ -47,7 +47,7 @@ var VECTOR_PRODUCT_LOCAL_FRAME = {
47
47
  south: 'down'
48
48
  }
49
49
  };
50
- var degeneratePositionLocalFrame = {
50
+ const degeneratePositionLocalFrame = {
51
51
  north: [-1, 0, 0],
52
52
  east: [0, 1, 0],
53
53
  up: [0, 0, 1],
@@ -55,7 +55,7 @@ var degeneratePositionLocalFrame = {
55
55
  west: [0, -1, 0],
56
56
  down: [0, 0, -1]
57
57
  };
58
- var scratchAxisVectors = {
58
+ const scratchAxisVectors = {
59
59
  east: new _core.Vector3(),
60
60
  north: new _core.Vector3(),
61
61
  up: new _core.Vector3(),
@@ -63,21 +63,21 @@ var scratchAxisVectors = {
63
63
  south: new _core.Vector3(),
64
64
  down: new _core.Vector3()
65
65
  };
66
- var scratchVector1 = new _core.Vector3();
67
- var scratchVector2 = new _core.Vector3();
68
- var scratchVector3 = new _core.Vector3();
66
+ const scratchVector1 = new _core.Vector3();
67
+ const scratchVector2 = new _core.Vector3();
68
+ const scratchVector3 = new _core.Vector3();
69
69
 
70
70
  function localFrameToFixedFrame(ellipsoid, firstAxis, secondAxis, thirdAxis, cartesianOrigin, result) {
71
- var thirdAxisInferred = VECTOR_PRODUCT_LOCAL_FRAME[firstAxis] && VECTOR_PRODUCT_LOCAL_FRAME[firstAxis][secondAxis];
71
+ const thirdAxisInferred = VECTOR_PRODUCT_LOCAL_FRAME[firstAxis] && VECTOR_PRODUCT_LOCAL_FRAME[firstAxis][secondAxis];
72
72
  (0, _core.assert)(thirdAxisInferred && (!thirdAxis || thirdAxis === thirdAxisInferred));
73
- var firstAxisVector;
74
- var secondAxisVector;
75
- var thirdAxisVector;
76
- var origin = scratchOrigin.copy(cartesianOrigin);
77
- var atPole = (0, _core.equals)(origin.x, 0.0, EPSILON14) && (0, _core.equals)(origin.y, 0.0, EPSILON14);
73
+ let firstAxisVector;
74
+ let secondAxisVector;
75
+ let thirdAxisVector;
76
+ const origin = scratchOrigin.copy(cartesianOrigin);
77
+ const atPole = (0, _core.equals)(origin.x, 0.0, EPSILON14) && (0, _core.equals)(origin.y, 0.0, EPSILON14);
78
78
 
79
79
  if (atPole) {
80
- var sign = Math.sign(origin.z);
80
+ const sign = Math.sign(origin.z);
81
81
  firstAxisVector = scratchVector1.fromArray(degeneratePositionLocalFrame[firstAxis]);
82
82
 
83
83
  if (firstAxis !== 'east' && firstAxis !== 'west') {
@@ -96,15 +96,19 @@ function localFrameToFixedFrame(ellipsoid, firstAxis, secondAxis, thirdAxis, car
96
96
  thirdAxisVector.scale(sign);
97
97
  }
98
98
  } else {
99
- var up = scratchAxisVectors.up,
100
- east = scratchAxisVectors.east,
101
- north = scratchAxisVectors.north;
99
+ const {
100
+ up,
101
+ east,
102
+ north
103
+ } = scratchAxisVectors;
102
104
  east.set(-origin.y, origin.x, 0.0).normalize();
103
105
  ellipsoid.geodeticSurfaceNormal(origin, up);
104
106
  north.copy(up).cross(east);
105
- var down = scratchAxisVectors.down,
106
- west = scratchAxisVectors.west,
107
- south = scratchAxisVectors.south;
107
+ const {
108
+ down,
109
+ west,
110
+ south
111
+ } = scratchAxisVectors;
108
112
  down.copy(up).scale(-1);
109
113
  west.copy(east).scale(-1);
110
114
  south.copy(north).scale(-1);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/ellipsoid/helpers/ellipsoid-transform.js"],"names":["EPSILON14","scratchOrigin","Vector3","VECTOR_PRODUCT_LOCAL_FRAME","up","south","north","west","east","down","degeneratePositionLocalFrame","scratchAxisVectors","scratchVector1","scratchVector2","scratchVector3","localFrameToFixedFrame","ellipsoid","firstAxis","secondAxis","thirdAxis","cartesianOrigin","result","thirdAxisInferred","firstAxisVector","secondAxisVector","thirdAxisVector","origin","copy","atPole","x","y","sign","Math","z","fromArray","scale","set","normalize","geodeticSurfaceNormal","cross"],"mappings":"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","sourcesContent":["import {Vector3, assert, equals as equalsEpsilon} from '@math.gl/core';\n\nconst EPSILON14 = 1e-14;\n\nconst scratchOrigin = new Vector3();\n\n// Caclulate third axis from given two axii\nconst VECTOR_PRODUCT_LOCAL_FRAME = {\n up: {\n south: 'east',\n north: 'west',\n west: 'south',\n east: 'north'\n },\n down: {\n south: 'west',\n north: 'east',\n west: 'north',\n east: 'south'\n },\n south: {\n up: 'west',\n down: 'east',\n west: 'down',\n east: 'up'\n },\n north: {\n up: 'east',\n down: 'west',\n west: 'up',\n east: 'down'\n },\n west: {\n up: 'north',\n down: 'south',\n north: 'down',\n south: 'up'\n },\n east: {\n up: 'south',\n down: 'north',\n north: 'up',\n south: 'down'\n }\n};\n\nconst degeneratePositionLocalFrame = {\n north: [-1, 0, 0],\n east: [0, 1, 0],\n up: [0, 0, 1],\n south: [1, 0, 0],\n west: [0, -1, 0],\n down: [0, 0, -1]\n};\n\nconst scratchAxisVectors = {\n east: new Vector3(),\n north: new Vector3(),\n up: new Vector3(),\n west: new Vector3(),\n south: new Vector3(),\n down: new Vector3()\n};\n\nconst scratchVector1 = new Vector3();\nconst scratchVector2 = new Vector3();\nconst scratchVector3 = new Vector3();\n\n// Computes a 4x4 transformation matrix from a reference frame\n// centered at the provided origin to the provided ellipsoid's fixed reference frame.\n// eslint-disable-next-line max-statements, max-params, complexity\nexport default function localFrameToFixedFrame(\n ellipsoid,\n firstAxis,\n secondAxis,\n thirdAxis,\n cartesianOrigin,\n result\n) {\n const thirdAxisInferred =\n VECTOR_PRODUCT_LOCAL_FRAME[firstAxis] && VECTOR_PRODUCT_LOCAL_FRAME[firstAxis][secondAxis];\n // firstAxis and secondAxis must be east, north, up, west, south or down.');\n assert(thirdAxisInferred && (!thirdAxis || thirdAxis === thirdAxisInferred));\n\n let firstAxisVector;\n let secondAxisVector;\n let thirdAxisVector;\n\n const origin = scratchOrigin.copy(cartesianOrigin);\n\n // If x and y are zero, assume origin is at a pole, which is a special case.\n const atPole = equalsEpsilon(origin.x, 0.0, EPSILON14) && equalsEpsilon(origin.y, 0.0, EPSILON14);\n\n if (atPole) {\n // Look up axis value and adjust\n const sign = Math.sign(origin.z);\n\n firstAxisVector = scratchVector1.fromArray(degeneratePositionLocalFrame[firstAxis]);\n if (firstAxis !== 'east' && firstAxis !== 'west') {\n firstAxisVector.scale(sign);\n }\n\n secondAxisVector = scratchVector2.fromArray(degeneratePositionLocalFrame[secondAxis]);\n if (secondAxis !== 'east' && secondAxis !== 'west') {\n secondAxisVector.scale(sign);\n }\n\n thirdAxisVector = scratchVector3.fromArray(degeneratePositionLocalFrame[thirdAxis]);\n if (thirdAxis !== 'east' && thirdAxis !== 'west') {\n thirdAxisVector.scale(sign);\n }\n } else {\n // Calculate all axis\n const {up, east, north} = scratchAxisVectors;\n\n east.set(-origin.y, origin.x, 0.0).normalize();\n ellipsoid.geodeticSurfaceNormal(origin, up);\n north.copy(up).cross(east);\n\n const {down, west, south} = scratchAxisVectors;\n\n down.copy(up).scale(-1);\n west.copy(east).scale(-1);\n south.copy(north).scale(-1);\n\n // Pick three axis based on desired orientation\n firstAxisVector = scratchAxisVectors[firstAxis];\n secondAxisVector = scratchAxisVectors[secondAxis];\n thirdAxisVector = scratchAxisVectors[thirdAxis];\n }\n\n // TODO - assuming the result is column-major\n result[0] = firstAxisVector.x;\n result[1] = firstAxisVector.y;\n result[2] = firstAxisVector.z;\n result[3] = 0.0;\n result[4] = secondAxisVector.x;\n result[5] = secondAxisVector.y;\n result[6] = secondAxisVector.z;\n result[7] = 0.0;\n result[8] = thirdAxisVector.x;\n result[9] = thirdAxisVector.y;\n result[10] = thirdAxisVector.z;\n result[11] = 0.0;\n result[12] = origin.x;\n result[13] = origin.y;\n result[14] = origin.z;\n result[15] = 1.0;\n return result;\n}\n"],"file":"ellipsoid-transform.js"}
1
+ {"version":3,"sources":["../../../../src/ellipsoid/helpers/ellipsoid-transform.ts"],"names":["EPSILON14","scratchOrigin","Vector3","VECTOR_PRODUCT_LOCAL_FRAME","up","south","north","west","east","down","degeneratePositionLocalFrame","scratchAxisVectors","scratchVector1","scratchVector2","scratchVector3","localFrameToFixedFrame","ellipsoid","firstAxis","secondAxis","thirdAxis","cartesianOrigin","result","thirdAxisInferred","firstAxisVector","secondAxisVector","thirdAxisVector","origin","copy","atPole","x","y","sign","Math","z","fromArray","scale","set","normalize","geodeticSurfaceNormal","cross"],"mappings":";;;;;;;AAAA;;AAEA,MAAMA,SAAS,GAAG,KAAlB;AAEA,MAAMC,aAAa,GAAG,IAAIC,aAAJ,EAAtB;AAGA,MAAMC,0BAA0B,GAAG;AACjCC,EAAAA,EAAE,EAAE;AACFC,IAAAA,KAAK,EAAE,MADL;AAEFC,IAAAA,KAAK,EAAE,MAFL;AAGFC,IAAAA,IAAI,EAAE,OAHJ;AAIFC,IAAAA,IAAI,EAAE;AAJJ,GAD6B;AAOjCC,EAAAA,IAAI,EAAE;AACJJ,IAAAA,KAAK,EAAE,MADH;AAEJC,IAAAA,KAAK,EAAE,MAFH;AAGJC,IAAAA,IAAI,EAAE,OAHF;AAIJC,IAAAA,IAAI,EAAE;AAJF,GAP2B;AAajCH,EAAAA,KAAK,EAAE;AACLD,IAAAA,EAAE,EAAE,MADC;AAELK,IAAAA,IAAI,EAAE,MAFD;AAGLF,IAAAA,IAAI,EAAE,MAHD;AAILC,IAAAA,IAAI,EAAE;AAJD,GAb0B;AAmBjCF,EAAAA,KAAK,EAAE;AACLF,IAAAA,EAAE,EAAE,MADC;AAELK,IAAAA,IAAI,EAAE,MAFD;AAGLF,IAAAA,IAAI,EAAE,IAHD;AAILC,IAAAA,IAAI,EAAE;AAJD,GAnB0B;AAyBjCD,EAAAA,IAAI,EAAE;AACJH,IAAAA,EAAE,EAAE,OADA;AAEJK,IAAAA,IAAI,EAAE,OAFF;AAGJH,IAAAA,KAAK,EAAE,MAHH;AAIJD,IAAAA,KAAK,EAAE;AAJH,GAzB2B;AA+BjCG,EAAAA,IAAI,EAAE;AACJJ,IAAAA,EAAE,EAAE,OADA;AAEJK,IAAAA,IAAI,EAAE,OAFF;AAGJH,IAAAA,KAAK,EAAE,IAHH;AAIJD,IAAAA,KAAK,EAAE;AAJH;AA/B2B,CAAnC;AAuCA,MAAMK,4BAA4B,GAAG;AACnCJ,EAAAA,KAAK,EAAE,CAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,CAD4B;AAEnCE,EAAAA,IAAI,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAF6B;AAGnCJ,EAAAA,EAAE,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAH+B;AAInCC,EAAAA,KAAK,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAJ4B;AAKnCE,EAAAA,IAAI,EAAE,CAAC,CAAD,EAAI,CAAC,CAAL,EAAQ,CAAR,CAL6B;AAMnCE,EAAAA,IAAI,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAC,CAAR;AAN6B,CAArC;AASA,MAAME,kBAAkB,GAAG;AACzBH,EAAAA,IAAI,EAAE,IAAIN,aAAJ,EADmB;AAEzBI,EAAAA,KAAK,EAAE,IAAIJ,aAAJ,EAFkB;AAGzBE,EAAAA,EAAE,EAAE,IAAIF,aAAJ,EAHqB;AAIzBK,EAAAA,IAAI,EAAE,IAAIL,aAAJ,EAJmB;AAKzBG,EAAAA,KAAK,EAAE,IAAIH,aAAJ,EALkB;AAMzBO,EAAAA,IAAI,EAAE,IAAIP,aAAJ;AANmB,CAA3B;AASA,MAAMU,cAAc,GAAG,IAAIV,aAAJ,EAAvB;AACA,MAAMW,cAAc,GAAG,IAAIX,aAAJ,EAAvB;AACA,MAAMY,cAAc,GAAG,IAAIZ,aAAJ,EAAvB;;AAKe,SAASa,sBAAT,CACbC,SADa,EAEbC,SAFa,EAGbC,UAHa,EAIbC,SAJa,EAKbC,eALa,EAMbC,MANa,EAOb;AACA,QAAMC,iBAAiB,GACrBnB,0BAA0B,CAACc,SAAD,CAA1B,IAAyCd,0BAA0B,CAACc,SAAD,CAA1B,CAAsCC,UAAtC,CAD3C;AAGA,oBAAOI,iBAAiB,KAAK,CAACH,SAAD,IAAcA,SAAS,KAAKG,iBAAjC,CAAxB;AAEA,MAAIC,eAAJ;AACA,MAAIC,gBAAJ;AACA,MAAIC,eAAJ;AAEA,QAAMC,MAAM,GAAGzB,aAAa,CAAC0B,IAAd,CAAmBP,eAAnB,CAAf;AAGA,QAAMQ,MAAM,GAAG,kBAAcF,MAAM,CAACG,CAArB,EAAwB,GAAxB,EAA6B7B,SAA7B,KAA2C,kBAAc0B,MAAM,CAACI,CAArB,EAAwB,GAAxB,EAA6B9B,SAA7B,CAA1D;;AAEA,MAAI4B,MAAJ,EAAY;AAEV,UAAMG,IAAI,GAAGC,IAAI,CAACD,IAAL,CAAUL,MAAM,CAACO,CAAjB,CAAb;AAEAV,IAAAA,eAAe,GAAGX,cAAc,CAACsB,SAAf,CAAyBxB,4BAA4B,CAACO,SAAD,CAArD,CAAlB;;AACA,QAAIA,SAAS,KAAK,MAAd,IAAwBA,SAAS,KAAK,MAA1C,EAAkD;AAChDM,MAAAA,eAAe,CAACY,KAAhB,CAAsBJ,IAAtB;AACD;;AAEDP,IAAAA,gBAAgB,GAAGX,cAAc,CAACqB,SAAf,CAAyBxB,4BAA4B,CAACQ,UAAD,CAArD,CAAnB;;AACA,QAAIA,UAAU,KAAK,MAAf,IAAyBA,UAAU,KAAK,MAA5C,EAAoD;AAClDM,MAAAA,gBAAgB,CAACW,KAAjB,CAAuBJ,IAAvB;AACD;;AAEDN,IAAAA,eAAe,GAAGX,cAAc,CAACoB,SAAf,CAAyBxB,4BAA4B,CAACS,SAAD,CAArD,CAAlB;;AACA,QAAIA,SAAS,KAAK,MAAd,IAAwBA,SAAS,KAAK,MAA1C,EAAkD;AAChDM,MAAAA,eAAe,CAACU,KAAhB,CAAsBJ,IAAtB;AACD;AACF,GAlBD,MAkBO;AAEL,UAAM;AAAC3B,MAAAA,EAAD;AAAKI,MAAAA,IAAL;AAAWF,MAAAA;AAAX,QAAoBK,kBAA1B;AAEAH,IAAAA,IAAI,CAAC4B,GAAL,CAAS,CAACV,MAAM,CAACI,CAAjB,EAAoBJ,MAAM,CAACG,CAA3B,EAA8B,GAA9B,EAAmCQ,SAAnC;AACArB,IAAAA,SAAS,CAACsB,qBAAV,CAAgCZ,MAAhC,EAAwCtB,EAAxC;AACAE,IAAAA,KAAK,CAACqB,IAAN,CAAWvB,EAAX,EAAemC,KAAf,CAAqB/B,IAArB;AAEA,UAAM;AAACC,MAAAA,IAAD;AAAOF,MAAAA,IAAP;AAAaF,MAAAA;AAAb,QAAsBM,kBAA5B;AAEAF,IAAAA,IAAI,CAACkB,IAAL,CAAUvB,EAAV,EAAc+B,KAAd,CAAoB,CAAC,CAArB;AACA5B,IAAAA,IAAI,CAACoB,IAAL,CAAUnB,IAAV,EAAgB2B,KAAhB,CAAsB,CAAC,CAAvB;AACA9B,IAAAA,KAAK,CAACsB,IAAN,CAAWrB,KAAX,EAAkB6B,KAAlB,CAAwB,CAAC,CAAzB;AAGAZ,IAAAA,eAAe,GAAGZ,kBAAkB,CAACM,SAAD,CAApC;AACAO,IAAAA,gBAAgB,GAAGb,kBAAkB,CAACO,UAAD,CAArC;AACAO,IAAAA,eAAe,GAAGd,kBAAkB,CAACQ,SAAD,CAApC;AACD;;AAGDE,EAAAA,MAAM,CAAC,CAAD,CAAN,GAAYE,eAAe,CAACM,CAA5B;AACAR,EAAAA,MAAM,CAAC,CAAD,CAAN,GAAYE,eAAe,CAACO,CAA5B;AACAT,EAAAA,MAAM,CAAC,CAAD,CAAN,GAAYE,eAAe,CAACU,CAA5B;AACAZ,EAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,GAAZ;AACAA,EAAAA,MAAM,CAAC,CAAD,CAAN,GAAYG,gBAAgB,CAACK,CAA7B;AACAR,EAAAA,MAAM,CAAC,CAAD,CAAN,GAAYG,gBAAgB,CAACM,CAA7B;AACAT,EAAAA,MAAM,CAAC,CAAD,CAAN,GAAYG,gBAAgB,CAACS,CAA7B;AACAZ,EAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,GAAZ;AACAA,EAAAA,MAAM,CAAC,CAAD,CAAN,GAAYI,eAAe,CAACI,CAA5B;AACAR,EAAAA,MAAM,CAAC,CAAD,CAAN,GAAYI,eAAe,CAACK,CAA5B;AACAT,EAAAA,MAAM,CAAC,EAAD,CAAN,GAAaI,eAAe,CAACQ,CAA7B;AACAZ,EAAAA,MAAM,CAAC,EAAD,CAAN,GAAa,GAAb;AACAA,EAAAA,MAAM,CAAC,EAAD,CAAN,GAAaK,MAAM,CAACG,CAApB;AACAR,EAAAA,MAAM,CAAC,EAAD,CAAN,GAAaK,MAAM,CAACI,CAApB;AACAT,EAAAA,MAAM,CAAC,EAAD,CAAN,GAAaK,MAAM,CAACO,CAApB;AACAZ,EAAAA,MAAM,CAAC,EAAD,CAAN,GAAa,GAAb;AACA,SAAOA,MAAP;AACD","sourcesContent":["import {Vector3, assert, equals as equalsEpsilon} from '@math.gl/core';\n\nconst EPSILON14 = 1e-14;\n\nconst scratchOrigin = new Vector3();\n\n// Caclulate third axis from given two axii\nconst VECTOR_PRODUCT_LOCAL_FRAME = {\n up: {\n south: 'east',\n north: 'west',\n west: 'south',\n east: 'north'\n },\n down: {\n south: 'west',\n north: 'east',\n west: 'north',\n east: 'south'\n },\n south: {\n up: 'west',\n down: 'east',\n west: 'down',\n east: 'up'\n },\n north: {\n up: 'east',\n down: 'west',\n west: 'up',\n east: 'down'\n },\n west: {\n up: 'north',\n down: 'south',\n north: 'down',\n south: 'up'\n },\n east: {\n up: 'south',\n down: 'north',\n north: 'up',\n south: 'down'\n }\n};\n\nconst degeneratePositionLocalFrame = {\n north: [-1, 0, 0],\n east: [0, 1, 0],\n up: [0, 0, 1],\n south: [1, 0, 0],\n west: [0, -1, 0],\n down: [0, 0, -1]\n};\n\nconst scratchAxisVectors = {\n east: new Vector3(),\n north: new Vector3(),\n up: new Vector3(),\n west: new Vector3(),\n south: new Vector3(),\n down: new Vector3()\n};\n\nconst scratchVector1 = new Vector3();\nconst scratchVector2 = new Vector3();\nconst scratchVector3 = new Vector3();\n\n// Computes a 4x4 transformation matrix from a reference frame\n// centered at the provided origin to the provided ellipsoid's fixed reference frame.\n// eslint-disable-next-line max-statements, max-params, complexity\nexport default function localFrameToFixedFrame(\n ellipsoid,\n firstAxis,\n secondAxis,\n thirdAxis,\n cartesianOrigin,\n result\n) {\n const thirdAxisInferred =\n VECTOR_PRODUCT_LOCAL_FRAME[firstAxis] && VECTOR_PRODUCT_LOCAL_FRAME[firstAxis][secondAxis];\n // firstAxis and secondAxis must be east, north, up, west, south or down.');\n assert(thirdAxisInferred && (!thirdAxis || thirdAxis === thirdAxisInferred));\n\n let firstAxisVector;\n let secondAxisVector;\n let thirdAxisVector;\n\n const origin = scratchOrigin.copy(cartesianOrigin);\n\n // If x and y are zero, assume origin is at a pole, which is a special case.\n const atPole = equalsEpsilon(origin.x, 0.0, EPSILON14) && equalsEpsilon(origin.y, 0.0, EPSILON14);\n\n if (atPole) {\n // Look up axis value and adjust\n const sign = Math.sign(origin.z);\n\n firstAxisVector = scratchVector1.fromArray(degeneratePositionLocalFrame[firstAxis]);\n if (firstAxis !== 'east' && firstAxis !== 'west') {\n firstAxisVector.scale(sign);\n }\n\n secondAxisVector = scratchVector2.fromArray(degeneratePositionLocalFrame[secondAxis]);\n if (secondAxis !== 'east' && secondAxis !== 'west') {\n secondAxisVector.scale(sign);\n }\n\n thirdAxisVector = scratchVector3.fromArray(degeneratePositionLocalFrame[thirdAxis]);\n if (thirdAxis !== 'east' && thirdAxis !== 'west') {\n thirdAxisVector.scale(sign);\n }\n } else {\n // Calculate all axis\n const {up, east, north} = scratchAxisVectors;\n\n east.set(-origin.y, origin.x, 0.0).normalize();\n ellipsoid.geodeticSurfaceNormal(origin, up);\n north.copy(up).cross(east);\n\n const {down, west, south} = scratchAxisVectors;\n\n down.copy(up).scale(-1);\n west.copy(east).scale(-1);\n south.copy(north).scale(-1);\n\n // Pick three axis based on desired orientation\n firstAxisVector = scratchAxisVectors[firstAxis];\n secondAxisVector = scratchAxisVectors[secondAxis];\n thirdAxisVector = scratchAxisVectors[thirdAxis];\n }\n\n // TODO - assuming the result is column-major\n result[0] = firstAxisVector.x;\n result[1] = firstAxisVector.y;\n result[2] = firstAxisVector.z;\n result[3] = 0.0;\n result[4] = secondAxisVector.x;\n result[5] = secondAxisVector.y;\n result[6] = secondAxisVector.z;\n result[7] = 0.0;\n result[8] = thirdAxisVector.x;\n result[9] = thirdAxisVector.y;\n result[10] = thirdAxisVector.z;\n result[11] = 0.0;\n result[12] = origin.x;\n result[13] = origin.y;\n result[14] = origin.z;\n result[15] = 1.0;\n return result;\n}\n"],"file":"ellipsoid-transform.js"}