123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- import {D2R} from './constants/values';
- import PrimeMeridian from './constants/PrimeMeridian';
- import units from './constants/units';
- import match from './match';
- export default function(defData) {
- var self = {};
- var paramObj = defData.split('+').map(function(v) {
- return v.trim();
- }).filter(function(a) {
- return a;
- }).reduce(function(p, a) {
- var split = a.split('=');
- split.push(true);
- p[split[0].toLowerCase()] = split[1];
- return p;
- }, {});
- var paramName, paramVal, paramOutname;
- var params = {
- proj: 'projName',
- datum: 'datumCode',
- rf: function(v) {
- self.rf = parseFloat(v);
- },
- lat_0: function(v) {
- self.lat0 = v * D2R;
- },
- lat_1: function(v) {
- self.lat1 = v * D2R;
- },
- lat_2: function(v) {
- self.lat2 = v * D2R;
- },
- lat_ts: function(v) {
- self.lat_ts = v * D2R;
- },
- lon_0: function(v) {
- self.long0 = v * D2R;
- },
- lon_1: function(v) {
- self.long1 = v * D2R;
- },
- lon_2: function(v) {
- self.long2 = v * D2R;
- },
- alpha: function(v) {
- self.alpha = parseFloat(v) * D2R;
- },
- gamma: function(v) {
- self.rectified_grid_angle = parseFloat(v);
- },
- lonc: function(v) {
- self.longc = v * D2R;
- },
- x_0: function(v) {
- self.x0 = parseFloat(v);
- },
- y_0: function(v) {
- self.y0 = parseFloat(v);
- },
- k_0: function(v) {
- self.k0 = parseFloat(v);
- },
- k: function(v) {
- self.k0 = parseFloat(v);
- },
- a: function(v) {
- self.a = parseFloat(v);
- },
- b: function(v) {
- self.b = parseFloat(v);
- },
- r_a: function() {
- self.R_A = true;
- },
- zone: function(v) {
- self.zone = parseInt(v, 10);
- },
- south: function() {
- self.utmSouth = true;
- },
- towgs84: function(v) {
- self.datum_params = v.split(",").map(function(a) {
- return parseFloat(a);
- });
- },
- to_meter: function(v) {
- self.to_meter = parseFloat(v);
- },
- units: function(v) {
- self.units = v;
- var unit = match(units, v);
- if (unit) {
- self.to_meter = unit.to_meter;
- }
- },
- from_greenwich: function(v) {
- self.from_greenwich = v * D2R;
- },
- pm: function(v) {
- var pm = match(PrimeMeridian, v);
- self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;
- },
- nadgrids: function(v) {
- if (v === '@null') {
- self.datumCode = 'none';
- }
- else {
- self.nadgrids = v;
- }
- },
- axis: function(v) {
- var legalAxis = "ewnsud";
- if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {
- self.axis = v;
- }
- },
- approx: function() {
- self.approx = true;
- }
- };
- for (paramName in paramObj) {
- paramVal = paramObj[paramName];
- if (paramName in params) {
- paramOutname = params[paramName];
- if (typeof paramOutname === 'function') {
- paramOutname(paramVal);
- }
- else {
- self[paramOutname] = paramVal;
- }
- }
- else {
- self[paramName] = paramVal;
- }
- }
- if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){
- self.datumCode = self.datumCode.toLowerCase();
- }
- return self;
- }
|