@math.gl/geospatial 3.6.0-alpha.1 → 3.6.0-alpha.2

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 (34) hide show
  1. package/dist/ellipsoid/ellipsoid.d.ts.map +1 -1
  2. package/dist/ellipsoid/ellipsoid.js +11 -1
  3. package/dist/ellipsoid/helpers/ellipsoid-transform.d.ts +4 -1
  4. package/dist/ellipsoid/helpers/ellipsoid-transform.d.ts.map +1 -1
  5. package/dist/ellipsoid/helpers/ellipsoid-transform.js +2 -1
  6. package/dist/ellipsoid/helpers/scale-to-geodetic-surface.d.ts +2 -2
  7. package/dist/ellipsoid/helpers/scale-to-geodetic-surface.d.ts.map +1 -1
  8. package/dist/ellipsoid/helpers/scale-to-geodetic-surface.js +5 -5
  9. package/dist/es5/constants.js +4 -4
  10. package/dist/es5/constants.js.map +1 -1
  11. package/dist/es5/ellipsoid/ellipsoid.js +152 -109
  12. package/dist/es5/ellipsoid/ellipsoid.js.map +1 -1
  13. package/dist/es5/ellipsoid/helpers/ellipsoid-transform.js +21 -25
  14. package/dist/es5/ellipsoid/helpers/ellipsoid-transform.js.map +1 -1
  15. package/dist/es5/ellipsoid/helpers/scale-to-geodetic-surface.js +38 -39
  16. package/dist/es5/ellipsoid/helpers/scale-to-geodetic-surface.js.map +1 -1
  17. package/dist/es5/index.js +2 -2
  18. package/dist/es5/type-utils.js +36 -29
  19. package/dist/es5/type-utils.js.map +1 -1
  20. package/dist/esm/ellipsoid/ellipsoid.js +1 -1
  21. package/dist/esm/ellipsoid/ellipsoid.js.map +1 -1
  22. package/dist/esm/ellipsoid/helpers/ellipsoid-transform.js.map +1 -1
  23. package/dist/esm/ellipsoid/helpers/scale-to-geodetic-surface.js +5 -5
  24. package/dist/esm/ellipsoid/helpers/scale-to-geodetic-surface.js.map +1 -1
  25. package/dist/esm/type-utils.js +22 -20
  26. package/dist/esm/type-utils.js.map +1 -1
  27. package/dist/type-utils.d.ts +5 -5
  28. package/dist/type-utils.d.ts.map +1 -1
  29. package/dist/type-utils.js +24 -22
  30. package/package.json +4 -4
  31. package/src/ellipsoid/ellipsoid.ts +8 -13
  32. package/src/ellipsoid/helpers/ellipsoid-transform.ts +18 -13
  33. package/src/ellipsoid/helpers/scale-to-geodetic-surface.ts +11 -7
  34. package/src/type-utils.ts +45 -34
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/ellipsoid/helpers/scale-to-geodetic-surface.ts"],"names":["Vector3","_MathUtils","scratchVector","scaleToGeodeticSurfaceIntersection","scaleToGeodeticSurfaceGradient","scaleToGeodeticSurface","cartesian","ellipsoid","result","oneOverRadii","oneOverRadiiSquared","centerToleranceSquared","from","positionX","x","positionY","y","positionZ","z","oneOverRadiiX","oneOverRadiiY","oneOverRadiiZ","x2","y2","z2","squaredNorm","ratio","Math","sqrt","Number","isFinite","undefined","intersection","copy","scale","to","oneOverRadiiSquaredX","oneOverRadiiSquaredY","oneOverRadiiSquaredZ","gradient","set","lambda","len","correction","xMultiplier","yMultiplier","zMultiplier","func","xMultiplier2","yMultiplier2","zMultiplier2","xMultiplier3","yMultiplier3","zMultiplier3","denominator","derivative","abs","EPSILON12"],"mappings":"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","sourcesContent":["/* eslint-disable */\nimport {Vector3, assert, _MathUtils} from '@math.gl/core';\nimport * as vec3 from 'gl-matrix/vec3';\n\nconst scratchVector = new Vector3();\nconst scaleToGeodeticSurfaceIntersection = new Vector3();\nconst scaleToGeodeticSurfaceGradient = new Vector3();\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.\nexport default function scaleToGeodeticSurface(cartesian, ellipsoid, result = new Vector3()) {\n const {oneOverRadii, oneOverRadiiSquared, centerToleranceSquared} = ellipsoid;\n\n scratchVector.from(cartesian);\n\n const positionX = cartesian.x;\n const positionY = cartesian.y;\n const positionZ = cartesian.z;\n\n const oneOverRadiiX = oneOverRadii.x;\n const oneOverRadiiY = oneOverRadii.y;\n const oneOverRadiiZ = oneOverRadii.z;\n\n const x2 = positionX * positionX * oneOverRadiiX * oneOverRadiiX;\n const y2 = positionY * positionY * oneOverRadiiY * oneOverRadiiY;\n const z2 = positionZ * positionZ * oneOverRadiiZ * oneOverRadiiZ;\n\n // Compute the squared ellipsoid norm.\n const squaredNorm = x2 + y2 + z2;\n const ratio = Math.sqrt(1.0 / squaredNorm);\n\n // When very close to center or at center\n if (!Number.isFinite(ratio)) {\n return undefined;\n }\n\n // As an initial approximation, assume that the radial intersection is the projection point.\n const intersection = scaleToGeodeticSurfaceIntersection;\n intersection.copy(cartesian).scale(ratio);\n\n // If the position is near the center, the iteration will not converge.\n if (squaredNorm < centerToleranceSquared) {\n return intersection.to(result);\n }\n\n const oneOverRadiiSquaredX = oneOverRadiiSquared.x;\n const oneOverRadiiSquaredY = oneOverRadiiSquared.y;\n const oneOverRadiiSquaredZ = oneOverRadiiSquared.z;\n\n // Use the gradient at the intersection point in place of the true unit normal.\n // The difference in magnitude will be absorbed in the multiplier.\n const gradient = scaleToGeodeticSurfaceGradient;\n gradient.set(\n intersection.x * oneOverRadiiSquaredX * 2.0,\n intersection.y * oneOverRadiiSquaredY * 2.0,\n intersection.z * oneOverRadiiSquaredZ * 2.0\n );\n\n // Compute the initial guess at the normal vector multiplier, lambda.\n let lambda = ((1.0 - ratio) * cartesian.len()) / (0.5 * gradient.len());\n let correction = 0.0;\n\n let xMultiplier;\n let yMultiplier;\n let zMultiplier;\n let func;\n\n do {\n lambda -= correction;\n\n xMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredX);\n yMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredY);\n zMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredZ);\n\n const xMultiplier2 = xMultiplier * xMultiplier;\n const yMultiplier2 = yMultiplier * yMultiplier;\n const zMultiplier2 = zMultiplier * zMultiplier;\n\n const xMultiplier3 = xMultiplier2 * xMultiplier;\n const yMultiplier3 = yMultiplier2 * yMultiplier;\n const zMultiplier3 = zMultiplier2 * zMultiplier;\n\n func = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0;\n\n // \"denominator\" here refers to the use of this expression in the velocity and acceleration\n // computations in the sections to follow.\n const denominator =\n x2 * xMultiplier3 * oneOverRadiiSquaredX +\n y2 * yMultiplier3 * oneOverRadiiSquaredY +\n z2 * zMultiplier3 * oneOverRadiiSquaredZ;\n\n const derivative = -2.0 * denominator;\n\n correction = func / derivative;\n } while (Math.abs(func) > _MathUtils.EPSILON12);\n\n return scratchVector.scale([xMultiplier, yMultiplier, zMultiplier]).to(result);\n}\n"],"file":"scale-to-geodetic-surface.js"}
1
+ {"version":3,"sources":["../../../../src/ellipsoid/helpers/scale-to-geodetic-surface.ts"],"names":["Vector3","_MathUtils","scratchVector","scaleToGeodeticSurfaceIntersection","scaleToGeodeticSurfaceGradient","scaleToGeodeticSurface","cartesian","ellipsoid","result","oneOverRadii","oneOverRadiiSquared","centerToleranceSquared","from","positionX","x","positionY","y","positionZ","z","oneOverRadiiX","oneOverRadiiY","oneOverRadiiZ","x2","y2","z2","squaredNorm","ratio","Math","sqrt","Number","isFinite","undefined","intersection","copy","scale","to","oneOverRadiiSquaredX","oneOverRadiiSquaredY","oneOverRadiiSquaredZ","gradient","set","lambda","len","correction","xMultiplier","yMultiplier","zMultiplier","func","xMultiplier2","yMultiplier2","zMultiplier2","xMultiplier3","yMultiplier3","zMultiplier3","denominator","derivative","abs","EPSILON12"],"mappings":"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","sourcesContent":["/* eslint-disable */\nimport {Vector3, _MathUtils} from '@math.gl/core';\nimport type Ellipsoid from '../ellipsoid';\n\nconst scratchVector = new Vector3();\nconst scaleToGeodeticSurfaceIntersection = new Vector3();\nconst scaleToGeodeticSurfaceGradient = new Vector3();\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.\nexport default function scaleToGeodeticSurface(\n cartesian: number[],\n ellipsoid: Ellipsoid,\n result: number[] = []\n): number[] {\n const {oneOverRadii, oneOverRadiiSquared, centerToleranceSquared} = ellipsoid;\n\n scratchVector.from(cartesian);\n\n const positionX = scratchVector.x;\n const positionY = scratchVector.y;\n const positionZ = scratchVector.z;\n\n const oneOverRadiiX = oneOverRadii.x;\n const oneOverRadiiY = oneOverRadii.y;\n const oneOverRadiiZ = oneOverRadii.z;\n\n const x2 = positionX * positionX * oneOverRadiiX * oneOverRadiiX;\n const y2 = positionY * positionY * oneOverRadiiY * oneOverRadiiY;\n const z2 = positionZ * positionZ * oneOverRadiiZ * oneOverRadiiZ;\n\n // Compute the squared ellipsoid norm.\n const squaredNorm = x2 + y2 + z2;\n const ratio = Math.sqrt(1.0 / squaredNorm);\n\n // When very close to center or at center\n if (!Number.isFinite(ratio)) {\n return undefined;\n }\n\n // As an initial approximation, assume that the radial intersection is the projection point.\n const intersection = scaleToGeodeticSurfaceIntersection;\n intersection.copy(cartesian).scale(ratio);\n\n // If the position is near the center, the iteration will not converge.\n if (squaredNorm < centerToleranceSquared) {\n return intersection.to(result);\n }\n\n const oneOverRadiiSquaredX = oneOverRadiiSquared.x;\n const oneOverRadiiSquaredY = oneOverRadiiSquared.y;\n const oneOverRadiiSquaredZ = oneOverRadiiSquared.z;\n\n // Use the gradient at the intersection point in place of the true unit normal.\n // The difference in magnitude will be absorbed in the multiplier.\n const gradient = scaleToGeodeticSurfaceGradient;\n gradient.set(\n intersection.x * oneOverRadiiSquaredX * 2.0,\n intersection.y * oneOverRadiiSquaredY * 2.0,\n intersection.z * oneOverRadiiSquaredZ * 2.0\n );\n\n // Compute the initial guess at the normal vector multiplier, lambda.\n let lambda = ((1.0 - ratio) * scratchVector.len()) / (0.5 * gradient.len());\n let correction = 0.0;\n\n let xMultiplier;\n let yMultiplier;\n let zMultiplier;\n let func;\n\n do {\n lambda -= correction;\n\n xMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredX);\n yMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredY);\n zMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredZ);\n\n const xMultiplier2 = xMultiplier * xMultiplier;\n const yMultiplier2 = yMultiplier * yMultiplier;\n const zMultiplier2 = zMultiplier * zMultiplier;\n\n const xMultiplier3 = xMultiplier2 * xMultiplier;\n const yMultiplier3 = yMultiplier2 * yMultiplier;\n const zMultiplier3 = zMultiplier2 * zMultiplier;\n\n func = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0;\n\n // \"denominator\" here refers to the use of this expression in the velocity and acceleration\n // computations in the sections to follow.\n const denominator =\n x2 * xMultiplier3 * oneOverRadiiSquaredX +\n y2 * yMultiplier3 * oneOverRadiiSquaredY +\n z2 * zMultiplier3 * oneOverRadiiSquaredZ;\n\n const derivative = -2.0 * denominator;\n\n correction = func / derivative;\n } while (Math.abs(func) > _MathUtils.EPSILON12);\n\n return scratchVector.scale([xMultiplier, yMultiplier, zMultiplier]).to(result);\n}\n"],"file":"scale-to-geodetic-surface.js"}
@@ -1,54 +1,56 @@
1
- import { Vector3, isArray, toRadians, toDegrees, config } from '@math.gl/core';
1
+ import { Vector3, toRadians, toDegrees, config } from '@math.gl/core';
2
2
  import { WGS84_CONSTANTS } from './constants';
3
3
 
4
- const noop = x => x;
4
+ function identity(x) {
5
+ return x;
6
+ }
5
7
 
6
8
  const scratchVector = new Vector3();
7
- export function fromCartographic(cartographic, result = [-0, -0, -0], map = noop) {
8
- if (isArray(cartographic)) {
9
- result[0] = map(cartographic[0]);
10
- result[1] = map(cartographic[1]);
11
- result[2] = cartographic[2];
12
- } else if ('longitude' in cartographic) {
9
+ export function fromCartographic(cartographic, result = [], map = identity) {
10
+ if ('longitude' in cartographic) {
13
11
  result[0] = map(cartographic.longitude);
14
12
  result[1] = map(cartographic.latitude);
15
13
  result[2] = cartographic.height;
16
- } else {
14
+ } else if ('x' in cartographic) {
17
15
  result[0] = map(cartographic.x);
18
16
  result[1] = map(cartographic.y);
19
17
  result[2] = cartographic.z;
18
+ } else {
19
+ result[0] = map(cartographic[0]);
20
+ result[1] = map(cartographic[1]);
21
+ result[2] = cartographic[2];
20
22
  }
21
23
 
22
24
  return result;
23
25
  }
24
26
  export function fromCartographicToRadians(cartographic, vector = []) {
25
- return fromCartographic(cartographic, vector, config._cartographicRadians ? noop : toRadians);
27
+ return fromCartographic(cartographic, vector, config._cartographicRadians ? identity : toRadians);
26
28
  }
27
29
  export function fromCartographicToDegrees(cartographic, vector = []) {
28
- return fromCartographic(cartographic, vector, config._cartographicRadians ? toDegrees : noop);
30
+ return fromCartographic(cartographic, vector, config._cartographicRadians ? toDegrees : identity);
29
31
  }
30
- export function toCartographic(vector, cartographic, map = noop) {
31
- if (isArray(cartographic)) {
32
- cartographic[0] = map(vector[0]);
33
- cartographic[1] = map(vector[1]);
34
- cartographic[2] = vector[2];
35
- } else if ('longitude' in cartographic) {
32
+ export function toCartographic(vector, cartographic, map = identity) {
33
+ if ('longitude' in cartographic) {
36
34
  cartographic.longitude = map(vector[0]);
37
35
  cartographic.latitude = map(vector[1]);
38
36
  cartographic.height = vector[2];
39
- } else {
37
+ } else if ('x' in cartographic) {
40
38
  cartographic.x = map(vector[0]);
41
39
  cartographic.y = map(vector[1]);
42
40
  cartographic.z = vector[2];
41
+ } else {
42
+ cartographic[0] = map(vector[0]);
43
+ cartographic[1] = map(vector[1]);
44
+ cartographic[2] = vector[2];
43
45
  }
44
46
 
45
47
  return cartographic;
46
48
  }
47
49
  export function toCartographicFromRadians(vector, cartographic) {
48
- return toCartographic(vector, cartographic, config._cartographicRadians ? noop : toDegrees);
50
+ return toCartographic(vector, cartographic, config._cartographicRadians ? identity : toDegrees);
49
51
  }
50
52
  export function toCartographicFromDegrees(vector, cartographic) {
51
- return toCartographic(vector, cartographic, config._cartographicRadians ? toRadians : noop);
53
+ return toCartographic(vector, cartographic, config._cartographicRadians ? toRadians : identity);
52
54
  }
53
55
  export function isWGS84(vector) {
54
56
  if (!vector) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/type-utils.ts"],"names":["Vector3","isArray","toRadians","toDegrees","config","WGS84_CONSTANTS","noop","x","scratchVector","fromCartographic","cartographic","result","map","longitude","latitude","height","y","z","fromCartographicToRadians","vector","_cartographicRadians","fromCartographicToDegrees","toCartographic","toCartographicFromRadians","toCartographicFromDegrees","isWGS84","from","oneOverRadiiSquared","centerToleranceSquared","x2","y2","z2","Math","abs"],"mappings":"AAIA,SAAQA,OAAR,EAAiBC,OAAjB,EAA0BC,SAA1B,EAAqCC,SAArC,EAAgDC,MAAhD,QAA6D,eAA7D;AACA,SAAQC,eAAR,QAA8B,aAA9B;;AAgBA,MAAMC,IAAI,GAAIC,CAAD,IAAOA,CAApB;;AAEA,MAAMC,aAAa,GAAG,IAAIR,OAAJ,EAAtB;AAQA,OAAO,SAASS,gBAAT,CAA0BC,YAA1B,EAAwCC,MAAM,GAAG,CAAC,CAAC,CAAF,EAAK,CAAC,CAAN,EAAS,CAAC,CAAV,CAAjD,EAA+DC,GAAG,GAAGN,IAArE,EAA2E;AAChF,MAAIL,OAAO,CAACS,YAAD,CAAX,EAA2B;AACzBC,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAYC,GAAG,CAACF,YAAY,CAAC,CAAD,CAAb,CAAf;AACAC,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAYC,GAAG,CAACF,YAAY,CAAC,CAAD,CAAb,CAAf;AACAC,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAYD,YAAY,CAAC,CAAD,CAAxB;AACD,GAJD,MAIO,IAAI,eAAeA,YAAnB,EAAiC;AACtCC,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAYC,GAAG,CAACF,YAAY,CAACG,SAAd,CAAf;AACAF,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAYC,GAAG,CAACF,YAAY,CAACI,QAAd,CAAf;AACAH,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAYD,YAAY,CAACK,MAAzB;AACD,GAJM,MAIA;AACLJ,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAYC,GAAG,CAACF,YAAY,CAACH,CAAd,CAAf;AACAI,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAYC,GAAG,CAACF,YAAY,CAACM,CAAd,CAAf;AACAL,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAYD,YAAY,CAACO,CAAzB;AACD;;AACD,SAAON,MAAP;AACD;AAOD,OAAO,SAASO,yBAAT,CAAmCR,YAAnC,EAAiDS,MAAM,GAAG,EAA1D,EAA8D;AACnE,SAAOV,gBAAgB,CAACC,YAAD,EAAeS,MAAf,EAAuBf,MAAM,CAACgB,oBAAP,GAA8Bd,IAA9B,GAAqCJ,SAA5D,CAAvB;AACD;AAOD,OAAO,SAASmB,yBAAT,CAAmCX,YAAnC,EAAiDS,MAAM,GAAG,EAA1D,EAA8D;AACnE,SAAOV,gBAAgB,CAACC,YAAD,EAAeS,MAAf,EAAuBf,MAAM,CAACgB,oBAAP,GAA8BjB,SAA9B,GAA0CG,IAAjE,CAAvB;AACD;AAOD,OAAO,SAASgB,cAAT,CAAwBH,MAAxB,EAAgCT,YAAhC,EAA8CE,GAAG,GAAGN,IAApD,EAA0D;AAC/D,MAAIL,OAAO,CAACS,YAAD,CAAX,EAA2B;AACzBA,IAAAA,YAAY,CAAC,CAAD,CAAZ,GAAkBE,GAAG,CAACO,MAAM,CAAC,CAAD,CAAP,CAArB;AACAT,IAAAA,YAAY,CAAC,CAAD,CAAZ,GAAkBE,GAAG,CAACO,MAAM,CAAC,CAAD,CAAP,CAArB;AACAT,IAAAA,YAAY,CAAC,CAAD,CAAZ,GAAkBS,MAAM,CAAC,CAAD,CAAxB;AACD,GAJD,MAIO,IAAI,eAAeT,YAAnB,EAAiC;AACtCA,IAAAA,YAAY,CAACG,SAAb,GAAyBD,GAAG,CAACO,MAAM,CAAC,CAAD,CAAP,CAA5B;AACAT,IAAAA,YAAY,CAACI,QAAb,GAAwBF,GAAG,CAACO,MAAM,CAAC,CAAD,CAAP,CAA3B;AACAT,IAAAA,YAAY,CAACK,MAAb,GAAsBI,MAAM,CAAC,CAAD,CAA5B;AACD,GAJM,MAIA;AACLT,IAAAA,YAAY,CAACH,CAAb,GAAiBK,GAAG,CAACO,MAAM,CAAC,CAAD,CAAP,CAApB;AACAT,IAAAA,YAAY,CAACM,CAAb,GAAiBJ,GAAG,CAACO,MAAM,CAAC,CAAD,CAAP,CAApB;AACAT,IAAAA,YAAY,CAACO,CAAb,GAAiBE,MAAM,CAAC,CAAD,CAAvB;AACD;;AACD,SAAOT,YAAP;AACD;AAED,OAAO,SAASa,yBAAT,CACLJ,MADK,EAELT,YAFK,EAGK;AACV,SAAOY,cAAc,CAACH,MAAD,EAAST,YAAT,EAAuBN,MAAM,CAACgB,oBAAP,GAA8Bd,IAA9B,GAAqCH,SAA5D,CAArB;AACD;AAED,OAAO,SAASqB,yBAAT,CACLL,MADK,EAELT,YAFK,EAGK;AACV,SAAOY,cAAc,CAACH,MAAD,EAAST,YAAT,EAAuBN,MAAM,CAACgB,oBAAP,GAA8BlB,SAA9B,GAA0CI,IAAjE,CAArB;AACD;AAGD,OAAO,SAASmB,OAAT,CAAiBN,MAAjB,EAA0D;AAC/D,MAAI,CAACA,MAAL,EAAa;AACX,WAAO,KAAP;AACD;;AACDX,EAAAA,aAAa,CAACkB,IAAd,CAAmBP,MAAnB;AACA,QAAM;AAACQ,IAAAA,mBAAD;AAAsBC,IAAAA;AAAtB,MAAgDvB,eAAtD;AACA,QAAMwB,EAAE,GAAGV,MAAM,CAAC,CAAD,CAAN,GAAYA,MAAM,CAAC,CAAD,CAAlB,GAAwBQ,mBAAmB,CAAC,CAAD,CAAtD;AACA,QAAMG,EAAE,GAAGX,MAAM,CAAC,CAAD,CAAN,GAAYA,MAAM,CAAC,CAAD,CAAlB,GAAwBQ,mBAAmB,CAAC,CAAD,CAAtD;AACA,QAAMI,EAAE,GAAGZ,MAAM,CAAC,CAAD,CAAN,GAAYA,MAAM,CAAC,CAAD,CAAlB,GAAwBQ,mBAAmB,CAAC,CAAD,CAAtD;AACA,SAAOK,IAAI,CAACC,GAAL,CAASJ,EAAE,GAAGC,EAAL,GAAUC,EAAV,GAAe,CAAxB,IAA6BH,sBAApC;AACD","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\nimport {NumericArray} from '@math.gl/types';\nimport {Vector3, isArray, toRadians, toDegrees, config} from '@math.gl/core';\nimport {WGS84_CONSTANTS} from './constants';\n\ntype LngLatHeightObject = {\n longitude: number;\n latitude: number;\n height: number;\n};\n\ntype XYZObject = {\n x: number;\n y: number;\n z: number;\n};\n\ntype Cartographic = LngLatHeightObject | XYZObject | NumericArray;\n\nconst noop = (x) => x;\n\nconst scratchVector = new Vector3();\n\nexport function fromCartographic(cartographic: Cartographic): number[];\nexport function fromCartographic<NumArrayT>(\n cartographic: Cartographic,\n result: NumArrayT,\n map: any\n): NumArrayT;\nexport function fromCartographic(cartographic, result = [-0, -0, -0], map = noop) {\n if (isArray(cartographic)) {\n result[0] = map(cartographic[0]);\n result[1] = map(cartographic[1]);\n result[2] = cartographic[2];\n } else if ('longitude' in cartographic) {\n result[0] = map(cartographic.longitude);\n result[1] = map(cartographic.latitude);\n result[2] = cartographic.height;\n } else {\n result[0] = map(cartographic.x);\n result[1] = map(cartographic.y);\n result[2] = cartographic.z;\n }\n return result;\n}\n\nexport function fromCartographicToRadians(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToRadians<TArray>(\n cartographic: Cartographic,\n result: TArray\n): TArray;\nexport function fromCartographicToRadians(cartographic, vector = []) {\n return fromCartographic(cartographic, vector, config._cartographicRadians ? noop : toRadians);\n}\n\nexport function fromCartographicToDegrees(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToDegrees<TArray>(\n cartographic: Cartographic,\n result: TArray\n): TArray;\nexport function fromCartographicToDegrees(cartographic, vector = []) {\n return fromCartographic(cartographic, vector, config._cartographicRadians ? toDegrees : noop);\n}\n\nexport function toCartographic(\n vector: Readonly<NumericArray>,\n result: Cartographic,\n map: any\n): number[];\nexport function toCartographic(vector, cartographic, map = noop) {\n if (isArray(cartographic)) {\n cartographic[0] = map(vector[0]);\n cartographic[1] = map(vector[1]);\n cartographic[2] = vector[2];\n } else if ('longitude' in cartographic) {\n cartographic.longitude = map(vector[0]);\n cartographic.latitude = map(vector[1]);\n cartographic.height = vector[2];\n } else {\n cartographic.x = map(vector[0]);\n cartographic.y = map(vector[1]);\n cartographic.z = vector[2];\n }\n return cartographic;\n}\n\nexport function toCartographicFromRadians(\n vector: Readonly<NumericArray>,\n cartographic: Cartographic\n): number[] {\n return toCartographic(vector, cartographic, config._cartographicRadians ? noop : toDegrees);\n}\n\nexport function toCartographicFromDegrees(\n vector: Readonly<NumericArray>,\n cartographic: Cartographic\n): number[] {\n return toCartographic(vector, cartographic, config._cartographicRadians ? toRadians : noop);\n}\n\n// Estimates if a vector is close to the surface of the WGS84 Ellipsoid\nexport function isWGS84(vector: Readonly<NumericArray>): boolean {\n if (!vector) {\n return false;\n }\n scratchVector.from(vector);\n const {oneOverRadiiSquared, centerToleranceSquared} = WGS84_CONSTANTS;\n const x2 = vector[0] * vector[0] * oneOverRadiiSquared[0];\n const y2 = vector[1] * vector[1] * oneOverRadiiSquared[1];\n const z2 = vector[2] * vector[2] * oneOverRadiiSquared[2];\n return Math.abs(x2 + y2 + z2 - 1) < centerToleranceSquared;\n}\n\n/*\n\nexport function fromCartographic(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographic(cartographic: Cartographic, result: TypedArray): TypedArray;\nexport function fromCartographicToRadians(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToRadians(\n cartographic: Cartographic,\n result: TypedArray\n): TypedArray;\nexport function fromCartographicToDegrees(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToDegrees(\n cartographic: Cartographic,\n result: TypedArray\n): TypedArray;\n\nexport function toCartographic(vector: number[] | TypedArray, result: Cartographic): number[];\nexport function toCartographicFromRadians(\n vector: number[] | TypedArray,\n result: Cartographic\n): number[];\nexport function toCartographicFromDegrees(\n vector: number[] | TypedArray,\n result: Cartographic\n): number[];\n\n// Estimates if a vector is close to the surface of the WGS84 Ellipsoid\nexport function isWGS84(vector: number[] | TypedArray): boolean;\n*/\n"],"file":"type-utils.js"}
1
+ {"version":3,"sources":["../../src/type-utils.ts"],"names":["Vector3","toRadians","toDegrees","config","WGS84_CONSTANTS","identity","x","scratchVector","fromCartographic","cartographic","result","map","longitude","latitude","height","y","z","fromCartographicToRadians","vector","_cartographicRadians","fromCartographicToDegrees","toCartographic","toCartographicFromRadians","toCartographicFromDegrees","isWGS84","from","oneOverRadiiSquared","centerToleranceSquared","x2","y2","z2","Math","abs"],"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\nimport type {NumericArray} from '@math.gl/core';\nimport {Vector3, toRadians, toDegrees, config} from '@math.gl/core';\nimport {WGS84_CONSTANTS} from './constants';\n\ntype LngLatHeightObject = {\n longitude: number;\n latitude: number;\n height: number;\n};\n\ntype XYZObject = {\n x: number;\n y: number;\n z: number;\n};\n\ntype Cartographic = LngLatHeightObject | XYZObject | NumericArray;\n\nfunction identity(x: number): number {\n return x;\n}\n\nconst scratchVector = new Vector3();\n\nexport function fromCartographic(cartographic: Cartographic): number[];\nexport function fromCartographic<NumArrayT>(\n cartographic: Cartographic,\n result: NumArrayT,\n map?: (x: number) => number\n): NumArrayT;\nexport function fromCartographic(\n cartographic: Cartographic,\n result = [] as number[],\n map = identity\n): number[] {\n if ('longitude' in cartographic) {\n result[0] = map(cartographic.longitude);\n result[1] = map(cartographic.latitude);\n result[2] = cartographic.height;\n } else if ('x' in cartographic) {\n result[0] = map(cartographic.x);\n result[1] = map(cartographic.y);\n result[2] = cartographic.z;\n } else {\n result[0] = map(cartographic[0]);\n result[1] = map(cartographic[1]);\n result[2] = cartographic[2];\n }\n return result;\n}\n\nexport function fromCartographicToRadians(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToRadians<TArray>(\n cartographic: Cartographic,\n result: TArray\n): TArray;\nexport function fromCartographicToRadians(\n cartographic: Cartographic,\n vector = [] as number[]\n): number[] {\n return fromCartographic(cartographic, vector, config._cartographicRadians ? identity : toRadians);\n}\n\nexport function fromCartographicToDegrees(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToDegrees<TArray>(\n cartographic: Cartographic,\n result: TArray\n): TArray;\nexport function fromCartographicToDegrees(\n cartographic: Cartographic,\n vector = [] as number[]\n): number[] {\n return fromCartographic(cartographic, vector, config._cartographicRadians ? toDegrees : identity);\n}\n\nexport function toCartographic<T extends Cartographic>(\n vector: Readonly<NumericArray>,\n cartographic: T,\n map: (x: number) => number = identity\n): T {\n if ('longitude' in cartographic) {\n cartographic.longitude = map(vector[0]);\n cartographic.latitude = map(vector[1]);\n cartographic.height = vector[2];\n } else if ('x' in cartographic) {\n cartographic.x = map(vector[0]);\n cartographic.y = map(vector[1]);\n cartographic.z = vector[2];\n } else {\n cartographic[0] = map(vector[0]);\n cartographic[1] = map(vector[1]);\n cartographic[2] = vector[2];\n }\n return cartographic;\n}\n\nexport function toCartographicFromRadians<T extends Cartographic>(\n vector: Readonly<NumericArray>,\n cartographic: T\n): T {\n return toCartographic(vector, cartographic, config._cartographicRadians ? identity : toDegrees);\n}\n\nexport function toCartographicFromDegrees<T extends Cartographic>(\n vector: Readonly<NumericArray>,\n cartographic: T\n): T {\n return toCartographic(vector, cartographic, config._cartographicRadians ? toRadians : identity);\n}\n\n// Estimates if a vector is close to the surface of the WGS84 Ellipsoid\nexport function isWGS84(vector: Readonly<NumericArray>): boolean {\n if (!vector) {\n return false;\n }\n scratchVector.from(vector);\n const {oneOverRadiiSquared, centerToleranceSquared} = WGS84_CONSTANTS;\n const x2 = vector[0] * vector[0] * oneOverRadiiSquared[0];\n const y2 = vector[1] * vector[1] * oneOverRadiiSquared[1];\n const z2 = vector[2] * vector[2] * oneOverRadiiSquared[2];\n return Math.abs(x2 + y2 + z2 - 1) < centerToleranceSquared;\n}\n\n/*\n\nexport function fromCartographic(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographic(cartographic: Cartographic, result: TypedArray): TypedArray;\nexport function fromCartographicToRadians(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToRadians(\n cartographic: Cartographic,\n result: TypedArray\n): TypedArray;\nexport function fromCartographicToDegrees(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToDegrees(\n cartographic: Cartographic,\n result: TypedArray\n): TypedArray;\n\nexport function toCartographic(vector: number[] | TypedArray, result: Cartographic): number[];\nexport function toCartographicFromRadians(\n vector: number[] | TypedArray,\n result: Cartographic\n): number[];\nexport function toCartographicFromDegrees(\n vector: number[] | TypedArray,\n result: Cartographic\n): number[];\n\n// Estimates if a vector is close to the surface of the WGS84 Ellipsoid\nexport function isWGS84(vector: number[] | TypedArray): boolean;\n*/\n"],"file":"type-utils.js"}
@@ -1,4 +1,4 @@
1
- import { NumericArray } from '@math.gl/types';
1
+ import type { NumericArray } from '@math.gl/core';
2
2
  declare type LngLatHeightObject = {
3
3
  longitude: number;
4
4
  latitude: number;
@@ -11,14 +11,14 @@ declare type XYZObject = {
11
11
  };
12
12
  declare type Cartographic = LngLatHeightObject | XYZObject | NumericArray;
13
13
  export declare function fromCartographic(cartographic: Cartographic): number[];
14
- export declare function fromCartographic<NumArrayT>(cartographic: Cartographic, result: NumArrayT, map: any): NumArrayT;
14
+ export declare function fromCartographic<NumArrayT>(cartographic: Cartographic, result: NumArrayT, map?: (x: number) => number): NumArrayT;
15
15
  export declare function fromCartographicToRadians(cartographic: Cartographic, result?: number[]): number[];
16
16
  export declare function fromCartographicToRadians<TArray>(cartographic: Cartographic, result: TArray): TArray;
17
17
  export declare function fromCartographicToDegrees(cartographic: Cartographic, result?: number[]): number[];
18
18
  export declare function fromCartographicToDegrees<TArray>(cartographic: Cartographic, result: TArray): TArray;
19
- export declare function toCartographic(vector: Readonly<NumericArray>, result: Cartographic, map: any): number[];
20
- export declare function toCartographicFromRadians(vector: Readonly<NumericArray>, cartographic: Cartographic): number[];
21
- export declare function toCartographicFromDegrees(vector: Readonly<NumericArray>, cartographic: Cartographic): number[];
19
+ export declare function toCartographic<T extends Cartographic>(vector: Readonly<NumericArray>, cartographic: T, map?: (x: number) => number): T;
20
+ export declare function toCartographicFromRadians<T extends Cartographic>(vector: Readonly<NumericArray>, cartographic: T): T;
21
+ export declare function toCartographicFromDegrees<T extends Cartographic>(vector: Readonly<NumericArray>, cartographic: T): T;
22
22
  export declare function isWGS84(vector: Readonly<NumericArray>): boolean;
23
23
  export {};
24
24
  //# sourceMappingURL=type-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"type-utils.d.ts","sourceRoot":"","sources":["../src/type-utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAI5C,aAAK,kBAAkB,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,aAAK,SAAS,GAAG;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,aAAK,YAAY,GAAG,kBAAkB,GAAG,SAAS,GAAG,YAAY,CAAC;AAMlE,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC;AACvE,wBAAgB,gBAAgB,CAAC,SAAS,EACxC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,GAAG,GACP,SAAS,CAAC;AAkBb,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AACnG,wBAAgB,yBAAyB,CAAC,MAAM,EAC9C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,GACb,MAAM,CAAC;AAKV,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AACnG,wBAAgB,yBAAyB,CAAC,MAAM,EAC9C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,GACb,MAAM,CAAC;AAKV,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,GAAG,GACP,MAAM,EAAE,CAAC;AAkBZ,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,YAAY,EAAE,YAAY,GACzB,MAAM,EAAE,CAEV;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,YAAY,EAAE,YAAY,GACzB,MAAM,EAAE,CAEV;AAGD,wBAAgB,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO,CAU/D"}
1
+ {"version":3,"file":"type-utils.d.ts","sourceRoot":"","sources":["../src/type-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAIhD,aAAK,kBAAkB,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,aAAK,SAAS,GAAG;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,aAAK,YAAY,GAAG,kBAAkB,GAAG,SAAS,GAAG,YAAY,CAAC;AAQlE,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC;AACvE,wBAAgB,gBAAgB,CAAC,SAAS,EACxC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,SAAS,EACjB,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAC1B,SAAS,CAAC;AAsBb,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AACnG,wBAAgB,yBAAyB,CAAC,MAAM,EAC9C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,GACb,MAAM,CAAC;AAQV,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AACnG,wBAAgB,yBAAyB,CAAC,MAAM,EAC9C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,GACb,MAAM,CAAC;AAQV,wBAAgB,cAAc,CAAC,CAAC,SAAS,YAAY,EACnD,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,YAAY,EAAE,CAAC,EACf,GAAG,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAiB,GACpC,CAAC,CAeH;AAED,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,YAAY,EAC9D,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,YAAY,EAAE,CAAC,GACd,CAAC,CAEH;AAED,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,YAAY,EAC9D,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC9B,YAAY,EAAE,CAAC,GACd,CAAC,CAEH;AAGD,wBAAgB,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO,CAU/D"}
@@ -1,56 +1,58 @@
1
1
  // This file is derived from the Cesium math library under Apache 2 license
2
2
  // See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
3
- import { Vector3, isArray, toRadians, toDegrees, config } from '@math.gl/core';
3
+ import { Vector3, toRadians, toDegrees, config } from '@math.gl/core';
4
4
  import { WGS84_CONSTANTS } from './constants';
5
- const noop = (x) => x;
5
+ function identity(x) {
6
+ return x;
7
+ }
6
8
  const scratchVector = new Vector3();
7
- export function fromCartographic(cartographic, result = [-0, -0, -0], map = noop) {
8
- if (isArray(cartographic)) {
9
- result[0] = map(cartographic[0]);
10
- result[1] = map(cartographic[1]);
11
- result[2] = cartographic[2];
12
- }
13
- else if ('longitude' in cartographic) {
9
+ export function fromCartographic(cartographic, result = [], map = identity) {
10
+ if ('longitude' in cartographic) {
14
11
  result[0] = map(cartographic.longitude);
15
12
  result[1] = map(cartographic.latitude);
16
13
  result[2] = cartographic.height;
17
14
  }
18
- else {
15
+ else if ('x' in cartographic) {
19
16
  result[0] = map(cartographic.x);
20
17
  result[1] = map(cartographic.y);
21
18
  result[2] = cartographic.z;
22
19
  }
20
+ else {
21
+ result[0] = map(cartographic[0]);
22
+ result[1] = map(cartographic[1]);
23
+ result[2] = cartographic[2];
24
+ }
23
25
  return result;
24
26
  }
25
27
  export function fromCartographicToRadians(cartographic, vector = []) {
26
- return fromCartographic(cartographic, vector, config._cartographicRadians ? noop : toRadians);
28
+ return fromCartographic(cartographic, vector, config._cartographicRadians ? identity : toRadians);
27
29
  }
28
30
  export function fromCartographicToDegrees(cartographic, vector = []) {
29
- return fromCartographic(cartographic, vector, config._cartographicRadians ? toDegrees : noop);
31
+ return fromCartographic(cartographic, vector, config._cartographicRadians ? toDegrees : identity);
30
32
  }
31
- export function toCartographic(vector, cartographic, map = noop) {
32
- if (isArray(cartographic)) {
33
- cartographic[0] = map(vector[0]);
34
- cartographic[1] = map(vector[1]);
35
- cartographic[2] = vector[2];
36
- }
37
- else if ('longitude' in cartographic) {
33
+ export function toCartographic(vector, cartographic, map = identity) {
34
+ if ('longitude' in cartographic) {
38
35
  cartographic.longitude = map(vector[0]);
39
36
  cartographic.latitude = map(vector[1]);
40
37
  cartographic.height = vector[2];
41
38
  }
42
- else {
39
+ else if ('x' in cartographic) {
43
40
  cartographic.x = map(vector[0]);
44
41
  cartographic.y = map(vector[1]);
45
42
  cartographic.z = vector[2];
46
43
  }
44
+ else {
45
+ cartographic[0] = map(vector[0]);
46
+ cartographic[1] = map(vector[1]);
47
+ cartographic[2] = vector[2];
48
+ }
47
49
  return cartographic;
48
50
  }
49
51
  export function toCartographicFromRadians(vector, cartographic) {
50
- return toCartographic(vector, cartographic, config._cartographicRadians ? noop : toDegrees);
52
+ return toCartographic(vector, cartographic, config._cartographicRadians ? identity : toDegrees);
51
53
  }
52
54
  export function toCartographicFromDegrees(vector, cartographic) {
53
- return toCartographic(vector, cartographic, config._cartographicRadians ? toRadians : noop);
55
+ return toCartographic(vector, cartographic, config._cartographicRadians ? toRadians : identity);
54
56
  }
55
57
  // Estimates if a vector is close to the surface of the WGS84 Ellipsoid
56
58
  export function isWGS84(vector) {
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "3.6.0-alpha.1",
8
+ "version": "3.6.0-alpha.2",
9
9
  "keywords": [
10
10
  "webgl",
11
11
  "javascript",
@@ -32,8 +32,8 @@
32
32
  ],
33
33
  "dependencies": {
34
34
  "@babel/runtime": "^7.12.0",
35
- "@math.gl/core": "3.6.0-alpha.1",
36
- "gl-matrix": "~3.3.0"
35
+ "@math.gl/core": "3.6.0-alpha.2",
36
+ "gl-matrix": "^3.4.0"
37
37
  },
38
- "gitHead": "45386981340895bf201c2ebb76257c9bbffd8ff6"
38
+ "gitHead": "ea7dc265c98b68af56218302d1d42b7d65f74ccb"
39
39
  }
@@ -36,7 +36,7 @@ let wgs84;
36
36
  */
37
37
  export default class Ellipsoid {
38
38
  /** An Ellipsoid instance initialized to the WGS84 standard. */
39
- static readonly WGS84 = new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z);
39
+ static readonly WGS84: Ellipsoid = new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z);
40
40
 
41
41
  readonly radii: Vector3;
42
42
  readonly radiiSquared: Vector3;
@@ -212,15 +212,13 @@ export default class Ellipsoid {
212
212
  /** Scales the provided Cartesian position along the geodetic surface normal
213
213
  * so that it is on the surface of this ellipsoid. If the position is
214
214
  * at the center of the ellipsoid, this function returns undefined. */
215
- scaleToGeodeticSurface(cartesian: number[], result?: number[]): number[];
216
- scaleToGeodeticSurface(cartesian, result) {
215
+ scaleToGeodeticSurface(cartesian: number[], result?: number[]): number[] {
217
216
  return scaleToGeodeticSurface(cartesian, this, result);
218
217
  }
219
218
 
220
219
  /** Scales the provided Cartesian position along the geocentric surface normal
221
220
  * so that it is on the surface of this ellipsoid. */
222
- scaleToGeocentricSurface(cartesian: number[], result?: number[]): number[];
223
- scaleToGeocentricSurface(cartesian, result = [0, 0, 0]) {
221
+ scaleToGeocentricSurface(cartesian: number[], result: number[] = [0, 0, 0]): number[] {
224
222
  scratchPosition.from(cartesian);
225
223
 
226
224
  const positionX = scratchPosition.x;
@@ -241,25 +239,22 @@ export default class Ellipsoid {
241
239
 
242
240
  /** Transforms a Cartesian X, Y, Z position to the ellipsoid-scaled space by multiplying
243
241
  * its components by the result of `Ellipsoid#oneOverRadii` */
244
- transformPositionToScaledSpace(position: number[], result?: number[]): number[];
245
- transformPositionToScaledSpace(position, result = [0, 0, 0]) {
242
+ transformPositionToScaledSpace(position: number[], result: number[] = [0, 0, 0]): number[] {
246
243
  return scratchPosition.from(position).scale(this.oneOverRadii).to(result);
247
244
  }
248
245
 
249
246
  /** Transforms a Cartesian X, Y, Z position from the ellipsoid-scaled space by multiplying
250
247
  * its components by the result of `Ellipsoid#radii`. */
251
- transformPositionFromScaledSpace(position: number[], result?: number[]): number[];
252
- transformPositionFromScaledSpace(position, result = [0, 0, 0]) {
248
+ transformPositionFromScaledSpace(position: number[], result: number[] = [0, 0, 0]): number[] {
253
249
  return scratchPosition.from(position).scale(this.radii).to(result);
254
250
  }
255
251
 
256
252
  /** Computes a point which is the intersection of the surface normal with the z-axis. */
257
253
  getSurfaceNormalIntersectionWithZAxis(
258
254
  position: number[],
259
- buffer?: number,
260
- result?: number[]
261
- ): number[];
262
- getSurfaceNormalIntersectionWithZAxis(position, buffer = 0.0, result = [0, 0, 0]) {
255
+ buffer: number = 0,
256
+ result: number[] = [0, 0, 0]
257
+ ): number[] {
263
258
  // Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)
264
259
  assert(equals(this.radii.x, this.radii.y, _MathUtils.EPSILON15));
265
260
  assert(this.radii.z > 0);
@@ -1,5 +1,7 @@
1
1
  import {Vector3, assert, equals as equalsEpsilon} from '@math.gl/core';
2
2
 
3
+ import type Ellipsoid from '../ellipsoid';
4
+
3
5
  const EPSILON14 = 1e-14;
4
6
 
5
7
  const scratchOrigin = new Vector3();
@@ -42,7 +44,7 @@ const VECTOR_PRODUCT_LOCAL_FRAME = {
42
44
  north: 'up',
43
45
  south: 'down'
44
46
  }
45
- };
47
+ } as const;
46
48
 
47
49
  const degeneratePositionLocalFrame = {
48
50
  north: [-1, 0, 0],
@@ -51,7 +53,7 @@ const degeneratePositionLocalFrame = {
51
53
  south: [1, 0, 0],
52
54
  west: [0, -1, 0],
53
55
  down: [0, 0, -1]
54
- };
56
+ } as const;
55
57
 
56
58
  const scratchAxisVectors = {
57
59
  east: new Vector3(),
@@ -66,25 +68,28 @@ const scratchVector1 = new Vector3();
66
68
  const scratchVector2 = new Vector3();
67
69
  const scratchVector3 = new Vector3();
68
70
 
71
+ type Axis = 'up' | 'down' | 'north' | 'east' | 'south' | 'west';
72
+
69
73
  // Computes a 4x4 transformation matrix from a reference frame
70
74
  // centered at the provided origin to the provided ellipsoid's fixed reference frame.
71
75
  // eslint-disable-next-line max-statements, max-params, complexity
72
76
  export default function localFrameToFixedFrame(
73
- ellipsoid,
74
- firstAxis,
75
- secondAxis,
76
- thirdAxis,
77
- cartesianOrigin,
78
- result
79
- ) {
77
+ ellipsoid: Ellipsoid,
78
+ firstAxis: Axis,
79
+ secondAxis: Axis,
80
+ thirdAxis: Axis,
81
+ cartesianOrigin: number[],
82
+ result: number[]
83
+ ): number[] {
80
84
  const thirdAxisInferred =
81
- VECTOR_PRODUCT_LOCAL_FRAME[firstAxis] && VECTOR_PRODUCT_LOCAL_FRAME[firstAxis][secondAxis];
85
+ VECTOR_PRODUCT_LOCAL_FRAME[firstAxis] &&
86
+ (VECTOR_PRODUCT_LOCAL_FRAME[firstAxis][secondAxis] as Axis);
82
87
  // firstAxis and secondAxis must be east, north, up, west, south or down.');
83
88
  assert(thirdAxisInferred && (!thirdAxis || thirdAxis === thirdAxisInferred));
84
89
 
85
- let firstAxisVector;
86
- let secondAxisVector;
87
- let thirdAxisVector;
90
+ let firstAxisVector: Vector3;
91
+ let secondAxisVector: Vector3;
92
+ let thirdAxisVector: Vector3;
88
93
 
89
94
  const origin = scratchOrigin.copy(cartesianOrigin);
90
95
 
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable */
2
- import {Vector3, assert, _MathUtils} from '@math.gl/core';
3
- import * as vec3 from 'gl-matrix/vec3';
2
+ import {Vector3, _MathUtils} from '@math.gl/core';
3
+ import type Ellipsoid from '../ellipsoid';
4
4
 
5
5
  const scratchVector = new Vector3();
6
6
  const scaleToGeodeticSurfaceIntersection = new Vector3();
@@ -9,14 +9,18 @@ const scaleToGeodeticSurfaceGradient = new Vector3();
9
9
  // Scales the provided Cartesian position along the geodetic surface normal
10
10
  // so that it is on the surface of this ellipsoid. If the position is
11
11
  // at the center of the ellipsoid, this function returns undefined.
12
- export default function scaleToGeodeticSurface(cartesian, ellipsoid, result = new Vector3()) {
12
+ export default function scaleToGeodeticSurface(
13
+ cartesian: number[],
14
+ ellipsoid: Ellipsoid,
15
+ result: number[] = []
16
+ ): number[] {
13
17
  const {oneOverRadii, oneOverRadiiSquared, centerToleranceSquared} = ellipsoid;
14
18
 
15
19
  scratchVector.from(cartesian);
16
20
 
17
- const positionX = cartesian.x;
18
- const positionY = cartesian.y;
19
- const positionZ = cartesian.z;
21
+ const positionX = scratchVector.x;
22
+ const positionY = scratchVector.y;
23
+ const positionZ = scratchVector.z;
20
24
 
21
25
  const oneOverRadiiX = oneOverRadii.x;
22
26
  const oneOverRadiiY = oneOverRadii.y;
@@ -58,7 +62,7 @@ export default function scaleToGeodeticSurface(cartesian, ellipsoid, result = ne
58
62
  );
59
63
 
60
64
  // Compute the initial guess at the normal vector multiplier, lambda.
61
- let lambda = ((1.0 - ratio) * cartesian.len()) / (0.5 * gradient.len());
65
+ let lambda = ((1.0 - ratio) * scratchVector.len()) / (0.5 * gradient.len());
62
66
  let correction = 0.0;
63
67
 
64
68
  let xMultiplier;
package/src/type-utils.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  // This file is derived from the Cesium math library under Apache 2 license
2
2
  // See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
3
3
 
4
- import {NumericArray} from '@math.gl/types';
5
- import {Vector3, isArray, toRadians, toDegrees, config} from '@math.gl/core';
4
+ import type {NumericArray} from '@math.gl/core';
5
+ import {Vector3, toRadians, toDegrees, config} from '@math.gl/core';
6
6
  import {WGS84_CONSTANTS} from './constants';
7
7
 
8
8
  type LngLatHeightObject = {
@@ -19,7 +19,9 @@ type XYZObject = {
19
19
 
20
20
  type Cartographic = LngLatHeightObject | XYZObject | NumericArray;
21
21
 
22
- const noop = (x) => x;
22
+ function identity(x: number): number {
23
+ return x;
24
+ }
23
25
 
24
26
  const scratchVector = new Vector3();
25
27
 
@@ -27,21 +29,25 @@ export function fromCartographic(cartographic: Cartographic): number[];
27
29
  export function fromCartographic<NumArrayT>(
28
30
  cartographic: Cartographic,
29
31
  result: NumArrayT,
30
- map: any
32
+ map?: (x: number) => number
31
33
  ): NumArrayT;
32
- export function fromCartographic(cartographic, result = [-0, -0, -0], map = noop) {
33
- if (isArray(cartographic)) {
34
- result[0] = map(cartographic[0]);
35
- result[1] = map(cartographic[1]);
36
- result[2] = cartographic[2];
37
- } else if ('longitude' in cartographic) {
34
+ export function fromCartographic(
35
+ cartographic: Cartographic,
36
+ result = [] as number[],
37
+ map = identity
38
+ ): number[] {
39
+ if ('longitude' in cartographic) {
38
40
  result[0] = map(cartographic.longitude);
39
41
  result[1] = map(cartographic.latitude);
40
42
  result[2] = cartographic.height;
41
- } else {
43
+ } else if ('x' in cartographic) {
42
44
  result[0] = map(cartographic.x);
43
45
  result[1] = map(cartographic.y);
44
46
  result[2] = cartographic.z;
47
+ } else {
48
+ result[0] = map(cartographic[0]);
49
+ result[1] = map(cartographic[1]);
50
+ result[2] = cartographic[2];
45
51
  }
46
52
  return result;
47
53
  }
@@ -51,8 +57,11 @@ export function fromCartographicToRadians<TArray>(
51
57
  cartographic: Cartographic,
52
58
  result: TArray
53
59
  ): TArray;
54
- export function fromCartographicToRadians(cartographic, vector = []) {
55
- return fromCartographic(cartographic, vector, config._cartographicRadians ? noop : toRadians);
60
+ export function fromCartographicToRadians(
61
+ cartographic: Cartographic,
62
+ vector = [] as number[]
63
+ ): number[] {
64
+ return fromCartographic(cartographic, vector, config._cartographicRadians ? identity : toRadians);
56
65
  }
57
66
 
58
67
  export function fromCartographicToDegrees(cartographic: Cartographic, result?: number[]): number[];
@@ -60,44 +69,46 @@ export function fromCartographicToDegrees<TArray>(
60
69
  cartographic: Cartographic,
61
70
  result: TArray
62
71
  ): TArray;
63
- export function fromCartographicToDegrees(cartographic, vector = []) {
64
- return fromCartographic(cartographic, vector, config._cartographicRadians ? toDegrees : noop);
72
+ export function fromCartographicToDegrees(
73
+ cartographic: Cartographic,
74
+ vector = [] as number[]
75
+ ): number[] {
76
+ return fromCartographic(cartographic, vector, config._cartographicRadians ? toDegrees : identity);
65
77
  }
66
78
 
67
- export function toCartographic(
79
+ export function toCartographic<T extends Cartographic>(
68
80
  vector: Readonly<NumericArray>,
69
- result: Cartographic,
70
- map: any
71
- ): number[];
72
- export function toCartographic(vector, cartographic, map = noop) {
73
- if (isArray(cartographic)) {
74
- cartographic[0] = map(vector[0]);
75
- cartographic[1] = map(vector[1]);
76
- cartographic[2] = vector[2];
77
- } else if ('longitude' in cartographic) {
81
+ cartographic: T,
82
+ map: (x: number) => number = identity
83
+ ): T {
84
+ if ('longitude' in cartographic) {
78
85
  cartographic.longitude = map(vector[0]);
79
86
  cartographic.latitude = map(vector[1]);
80
87
  cartographic.height = vector[2];
81
- } else {
88
+ } else if ('x' in cartographic) {
82
89
  cartographic.x = map(vector[0]);
83
90
  cartographic.y = map(vector[1]);
84
91
  cartographic.z = vector[2];
92
+ } else {
93
+ cartographic[0] = map(vector[0]);
94
+ cartographic[1] = map(vector[1]);
95
+ cartographic[2] = vector[2];
85
96
  }
86
97
  return cartographic;
87
98
  }
88
99
 
89
- export function toCartographicFromRadians(
100
+ export function toCartographicFromRadians<T extends Cartographic>(
90
101
  vector: Readonly<NumericArray>,
91
- cartographic: Cartographic
92
- ): number[] {
93
- return toCartographic(vector, cartographic, config._cartographicRadians ? noop : toDegrees);
102
+ cartographic: T
103
+ ): T {
104
+ return toCartographic(vector, cartographic, config._cartographicRadians ? identity : toDegrees);
94
105
  }
95
106
 
96
- export function toCartographicFromDegrees(
107
+ export function toCartographicFromDegrees<T extends Cartographic>(
97
108
  vector: Readonly<NumericArray>,
98
- cartographic: Cartographic
99
- ): number[] {
100
- return toCartographic(vector, cartographic, config._cartographicRadians ? toRadians : noop);
109
+ cartographic: T
110
+ ): T {
111
+ return toCartographic(vector, cartographic, config._cartographicRadians ? toRadians : identity);
101
112
  }
102
113
 
103
114
  // Estimates if a vector is close to the surface of the WGS84 Ellipsoid