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;
|
};
|