var adjust_lon = require('../common/adjust_lon'); 
 | 
var qsfnz = require('../common/qsfnz'); 
 | 
var msfnz = require('../common/msfnz'); 
 | 
var iqsfnz = require('../common/iqsfnz'); 
 | 
/* 
 | 
  reference:   
 | 
    "Cartographic Projection Procedures for the UNIX Environment- 
 | 
    A User's Manual" by Gerald I. Evenden, 
 | 
    USGS Open File Report 90-284and Release 4 Interim Reports (2003) 
 | 
*/ 
 | 
exports.init = function() { 
 | 
  //no-op 
 | 
  if (!this.sphere) { 
 | 
    this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)); 
 | 
  } 
 | 
}; 
 | 
  
 | 
  
 | 
/* Cylindrical Equal Area forward equations--mapping lat,long to x,y 
 | 
    ------------------------------------------------------------*/ 
 | 
exports.forward = function(p) { 
 | 
  var lon = p.x; 
 | 
  var lat = p.y; 
 | 
  var x, y; 
 | 
  /* Forward equations 
 | 
      -----------------*/ 
 | 
  var dlon = adjust_lon(lon - this.long0); 
 | 
  if (this.sphere) { 
 | 
    x = this.x0 + this.a * dlon * Math.cos(this.lat_ts); 
 | 
    y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts); 
 | 
  } 
 | 
  else { 
 | 
    var qs = qsfnz(this.e, Math.sin(lat)); 
 | 
    x = this.x0 + this.a * this.k0 * dlon; 
 | 
    y = this.y0 + this.a * qs * 0.5 / this.k0; 
 | 
  } 
 | 
  
 | 
  p.x = x; 
 | 
  p.y = y; 
 | 
  return p; 
 | 
}; 
 | 
  
 | 
/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long 
 | 
    ------------------------------------------------------------*/ 
 | 
exports.inverse = function(p) { 
 | 
  p.x -= this.x0; 
 | 
  p.y -= this.y0; 
 | 
  var lon, lat; 
 | 
  
 | 
  if (this.sphere) { 
 | 
    lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts)); 
 | 
    lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts)); 
 | 
  } 
 | 
  else { 
 | 
    lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a); 
 | 
    lon = adjust_lon(this.long0 + p.x / (this.a * this.k0)); 
 | 
  } 
 | 
  
 | 
  p.x = lon; 
 | 
  p.y = lat; 
 | 
  return p; 
 | 
}; 
 | 
exports.names = ["cea"]; 
 |