Commit 1560a3ca authored by Calvin Metcalf's avatar Calvin Metcalf
Browse files

defs is now a function

parent 52ab2509
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -3,21 +3,21 @@ module.exports = function(grunt) {
		pkg: grunt.file.readJSON('package.json'),
		concat:{
			full:{
				src:[ './src/Proj4.js','./src/Proj.js','./src/defs.js','./src/common.js','./src/datum.js','./src/Point.js','./src/constants.js','./src/projCode/*.js','./src/defs/*.js','./src/util/MGRS.js'],
				src:[ './src/Proj4.js','./src/common.js','./src/Proj.js','./src/defs.js','src/defs/bigDefs.js','src/defs/smallDefs.js','./src/datum.js','./src/Point.js','./src/constants.js','./src/projCode/*.js','./src/util/MGRS.js'],
				dest:'./dist/proj4.js'
			},
			noDefs:{
				src:[ './src/Proj4.js','./src/Proj.js','./src/defs.js','./src/common.js','./src/datum.js','./src/Point.js','./src/constants.js','./src/projCode/*.js','./src/defs/GOOGLE.js'],
				src:[ './src/Proj4.js','./src/common.js','./src/Proj.js','./src/defs.js','src/defs/smallDefs.js','./src/datum.js','./src/Point.js','./src/constants.js','./src/projCode/*.js','./src/defs/GOOGLE.js'],
				dest:'./dist/proj4-noDefs.js'
			}
		},
		uglify:{
			full:{
				src:[ './src/Proj4.js','./src/Proj.js','./src/defs.js','./src/common.js','./src/datum.js','./src/Point.js','./src/constants.js','./src/projCode/*.js','./src/defs/*.js','./src/util/MGRS.js'],
				src:[ './src/Proj4.js','./src/common.js','./src/Proj.js','./src/defs.js','src/defs/bigDefs.js','src/defs/smallDefs.js','./src/datum.js','./src/Point.js','./src/constants.js','./src/projCode/*.js','./src/util/MGRS.js'],
				dest:'./dist/proj4.min.js'
			},
			noDefs:{
				src:[ './src/Proj4.js','./src/Proj.js','./src/defs.js','./src/common.js','./src/datum.js','./src/Point.js','./src/constants.js','./src/projCode/*.js','./src/defs/GOOGLE.js'],
				src:[ './src/Proj4.js','./src/common.js','./src/Proj.js','./src/defs.js','src/defs/smallDefs.js','./src/datum.js','./src/Point.js','./src/constants.js','./src/projCode/*.js','./src/defs/GOOGLE.js'],
				dest:'./dist/proj4-noDefs.min.js'
			}
		},
@@ -52,7 +52,7 @@ module.exports = function(grunt) {
          proj4: true
        }
			},
			before: [ './src/Proj4.js','./src/Proj.js','./src/defs.js','./src/common.js','./src/datum.js','./src/Point.js','./src/constants.js','./src/projCode/*.js','./src/defs/*.js','./src/util/MGRS.js'],
			before: [ './src/Proj4.js','./src/Proj.js','./src/defs.js','./src/common.js','./src/datum.js','./src/Point.js','./src/constants.js','./src/projCode/*.js','./src/util/MGRS.js'],
      after: [ './dist/proj4.js']
		}
	});
+3 −101
Original line number Diff line number Diff line
@@ -349,112 +349,14 @@ proj4.Proj = proj4.Class({
   *
   */
  parseDefs: function() {
    var self = this;
    this.defData = proj4.defs[this.srsCode];
    if (!this.defData) {
      return;
    }
    var paramObj = {};
    this.defData.split("+").map(function(v){
      return v.trim();
    }).filter(function(a){
      return a;
    }).forEach(function(a){
      var split= a.split("=");
      if(split[1]==="@null"){
        return;
      }
      split.push(true);
      paramObj[split[0].toLowerCase()]=split[1];
    });
    var paramName, paramVal,paramOutname;
    var params = {
      proj:'projName',
      datum:'datumCode',
      rf:function(v){
        self.rf = parseFloat(v,10);
      },
      lat_0:function(v){
        self.lat0 = v * proj4.common.D2R;
      },
      lat_1:function(v){
        self.lat1 = v * proj4.common.D2R;
      },
      lat_2:function(v){
        self.lat2 = v * proj4.common.D2R;
      },
      lat_ts:function(v){
        self.lat_ts = v * proj4.common.D2R;
      },
      lon_0:function(v){
        self.long0 = v * proj4.common.D2R;
      },
      lon_1:function(v){
        self.long1 = v * proj4.common.D2R;
      },
      lon_2:function(v){
        self.long2 = v * proj4.common.D2R;
      },
      alpha:function(v){
        self.alpha = parseFloat(v) * proj4.common.D2R;
      },
      lonc:function(v){
        self.longc = v * proj4.common.D2R;
      },
      x_0:function(v){
        self.x0 =  parseFloat(v,10);
      },
      y_0:function(v){
        self.y0 =  parseFloat(v,10);
      },
      k_0:function(v){
        self.k0 =  parseFloat(v,10);
      },
      k:function(v){
        self.k0 =  parseFloat(v,10);
      },
      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,10);});
      },
      to_meter:function(v){
        self.to_meter = parseFloat(v,10);
      },
      from_greenwich:function(v){
        self.from_greenwich = v * proj4.common.D2R;
      },
      pm:function(v){
        self.from_greenwich = (proj4.PrimeMeridian[v] ? proj4.PrimeMeridian[v] : parseFloat(v,10))*proj4.common.D2R;
      },
      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;
        }
      }
    };
    for(paramName in paramObj){
      paramVal = paramObj[paramName];
      if(paramName in params){
        paramOutname = params[paramName];
        if(typeof paramOutname === 'function'){
          paramOutname(paramVal);
        }else{
          self[paramOutname]=paramVal;
    var key;
    for(key in this.defData){
      this[key]=this.defData[key];
    }
      }else{
        self[paramName]=paramVal;
      }
    }

    this.deriveConstants();
  },

