deriveConstants.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. var Datum = require('./constants/Datum');
  2. var Ellipsoid = require('./constants/Ellipsoid');
  3. var extend = require('./extend');
  4. var datum = require('./datum');
  5. var EPSLN = 1.0e-10;
  6. // ellipoid pj_set_ell.c
  7. var SIXTH = 0.1666666666666666667;
  8. /* 1/6 */
  9. var RA4 = 0.04722222222222222222;
  10. /* 17/360 */
  11. var RA6 = 0.02215608465608465608;
  12. module.exports = function(json) {
  13. // DGR 2011-03-20 : nagrids -> nadgrids
  14. if (json.datumCode && json.datumCode !== 'none') {
  15. var datumDef = Datum[json.datumCode];
  16. if (datumDef) {
  17. json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;
  18. json.ellps = datumDef.ellipse;
  19. json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;
  20. }
  21. }
  22. if (!json.a) { // do we have an ellipsoid?
  23. var ellipse = Ellipsoid[json.ellps] ? Ellipsoid[json.ellps] : Ellipsoid.WGS84;
  24. extend(json, ellipse);
  25. }
  26. if (json.rf && !json.b) {
  27. json.b = (1.0 - 1.0 / json.rf) * json.a;
  28. }
  29. if (json.rf === 0 || Math.abs(json.a - json.b) < EPSLN) {
  30. json.sphere = true;
  31. json.b = json.a;
  32. }
  33. json.a2 = json.a * json.a; // used in geocentric
  34. json.b2 = json.b * json.b; // used in geocentric
  35. json.es = (json.a2 - json.b2) / json.a2; // e ^ 2
  36. json.e = Math.sqrt(json.es); // eccentricity
  37. if (json.R_A) {
  38. json.a *= 1 - json.es * (SIXTH + json.es * (RA4 + json.es * RA6));
  39. json.a2 = json.a * json.a;
  40. json.b2 = json.b * json.b;
  41. json.es = 0;
  42. }
  43. json.ep2 = (json.a2 - json.b2) / json.b2; // used in geocentric
  44. if (!json.k0) {
  45. json.k0 = 1.0; //default value
  46. }
  47. //DGR 2010-11-12: axis
  48. if (!json.axis) {
  49. json.axis = "enu";
  50. }
  51. if (!json.datum) {
  52. json.datum = datum(json);
  53. }
  54. return json;
  55. };