var Datum = require('./constants/Datum'); var Ellipsoid = require('./constants/Ellipsoid'); var extend = require('./extend'); var datum = require('./datum'); var EPSLN = 1.0e-10; // ellipoid pj_set_ell.c var SIXTH = 0.1666666666666666667; /* 1/6 */ var RA4 = 0.04722222222222222222; /* 17/360 */ var RA6 = 0.02215608465608465608; module.exports = function(json) { // DGR 2011-03-20 : nagrids -> nadgrids if (json.datumCode && json.datumCode !== 'none') { var datumDef = Datum[json.datumCode]; if (datumDef) { json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null; json.ellps = datumDef.ellipse; json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode; } } if (!json.a) { // do we have an ellipsoid? var ellipse = Ellipsoid[json.ellps] ? Ellipsoid[json.ellps] : Ellipsoid.WGS84; extend(json, ellipse); } if (json.rf && !json.b) { json.b = (1.0 - 1.0 / json.rf) * json.a; } if (json.rf === 0 || Math.abs(json.a - json.b) < EPSLN) { json.sphere = true; json.b = json.a; } json.a2 = json.a * json.a; // used in geocentric json.b2 = json.b * json.b; // used in geocentric json.es = (json.a2 - json.b2) / json.a2; // e ^ 2 json.e = Math.sqrt(json.es); // eccentricity if (json.R_A) { json.a *= 1 - json.es * (SIXTH + json.es * (RA4 + json.es * RA6)); json.a2 = json.a * json.a; json.b2 = json.b * json.b; json.es = 0; } json.ep2 = (json.a2 - json.b2) / json.b2; // used in geocentric if (!json.k0) { json.k0 = 1.0; //default value } //DGR 2010-11-12: axis if (!json.axis) { json.axis = "enu"; } if (!json.datum) { json.datum = datum(json); } return json; };