1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import parseCode from './parseCode';
- import extend from './extend';
- import projections from './projections';
- import {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';
- import Datum from './constants/Datum';
- import datum from './datum';
- import match from './match';
- import {getNadgrids} from "./nadgrid";
- function Projection(srsCode,callback) {
- if (!(this instanceof Projection)) {
- return new Projection(srsCode);
- }
- callback = callback || function(error){
- if(error){
- throw error;
- }
- };
- var json = parseCode(srsCode);
- if(typeof json !== 'object'){
- callback(srsCode);
- return;
- }
- var ourProj = Projection.projections.get(json.projName);
- if(!ourProj){
- callback(srsCode);
- return;
- }
- if (json.datumCode && json.datumCode !== 'none') {
- var datumDef = match(Datum, json.datumCode);
- if (datumDef) {
- json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null);
- json.ellps = datumDef.ellipse;
- json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;
- }
- }
- json.k0 = json.k0 || 1.0;
- json.axis = json.axis || 'enu';
- json.ellps = json.ellps || 'wgs84';
- json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this
- var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);
- var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);
- var nadgrids = getNadgrids(json.nadgrids);
- var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,
- nadgrids);
- extend(this, json); // transfer everything over from the projection because we don't know what we'll need
- extend(this, ourProj); // transfer all the methods from the projection
- // copy the 4 things over we calculated in deriveConstants.sphere
- this.a = sphere_.a;
- this.b = sphere_.b;
- this.rf = sphere_.rf;
- this.sphere = sphere_.sphere;
- // copy the 3 things we calculated in deriveConstants.eccentricity
- this.es = ecc.es;
- this.e = ecc.e;
- this.ep2 = ecc.ep2;
- // add in the datum object
- this.datum = datumObj;
- // init the projection
- this.init();
- // legecy callback from back in the day when it went to spatialreference.org
- callback(null, this);
- }
- Projection.projections = projections;
- Projection.projections.start();
- export default Projection;
|