+136 −12
Original line number Diff line number Diff line
proj4.defs = {
proj4.defs = function(name) {
  /*global console*/
  var defData;
  if(arguments.length === 2){
    defData = arguments[1];
  }else if(arguments.length===1){
    if(Array.isArray(name)){
      return name.map(function(v){
        if(Array.isArray(v)){
          proj4.defs.apply(proj4,v);
        }else{
          proj4.defs(v);
        }
      });
    }else if('EPSG' in name){
      proj4.defs['EPSG:'+name.EPSG]=name;
    }else{
      console.log(name);
    }
    return;
  }
  var self = {};
  var nameSplit;
  if (name.indexOf(":") > -1) {
    nameSplit = name.split(":");
    self[nameSplit[0]] = nameSplit[1];
  }
  var paramObj = {};
  defData.split("+").map(function(v) {
    return v.trim();
  }).filter(function(a) {
    return a;
  }).forEach(function(a) {
    var split = a.split("=");
    if (split[1] === "@null") {
      return;
    }
    split.push(true);
    paramObj[split[0].toLowerCase()] = split[1];
  });
  var paramName, paramVal, paramOutname;
  var params = {
    proj: 'projName',
    datum: 'datumCode',
    rf: function(v) {
      self.rf = parseFloat(v, 10);
    },
    lat_0: function(v) {
      self.lat0 = v * proj4.common.D2R;
    },
    lat_1: function(v) {
      self.lat1 = v * proj4.common.D2R;
    },
    lat_2: function(v) {
      self.lat2 = v * proj4.common.D2R;
    },
    lat_ts: function(v) {
      self.lat_ts = v * proj4.common.D2R;
    },
    lon_0: function(v) {
      self.long0 = v * proj4.common.D2R;
    },
    lon_1: function(v) {
      self.long1 = v * proj4.common.D2R;
    },
    lon_2: function(v) {
      self.long2 = v * proj4.common.D2R;
    },
    alpha: function(v) {
      self.alpha = parseFloat(v) * proj4.common.D2R;
    },
    lonc: function(v) {
      self.longc = v * proj4.common.D2R;
    },
    x_0: function(v) {
      self.x0 = parseFloat(v, 10);
    },
    y_0: function(v) {
      self.y0 = parseFloat(v, 10);
    },
    k_0: function(v) {
      self.k0 = parseFloat(v, 10);
    },
    k: function(v) {
      self.k0 = parseFloat(v, 10);
    },
    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, 10);
      });
    },
    to_meter: function(v) {
      self.to_meter = parseFloat(v, 10);
    },
    from_greenwich: function(v) {
      self.from_greenwich = v * proj4.common.D2R;
    },
    pm: function(v) {
      self.from_greenwich = (proj4.PrimeMeridian[v] ? proj4.PrimeMeridian[v] : parseFloat(v, 10)) * proj4.common.D2R;
    },
    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;
      }
    }
  };
  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;
    }
  }
  proj4.defs[name] = self;
};
// These are so widely used, we'll go ahead and throw them in
// without requiring a separate .js file
  'WGS84': "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees",
  'EPSG:4326': "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees",
  'EPSG:4269': "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees",
  'EPSG:3857': "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"
};
proj4.defs['EPSG:3785'] = proj4.defs['EPSG:3857'];  //maintain backward compat, official code is 3857
proj4.defs.GOOGLE = proj4.defs['EPSG:3857'];
proj4.defs['EPSG:900913'] = proj4.defs['EPSG:3857'];
proj4.defs['EPSG:102113'] = proj4.defs['EPSG:3857'];

src/defs/bigDefs.js

0 → 100644
+1 −0

File added.

Preview size limit exceeded, changes collapsed.

src/defs/smallDefs.js

0 → 100644
+9 −0
Original line number Diff line number Diff line
proj4.defs('WGS84', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees");
proj4.defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees");
proj4.defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees");
proj4.defs('EPSG:3857', "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");

proj4.defs['EPSG:3785'] = proj4.defs['EPSG:3857'];  // maintain backward compat, official code is 3857
proj4.defs.GOOGLE = proj4.defs['EPSG:3857'];
proj4.defs['EPSG:900913'] = proj4.defs['EPSG:3857'];
proj4.defs['EPSG:102113'] = proj4.defs['EPSG:3857'];
 No newline at end of file