{"version":3,"file":"190.002887a8085514e7bb9a.js","mappings":"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","sources":["webpack://customer-portal-web-app/./node_modules/proj4/lib/common/imlfn.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/wkt.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/aea.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/omerc.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/constants/units.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/e1fn.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/e2fn.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/e3fn.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/toPoint.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/sign.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/mlfn.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/includedProjections.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/e0fn.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/merc.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/gN.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/sterea.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/constants/PrimeMeridian.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/krovak.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/msfnz.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/iqsfnz.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/Proj.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/extend.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/parseCode.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/srat.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/eqc.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/datum_transform.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/tsfnz.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/cea.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/pj_inv_mlfn.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/moll.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/eqdc.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/adjust_lon.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/cass.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/datum.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/lcc.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/gnom.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/pj_enfn.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/stere.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/poly.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/phi2z.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/defs.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/adjust_axis.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/sinu.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/vandg.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/core.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/qsfnz.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/constants/Ellipsoid.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/gauss.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/tmerc.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/longlat.js","webpack://customer-portal-web-app/./node_modules/mgrs/mgrs.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projString.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/deriveConstants.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/nzmg.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/index.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/somerc.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/pj_mlfn.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/transform.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/laea.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/global.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/asinz.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/common/adjust_lat.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/aeqd.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/Point.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/utm.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/constants/Datum.js","webpack://customer-portal-web-app/./node_modules/proj4/lib/projections/mill.js"],"sourcesContent":["module.exports = function(ml, e0, e1, e2, e3) {\n var phi;\n var dphi;\n\n phi = ml / e0;\n for (var i = 0; i < 15; i++) {\n dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n return NaN;\n};","var D2R = 0.01745329251994329577;\nvar extend = require('./extend');\n\nfunction mapit(obj, key, v) {\n obj[key] = v.map(function(aa) {\n var o = {};\n sExpr(aa, o);\n return o;\n }).reduce(function(a, b) {\n return extend(a, b);\n }, {});\n}\n\nfunction sExpr(v, obj) {\n var key;\n if (!Array.isArray(v)) {\n obj[v] = true;\n return;\n }\n else {\n key = v.shift();\n if (key === 'PARAMETER') {\n key = v.shift();\n }\n if (v.length === 1) {\n if (Array.isArray(v[0])) {\n obj[key] = {};\n sExpr(v[0], obj[key]);\n }\n else {\n obj[key] = v[0];\n }\n }\n else if (!v.length) {\n obj[key] = true;\n }\n else if (key === 'TOWGS84') {\n obj[key] = v;\n }\n else {\n obj[key] = {};\n if (['UNIT', 'PRIMEM', 'VERT_DATUM'].indexOf(key) > -1) {\n obj[key] = {\n name: v[0].toLowerCase(),\n convert: v[1]\n };\n if (v.length === 3) {\n obj[key].auth = v[2];\n }\n }\n else if (key === 'SPHEROID') {\n obj[key] = {\n name: v[0],\n a: v[1],\n rf: v[2]\n };\n if (v.length === 4) {\n obj[key].auth = v[3];\n }\n }\n else if (['GEOGCS', 'GEOCCS', 'DATUM', 'VERT_CS', 'COMPD_CS', 'LOCAL_CS', 'FITTED_CS', 'LOCAL_DATUM'].indexOf(key) > -1) {\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n }\n else if (v.every(function(aa) {\n return Array.isArray(aa);\n })) {\n mapit(obj, key, v);\n }\n else {\n sExpr(v, obj[key]);\n }\n }\n }\n}\n\nfunction rename(obj, params) {\n var outName = params[0];\n var inName = params[1];\n if (!(outName in obj) && (inName in obj)) {\n obj[outName] = obj[inName];\n if (params.length === 3) {\n obj[outName] = params[2](obj[outName]);\n }\n }\n}\n\nfunction d2r(input) {\n return input * D2R;\n}\n\nfunction cleanWKT(wkt) {\n if (wkt.type === 'GEOGCS') {\n wkt.projName = 'longlat';\n }\n else if (wkt.type === 'LOCAL_CS') {\n wkt.projName = 'identity';\n wkt.local = true;\n }\n else {\n if (typeof wkt.PROJECTION === \"object\") {\n wkt.projName = Object.keys(wkt.PROJECTION)[0];\n }\n else {\n wkt.projName = wkt.PROJECTION;\n }\n }\n if (wkt.UNIT) {\n wkt.units = wkt.UNIT.name.toLowerCase();\n if (wkt.units === 'metre') {\n wkt.units = 'meter';\n }\n if (wkt.UNIT.convert) {\n wkt.to_meter = parseFloat(wkt.UNIT.convert, 10);\n }\n }\n\n if (wkt.GEOGCS) {\n //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n //}\n if (wkt.GEOGCS.DATUM) {\n wkt.datumCode = wkt.GEOGCS.DATUM.name.toLowerCase();\n }\n else {\n wkt.datumCode = wkt.GEOGCS.name.toLowerCase();\n }\n if (wkt.datumCode.slice(0, 2) === 'd_') {\n wkt.datumCode = wkt.datumCode.slice(2);\n }\n if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n wkt.datumCode = 'nzgd49';\n }\n if (wkt.datumCode === \"wgs_1984\") {\n if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n wkt.sphere = true;\n }\n wkt.datumCode = 'wgs84';\n }\n if (wkt.datumCode.slice(-6) === '_ferro') {\n wkt.datumCode = wkt.datumCode.slice(0, - 6);\n }\n if (wkt.datumCode.slice(-8) === '_jakarta') {\n wkt.datumCode = wkt.datumCode.slice(0, - 8);\n }\n if (~wkt.datumCode.indexOf('belge')) {\n wkt.datumCode = \"rnb72\";\n }\n if (wkt.GEOGCS.DATUM && wkt.GEOGCS.DATUM.SPHEROID) {\n wkt.ellps = wkt.GEOGCS.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n if (wkt.ellps.toLowerCase().slice(0, 13) === \"international\") {\n wkt.ellps = 'intl';\n }\n\n wkt.a = wkt.GEOGCS.DATUM.SPHEROID.a;\n wkt.rf = parseFloat(wkt.GEOGCS.DATUM.SPHEROID.rf, 10);\n }\n if (~wkt.datumCode.indexOf('osgb_1936')) {\n wkt.datumCode = \"osgb36\";\n }\n }\n if (wkt.b && !isFinite(wkt.b)) {\n wkt.b = wkt.a;\n }\n\n function toMeter(input) {\n var ratio = wkt.to_meter || 1;\n return parseFloat(input, 10) * ratio;\n }\n var renamer = function(a) {\n return rename(wkt, a);\n };\n var list = [\n ['standard_parallel_1', 'Standard_Parallel_1'],\n ['standard_parallel_2', 'Standard_Parallel_2'],\n ['false_easting', 'False_Easting'],\n ['false_northing', 'False_Northing'],\n ['central_meridian', 'Central_Meridian'],\n ['latitude_of_origin', 'Latitude_Of_Origin'],\n ['latitude_of_origin', 'Central_Parallel'],\n ['scale_factor', 'Scale_Factor'],\n ['k0', 'scale_factor'],\n ['latitude_of_center', 'Latitude_of_center'],\n ['lat0', 'latitude_of_center', d2r],\n ['longitude_of_center', 'Longitude_Of_Center'],\n ['longc', 'longitude_of_center', d2r],\n ['x0', 'false_easting', toMeter],\n ['y0', 'false_northing', toMeter],\n ['long0', 'central_meridian', d2r],\n ['lat0', 'latitude_of_origin', d2r],\n ['lat0', 'standard_parallel_1', d2r],\n ['lat1', 'standard_parallel_1', d2r],\n ['lat2', 'standard_parallel_2', d2r],\n ['alpha', 'azimuth', d2r],\n ['srsCode', 'name']\n ];\n list.forEach(renamer);\n if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === \"Lambert_Azimuthal_Equal_Area\")) {\n wkt.long0 = wkt.longc;\n }\n if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {\n wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n wkt.lat_ts = wkt.lat1;\n }\n}\nmodule.exports = function(wkt, self) {\n var lisp = JSON.parse((\",\" + wkt).replace(/\\s*\\,\\s*([A-Z_0-9]+?)(\\[)/g, ',[\"$1\",').slice(1).replace(/\\s*\\,\\s*([A-Z_0-9]+?)\\]/g, ',\"$1\"]').replace(/,\\[\"VERTCS\".+/,''));\n var type = lisp.shift();\n var name = lisp.shift();\n lisp.unshift(['name', name]);\n lisp.unshift(['type', type]);\n lisp.unshift('output');\n var obj = {};\n sExpr(lisp, obj);\n cleanWKT(obj.output);\n return extend(self, obj.output);\n};\n","var EPSLN = 1.0e-10;\nvar msfnz = require('../common/msfnz');\nvar qsfnz = require('../common/qsfnz');\nvar adjust_lon = require('../common/adjust_lon');\nvar asinz = require('../common/asinz');\nexports.init = function() {\n\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e3 = Math.sqrt(this.es);\n\n this.sin_po = Math.sin(this.lat1);\n this.cos_po = Math.cos(this.lat1);\n this.t1 = this.sin_po;\n this.con = this.sin_po;\n this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n this.sin_po = Math.sin(this.lat2);\n this.cos_po = Math.cos(this.lat2);\n this.t2 = this.sin_po;\n this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n this.sin_po = Math.sin(this.lat0);\n this.cos_po = Math.cos(this.lat0);\n this.t3 = this.sin_po;\n this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n }\n else {\n this.ns0 = this.con;\n }\n this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n};\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n -------------------------------------------------------------------*/\nexports.forward = function(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n this.sin_phi = Math.sin(lat);\n this.cos_phi = Math.cos(lat);\n\n var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);\n var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n var theta = this.ns0 * adjust_lon(lon - this.long0);\n var x = rh1 * Math.sin(theta) + this.x0;\n var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n};\n\n\nexports.inverse = function(p) {\n var rh1, qs, con, theta, lon, lat;\n\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n if (this.ns0 >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n con = rh1 * this.ns0 / this.a;\n if (this.sphere) {\n lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n }\n else {\n qs = (this.c - con * con) / this.ns0;\n lat = this.phi1z(this.e3, qs);\n }\n\n lon = adjust_lon(theta / this.ns0 + this.long0);\n p.x = lon;\n p.y = lat;\n return p;\n};\n\n/* Function to compute phi1, the latitude for the inverse of the\n Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexports.phi1z = function(eccent, qs) {\n var sinphi, cosphi, con, com, dphi;\n var phi = asinz(0.5 * qs);\n if (eccent < EPSLN) {\n return phi;\n }\n\n var eccnts = eccent * eccent;\n for (var i = 1; i <= 25; i++) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n con = eccent * sinphi;\n com = 1 - con * con;\n dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi = phi + dphi;\n if (Math.abs(dphi) <= 1e-7) {\n return phi;\n }\n }\n return null;\n};\nexports.names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\n","var tsfnz = require('../common/tsfnz');\nvar adjust_lon = require('../common/adjust_lon');\nvar phi2z = require('../common/phi2z');\nvar HALF_PI = Math.PI/2;\nvar FORTPI = Math.PI/4;\nvar EPSLN = 1.0e-10;\n\n/* Initialize the Oblique Mercator projection\n ------------------------------------------*/\nexports.init = function() {\n this.no_off = this.no_off || false;\n this.no_rot = this.no_rot || false;\n\n if (isNaN(this.k0)) {\n this.k0 = 1;\n }\n var sinlat = Math.sin(this.lat0);\n var coslat = Math.cos(this.lat0);\n var con = this.e * sinlat;\n\n this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));\n this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);\n var t0 = tsfnz(this.e, this.lat0, sinlat);\n var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));\n if (dl * dl < 1) {\n dl = 1;\n }\n var fl;\n var gl;\n if (!isNaN(this.longc)) {\n //Central point and azimuth method\n\n if (this.lat0 >= 0) {\n fl = dl + Math.sqrt(dl * dl - 1);\n }\n else {\n fl = dl - Math.sqrt(dl * dl - 1);\n }\n this.el = fl * Math.pow(t0, this.bl);\n gl = 0.5 * (fl - 1 / fl);\n this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);\n this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;\n\n }\n else {\n //2 points method\n var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));\n var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));\n if (this.lat0 >= 0) {\n this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n }\n else {\n this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n }\n var hl = Math.pow(t1, this.bl);\n var ll = Math.pow(t2, this.bl);\n fl = this.el / hl;\n gl = 0.5 * (fl - 1 / fl);\n var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);\n var pl = (ll - hl) / (ll + hl);\n var dlon12 = adjust_lon(this.long1 - this.long2);\n this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;\n this.long0 = adjust_lon(this.long0);\n var dlon10 = adjust_lon(this.long1 - this.long0);\n this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);\n this.alpha = Math.asin(dl * Math.sin(this.gamma0));\n }\n\n if (this.no_off) {\n this.uc = 0;\n }\n else {\n if (this.lat0 >= 0) {\n this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n }\n else {\n this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n }\n }\n\n};\n\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n ----------------------------------------------------------*/\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var dlon = adjust_lon(lon - this.long0);\n var us, vs;\n var con;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n if (lat > 0) {\n con = -1;\n }\n else {\n con = 1;\n }\n vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));\n us = -1 * con * HALF_PI * this.al / this.bl;\n }\n else {\n var t = tsfnz(this.e, lat, Math.sin(lat));\n var ql = this.el / Math.pow(t, this.bl);\n var sl = 0.5 * (ql - 1 / ql);\n var tl = 0.5 * (ql + 1 / ql);\n var vl = Math.sin(this.bl * (dlon));\n var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;\n if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {\n vs = Number.POSITIVE_INFINITY;\n }\n else {\n vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;\n }\n if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {\n us = this.al * this.bl * (dlon);\n }\n else {\n us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;\n }\n }\n\n if (this.no_rot) {\n p.x = this.x0 + us;\n p.y = this.y0 + vs;\n }\n else {\n\n us -= this.uc;\n p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);\n p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);\n }\n return p;\n};\n\nexports.inverse = function(p) {\n var us, vs;\n if (this.no_rot) {\n vs = p.y - this.y0;\n us = p.x - this.x0;\n }\n else {\n vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);\n us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);\n us += this.uc;\n }\n var qp = Math.exp(-1 * this.bl * vs / this.al);\n var sp = 0.5 * (qp - 1 / qp);\n var tp = 0.5 * (qp + 1 / qp);\n var vp = Math.sin(this.bl * us / this.al);\n var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;\n var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);\n if (Math.abs(up - 1) < EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n }\n else if (Math.abs(up + 1) < EPSLN) {\n p.x = this.long0;\n p.y = -1 * HALF_PI;\n }\n else {\n p.y = phi2z(this.e, ts);\n p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);\n }\n return p;\n};\n\nexports.names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"omerc\"];","exports.ft = {to_meter: 0.3048};\nexports['us-ft'] = {to_meter: 1200 / 3937};\n","module.exports = function(x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n};","module.exports = function(x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n};","module.exports = function(x) {\n return (x * x * x * (35 / 3072));\n};","module.exports = function (array){\n var out = {\n x: array[0],\n y: array[1]\n };\n if (array.length>2) {\n out.z = array[2];\n }\n if (array.length>3) {\n out.m = array[3];\n }\n return out;\n};","module.exports = function(x) {\n return x<0 ? -1 : 1;\n};","module.exports = function(e0, e1, e2, e3, phi) {\n return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n};","var projs = [\n require('./projections/tmerc'),\n require('./projections/utm'),\n require('./projections/sterea'),\n require('./projections/stere'),\n require('./projections/somerc'),\n require('./projections/omerc'),\n require('./projections/lcc'),\n require('./projections/krovak'),\n require('./projections/cass'),\n require('./projections/laea'),\n require('./projections/aea'),\n require('./projections/gnom'),\n require('./projections/cea'),\n require('./projections/eqc'),\n require('./projections/poly'),\n require('./projections/nzmg'),\n require('./projections/mill'),\n require('./projections/sinu'),\n require('./projections/moll'),\n require('./projections/eqdc'),\n require('./projections/vandg'),\n require('./projections/aeqd')\n];\nmodule.exports = function(proj4){\n projs.forEach(function(proj){\n proj4.Proj.projections.add(proj);\n });\n};","module.exports = function(x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n};","var msfnz = require('../common/msfnz');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar R2D = 57.29577951308232088;\nvar adjust_lon = require('../common/adjust_lon');\nvar FORTPI = Math.PI/4;\nvar tsfnz = require('../common/tsfnz');\nvar phi2z = require('../common/phi2z');\nexports.init = function() {\n var con = this.b / this.a;\n this.es = 1 - con * con;\n if(!('x0' in this)){\n this.x0 = 0;\n }\n if(!('y0' in this)){\n this.y0 = 0;\n }\n this.e = Math.sqrt(this.es);\n if (this.lat_ts) {\n if (this.sphere) {\n this.k0 = Math.cos(this.lat_ts);\n }\n else {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n }\n else {\n if (!this.k0) {\n if (this.k) {\n this.k0 = this.k;\n }\n else {\n this.k0 = 1;\n }\n }\n }\n};\n\n/* Mercator forward equations--mapping lat,long to x,y\n --------------------------------------------------*/\n\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n // convert to radians\n if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n return null;\n }\n\n var x, y;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n return null;\n }\n else {\n if (this.sphere) {\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n }\n else {\n var sinphi = Math.sin(lat);\n var ts = tsfnz(this.e, lat, sinphi);\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 - this.a * this.k0 * Math.log(ts);\n }\n p.x = x;\n p.y = y;\n return p;\n }\n};\n\n\n/* Mercator inverse equations--mapping x,y to lat/long\n --------------------------------------------------*/\nexports.inverse = function(p) {\n\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n }\n else {\n var ts = Math.exp(-y / (this.a * this.k0));\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n p.x = lon;\n p.y = lat;\n return p;\n};\n\nexports.names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\n","module.exports = function(a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n};","var gauss = require('./gauss');\nvar adjust_lon = require('../common/adjust_lon');\nexports.init = function() {\n gauss.init.apply(this);\n if (!this.rc) {\n return;\n }\n this.sinc0 = Math.sin(this.phic0);\n this.cosc0 = Math.cos(this.phic0);\n this.R2 = 2 * this.rc;\n if (!this.title) {\n this.title = \"Oblique Stereographic Alternative\";\n }\n};\n\nexports.forward = function(p) {\n var sinc, cosc, cosl, k;\n p.x = adjust_lon(p.x - this.long0);\n gauss.forward.apply(this, [p]);\n sinc = Math.sin(p.y);\n cosc = Math.cos(p.y);\n cosl = Math.cos(p.x);\n k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n p.x = k * cosc * Math.sin(p.x);\n p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n};\n\nexports.inverse = function(p) {\n var sinc, cosc, lon, lat, rho;\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {\n var c = 2 * Math.atan2(rho, this.R2);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n gauss.inverse.apply(this, [p]);\n p.x = adjust_lon(p.x + this.long0);\n return p;\n};\n\nexports.names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\"];\n","exports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"","var adjust_lon = require('../common/adjust_lon');\nexports.init = function() {\n this.a = 6377397.155;\n this.es = 0.006674372230614;\n this.e = Math.sqrt(this.es);\n if (!this.lat0) {\n this.lat0 = 0.863937979737193;\n }\n if (!this.long0) {\n this.long0 = 0.7417649320975901 - 0.308341501185665;\n }\n /* if scale not set default to 0.9999 */\n if (!this.k0) {\n this.k0 = 0.9999;\n }\n this.s45 = 0.785398163397448; /* 45 */\n this.s90 = 2 * this.s45;\n this.fi0 = this.lat0;\n this.e2 = this.es;\n this.e = Math.sqrt(this.e2);\n this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n this.uq = 1.04216856380474;\n this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n this.k1 = this.k0;\n this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n this.s0 = 1.37008346281555;\n this.n = Math.sin(this.s0);\n this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n this.ad = this.s90 - this.uq;\n};\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexports.forward = function(p) {\n var gfi, u, deltav, s, d, eps, ro;\n var lon = p.x;\n var lat = p.y;\n var delta_lon = adjust_lon(lon - this.long0);\n /* Transformation */\n gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n deltav = -delta_lon * this.alfa;\n s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n eps = this.n * d;\n ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n p.y = ro * Math.cos(eps) / 1;\n p.x = ro * Math.sin(eps) / 1;\n\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n return (p);\n};\n\n/* calculate lat/lon from xy */\nexports.inverse = function(p) {\n var u, deltav, s, d, eps, ro, fi1;\n var ok;\n\n /* Transformation */\n /* revert y, x*/\n var tmp = p.x;\n p.x = p.y;\n p.y = tmp;\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n ro = Math.sqrt(p.x * p.x + p.y * p.y);\n eps = Math.atan2(p.y, p.x);\n d = eps / Math.sin(this.s0);\n s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n p.x = this.long0 - deltav / this.alfa;\n fi1 = u;\n ok = 0;\n var iter = 0;\n do {\n p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n if (Math.abs(fi1 - p.y) < 0.0000000001) {\n ok = 1;\n }\n fi1 = p.y;\n iter += 1;\n } while (ok === 0 && iter < 15);\n if (iter >= 15) {\n return null;\n }\n\n return (p);\n};\nexports.names = [\"Krovak\", \"krovak\"];\n","var projs = [\n require('./projections/merc'),\n require('./projections/longlat')\n];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n var len = projStore.length;\n if (!proj.names) {\n console.log(i);\n return true;\n }\n projStore[len] = proj;\n proj.names.forEach(function(n) {\n names[n.toLowerCase()] = len;\n });\n return this;\n}\n\nexports.add = add;\n\nexports.get = function(name) {\n if (!name) {\n return false;\n }\n var n = name.toLowerCase();\n if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n return projStore[names[n]];\n }\n};\nexports.start = function() {\n projs.forEach(add);\n};\n","module.exports = function(eccent, sinphi, cosphi) {\n var con = eccent * sinphi;\n return cosphi / (Math.sqrt(1 - con * con));\n};","var HALF_PI = Math.PI/2;\n\nmodule.exports = function(eccent, q) {\n var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n if (q < 0) {\n return (-1 * HALF_PI);\n }\n else {\n return HALF_PI;\n }\n }\n //var phi = 0.5* q/(1-eccent*eccent);\n var phi = Math.asin(0.5 * q);\n var dphi;\n var sin_phi;\n var cos_phi;\n var con;\n for (var i = 0; i < 30; i++) {\n sin_phi = Math.sin(phi);\n cos_phi = Math.cos(phi);\n con = eccent * sin_phi;\n dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n return NaN;\n};","var parseCode = require(\"./parseCode\");\nvar extend = require('./extend');\nvar projections = require('./projections');\nvar deriveConstants = require('./deriveConstants');\n\nfunction Projection(srsCode,callback) {\n if (!(this instanceof Projection)) {\n return new Projection(srsCode);\n }\n callback = callback || function(error){\n if(error){\n throw error;\n }\n };\n var json = parseCode(srsCode);\n if(typeof json !== 'object'){\n callback(srsCode);\n return;\n }\n var modifiedJSON = deriveConstants(json);\n var ourProj = Projection.projections.get(modifiedJSON.projName);\n if(ourProj){\n extend(this, modifiedJSON);\n extend(this, ourProj);\n this.init();\n callback(null, this);\n }else{\n callback(srsCode);\n }\n}\nProjection.projections = projections;\nProjection.projections.start();\nmodule.exports = Projection;\n","module.exports = function(destination, source) {\n destination = destination || {};\n var value, property;\n if (!source) {\n return destination;\n }\n for (property in source) {\n value = source[property];\n if (value !== undefined) {\n destination[property] = value;\n }\n }\n return destination;\n};\n","var defs = require('./defs');\nvar wkt = require('./wkt');\nvar projStr = require('./projString');\nfunction testObj(code){\n return typeof code === 'string';\n}\nfunction testDef(code){\n return code in defs;\n}\nfunction testWKT(code){\n var codeWords = ['GEOGCS','GEOCCS','PROJCS','LOCAL_CS'];\n return codeWords.reduce(function(a,b){\n return a+1+code.indexOf(b);\n },0);\n}\nfunction testProj(code){\n return code[0] === '+';\n}\nfunction parse(code){\n if (testObj(code)) {\n //check to see if this is a WKT string\n if (testDef(code)) {\n return defs[code];\n }\n else if (testWKT(code)) {\n return wkt(code);\n }\n else if (testProj(code)) {\n return projStr(code);\n }\n }else{\n return code;\n }\n}\n\nmodule.exports = parse;","module.exports = function(esinp, exp) {\n return (Math.pow((1 - esinp) / (1 + esinp), exp));\n};","var adjust_lon = require('../common/adjust_lon');\nvar adjust_lat = require('../common/adjust_lat');\nexports.init = function() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n this.rc = Math.cos(this.lat_ts);\n};\n\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexports.forward = function(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n var dlon = adjust_lon(lon - this.long0);\n var dlat = adjust_lat(lat - this.lat0);\n p.x = this.x0 + (this.a * dlon * this.rc);\n p.y = this.y0 + (this.a * dlat);\n return p;\n};\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexports.inverse = function(p) {\n\n var x = p.x;\n var y = p.y;\n\n p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n return p;\n};\nexports.names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\n","var PJD_3PARAM = 1;\nvar PJD_7PARAM = 2;\nvar PJD_GRIDSHIFT = 3;\nvar PJD_NODATUM = 5; // WGS84 or equivalent\nvar SRS_WGS84_SEMIMAJOR = 6378137; // only used in grid shift transforms\nvar SRS_WGS84_ESQUARED = 0.006694379990141316; //DGR: 2012-07-29\nmodule.exports = function(source, dest, point) {\n var wp, i, l;\n\n function checkParams(fallback) {\n return (fallback === PJD_3PARAM || fallback === PJD_7PARAM);\n }\n // Short cut if the datums are identical.\n if (source.compare_datums(dest)) {\n return point; // in this case, zero is sucess,\n // whereas cs_compare_datums returns 1 to indicate TRUE\n // confusing, should fix this\n }\n\n // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n return point;\n }\n\n //DGR: 2012-07-29 : add nadgrids support (begin)\n var src_a = source.a;\n var src_es = source.es;\n\n var dst_a = dest.a;\n var dst_es = dest.es;\n\n var fallback = source.datum_type;\n // If this datum requires grid shifts, then apply it to geodetic coordinates.\n if (fallback === PJD_GRIDSHIFT) {\n if (this.apply_gridshift(source, 0, point) === 0) {\n source.a = SRS_WGS84_SEMIMAJOR;\n source.es = SRS_WGS84_ESQUARED;\n }\n else {\n // try 3 or 7 params transformation or nothing ?\n if (!source.datum_params) {\n source.a = src_a;\n source.es = source.es;\n return point;\n }\n wp = 1;\n for (i = 0, l = source.datum_params.length; i < l; i++) {\n wp *= source.datum_params[i];\n }\n if (wp === 0) {\n source.a = src_a;\n source.es = source.es;\n return point;\n }\n if (source.datum_params.length > 3) {\n fallback = PJD_7PARAM;\n }\n else {\n fallback = PJD_3PARAM;\n }\n }\n }\n if (dest.datum_type === PJD_GRIDSHIFT) {\n dest.a = SRS_WGS84_SEMIMAJOR;\n dest.es = SRS_WGS84_ESQUARED;\n }\n // Do we need to go through geocentric coordinates?\n if (source.es !== dest.es || source.a !== dest.a || checkParams(fallback) || checkParams(dest.datum_type)) {\n //DGR: 2012-07-29 : add nadgrids support (end)\n // Convert to geocentric coordinates.\n source.geodetic_to_geocentric(point);\n // CHECK_RETURN;\n // Convert between datums\n if (checkParams(source.datum_type)) {\n source.geocentric_to_wgs84(point);\n // CHECK_RETURN;\n }\n if (checkParams(dest.datum_type)) {\n dest.geocentric_from_wgs84(point);\n // CHECK_RETURN;\n }\n // Convert back to geodetic coordinates\n dest.geocentric_to_geodetic(point);\n // CHECK_RETURN;\n }\n // Apply grid shift to destination if required\n if (dest.datum_type === PJD_GRIDSHIFT) {\n this.apply_gridshift(dest, 1, point);\n // CHECK_RETURN;\n }\n\n source.a = src_a;\n source.es = src_es;\n dest.a = dst_a;\n dest.es = dst_es;\n\n return point;\n};\n\n","var HALF_PI = Math.PI/2;\n\nmodule.exports = function(eccent, phi, sinphi) {\n var con = eccent * sinphi;\n var com = 0.5 * eccent;\n con = Math.pow(((1 - con) / (1 + con)), com);\n return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n};","var adjust_lon = require('../common/adjust_lon');\nvar qsfnz = require('../common/qsfnz');\nvar msfnz = require('../common/msfnz');\nvar iqsfnz = require('../common/iqsfnz');\n/*\n reference: \n \"Cartographic Projection Procedures for the UNIX Environment-\n A User's Manual\" by Gerald I. Evenden,\n USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexports.init = function() {\n //no-op\n if (!this.sphere) {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n};\n\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n if (this.sphere) {\n x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n }\n else {\n var qs = qsfnz(this.e, Math.sin(lat));\n x = this.x0 + this.a * this.k0 * dlon;\n y = this.y0 + this.a * qs * 0.5 / this.k0;\n }\n\n p.x = x;\n p.y = y;\n return p;\n};\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n }\n else {\n lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"cea\"];\n","var pj_mlfn = require(\"./pj_mlfn\");\nvar EPSLN = 1.0e-10;\nvar MAX_ITER = 20;\nmodule.exports = function(arg, es, en) {\n var k = 1 / (1 - es);\n var phi = arg;\n for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n var s = Math.sin(phi);\n var t = 1 - es * s * s;\n //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n //phi -= t * (t * Math.sqrt(t)) * k;\n t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n phi -= t;\n if (Math.abs(t) < EPSLN) {\n return phi;\n }\n }\n //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n return phi;\n};","var adjust_lon = require('../common/adjust_lon');\nvar EPSLN = 1.0e-10;\nexports.init = function() {};\n\n/* Mollweide forward equations--mapping lat,long to x,y\n ----------------------------------------------------*/\nexports.forward = function(p) {\n\n /* Forward equations\n -----------------*/\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var theta = lat;\n var con = Math.PI * Math.sin(lat);\n\n /* Iterate using the Newton-Raphson method to find theta\n -----------------------------------------------------*/\n for (var i = 0; true; i++) {\n var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n theta += delta_theta;\n if (Math.abs(delta_theta) < EPSLN) {\n break;\n }\n }\n theta /= 2;\n\n /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n this is done here because of precision problems with \"cos(theta)\"\n --------------------------------------------------------------------------*/\n if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n delta_lon = 0;\n }\n var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n};\n\nexports.inverse = function(p) {\n var theta;\n var arg;\n\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n arg = p.y / (1.4142135623731 * this.a);\n\n /* Because of division by zero problems, 'arg' can not be 1. Therefore\n a number very close to one is used instead.\n -------------------------------------------------------------------*/\n if (Math.abs(arg) > 0.999999999999) {\n arg = 0.999999999999;\n }\n theta = Math.asin(arg);\n var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n if (lon < (-Math.PI)) {\n lon = -Math.PI;\n }\n if (lon > Math.PI) {\n lon = Math.PI;\n }\n arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n if (Math.abs(arg) > 1) {\n arg = 1;\n }\n var lat = Math.asin(arg);\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Mollweide\", \"moll\"];\n","var e0fn = require('../common/e0fn');\nvar e1fn = require('../common/e1fn');\nvar e2fn = require('../common/e2fn');\nvar e3fn = require('../common/e3fn');\nvar msfnz = require('../common/msfnz');\nvar mlfn = require('../common/mlfn');\nvar adjust_lon = require('../common/adjust_lon');\nvar adjust_lat = require('../common/adjust_lat');\nvar imlfn = require('../common/imlfn');\nvar EPSLN = 1.0e-10;\nexports.init = function() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.lat2 = this.lat2 || this.lat1;\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n\n this.sinphi = Math.sin(this.lat1);\n this.cosphi = Math.cos(this.lat1);\n\n this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n this.ns = this.sinphi;\n }\n else {\n this.sinphi = Math.sin(this.lat2);\n this.cosphi = Math.cos(this.lat2);\n this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n }\n this.g = this.ml1 + this.ms1 / this.ns;\n this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n this.rh = this.a * (this.g - this.ml0);\n};\n\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n -----------------------------------------------------------*/\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var rh1;\n\n /* Forward equations\n -----------------*/\n if (this.sphere) {\n rh1 = this.a * (this.g - lat);\n }\n else {\n var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n rh1 = this.a * (this.g - ml);\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n var x = this.x0 + rh1 * Math.sin(theta);\n var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n p.x = x;\n p.y = y;\n return p;\n};\n\n/* Inverse equations\n -----------------*/\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n var con, rh1, lat, lon;\n if (this.ns >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + theta / this.ns);\n lat = adjust_lat(this.g - rh1 / this.a);\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n var ml = this.g - rh1 / this.a;\n lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n lon = adjust_lon(this.long0 + theta / this.ns);\n p.x = lon;\n p.y = lat;\n return p;\n }\n\n};\nexports.names = [\"Equidistant_Conic\", \"eqdc\"];\n","var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nvar SPI = 3.14159265359;\nvar sign = require('./sign');\n\nmodule.exports = function(x) {\n return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n};","var mlfn = require('../common/mlfn');\nvar e0fn = require('../common/e0fn');\nvar e1fn = require('../common/e1fn');\nvar e2fn = require('../common/e2fn');\nvar e3fn = require('../common/e3fn');\nvar gN = require('../common/gN');\nvar adjust_lon = require('../common/adjust_lon');\nvar adjust_lat = require('../common/adjust_lat');\nvar imlfn = require('../common/imlfn');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nexports.init = function() {\n if (!this.sphere) {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n }\n};\n\n\n\n/* Cassini forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexports.forward = function(p) {\n\n /* Forward equations\n -----------------*/\n var x, y;\n var lam = p.x;\n var phi = p.y;\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n }\n else {\n //ellipsoid\n var sinphi = Math.sin(phi);\n var cosphi = Math.cos(phi);\n var nl = gN(this.a, this.e, sinphi);\n var tl = Math.tan(phi) * Math.tan(phi);\n var al = lam * Math.cos(phi);\n var asq = al * al;\n var cl = this.es * cosphi * cosphi / (1 - this.es);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n }\n\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n};\n\n/* Inverse equations\n -----------------*/\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var phi, lam;\n\n if (this.sphere) {\n var dd = y + this.lat0;\n phi = Math.asin(Math.sin(dd) * Math.cos(x));\n lam = Math.atan2(Math.tan(x), Math.cos(dd));\n }\n else {\n /* ellipsoid */\n var ml1 = this.ml0 / this.a + y;\n var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n if (y < 0) {\n p.y *= -1;\n }\n return p;\n }\n var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n var tl1 = Math.pow(Math.tan(phi1), 2);\n var dl = x * this.a / nl1;\n var dsq = dl * dl;\n phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n }\n\n p.x = adjust_lon(lam + this.long0);\n p.y = adjust_lat(phi);\n return p;\n\n};\nexports.names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];","var HALF_PI = Math.PI/2;\nvar PJD_3PARAM = 1;\nvar PJD_7PARAM = 2;\nvar PJD_GRIDSHIFT = 3;\nvar PJD_WGS84 = 4; // WGS84 or equivalent\nvar PJD_NODATUM = 5; // WGS84 or equivalent\nvar SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nvar AD_C = 1.0026000;\nvar COS_67P5 = 0.38268343236508977;\nvar datum = function(proj) {\n if (!(this instanceof datum)) {\n return new datum(proj);\n }\n this.datum_type = PJD_WGS84; //default setting\n if (!proj) {\n return;\n }\n if (proj.datumCode && proj.datumCode === 'none') {\n this.datum_type = PJD_NODATUM;\n }\n if (proj.datum_params) {\n for (var i = 0; i < proj.datum_params.length; i++) {\n proj.datum_params[i] = parseFloat(proj.datum_params[i]);\n }\n if (proj.datum_params[0] !== 0 || proj.datum_params[1] !== 0 || proj.datum_params[2] !== 0) {\n this.datum_type = PJD_3PARAM;\n }\n if (proj.datum_params.length > 3) {\n if (proj.datum_params[3] !== 0 || proj.datum_params[4] !== 0 || proj.datum_params[5] !== 0 || proj.datum_params[6] !== 0) {\n this.datum_type = PJD_7PARAM;\n proj.datum_params[3] *= SEC_TO_RAD;\n proj.datum_params[4] *= SEC_TO_RAD;\n proj.datum_params[5] *= SEC_TO_RAD;\n proj.datum_params[6] = (proj.datum_params[6] / 1000000.0) + 1.0;\n }\n }\n }\n // DGR 2011-03-21 : nadgrids support\n this.datum_type = proj.grids ? PJD_GRIDSHIFT : this.datum_type;\n\n this.a = proj.a; //datum object also uses these values\n this.b = proj.b;\n this.es = proj.es;\n this.ep2 = proj.ep2;\n this.datum_params = proj.datum_params;\n if (this.datum_type === PJD_GRIDSHIFT) {\n this.grids = proj.grids;\n }\n};\ndatum.prototype = {\n\n\n /****************************************************************/\n // cs_compare_datums()\n // Returns TRUE if the two datums match, otherwise FALSE.\n compare_datums: function(dest) {\n if (this.datum_type !== dest.datum_type) {\n return false; // false, datums are not equal\n }\n else if (this.a !== dest.a || Math.abs(this.es - dest.es) > 0.000000000050) {\n // the tolerence for es is to ensure that GRS80 and WGS84\n // are considered identical\n return false;\n }\n else if (this.datum_type === PJD_3PARAM) {\n return (this.datum_params[0] === dest.datum_params[0] && this.datum_params[1] === dest.datum_params[1] && this.datum_params[2] === dest.datum_params[2]);\n }\n else if (this.datum_type === PJD_7PARAM) {\n return (this.datum_params[0] === dest.datum_params[0] && this.datum_params[1] === dest.datum_params[1] && this.datum_params[2] === dest.datum_params[2] && this.datum_params[3] === dest.datum_params[3] && this.datum_params[4] === dest.datum_params[4] && this.datum_params[5] === dest.datum_params[5] && this.datum_params[6] === dest.datum_params[6]);\n }\n else if (this.datum_type === PJD_GRIDSHIFT || dest.datum_type === PJD_GRIDSHIFT) {\n //alert(\"ERROR: Grid shift transformations are not implemented.\");\n //return false\n //DGR 2012-07-29 lazy ...\n return this.nadgrids === dest.nadgrids;\n }\n else {\n return true; // datums are equal\n }\n }, // cs_compare_datums()\n\n /*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n * Latitude : Geodetic latitude in radians (input)\n * Longitude : Geodetic longitude in radians (input)\n * Height : Geodetic height, in meters (input)\n * X : Calculated Geocentric X coordinate, in meters (output)\n * Y : Calculated Geocentric Y coordinate, in meters (output)\n * Z : Calculated Geocentric Z coordinate, in meters (output)\n *\n */\n geodetic_to_geocentric: function(p) {\n var Longitude = p.x;\n var Latitude = p.y;\n var Height = p.z ? p.z : 0; //Z value not always supplied\n var X; // output\n var Y;\n var Z;\n\n var Error_Code = 0; // GEOCENT_NO_ERROR;\n var Rn; /* Earth radius at location */\n var Sin_Lat; /* Math.sin(Latitude) */\n var Sin2_Lat; /* Square of Math.sin(Latitude) */\n var Cos_Lat; /* Math.cos(Latitude) */\n\n /*\n ** Don't blow up if Latitude is just a little out of the value\n ** range as it may just be a rounding issue. Also removed longitude\n ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.\n */\n if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n Latitude = -HALF_PI;\n }\n else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n Latitude = HALF_PI;\n }\n else if ((Latitude < -HALF_PI) || (Latitude > HALF_PI)) {\n /* Latitude out of range */\n //..reportError('geocent:lat out of range:' + Latitude);\n return null;\n }\n\n if (Longitude > Math.PI) {\n Longitude -= (2 * Math.PI);\n }\n Sin_Lat = Math.sin(Latitude);\n Cos_Lat = Math.cos(Latitude);\n Sin2_Lat = Sin_Lat * Sin_Lat;\n Rn = this.a / (Math.sqrt(1.0e0 - this.es * Sin2_Lat));\n X = (Rn + Height) * Cos_Lat * Math.cos(Longitude);\n Y = (Rn + Height) * Cos_Lat * Math.sin(Longitude);\n Z = ((Rn * (1 - this.es)) + Height) * Sin_Lat;\n\n p.x = X;\n p.y = Y;\n p.z = Z;\n return Error_Code;\n }, // cs_geodetic_to_geocentric()\n\n\n geocentric_to_geodetic: function(p) {\n /* local defintions and variables */\n /* end-criterium of loop, accuracy of sin(Latitude) */\n var genau = 1e-12;\n var genau2 = (genau * genau);\n var maxiter = 30;\n\n var P; /* distance between semi-minor axis and location */\n var RR; /* distance between center and location */\n var CT; /* sin of geocentric latitude */\n var ST; /* cos of geocentric latitude */\n var RX;\n var RK;\n var RN; /* Earth radius at location */\n var CPHI0; /* cos of start or old geodetic latitude in iterations */\n var SPHI0; /* sin of start or old geodetic latitude in iterations */\n var CPHI; /* cos of searched geodetic latitude */\n var SPHI; /* sin of searched geodetic latitude */\n var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n var At_Pole; /* indicates location is in polar region */\n var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0.0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n At_Pole = false;\n P = Math.sqrt(X * X + Y * Y);\n RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n /* special cases for latitude and longitude */\n if (P / this.a < genau) {\n\n /* special case, if P=0. (X=0., Y=0.) */\n At_Pole = true;\n Longitude = 0.0;\n\n /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n * of ellipsoid (=center of mass), Latitude becomes PI/2 */\n if (RR / this.a < genau) {\n Latitude = HALF_PI;\n Height = -this.b;\n return;\n }\n }\n else {\n /* ellipsoidal (geodetic) longitude\n * interval: -PI < Longitude <= +PI */\n Longitude = Math.atan2(Y, X);\n }\n\n /* --------------------------------------------------------------\n * Following iterative algorithm was developped by\n * \"Institut for Erdmessung\", University of Hannover, July 1988.\n * Internet: www.ife.uni-hannover.de\n * Iterative computation of CPHI,SPHI and Height.\n * Iteration of CPHI and SPHI to 10**-12 radian resp.\n * 2*10**-7 arcsec.\n * --------------------------------------------------------------\n */\n CT = Z / RR;\n ST = P / RR;\n RX = 1.0 / Math.sqrt(1.0 - this.es * (2.0 - this.es) * ST * ST);\n CPHI0 = ST * (1.0 - this.es) * RX;\n SPHI0 = CT * RX;\n iter = 0;\n\n /* loop to find sin(Latitude) resp. Latitude\n * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n do {\n iter++;\n RN = this.a / Math.sqrt(1.0 - this.es * SPHI0 * SPHI0);\n\n /* ellipsoidal (geodetic) height */\n Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - this.es * SPHI0 * SPHI0);\n\n RK = this.es * RN / (RN + Height);\n RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n CPHI = ST * (1.0 - RK) * RX;\n SPHI = CT * RX;\n SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n CPHI0 = CPHI;\n SPHI0 = SPHI;\n }\n while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n /* ellipsoidal (geodetic) latitude */\n Latitude = Math.atan(SPHI / Math.abs(CPHI));\n\n p.x = Longitude;\n p.y = Latitude;\n p.z = Height;\n return p;\n }, // cs_geocentric_to_geodetic()\n\n /** Convert_Geocentric_To_Geodetic\n * The method used here is derived from 'An Improved Algorithm for\n * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996\n */\n geocentric_to_geodetic_noniter: function(p) {\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n var W; /* distance from Z axis */\n var W2; /* square of distance from Z axis */\n var T0; /* initial estimate of vertical component */\n var T1; /* corrected estimate of vertical component */\n var S0; /* initial estimate of horizontal component */\n var S1; /* corrected estimate of horizontal component */\n var Sin_B0; /* Math.sin(B0), B0 is estimate of Bowring aux variable */\n var Sin3_B0; /* cube of Math.sin(B0) */\n var Cos_B0; /* Math.cos(B0) */\n var Sin_p1; /* Math.sin(phi1), phi1 is estimated latitude */\n var Cos_p1; /* Math.cos(phi1) */\n var Rn; /* Earth radius at location */\n var Sum; /* numerator of Math.cos(phi1) */\n var At_Pole; /* indicates location is in polar region */\n\n X = parseFloat(X); // cast from string to float\n Y = parseFloat(Y);\n Z = parseFloat(Z);\n\n At_Pole = false;\n if (X !== 0.0) {\n Longitude = Math.atan2(Y, X);\n }\n else {\n if (Y > 0) {\n Longitude = HALF_PI;\n }\n else if (Y < 0) {\n Longitude = -HALF_PI;\n }\n else {\n At_Pole = true;\n Longitude = 0.0;\n if (Z > 0.0) { /* north pole */\n Latitude = HALF_PI;\n }\n else if (Z < 0.0) { /* south pole */\n Latitude = -HALF_PI;\n }\n else { /* center of earth */\n Latitude = HALF_PI;\n Height = -this.b;\n return;\n }\n }\n }\n W2 = X * X + Y * Y;\n W = Math.sqrt(W2);\n T0 = Z * AD_C;\n S0 = Math.sqrt(T0 * T0 + W2);\n Sin_B0 = T0 / S0;\n Cos_B0 = W / S0;\n Sin3_B0 = Sin_B0 * Sin_B0 * Sin_B0;\n T1 = Z + this.b * this.ep2 * Sin3_B0;\n Sum = W - this.a * this.es * Cos_B0 * Cos_B0 * Cos_B0;\n S1 = Math.sqrt(T1 * T1 + Sum * Sum);\n Sin_p1 = T1 / S1;\n Cos_p1 = Sum / S1;\n Rn = this.a / Math.sqrt(1.0 - this.es * Sin_p1 * Sin_p1);\n if (Cos_p1 >= COS_67P5) {\n Height = W / Cos_p1 - Rn;\n }\n else if (Cos_p1 <= -COS_67P5) {\n Height = W / -Cos_p1 - Rn;\n }\n else {\n Height = Z / Sin_p1 + Rn * (this.es - 1.0);\n }\n if (At_Pole === false) {\n Latitude = Math.atan(Sin_p1 / Cos_p1);\n }\n\n p.x = Longitude;\n p.y = Latitude;\n p.z = Height;\n return p;\n }, // geocentric_to_geodetic_noniter()\n\n /****************************************************************/\n // pj_geocentic_to_wgs84( p )\n // p = point to transform in geocentric coordinates (x,y,z)\n geocentric_to_wgs84: function(p) {\n\n if (this.datum_type === PJD_3PARAM) {\n // if( x[io] === HUGE_VAL )\n // continue;\n p.x += this.datum_params[0];\n p.y += this.datum_params[1];\n p.z += this.datum_params[2];\n\n }\n else if (this.datum_type === PJD_7PARAM) {\n var Dx_BF = this.datum_params[0];\n var Dy_BF = this.datum_params[1];\n var Dz_BF = this.datum_params[2];\n var Rx_BF = this.datum_params[3];\n var Ry_BF = this.datum_params[4];\n var Rz_BF = this.datum_params[5];\n var M_BF = this.datum_params[6];\n // if( x[io] === HUGE_VAL )\n // continue;\n var x_out = M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF;\n var y_out = M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF;\n var z_out = M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF;\n p.x = x_out;\n p.y = y_out;\n p.z = z_out;\n }\n }, // cs_geocentric_to_wgs84\n\n /****************************************************************/\n // pj_geocentic_from_wgs84()\n // coordinate system definition,\n // point to transform in geocentric coordinates (x,y,z)\n geocentric_from_wgs84: function(p) {\n\n if (this.datum_type === PJD_3PARAM) {\n //if( x[io] === HUGE_VAL )\n // continue;\n p.x -= this.datum_params[0];\n p.y -= this.datum_params[1];\n p.z -= this.datum_params[2];\n\n }\n else if (this.datum_type === PJD_7PARAM) {\n var Dx_BF = this.datum_params[0];\n var Dy_BF = this.datum_params[1];\n var Dz_BF = this.datum_params[2];\n var Rx_BF = this.datum_params[3];\n var Ry_BF = this.datum_params[4];\n var Rz_BF = this.datum_params[5];\n var M_BF = this.datum_params[6];\n var x_tmp = (p.x - Dx_BF) / M_BF;\n var y_tmp = (p.y - Dy_BF) / M_BF;\n var z_tmp = (p.z - Dz_BF) / M_BF;\n //if( x[io] === HUGE_VAL )\n // continue;\n\n p.x = x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp;\n p.y = -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp;\n p.z = Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp;\n } //cs_geocentric_from_wgs84()\n }\n};\n\n/** point object, nothing fancy, just allows values to be\n passed back and forth by reference rather than by value.\n Other point classes may be used as long as they have\n x and y properties, which will get modified in the transform method.\n*/\nmodule.exports = datum;\n","var EPSLN = 1.0e-10;\nvar msfnz = require('../common/msfnz');\nvar tsfnz = require('../common/tsfnz');\nvar HALF_PI = Math.PI/2;\nvar sign = require('../common/sign');\nvar adjust_lon = require('../common/adjust_lon');\nvar phi2z = require('../common/phi2z');\nexports.init = function() {\n\n // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north\n //double c_lat; /* center latitude */\n //double c_lon; /* center longitude */\n //double lat1; /* first standard parallel */\n //double lat2; /* second standard parallel */\n //double r_maj; /* major axis */\n //double r_min; /* minor axis */\n //double false_east; /* x offset in meters */\n //double false_north; /* y offset in meters */\n\n if (!this.lat2) {\n this.lat2 = this.lat1;\n } //if lat2 is not defined\n if (!this.k0) {\n this.k0 = 1;\n }\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n\n var temp = this.b / this.a;\n this.e = Math.sqrt(1 - temp * temp);\n\n var sin1 = Math.sin(this.lat1);\n var cos1 = Math.cos(this.lat1);\n var ms1 = msfnz(this.e, sin1, cos1);\n var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n var sin2 = Math.sin(this.lat2);\n var cos2 = Math.cos(this.lat2);\n var ms2 = msfnz(this.e, sin2, cos2);\n var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n }\n else {\n this.ns = sin1;\n }\n if (isNaN(this.ns)) {\n this.ns = sin1;\n }\n this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n if (!this.title) {\n this.title = \"Lambert Conformal Conic\";\n }\n};\n\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexports.forward = function(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n // singular cases :\n if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n }\n\n var con = Math.abs(Math.abs(lat) - HALF_PI);\n var ts, rh1;\n if (con > EPSLN) {\n ts = tsfnz(this.e, lat, Math.sin(lat));\n rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n }\n else {\n con = lat * this.ns;\n if (con <= 0) {\n return null;\n }\n rh1 = 0;\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n return p;\n};\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexports.inverse = function(p) {\n\n var rh1, con, ts;\n var lat, lon;\n var x = (p.x - this.x0) / this.k0;\n var y = (this.rh - (p.y - this.y0) / this.k0);\n if (this.ns > 0) {\n rh1 = Math.sqrt(x * x + y * y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(x * x + y * y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2((con * x), (con * y));\n }\n if ((rh1 !== 0) || (this.ns > 0)) {\n con = 1 / this.ns;\n ts = Math.pow((rh1 / (this.a * this.f0)), con);\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n else {\n lat = -HALF_PI;\n }\n lon = adjust_lon(theta / this.ns + this.long0);\n\n p.x = lon;\n p.y = lat;\n return p;\n};\n\nexports.names = [\"Lambert Tangential Conformal Conic Projection\", \"Lambert_Conformal_Conic\", \"Lambert_Conformal_Conic_2SP\", \"lcc\"];\n","var adjust_lon = require('../common/adjust_lon');\nvar EPSLN = 1.0e-10;\nvar asinz = require('../common/asinz');\n\n/*\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n */\nexports.init = function() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n // Approximation for projecting points to the horizon (infinity)\n this.infinity_dist = 1000 * this.a;\n this.rc = 1;\n};\n\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexports.forward = function(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g;\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n }\n else {\n\n // Point is in the opposing hemisphere and is unprojectable\n // We still need to return a reasonable point, so we project \n // to infinity, on a bearing \n // equivalent to the northern hemisphere equivalent\n // This is a reasonable approximation for short shapes and lines that \n // straddle the horizon.\n\n x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n }\n p.x = x;\n p.y = y;\n return p;\n};\n\n\nexports.inverse = function(p) {\n var rh; /* Rho */\n var sinc, cosc;\n var c;\n var lon, lat;\n\n /* Inverse equations\n -----------------*/\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n\n if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n c = Math.atan2(rh, this.rc);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n\n lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n lon = adjust_lon(this.long0 + lon);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"gnom\"];\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nmodule.exports = function(es) {\n var en = [];\n en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n var t = es * es;\n en[2] = t * (C44 - es * (C46 + es * C48));\n t *= es;\n en[3] = t * (C66 - es * C68);\n en[4] = t * es * C88;\n return en;\n};","var HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar sign = require('../common/sign');\nvar msfnz = require('../common/msfnz');\nvar tsfnz = require('../common/tsfnz');\nvar phi2z = require('../common/phi2z');\nvar adjust_lon = require('../common/adjust_lon');\nexports.ssfn_ = function(phit, sinphi, eccen) {\n sinphi *= eccen;\n return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n};\n\nexports.init = function() {\n this.coslat0 = Math.cos(this.lat0);\n this.sinlat0 = Math.sin(this.lat0);\n if (this.sphere) {\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n }\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (this.lat0 > 0) {\n //North pole\n //trace('stere:north pole');\n this.con = 1;\n }\n else {\n //South pole\n //trace('stere:south pole');\n this.con = -1;\n }\n }\n this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n }\n this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n this.cosX0 = Math.cos(this.X0);\n this.sinX0 = Math.sin(this.X0);\n }\n};\n\n// Stereographic forward equations--mapping lat,long to x,y\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var sinlat = Math.sin(lat);\n var coslat = Math.cos(lat);\n var A, X, sinX, cosX, ts, rh;\n var dlon = adjust_lon(lon - this.long0);\n\n if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n //case of the origine point\n //trace('stere:this is the origin point');\n p.x = NaN;\n p.y = NaN;\n return p;\n }\n if (this.sphere) {\n //trace('stere:sphere case');\n A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n return p;\n }\n else {\n X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n cosX = Math.cos(X);\n sinX = Math.sin(X);\n if (Math.abs(this.coslat0) <= EPSLN) {\n ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n rh = 2 * this.a * this.k0 * ts / this.cons;\n p.x = this.x0 + rh * Math.sin(lon - this.long0);\n p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n //trace(p.toString());\n return p;\n }\n else if (Math.abs(this.sinlat0) < EPSLN) {\n //Eq\n //trace('stere:equateur');\n A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n p.y = A * sinX;\n }\n else {\n //other case\n //trace('stere:normal case');\n A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n }\n p.x = A * cosX * Math.sin(dlon) + this.x0;\n }\n //trace(p.toString());\n return p;\n};\n\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat, ts, ce, Chi;\n var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (this.sphere) {\n var c = 2 * Math.atan(rh / (0.5 * this.a * this.k0));\n lon = this.long0;\n lat = this.lat0;\n if (rh <= EPSLN) {\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n if (Math.abs(this.coslat0) < EPSLN) {\n if (this.lat0 > 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n }\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (rh <= EPSLN) {\n lat = this.lat0;\n lon = this.long0;\n p.x = lon;\n p.y = lat;\n //trace(p.toString());\n return p;\n }\n p.x *= this.con;\n p.y *= this.con;\n ts = rh * this.cons / (2 * this.a * this.k0);\n lat = this.con * phi2z(this.e, ts);\n lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n lon = this.long0;\n if (rh <= EPSLN) {\n Chi = this.X0;\n }\n else {\n Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n }\n lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n }\n }\n p.x = lon;\n p.y = lat;\n\n //trace(p.toString());\n return p;\n\n};\nexports.names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\n","var e0fn = require('../common/e0fn');\nvar e1fn = require('../common/e1fn');\nvar e2fn = require('../common/e2fn');\nvar e3fn = require('../common/e3fn');\nvar adjust_lon = require('../common/adjust_lon');\nvar adjust_lat = require('../common/adjust_lat');\nvar mlfn = require('../common/mlfn');\nvar EPSLN = 1.0e-10;\nvar gN = require('../common/gN');\nvar MAX_ITER = 20;\nexports.init = function() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n};\n\n\n/* Polyconic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y, el;\n var dlon = adjust_lon(lon - this.long0);\n el = dlon * Math.sin(lat);\n if (this.sphere) {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.a * this.lat0;\n }\n else {\n x = this.a * Math.sin(el) / Math.tan(lat);\n y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n }\n }\n else {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.ml0;\n }\n else {\n var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n x = nl * Math.sin(el);\n y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n }\n\n }\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n};\n\n\n/* Inverse equations\n -----------------*/\nexports.inverse = function(p) {\n var lon, lat, x, y, i;\n var al, bl;\n var phi, dphi;\n x = p.x - this.x0;\n y = p.y - this.y0;\n\n if (this.sphere) {\n if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n lon = adjust_lon(x / this.a + this.long0);\n lat = 0;\n }\n else {\n al = this.lat0 + y / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var tanphi;\n for (i = MAX_ITER; i; --i) {\n tanphi = Math.tan(phi);\n dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n phi += dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n }\n }\n else {\n if (Math.abs(y + this.ml0) <= EPSLN) {\n lat = 0;\n lon = adjust_lon(this.long0 + x / this.a);\n }\n else {\n\n al = (this.ml0 + y) / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var cl, mln, mlnp, ma;\n var con;\n for (i = MAX_ITER; i; --i) {\n con = this.e * Math.sin(phi);\n cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n ma = mln / this.a;\n dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n phi -= dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n\n //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Polyconic\", \"poly\"];","var HALF_PI = Math.PI/2;\nmodule.exports = function(eccent, ts) {\n var eccnth = 0.5 * eccent;\n var con, dphi;\n var phi = HALF_PI - 2 * Math.atan(ts);\n for (var i = 0; i <= 15; i++) {\n con = eccent * Math.sin(phi);\n dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n //console.log(\"phi2z has NoConvergence\");\n return -9999;\n};","var globals = require('./global');\nvar parseProj = require('./projString');\nvar wkt = require('./wkt');\n\nfunction defs(name) {\n /*global console*/\n var that = this;\n if (arguments.length === 2) {\n var def = arguments[1];\n if (typeof def === 'string') {\n if (def.charAt(0) === '+') {\n defs[name] = parseProj(arguments[1]);\n }\n else {\n defs[name] = wkt(arguments[1]);\n }\n } else {\n defs[name] = def;\n }\n }\n else if (arguments.length === 1) {\n if (Array.isArray(name)) {\n return name.map(function(v) {\n if (Array.isArray(v)) {\n defs.apply(that, v);\n }\n else {\n defs(v);\n }\n });\n }\n else if (typeof name === 'string') {\n if (name in defs) {\n return defs[name];\n }\n }\n else if ('EPSG' in name) {\n defs['EPSG:' + name.EPSG] = name;\n }\n else if ('ESRI' in name) {\n defs['ESRI:' + name.ESRI] = name;\n }\n else if ('IAU2000' in name) {\n defs['IAU2000:' + name.IAU2000] = name;\n }\n else {\n console.log(name);\n }\n return;\n }\n\n\n}\nglobals(defs);\nmodule.exports = defs;\n","module.exports = function(crs, denorm, point) {\n var xin = point.x,\n yin = point.y,\n zin = point.z || 0.0;\n var v, t, i;\n for (i = 0; i < 3; i++) {\n if (denorm && i === 2 && point.z === undefined) {\n continue;\n }\n if (i === 0) {\n v = xin;\n t = 'x';\n }\n else if (i === 1) {\n v = yin;\n t = 'y';\n }\n else {\n v = zin;\n t = 'z';\n }\n switch (crs.axis[i]) {\n case 'e':\n point[t] = v;\n break;\n case 'w':\n point[t] = -v;\n break;\n case 'n':\n point[t] = v;\n break;\n case 's':\n point[t] = -v;\n break;\n case 'u':\n if (point[t] !== undefined) {\n point.z = v;\n }\n break;\n case 'd':\n if (point[t] !== undefined) {\n point.z = -v;\n }\n break;\n default:\n //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n return null;\n }\n }\n return point;\n};\n","var adjust_lon = require('../common/adjust_lon');\nvar adjust_lat = require('../common/adjust_lat');\nvar pj_enfn = require('../common/pj_enfn');\nvar MAX_ITER = 20;\nvar pj_mlfn = require('../common/pj_mlfn');\nvar pj_inv_mlfn = require('../common/pj_inv_mlfn');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar asinz = require('../common/asinz');\nexports.init = function() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n\n\n if (!this.sphere) {\n this.en = pj_enfn(this.es);\n }\n else {\n this.n = 1;\n this.m = 0;\n this.es = 0;\n this.C_y = Math.sqrt((this.m + 1) / this.n);\n this.C_x = this.C_y / (this.m + 1);\n }\n\n};\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n -----------------------------------------------------*/\nexports.forward = function(p) {\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n lon = adjust_lon(lon - this.long0);\n\n if (this.sphere) {\n if (!this.m) {\n lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n }\n else {\n var k = this.n * Math.sin(lat);\n for (var i = MAX_ITER; i; --i) {\n var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n lat -= V;\n if (Math.abs(V) < EPSLN) {\n break;\n }\n }\n }\n x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n y = this.a * this.C_y * lat;\n\n }\n else {\n\n var s = Math.sin(lat);\n var c = Math.cos(lat);\n y = this.a * pj_mlfn(lat, s, c, this.en);\n x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n }\n\n p.x = x;\n p.y = y;\n return p;\n};\n\nexports.inverse = function(p) {\n var lat, temp, lon, s;\n\n p.x -= this.x0;\n lon = p.x / this.a;\n p.y -= this.y0;\n lat = p.y / this.a;\n\n if (this.sphere) {\n lat /= this.C_y;\n lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n if (this.m) {\n lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n }\n else if (this.n !== 1) {\n lat = asinz(Math.sin(lat) / this.n);\n }\n lon = adjust_lon(lon + this.long0);\n lat = adjust_lat(lat);\n }\n else {\n lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n s = Math.abs(lat);\n if (s < HALF_PI) {\n s = Math.sin(lat);\n temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n lon = adjust_lon(temp);\n }\n else if ((s - EPSLN) < HALF_PI) {\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Sinusoidal\", \"sinu\"];","var adjust_lon = require('../common/adjust_lon');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar asinz = require('../common/asinz');\n/* Initialize the Van Der Grinten projection\n ----------------------------------------*/\nexports.init = function() {\n //this.R = 6370997; //Radius of earth\n this.R = this.a;\n};\n\nexports.forward = function(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x, y;\n\n if (Math.abs(lat) <= EPSLN) {\n x = this.x0 + this.R * dlon;\n y = this.y0;\n }\n var theta = asinz(2 * Math.abs(lat / Math.PI));\n if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n x = this.x0;\n if (lat >= 0) {\n y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n }\n else {\n y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n }\n // return(OK);\n }\n var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n var asq = al * al;\n var sinth = Math.sin(theta);\n var costh = Math.cos(theta);\n\n var g = costh / (sinth + costh - 1);\n var gsq = g * g;\n var m = g * (2 / sinth - 1);\n var msq = m * m;\n var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n if (dlon < 0) {\n con = -con;\n }\n x = this.x0 + con;\n //con = Math.abs(con / (Math.PI * this.R));\n var q = asq + g;\n con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n if (lat >= 0) {\n //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 + con;\n }\n else {\n //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 - con;\n }\n p.x = x;\n p.y = y;\n return p;\n};\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n ---------------------------------------------------------*/\nexports.inverse = function(p) {\n var lon, lat;\n var xx, yy, xys, c1, c2, c3;\n var a1;\n var m1;\n var con;\n var th1;\n var d;\n\n /* inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n con = Math.PI * this.R;\n xx = p.x / con;\n yy = p.y / con;\n xys = xx * xx + yy * yy;\n c1 = -Math.abs(yy) * (1 + xys);\n c2 = c1 - 2 * yy * yy + xx * xx;\n c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n m1 = 2 * Math.sqrt(-a1 / 3);\n con = ((3 * d) / a1) / m1;\n if (Math.abs(con) > 1) {\n if (con >= 0) {\n con = 1;\n }\n else {\n con = -1;\n }\n }\n th1 = Math.acos(con) / 3;\n if (p.y >= 0) {\n lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n else {\n lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n\n if (Math.abs(xx) < EPSLN) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];","var proj = require('./Proj');\nvar transform = require('./transform');\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords) {\n var transformedArray;\n if (Array.isArray(coords)) {\n transformedArray = transform(from, to, coords);\n if (coords.length === 3) {\n return [transformedArray.x, transformedArray.y, transformedArray.z];\n }\n else {\n return [transformedArray.x, transformedArray.y];\n }\n }\n else {\n return transform(from, to, coords);\n }\n}\n\nfunction checkProj(item) {\n if (item instanceof proj) {\n return item;\n }\n if (item.oProj) {\n return item.oProj;\n }\n return proj(item);\n}\nfunction proj4(fromProj, toProj, coord) {\n fromProj = checkProj(fromProj);\n var single = false;\n var obj;\n if (typeof toProj === 'undefined') {\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n coord = toProj;\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n toProj = checkProj(toProj);\n if (coord) {\n return transformer(fromProj, toProj, coord);\n }\n else {\n obj = {\n forward: function(coords) {\n return transformer(fromProj, toProj, coords);\n },\n inverse: function(coords) {\n return transformer(toProj, fromProj, coords);\n }\n };\n if (single) {\n obj.oProj = toProj;\n }\n return obj;\n }\n}\nmodule.exports = proj4;","module.exports = function(eccent, sinphi) {\n var con;\n if (eccent > 1.0e-7) {\n con = eccent * sinphi;\n return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n }\n else {\n return (2 * sinphi);\n }\n};","exports.MERIT = {\n a: 6378137.0,\n rf: 298.257,\n ellipseName: \"MERIT 1983\"\n};\nexports.SGS85 = {\n a: 6378136.0,\n rf: 298.257,\n ellipseName: \"Soviet Geodetic System 85\"\n};\nexports.GRS80 = {\n a: 6378137.0,\n rf: 298.257222101,\n ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\nexports.IAU76 = {\n a: 6378140.0,\n rf: 298.257,\n ellipseName: \"IAU 1976\"\n};\nexports.airy = {\n a: 6377563.396,\n b: 6356256.910,\n ellipseName: \"Airy 1830\"\n};\nexports.APL4 = {\n a: 6378137,\n rf: 298.25,\n ellipseName: \"Appl. Physics. 1965\"\n};\nexports.NWL9D = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"Naval Weapons Lab., 1965\"\n};\nexports.mod_airy = {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: \"Modified Airy\"\n};\nexports.andrae = {\n a: 6377104.43,\n rf: 300.0,\n ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\nexports.aust_SA = {\n a: 6378160.0,\n rf: 298.25,\n ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\nexports.GRS67 = {\n a: 6378160.0,\n rf: 298.2471674270,\n ellipseName: \"GRS 67(IUGG 1967)\"\n};\nexports.bessel = {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841\"\n};\nexports.bess_nam = {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841 (Namibia)\"\n};\nexports.clrk66 = {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: \"Clarke 1866\"\n};\nexports.clrk80 = {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: \"Clarke 1880 mod.\"\n};\nexports.clrk58 = {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: \"Clarke 1858\"\n};\nexports.CPM = {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\nexports.delmbr = {\n a: 6376428.0,\n rf: 311.5,\n ellipseName: \"Delambre 1810 (Belgium)\"\n};\nexports.engelis = {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: \"Engelis 1985\"\n};\nexports.evrst30 = {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: \"Everest 1830\"\n};\nexports.evrst48 = {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: \"Everest 1948\"\n};\nexports.evrst56 = {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: \"Everest 1956\"\n};\nexports.evrst69 = {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: \"Everest 1969\"\n};\nexports.evrstSS = {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: \"Everest (Sabah & Sarawak)\"\n};\nexports.fschr60 = {\n a: 6378166.0,\n rf: 298.3,\n ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\nexports.fschr60m = {\n a: 6378155.0,\n rf: 298.3,\n ellipseName: \"Fischer 1960\"\n};\nexports.fschr68 = {\n a: 6378150.0,\n rf: 298.3,\n ellipseName: \"Fischer 1968\"\n};\nexports.helmert = {\n a: 6378200.0,\n rf: 298.3,\n ellipseName: \"Helmert 1906\"\n};\nexports.hough = {\n a: 6378270.0,\n rf: 297.0,\n ellipseName: \"Hough\"\n};\nexports.intl = {\n a: 6378388.0,\n rf: 297.0,\n ellipseName: \"International 1909 (Hayford)\"\n};\nexports.kaula = {\n a: 6378163.0,\n rf: 298.24,\n ellipseName: \"Kaula 1961\"\n};\nexports.lerch = {\n a: 6378139.0,\n rf: 298.257,\n ellipseName: \"Lerch 1979\"\n};\nexports.mprts = {\n a: 6397300.0,\n rf: 191.0,\n ellipseName: \"Maupertius 1738\"\n};\nexports.new_intl = {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: \"New International 1967\"\n};\nexports.plessis = {\n a: 6376523.0,\n rf: 6355863.0,\n ellipseName: \"Plessis 1817 (France)\"\n};\nexports.krass = {\n a: 6378245.0,\n rf: 298.3,\n ellipseName: \"Krassovsky, 1942\"\n};\nexports.SEasia = {\n a: 6378155.0,\n b: 6356773.3205,\n ellipseName: \"Southeast Asia\"\n};\nexports.walbeck = {\n a: 6376896.0,\n b: 6355834.8467,\n ellipseName: \"Walbeck\"\n};\nexports.WGS60 = {\n a: 6378165.0,\n rf: 298.3,\n ellipseName: \"WGS 60\"\n};\nexports.WGS66 = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"WGS 66\"\n};\nexports.WGS7 = {\n a: 6378135.0,\n rf: 298.26,\n ellipseName: \"WGS 72\"\n};\nexports.WGS84 = {\n a: 6378137.0,\n rf: 298.257223563,\n ellipseName: \"WGS 84\"\n};\nexports.sphere = {\n a: 6370997.0,\n b: 6370997.0,\n ellipseName: \"Normal Sphere (r=6370997)\"\n};","var FORTPI = Math.PI/4;\nvar srat = require('../common/srat');\nvar HALF_PI = Math.PI/2;\nvar MAX_ITER = 20;\nexports.init = function() {\n var sphi = Math.sin(this.lat0);\n var cphi = Math.cos(this.lat0);\n cphi *= cphi;\n this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n this.phic0 = Math.asin(sphi / this.C);\n this.ratexp = 0.5 * this.C * this.e;\n this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n};\n\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n\n p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n p.x = this.C * lon;\n return p;\n};\n\nexports.inverse = function(p) {\n var DEL_TOL = 1e-14;\n var lon = p.x / this.C;\n var lat = p.y;\n var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n for (var i = MAX_ITER; i > 0; --i) {\n lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n if (Math.abs(lat - p.y) < DEL_TOL) {\n break;\n }\n p.y = lat;\n }\n /* convergence failed */\n if (!i) {\n return null;\n }\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"gauss\"];\n","var e0fn = require('../common/e0fn');\nvar e1fn = require('../common/e1fn');\nvar e2fn = require('../common/e2fn');\nvar e3fn = require('../common/e3fn');\nvar mlfn = require('../common/mlfn');\nvar adjust_lon = require('../common/adjust_lon');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar sign = require('../common/sign');\nvar asinz = require('../common/asinz');\n\nexports.init = function() {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n};\n\n/**\n Transverse Mercator Forward - long/lat to x/y\n long/lat in radians\n */\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var con;\n var x, y;\n var sin_phi = Math.sin(lat);\n var cos_phi = Math.cos(lat);\n\n if (this.sphere) {\n var b = cos_phi * Math.sin(delta_lon);\n if ((Math.abs(Math.abs(b) - 1)) < 0.0000000001) {\n return (93);\n }\n else {\n x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b));\n con = Math.acos(cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - b * b));\n if (lat < 0) {\n con = -con;\n }\n y = this.a * this.k0 * (con - this.lat0);\n }\n }\n else {\n var al = cos_phi * delta_lon;\n var als = Math.pow(al, 2);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var tq = Math.tan(lat);\n var t = Math.pow(tq, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var n = this.a / Math.sqrt(con);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n\n x = this.k0 * n * al * (1 + als / 6 * (1 - t + c + als / 20 * (5 - 18 * t + Math.pow(t, 2) + 72 * c - 58 * this.ep2))) + this.x0;\n y = this.k0 * (ml - this.ml0 + n * tq * (als * (0.5 + als / 24 * (5 - t + 9 * c + 4 * Math.pow(c, 2) + als / 30 * (61 - 58 * t + Math.pow(t, 2) + 600 * c - 330 * this.ep2))))) + this.y0;\n\n }\n p.x = x;\n p.y = y;\n return p;\n};\n\n/**\n Transverse Mercator Inverse - x/y to long/lat\n */\nexports.inverse = function(p) {\n var con, phi;\n var delta_phi;\n var i;\n var max_iter = 6;\n var lat, lon;\n\n if (this.sphere) {\n var f = Math.exp(p.x / (this.a * this.k0));\n var g = 0.5 * (f - 1 / f);\n var temp = this.lat0 + p.y / (this.a * this.k0);\n var h = Math.cos(temp);\n con = Math.sqrt((1 - h * h) / (1 + g * g));\n lat = asinz(con);\n if (temp < 0) {\n lat = -lat;\n }\n if ((g === 0) && (h === 0)) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0);\n }\n }\n else { // ellipsoidal form\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n\n con = (this.ml0 + y / this.k0) / this.a;\n phi = con;\n for (i = 0; true; i++) {\n delta_phi = ((con + this.e1 * Math.sin(2 * phi) - this.e2 * Math.sin(4 * phi) + this.e3 * Math.sin(6 * phi)) / this.e0) - phi;\n phi += delta_phi;\n if (Math.abs(delta_phi) <= EPSLN) {\n break;\n }\n if (i >= max_iter) {\n return (95);\n }\n } // for()\n if (Math.abs(phi) < HALF_PI) {\n var sin_phi = Math.sin(phi);\n var cos_phi = Math.cos(phi);\n var tan_phi = Math.tan(phi);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var t = Math.pow(tan_phi, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var n = this.a / Math.sqrt(con);\n var r = n * (1 - this.es) / con;\n var d = x / (n * this.k0);\n var ds = Math.pow(d, 2);\n lat = phi - (n * tan_phi * ds / r) * (0.5 - ds / 24 * (5 + 3 * t + 10 * c - 4 * cs - 9 * this.ep2 - ds / 30 * (61 + 90 * t + 298 * c + 45 * ts - 252 * this.ep2 - 3 * cs)));\n lon = adjust_lon(this.long0 + (d * (1 - ds / 6 * (1 + 2 * t + c - ds / 20 * (5 - 2 * c + 28 * t - 3 * cs + 8 * this.ep2 + 24 * ts))) / cos_phi));\n }\n else {\n lat = HALF_PI * sign(y);\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\n","exports.init = function() {\n //no-op for longlat\n};\n\nfunction identity(pt) {\n return pt;\n}\nexports.forward = identity;\nexports.inverse = identity;\nexports.names = [\"longlat\", \"identity\"];\n","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\n\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n * WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n * 100 m, 4 for 1000 m or 5 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexports.forward = function(ll, accuracy) {\n accuracy = accuracy || 5; // default accuracy 1m\n return encode(LLtoUTM({\n lat: ll[1],\n lon: ll[0]\n }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n * (longitude) and top (latitude) values in WGS84, representing the\n * bounding box for the provided MGRS reference.\n */\nexports.inverse = function(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexports.toPoint = function(mgrsStr) {\n var llbbox = exports.inverse(mgrsStr);\n return [(llbbox[2] + llbbox[0]) / 2, (llbbox[3] + llbbox[1]) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n * representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n * northing, zoneNumber and zoneLetter properties, and an optional\n * accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n var Lat = ll.lat;\n var Long = ll.lon;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var k0 = 0.9996;\n var LongOrigin;\n var eccPrimeSquared;\n var N, T, C, A, M;\n var LatRad = degToRad(Lat);\n var LongRad = degToRad(Long);\n var LongOriginRad;\n var ZoneNumber;\n // (int)\n ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n //Make sure the longitude 180.00 is in Zone 60\n if (Long === 180) {\n ZoneNumber = 60;\n }\n\n // Special zone for Norway\n if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n ZoneNumber = 32;\n }\n\n // Special zones for Svalbard\n if (Lat >= 72.0 && Lat < 84.0) {\n if (Long >= 0.0 && Long < 9.0) {\n ZoneNumber = 31;\n }\n else if (Long >= 9.0 && Long < 21.0) {\n ZoneNumber = 33;\n }\n else if (Long >= 21.0 && Long < 33.0) {\n ZoneNumber = 35;\n }\n else if (Long >= 33.0 && Long < 42.0) {\n ZoneNumber = 37;\n }\n }\n\n LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n // in middle of\n // zone\n LongOriginRad = degToRad(LongOrigin);\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n T = Math.tan(LatRad) * Math.tan(LatRad);\n C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n if (Lat < 0.0) {\n UTMNorthing += 10000000.0; //10000000 meter offset for\n // southern hemisphere\n }\n\n return {\n northing: Math.round(UTMNorthing),\n easting: Math.round(UTMEasting),\n zoneNumber: ZoneNumber,\n zoneLetter: getLetterDesignator(Lat)\n };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n * and zoneLetter properties. If an optional accuracy property is\n * provided (in meters), a bounding box will be returned instead of\n * latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n * (if no accuracy was provided), or top, right, bottom and left values\n * for the bounding box calculated according to the provided accuracy.\n * Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n var UTMNorthing = utm.northing;\n var UTMEasting = utm.easting;\n var zoneLetter = utm.zoneLetter;\n var zoneNumber = utm.zoneNumber;\n // check the ZoneNummber is valid\n if (zoneNumber < 0 || zoneNumber > 60) {\n return null;\n }\n\n var k0 = 0.9996;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var eccPrimeSquared;\n var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n var N1, T1, C1, R1, D, M;\n var LongOrigin;\n var mu, phi1Rad;\n\n // remove 500,000 meter offset for longitude\n var x = UTMEasting - 500000.0;\n var y = UTMNorthing;\n\n // We must know somehow if we are in the Northern or Southern\n // hemisphere, this is the only time we use the letter So even\n // if the Zone letter isn't exactly correct it should indicate\n // the hemisphere correctly\n if (zoneLetter < 'N') {\n y -= 10000000.0; // remove 10,000,000 meter offset used\n // for southern hemisphere\n }\n\n // There are 60 zones with zone 1 being at West -180 to -174\n LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n // in middle of\n // zone\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n M = y / k0;\n mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n D = x / (N1 * k0);\n\n var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n lat = radToDeg(lat);\n\n var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n lon = LongOrigin + radToDeg(lon);\n\n var result;\n if (utm.accuracy) {\n var topRight = UTMtoLL({\n northing: utm.northing + utm.accuracy,\n easting: utm.easting + utm.accuracy,\n zoneLetter: utm.zoneLetter,\n zoneNumber: utm.zoneNumber\n });\n result = {\n top: topRight.lat,\n right: topRight.lon,\n bottom: lat,\n left: lon\n };\n }\n else {\n result = {\n lat: lat,\n lon: lon\n };\n }\n return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n * for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n //This is here as an error flag to show that the Latitude is\n //outside MGRS limits\n var LetterDesignator = 'Z';\n\n if ((84 >= lat) && (lat >= 72)) {\n LetterDesignator = 'X';\n }\n else if ((72 > lat) && (lat >= 64)) {\n LetterDesignator = 'W';\n }\n else if ((64 > lat) && (lat >= 56)) {\n LetterDesignator = 'V';\n }\n else if ((56 > lat) && (lat >= 48)) {\n LetterDesignator = 'U';\n }\n else if ((48 > lat) && (lat >= 40)) {\n LetterDesignator = 'T';\n }\n else if ((40 > lat) && (lat >= 32)) {\n LetterDesignator = 'S';\n }\n else if ((32 > lat) && (lat >= 24)) {\n LetterDesignator = 'R';\n }\n else if ((24 > lat) && (lat >= 16)) {\n LetterDesignator = 'Q';\n }\n else if ((16 > lat) && (lat >= 8)) {\n LetterDesignator = 'P';\n }\n else if ((8 > lat) && (lat >= 0)) {\n LetterDesignator = 'N';\n }\n else if ((0 > lat) && (lat >= -8)) {\n LetterDesignator = 'M';\n }\n else if ((-8 > lat) && (lat >= -16)) {\n LetterDesignator = 'L';\n }\n else if ((-16 > lat) && (lat >= -24)) {\n LetterDesignator = 'K';\n }\n else if ((-24 > lat) && (lat >= -32)) {\n LetterDesignator = 'J';\n }\n else if ((-32 > lat) && (lat >= -40)) {\n LetterDesignator = 'H';\n }\n else if ((-40 > lat) && (lat >= -48)) {\n LetterDesignator = 'G';\n }\n else if ((-48 > lat) && (lat >= -56)) {\n LetterDesignator = 'F';\n }\n else if ((-56 > lat) && (lat >= -64)) {\n LetterDesignator = 'E';\n }\n else if ((-64 > lat) && (lat >= -72)) {\n LetterDesignator = 'D';\n }\n else if ((-72 > lat) && (lat >= -80)) {\n LetterDesignator = 'C';\n }\n return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n * zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n var seasting = \"\" + utm.easting,\n snorthing = \"\" + utm.northing;\n\n return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n var setParm = get100kSetForZone(zoneNumber);\n var setColumn = Math.floor(easting / 100000);\n var setRow = Math.floor(northing / 100000) % 20;\n return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n var setParm = i % NUM_100K_SETS;\n if (setParm === 0) {\n setParm = NUM_100K_SETS;\n }\n\n return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n * 100k set spreadsheet, created from the UTM easting.\n * Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM northing value. Values\n * are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM zone. Values are from\n * 1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n // colOrigin and rowOrigin are the letters at the origin of the set\n var index = parm - 1;\n var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n // colInt and rowInt are the letters to build to return\n var colInt = colOrigin + column - 1;\n var rowInt = rowOrigin + row;\n var rollover = false;\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n rollover = true;\n }\n\n if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n colInt++;\n }\n\n if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n colInt++;\n\n if (colInt === I) {\n colInt++;\n }\n }\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n rollover = true;\n }\n else {\n rollover = false;\n }\n\n if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n rowInt++;\n }\n\n if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n rowInt++;\n\n if (rowInt === I) {\n rowInt++;\n }\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n }\n\n var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n * zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n if (mgrsString && mgrsString.length === 0) {\n throw (\"MGRSPoint coverting from nothing\");\n }\n\n var length = mgrsString.length;\n\n var hunK = null;\n var sb = \"\";\n var testChar;\n var i = 0;\n\n // get Zone number\n while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n if (i >= 2) {\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n sb += testChar;\n i++;\n }\n\n var zoneNumber = parseInt(sb, 10);\n\n if (i === 0 || i + 3 > length) {\n // A good MGRS string has to be 4-5 digits long,\n // ##AAA/#AAA at least.\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n\n var zoneLetter = mgrsString.charAt(i++);\n\n // Should we check the zone letter here? Why not.\n if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n }\n\n hunK = mgrsString.substring(i, i += 2);\n\n var set = get100kSetForZone(zoneNumber);\n\n var east100k = getEastingFromChar(hunK.charAt(0), set);\n var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n // We have a bug where the northing may be 2000000 too low.\n // How\n // do we know when to roll over?\n\n while (north100k < getMinNorthing(zoneLetter)) {\n north100k += 2000000;\n }\n\n // calculate the char index for easting/northing separator\n var remainder = length - i;\n\n if (remainder % 2 !== 0) {\n throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n }\n\n var sep = remainder / 2;\n\n var sepEasting = 0.0;\n var sepNorthing = 0.0;\n var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n if (sep > 0) {\n accuracyBonus = 100000.0 / Math.pow(10, sep);\n sepEastingString = mgrsString.substring(i, i + sep);\n sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n sepNorthingString = mgrsString.substring(i + sep);\n sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n }\n\n easting = sepEasting + east100k;\n northing = sepNorthing + north100k;\n\n return {\n easting: easting,\n northing: northing,\n zoneLetter: zoneLetter,\n zoneNumber: zoneNumber,\n accuracy: accuracyBonus\n };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n // colOrigin is the letter at the origin of the set for the\n // column\n var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n var eastingValue = 100000.0;\n var rewindMarker = false;\n\n while (curCol !== e.charCodeAt(0)) {\n curCol++;\n if (curCol === I) {\n curCol++;\n }\n if (curCol === O) {\n curCol++;\n }\n if (curCol > Z) {\n if (rewindMarker) {\n throw (\"Bad character: \" + e);\n }\n curCol = A;\n rewindMarker = true;\n }\n eastingValue += 100000.0;\n }\n\n return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n * UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n if (n > 'V') {\n throw (\"MGRSPoint given invalid Northing \" + n);\n }\n\n // rowOrigin is the letter at the origin of the set for the\n // column\n var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n var northingValue = 0.0;\n var rewindMarker = false;\n\n while (curRow !== n.charCodeAt(0)) {\n curRow++;\n if (curRow === I) {\n curRow++;\n }\n if (curRow === O) {\n curRow++;\n }\n // fixing a bug making whole application hang in this loop\n // when 'n' is a wrong character\n if (curRow > V) {\n if (rewindMarker) { // making sure that this loop ends\n throw (\"Bad character: \" + n);\n }\n curRow = A;\n rewindMarker = true;\n }\n northingValue += 100000.0;\n }\n\n return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n var northing;\n switch (zoneLetter) {\n case 'C':\n northing = 1100000.0;\n break;\n case 'D':\n northing = 2000000.0;\n break;\n case 'E':\n northing = 2800000.0;\n break;\n case 'F':\n northing = 3700000.0;\n break;\n case 'G':\n northing = 4600000.0;\n break;\n case 'H':\n northing = 5500000.0;\n break;\n case 'J':\n northing = 6400000.0;\n break;\n case 'K':\n northing = 7300000.0;\n break;\n case 'L':\n northing = 8200000.0;\n break;\n case 'M':\n northing = 9100000.0;\n break;\n case 'N':\n northing = 0.0;\n break;\n case 'P':\n northing = 800000.0;\n break;\n case 'Q':\n northing = 1700000.0;\n break;\n case 'R':\n northing = 2600000.0;\n break;\n case 'S':\n northing = 3500000.0;\n break;\n case 'T':\n northing = 4400000.0;\n break;\n case 'U':\n northing = 5300000.0;\n break;\n case 'V':\n northing = 6200000.0;\n break;\n case 'W':\n northing = 7000000.0;\n break;\n case 'X':\n northing = 7900000.0;\n break;\n default:\n northing = -1.0;\n }\n if (northing >= 0.0) {\n return northing;\n }\n else {\n throw (\"Invalid zone letter: \" + zoneLetter);\n }\n\n}\n","var D2R = 0.01745329251994329577;\nvar PrimeMeridian = require('./constants/PrimeMeridian');\nvar units = require('./constants/units');\n\nmodule.exports = function(defData) {\n var self = {};\n var paramObj = {};\n defData.split(\"+\").map(function(v) {\n return v.trim();\n }).filter(function(a) {\n return a;\n }).forEach(function(a) {\n var split = a.split(\"=\");\n split.push(true);\n paramObj[split[0].toLowerCase()] = split[1];\n });\n var paramName, paramVal, paramOutname;\n var params = {\n proj: 'projName',\n datum: 'datumCode',\n rf: function(v) {\n self.rf = parseFloat(v);\n },\n lat_0: function(v) {\n self.lat0 = v * D2R;\n },\n lat_1: function(v) {\n self.lat1 = v * D2R;\n },\n lat_2: function(v) {\n self.lat2 = v * D2R;\n },\n lat_ts: function(v) {\n self.lat_ts = v * D2R;\n },\n lon_0: function(v) {\n self.long0 = v * D2R;\n },\n lon_1: function(v) {\n self.long1 = v * D2R;\n },\n lon_2: function(v) {\n self.long2 = v * D2R;\n },\n alpha: function(v) {\n self.alpha = parseFloat(v) * D2R;\n },\n lonc: function(v) {\n self.longc = v * D2R;\n },\n x_0: function(v) {\n self.x0 = parseFloat(v);\n },\n y_0: function(v) {\n self.y0 = parseFloat(v);\n },\n k_0: function(v) {\n self.k0 = parseFloat(v);\n },\n k: function(v) {\n self.k0 = parseFloat(v);\n },\n a: function(v) {\n self.a = parseFloat(v);\n },\n b: function(v) {\n self.b = parseFloat(v);\n },\n r_a: function() {\n self.R_A = true;\n },\n zone: function(v) {\n self.zone = parseInt(v, 10);\n },\n south: function() {\n self.utmSouth = true;\n },\n towgs84: function(v) {\n self.datum_params = v.split(\",\").map(function(a) {\n return parseFloat(a);\n });\n },\n to_meter: function(v) {\n self.to_meter = parseFloat(v);\n },\n units: function(v) {\n self.units = v;\n if (units[v]) {\n self.to_meter = units[v].to_meter;\n }\n },\n from_greenwich: function(v) {\n self.from_greenwich = v * D2R;\n },\n pm: function(v) {\n self.from_greenwich = (PrimeMeridian[v] ? PrimeMeridian[v] : parseFloat(v)) * D2R;\n },\n nadgrids: function(v) {\n if (v === '@null') {\n self.datumCode = 'none';\n }\n else {\n self.nadgrids = v;\n }\n },\n axis: function(v) {\n var legalAxis = \"ewnsud\";\n 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) {\n self.axis = v;\n }\n }\n };\n for (paramName in paramObj) {\n paramVal = paramObj[paramName];\n if (paramName in params) {\n paramOutname = params[paramName];\n if (typeof paramOutname === 'function') {\n paramOutname(paramVal);\n }\n else {\n self[paramOutname] = paramVal;\n }\n }\n else {\n self[paramName] = paramVal;\n }\n }\n if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n self.datumCode = self.datumCode.toLowerCase();\n }\n return self;\n};\n","var Datum = require('./constants/Datum');\nvar Ellipsoid = require('./constants/Ellipsoid');\nvar extend = require('./extend');\nvar datum = require('./datum');\nvar EPSLN = 1.0e-10;\n// ellipoid pj_set_ell.c\nvar SIXTH = 0.1666666666666666667;\n/* 1/6 */\nvar RA4 = 0.04722222222222222222;\n/* 17/360 */\nvar RA6 = 0.02215608465608465608;\nmodule.exports = function(json) {\n // DGR 2011-03-20 : nagrids -> nadgrids\n if (json.datumCode && json.datumCode !== 'none') {\n var datumDef = Datum[json.datumCode];\n if (datumDef) {\n json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;\n json.ellps = datumDef.ellipse;\n json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n }\n }\n if (!json.a) { // do we have an ellipsoid?\n var ellipse = Ellipsoid[json.ellps] ? Ellipsoid[json.ellps] : Ellipsoid.WGS84;\n extend(json, ellipse);\n }\n if (json.rf && !json.b) {\n json.b = (1.0 - 1.0 / json.rf) * json.a;\n }\n if (json.rf === 0 || Math.abs(json.a - json.b) < EPSLN) {\n json.sphere = true;\n json.b = json.a;\n }\n json.a2 = json.a * json.a; // used in geocentric\n json.b2 = json.b * json.b; // used in geocentric\n json.es = (json.a2 - json.b2) / json.a2; // e ^ 2\n json.e = Math.sqrt(json.es); // eccentricity\n if (json.R_A) {\n json.a *= 1 - json.es * (SIXTH + json.es * (RA4 + json.es * RA6));\n json.a2 = json.a * json.a;\n json.b2 = json.b * json.b;\n json.es = 0;\n }\n json.ep2 = (json.a2 - json.b2) / json.b2; // used in geocentric\n if (!json.k0) {\n json.k0 = 1.0; //default value\n }\n //DGR 2010-11-12: axis\n if (!json.axis) {\n json.axis = \"enu\";\n }\n\n if (!json.datum) {\n json.datum = datum(json);\n }\n return json;\n};\n","var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\n/*\n reference\n Department of Land and Survey Technical Circular 1973/32\n http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n OSG Technical Report 4.1\n http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n * 0 -> km accuracy\n * 1 -> m accuracy -- suitable for most mapping applications\n * 2 -> mm accuracy\n */\nexports.iterations = 1;\n\nexports.init = function() {\n this.A = [];\n this.A[1] = 0.6399175073;\n this.A[2] = -0.1358797613;\n this.A[3] = 0.063294409;\n this.A[4] = -0.02526853;\n this.A[5] = 0.0117879;\n this.A[6] = -0.0055161;\n this.A[7] = 0.0026906;\n this.A[8] = -0.001333;\n this.A[9] = 0.00067;\n this.A[10] = -0.00034;\n\n this.B_re = [];\n this.B_im = [];\n this.B_re[1] = 0.7557853228;\n this.B_im[1] = 0;\n this.B_re[2] = 0.249204646;\n this.B_im[2] = 0.003371507;\n this.B_re[3] = -0.001541739;\n this.B_im[3] = 0.041058560;\n this.B_re[4] = -0.10162907;\n this.B_im[4] = 0.01727609;\n this.B_re[5] = -0.26623489;\n this.B_im[5] = -0.36249218;\n this.B_re[6] = -0.6870983;\n this.B_im[6] = -1.1651967;\n\n this.C_re = [];\n this.C_im = [];\n this.C_re[1] = 1.3231270439;\n this.C_im[1] = 0;\n this.C_re[2] = -0.577245789;\n this.C_im[2] = -0.007809598;\n this.C_re[3] = 0.508307513;\n this.C_im[3] = -0.112208952;\n this.C_re[4] = -0.15094762;\n this.C_im[4] = 0.18200602;\n this.C_re[5] = 1.01418179;\n this.C_im[5] = 1.64497696;\n this.C_re[6] = 1.9660549;\n this.C_im[6] = 2.5127645;\n\n this.D = [];\n this.D[1] = 1.5627014243;\n this.D[2] = 0.5185406398;\n this.D[3] = -0.03333098;\n this.D[4] = -0.1052906;\n this.D[5] = -0.0368594;\n this.D[6] = 0.007317;\n this.D[7] = 0.01220;\n this.D[8] = 0.00394;\n this.D[9] = -0.0013;\n};\n\n/**\n New Zealand Map Grid Forward - long/lat to x/y\n long/lat in radians\n */\nexports.forward = function(p) {\n var n;\n var lon = p.x;\n var lat = p.y;\n\n var delta_lat = lat - this.lat0;\n var delta_lon = lon - this.long0;\n\n // 1. Calculate d_phi and d_psi ... // and d_lambda\n // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n var d_lambda = delta_lon;\n var d_phi_n = 1; // d_phi^0\n\n var d_psi = 0;\n for (n = 1; n <= 10; n++) {\n d_phi_n = d_phi_n * d_phi;\n d_psi = d_psi + this.A[n] * d_phi_n;\n }\n\n // 2. Calculate theta\n var th_re = d_psi;\n var th_im = d_lambda;\n\n // 3. Calculate z\n var th_n_re = 1;\n var th_n_im = 0; // theta^0\n var th_n_re1;\n var th_n_im1;\n\n var z_re = 0;\n var z_im = 0;\n for (n = 1; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n }\n\n // 4. Calculate easting and northing\n p.x = (z_im * this.a) + this.x0;\n p.y = (z_re * this.a) + this.y0;\n\n return p;\n};\n\n\n/**\n New Zealand Map Grid Inverse - x/y to long/lat\n */\nexports.inverse = function(p) {\n var n;\n var x = p.x;\n var y = p.y;\n\n var delta_x = x - this.x0;\n var delta_y = y - this.y0;\n\n // 1. Calculate z\n var z_re = delta_y / this.a;\n var z_im = delta_x / this.a;\n\n // 2a. Calculate theta - first approximation gives km accuracy\n var z_n_re = 1;\n var z_n_im = 0; // z^0\n var z_n_re1;\n var z_n_im1;\n\n var th_re = 0;\n var th_im = 0;\n for (n = 1; n <= 6; n++) {\n z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n z_n_re = z_n_re1;\n z_n_im = z_n_im1;\n th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n }\n\n // 2b. Iterate to refine the accuracy of the calculation\n // 0 iterations gives km accuracy\n // 1 iteration gives m accuracy -- good enough for most mapping applications\n // 2 iterations bives mm accuracy\n for (var i = 0; i < this.iterations; i++) {\n var th_n_re = th_re;\n var th_n_im = th_im;\n var th_n_re1;\n var th_n_im1;\n\n var num_re = z_re;\n var num_im = z_im;\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n th_n_re = 1;\n th_n_im = 0;\n var den_re = this.B_re[1];\n var den_im = this.B_im[1];\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n // Complex division\n var den2 = den_re * den_re + den_im * den_im;\n th_re = (num_re * den_re + num_im * den_im) / den2;\n th_im = (num_im * den_re - num_re * den_im) / den2;\n }\n\n // 3. Calculate d_phi ... // and d_lambda\n var d_psi = th_re;\n var d_lambda = th_im;\n var d_psi_n = 1; // d_psi^0\n\n var d_phi = 0;\n for (n = 1; n <= 9; n++) {\n d_psi_n = d_psi_n * d_psi;\n d_phi = d_phi + this.D[n] * d_psi_n;\n }\n\n // 4. Calculate latitude and longitude\n // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n var lon = this.long0 + d_lambda;\n\n p.x = lon;\n p.y = lat;\n\n return p;\n};\nexports.names = [\"New_Zealand_Map_Grid\", \"nzmg\"];","var proj4 = require('./core');\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = require('./Proj');\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = require('./Point');\nproj4.toPoint = require(\"./common/toPoint\");\nproj4.defs = require('./defs');\nproj4.transform = require('./transform');\nproj4.mgrs = require('mgrs');\nproj4.version = require('../package.json').version;\nrequire('./includedProjections')(proj4);\nmodule.exports = proj4;","/*\n references:\n Formules et constantes pour le Calcul pour la\n projection cylindrique conforme à axe oblique et pour la transformation entre\n des systèmes de référence.\n http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n */\nexports.init = function() {\n var phy0 = this.lat0;\n this.lambda0 = this.long0;\n var sinPhy0 = Math.sin(phy0);\n var semiMajorAxis = this.a;\n var invF = this.rf;\n var flattening = 1 / invF;\n var e2 = 2 * flattening - Math.pow(flattening, 2);\n var e = this.e = Math.sqrt(e2);\n this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n this.b0 = Math.asin(sinPhy0 / this.alpha);\n var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n};\n\n\nexports.forward = function(p) {\n var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n // spheric latitude\n var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n // spheric longitude\n var I = this.alpha * (p.x - this.lambda0);\n\n // psoeudo equatorial rotation\n var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n p.x = this.R * rotI + this.x0;\n return p;\n};\n\nexports.inverse = function(p) {\n var Y = p.x - this.x0;\n var X = p.y - this.y0;\n\n var rotI = Y / this.R;\n var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n var lambda = this.lambda0 + I / this.alpha;\n\n var S = 0;\n var phy = b;\n var prevPhy = -1000;\n var iteration = 0;\n while (Math.abs(phy - prevPhy) > 0.0000001) {\n if (++iteration > 20) {\n //...reportError(\"omercFwdInfinity\");\n return;\n }\n //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n prevPhy = phy;\n phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n }\n\n p.x = lambda;\n p.y = phy;\n return p;\n};\n\nexports.names = [\"somerc\"];\n","module.exports = function(phi, sphi, cphi, en) {\n cphi *= sphi;\n sphi *= sphi;\n return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n};","var D2R = 0.01745329251994329577;\nvar R2D = 57.29577951308232088;\nvar PJD_3PARAM = 1;\nvar PJD_7PARAM = 2;\nvar datum_transform = require('./datum_transform');\nvar adjust_axis = require('./adjust_axis');\nvar proj = require('./Proj');\nvar toPoint = require('./common/toPoint');\nmodule.exports = function transform(source, dest, point) {\n var wgs84;\n if (Array.isArray(point)) {\n point = toPoint(point);\n }\n function checkNotWGS(source, dest) {\n return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== \"WGS84\");\n }\n\n // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n if (source.datum && dest.datum && (checkNotWGS(source, dest) || checkNotWGS(dest, source))) {\n wgs84 = new proj('WGS84');\n transform(source, wgs84, point);\n source = wgs84;\n }\n // DGR, 2010/11/12\n if (source.axis !== \"enu\") {\n adjust_axis(source, false, point);\n }\n // Transform source points to long/lat, if they aren't already.\n if (source.projName === \"longlat\") {\n point.x *= D2R; // convert degrees to radians\n point.y *= D2R;\n }\n else {\n if (source.to_meter) {\n point.x *= source.to_meter;\n point.y *= source.to_meter;\n }\n source.inverse(point); // Convert Cartesian to longlat\n }\n // Adjust for the prime meridian if necessary\n if (source.from_greenwich) {\n point.x += source.from_greenwich;\n }\n\n // Convert datums if needed, and if possible.\n point = datum_transform(source.datum, dest.datum, point);\n\n // Adjust for the prime meridian if necessary\n if (dest.from_greenwich) {\n point.x -= dest.from_greenwich;\n }\n\n if (dest.projName === \"longlat\") {\n // convert radians to decimal degrees\n point.x *= R2D;\n point.y *= R2D;\n }\n else { // else project\n dest.forward(point);\n if (dest.to_meter) {\n point.x /= dest.to_meter;\n point.y /= dest.to_meter;\n }\n }\n\n // DGR, 2010/11/12\n if (dest.axis !== \"enu\") {\n adjust_axis(dest, true, point);\n }\n\n return point;\n};","var HALF_PI = Math.PI/2;\nvar FORTPI = Math.PI/4;\nvar EPSLN = 1.0e-10;\nvar qsfnz = require('../common/qsfnz');\nvar adjust_lon = require('../common/adjust_lon');\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\nexports.S_POLE = 1;\nexports.N_POLE = 2;\nexports.EQUIT = 3;\nexports.OBLIQ = 4;\n\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n ------------------------------------------------------*/\nexports.init = function() {\n var t = Math.abs(this.lat0);\n if (Math.abs(t - HALF_PI) < EPSLN) {\n this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n }\n else if (Math.abs(t) < EPSLN) {\n this.mode = this.EQUIT;\n }\n else {\n this.mode = this.OBLIQ;\n }\n if (this.es > 0) {\n var sinphi;\n\n this.qp = qsfnz(this.e, 1);\n this.mmf = 0.5 / (1 - this.es);\n this.apa = this.authset(this.es);\n switch (this.mode) {\n case this.N_POLE:\n this.dd = 1;\n break;\n case this.S_POLE:\n this.dd = 1;\n break;\n case this.EQUIT:\n this.rq = Math.sqrt(0.5 * this.qp);\n this.dd = 1 / this.rq;\n this.xmf = 1;\n this.ymf = 0.5 * this.qp;\n break;\n case this.OBLIQ:\n this.rq = Math.sqrt(0.5 * this.qp);\n sinphi = Math.sin(this.lat0);\n this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n this.ymf = (this.xmf = this.rq) / this.dd;\n this.xmf *= this.dd;\n break;\n }\n }\n else {\n if (this.mode === this.OBLIQ) {\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n }\n};\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexports.forward = function(p) {\n\n /* Forward equations\n -----------------*/\n var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n var lam = p.x;\n var phi = p.y;\n\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n coslam = Math.cos(lam);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n if (y <= EPSLN) {\n return null;\n }\n y = Math.sqrt(2 / y);\n x = y * cosphi * Math.sin(lam);\n y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n coslam = -coslam;\n }\n if (Math.abs(phi + this.phi0) < EPSLN) {\n return null;\n }\n y = FORTPI - phi * 0.5;\n y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n x = y * Math.sin(lam);\n y *= coslam;\n }\n }\n else {\n sinb = 0;\n cosb = 0;\n b = 0;\n coslam = Math.cos(lam);\n sinlam = Math.sin(lam);\n sinphi = Math.sin(phi);\n q = qsfnz(this.e, sinphi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinb = q / this.qp;\n cosb = Math.sqrt(1 - sinb * sinb);\n }\n switch (this.mode) {\n case this.OBLIQ:\n b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n break;\n case this.EQUIT:\n b = 1 + cosb * coslam;\n break;\n case this.N_POLE:\n b = HALF_PI + phi;\n q = this.qp - q;\n break;\n case this.S_POLE:\n b = phi - HALF_PI;\n q = this.qp + q;\n break;\n }\n if (Math.abs(b) < EPSLN) {\n return null;\n }\n switch (this.mode) {\n case this.OBLIQ:\n case this.EQUIT:\n b = Math.sqrt(2 / b);\n if (this.mode === this.OBLIQ) {\n y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n }\n else {\n y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n }\n x = this.xmf * b * cosb * sinlam;\n break;\n case this.N_POLE:\n case this.S_POLE:\n if (q >= 0) {\n x = (b = Math.sqrt(q)) * sinlam;\n y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n }\n else {\n x = y = 0;\n }\n break;\n }\n }\n\n p.x = this.a * x + this.x0;\n p.y = this.a * y + this.y0;\n return p;\n};\n\n/* Inverse equations\n -----------------*/\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var lam, phi, cCe, sCe, q, rho, ab;\n\n if (this.sphere) {\n var cosz = 0,\n rh, sinz = 0;\n\n rh = Math.sqrt(x * x + y * y);\n phi = rh * 0.5;\n if (phi > 1) {\n return null;\n }\n phi = 2 * Math.asin(phi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinz = Math.sin(phi);\n cosz = Math.cos(phi);\n }\n switch (this.mode) {\n case this.EQUIT:\n phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n x *= sinz;\n y = cosz * rh;\n break;\n case this.OBLIQ:\n phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n x *= sinz * this.cosph0;\n y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n break;\n case this.N_POLE:\n y = -y;\n phi = HALF_PI - phi;\n break;\n case this.S_POLE:\n phi -= HALF_PI;\n break;\n }\n lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n }\n else {\n ab = 0;\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n x /= this.dd;\n y *= this.dd;\n rho = Math.sqrt(x * x + y * y);\n if (rho < EPSLN) {\n p.x = 0;\n p.y = this.phi0;\n return p;\n }\n sCe = 2 * Math.asin(0.5 * rho / this.rq);\n cCe = Math.cos(sCe);\n x *= (sCe = Math.sin(sCe));\n if (this.mode === this.OBLIQ) {\n ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n q = this.qp * ab;\n y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n }\n else {\n ab = y * sCe / rho;\n q = this.qp * ab;\n y = rho * cCe;\n }\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n y = -y;\n }\n q = (x * x + y * y);\n if (!q) {\n p.x = 0;\n p.y = this.phi0;\n return p;\n }\n ab = 1 - q / this.qp;\n if (this.mode === this.S_POLE) {\n ab = -ab;\n }\n }\n lam = Math.atan2(x, y);\n phi = this.authlat(Math.asin(ab), this.apa);\n }\n\n\n p.x = adjust_lon(this.long0 + lam);\n p.y = phi;\n return p;\n};\n\n/* determine latitude from authalic latitude */\nexports.P00 = 0.33333333333333333333;\nexports.P01 = 0.17222222222222222222;\nexports.P02 = 0.10257936507936507936;\nexports.P10 = 0.06388888888888888888;\nexports.P11 = 0.06640211640211640211;\nexports.P20 = 0.01641501294219154443;\n\nexports.authset = function(es) {\n var t;\n var APA = [];\n APA[0] = es * this.P00;\n t = es * es;\n APA[0] += t * this.P01;\n APA[1] = t * this.P10;\n t *= es;\n APA[0] += t * this.P02;\n APA[1] += t * this.P11;\n APA[2] = t * this.P20;\n return APA;\n};\n\nexports.authlat = function(beta, APA) {\n var t = beta + beta;\n return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n};\nexports.names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\n","module.exports = function(defs) {\n defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n 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\");\n\n defs.WGS84 = defs['EPSG:4326'];\n defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n defs.GOOGLE = defs['EPSG:3857'];\n defs['EPSG:900913'] = defs['EPSG:3857'];\n defs['EPSG:102113'] = defs['EPSG:3857'];\n};\n","module.exports = function(x) {\n if (Math.abs(x) > 1) {\n x = (x > 1) ? 1 : -1;\n }\n return Math.asin(x);\n};","var HALF_PI = Math.PI/2;\nvar sign = require('./sign');\n\nmodule.exports = function(x) {\n return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n};","var adjust_lon = require('../common/adjust_lon');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar mlfn = require('../common/mlfn');\nvar e0fn = require('../common/e0fn');\nvar e1fn = require('../common/e1fn');\nvar e2fn = require('../common/e2fn');\nvar e3fn = require('../common/e3fn');\nvar gN = require('../common/gN');\nvar asinz = require('../common/asinz');\nvar imlfn = require('../common/imlfn');\nexports.init = function() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n};\n\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var dlon = adjust_lon(lon - this.long0);\n var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n if (this.sphere) {\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n return p;\n }\n else {\n //default case\n cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n c = Math.acos(cos_c);\n kp = c / Math.sin(c);\n p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n return p;\n }\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n return p;\n }\n else {\n //Default case\n tanphi = sinphi / cosphi;\n Nl1 = gN(this.a, this.e, this.sin_p12);\n Nl = gN(this.a, this.e, sinphi);\n psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n if (Az === 0) {\n s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else {\n s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n }\n G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n GH = G * H;\n Hs = H * H;\n s2 = s * s;\n s3 = s2 * s;\n s4 = s3 * s;\n s5 = s4 * s;\n c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n p.x = this.x0 + c * Math.sin(Az);\n p.y = this.y0 + c * Math.cos(Az);\n return p;\n }\n }\n\n\n};\n\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F;\n if (this.sphere) {\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (rh > (2 * HALF_PI * this.a)) {\n return;\n }\n z = rh / this.a;\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n }\n else {\n lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n }\n else {\n /*con = cosz - this.sin_p12 * Math.sin(lat);\n if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n //no-op, just keep the lon value as is\n } else {\n var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n }*/\n lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = Mlp - rh;\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = rh - Mlp;\n\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n //default case\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n Az = Math.atan2(p.x, p.y);\n N1 = gN(this.a, this.e, this.sin_p12);\n cosAz = Math.cos(Az);\n tmp = this.e * this.cos_p12 * cosAz;\n A = -tmp * tmp / (1 - this.es);\n B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n D = rh / N1;\n Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es));\n p.x = lon;\n p.y = lat;\n return p;\n }\n }\n\n};\nexports.names = [\"Azimuthal_Equidistant\", \"aeqd\"];\n","var mgrs = require('mgrs');\n\nfunction Point(x, y, z) {\n if (!(this instanceof Point)) {\n return new Point(x, y, z);\n }\n if (Array.isArray(x)) {\n this.x = x[0];\n this.y = x[1];\n this.z = x[2] || 0.0;\n }else if(typeof x === 'object'){\n this.x = x.x;\n this.y = x.y;\n this.z = x.z || 0.0;\n } else if (typeof x === 'string' && typeof y === 'undefined') {\n var coords = x.split(',');\n this.x = parseFloat(coords[0], 10);\n this.y = parseFloat(coords[1], 10);\n this.z = parseFloat(coords[2], 10) || 0.0;\n }\n else {\n this.x = x;\n this.y = y;\n this.z = z || 0.0;\n }\n console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n return new Point(mgrs.toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n return mgrs.forward([this.x, this.y], accuracy);\n};\nmodule.exports = Point;","var D2R = 0.01745329251994329577;\nvar tmerc = require('./tmerc');\nexports.dependsOn = 'tmerc';\nexports.init = function() {\n if (!this.zone) {\n return;\n }\n this.lat0 = 0;\n this.long0 = ((6 * Math.abs(this.zone)) - 183) * D2R;\n this.x0 = 500000;\n this.y0 = this.utmSouth ? 10000000 : 0;\n this.k0 = 0.9996;\n\n tmerc.init.apply(this);\n this.forward = tmerc.forward;\n this.inverse = tmerc.inverse;\n};\nexports.names = [\"Universal Transverse Mercator System\", \"utm\"];\n","exports.wgs84 = {\n towgs84: \"0,0,0\",\n ellipse: \"WGS84\",\n datumName: \"WGS84\"\n};\nexports.ch1903 = {\n towgs84: \"674.374,15.056,405.346\",\n ellipse: \"bessel\",\n datumName: \"swiss\"\n};\nexports.ggrs87 = {\n towgs84: \"-199.87,74.79,246.62\",\n ellipse: \"GRS80\",\n datumName: \"Greek_Geodetic_Reference_System_1987\"\n};\nexports.nad83 = {\n towgs84: \"0,0,0\",\n ellipse: \"GRS80\",\n datumName: \"North_American_Datum_1983\"\n};\nexports.nad27 = {\n nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n ellipse: \"clrk66\",\n datumName: \"North_American_Datum_1927\"\n};\nexports.potsdam = {\n towgs84: \"606.0,23.0,413.0\",\n ellipse: \"bessel\",\n datumName: \"Potsdam Rauenberg 1950 DHDN\"\n};\nexports.carthage = {\n towgs84: \"-263.0,6.0,431.0\",\n ellipse: \"clark80\",\n datumName: \"Carthage 1934 Tunisia\"\n};\nexports.hermannskogel = {\n towgs84: \"653.0,-212.0,449.0\",\n ellipse: \"bessel\",\n datumName: \"Hermannskogel\"\n};\nexports.ire65 = {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"mod_airy\",\n datumName: \"Ireland 1965\"\n};\nexports.rassadiran = {\n towgs84: \"-133.63,-157.5,-158.62\",\n ellipse: \"intl\",\n datumName: \"Rassadiran\"\n};\nexports.nzgd49 = {\n towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n ellipse: \"intl\",\n datumName: \"New Zealand Geodetic Datum 1949\"\n};\nexports.osgb36 = {\n towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n ellipse: \"airy\",\n datumName: \"Airy 1830\"\n};\nexports.s_jtsk = {\n towgs84: \"589,76,480\",\n ellipse: 'bessel',\n datumName: 'S-JTSK (Ferro)'\n};\nexports.beduaram = {\n towgs84: '-106,-87,188',\n ellipse: 'clrk80',\n datumName: 'Beduaram'\n};\nexports.gunung_segara = {\n towgs84: '-403,684,41',\n ellipse: 'bessel',\n datumName: 'Gunung Segara Jakarta'\n};\nexports.rnb72 = {\n towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n ellipse: \"intl\",\n datumName: \"Reseau National Belge 1972\"\n};","var adjust_lon = require('../common/adjust_lon');\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\n\n/* Initialize the Miller Cylindrical projection\n -------------------------------------------*/\nexports.init = function() {\n //no-op\n};\n\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x = this.x0 + this.a * dlon;\n var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n p.x = x;\n p.y = y;\n return p;\n};\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n\n var lon = adjust_lon(this.long0 + p.x / this.a);\n var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Miller_Cylindrical\", \"mill\"];\n"],"names":["module","exports","ml","e0","e1","e2","e3","phi","dphi","i","Math","sin","cos","abs","NaN","extend","mapit","obj","key","v","map","aa","o","sExpr","reduce","a","b","Array","isArray","shift","length","indexOf","name","toLowerCase","convert","auth","rf","every","d2r","input","wkt","self","lisp","JSON","parse","replace","slice","type","unshift","toMeter","ratio","to_meter","parseFloat","projName","local","PROJECTION","Object","keys","UNIT","units","GEOGCS","DATUM","datumCode","sphere","SPHEROID","ellps","isFinite","forEach","outName","params","inName","long0","longc","lat_ts","lat1","lat0","cleanWKT","output","EPSLN","msfnz","qsfnz","adjust_lon","asinz","init","this","lat2","temp","es","pow","sqrt","sin_po","cos_po","t1","con","ms1","qs1","t2","ms2","qs2","t3","qs0","ns0","c","rh","forward","p","lon","x","lat","y","sin_phi","cos_phi","qs","rh1","theta","x0","y0","inverse","atan2","asin","phi1z","eccent","sinphi","com","eccnts","log","names","tsfnz","phi2z","HALF_PI","PI","FORTPI","no_off","no_rot","isNaN","k0","sinlat","coslat","e","bl","al","fl","gl","t0","dl","el","hl","ll","jl","pl","dlon12","long1","long2","atan","tan","dlon10","gamma0","alpha","uc","us","vs","dlon","t","ql","sl","tl","vl","ul","Number","POSITIVE_INFINITY","qp","exp","sp","tp","vp","up","ts","ft","array","out","z","m","projs","proj4","proj","Proj","projections","add","R2D","k","gauss","apply","rc","sinc0","phic0","cosc0","R2","title","sinc","cosc","cosl","rho","greenwich","lisbon","paris","bogota","madrid","rome","bern","jakarta","ferro","brussels","stockholm","athens","oslo","s45","s90","fi0","alfa","uq","u0","g","k1","n0","s0","n","ro0","ad","gfi","u","deltav","s","d","eps","ro","delta_lon","czech","fi1","ok","tmp","iter","projStore","len","console","get","start","cosphi","q","parseCode","deriveConstants","Projection","srsCode","callback","error","json","modifiedJSON","ourProj","destination","source","value","property","undefined","defs","projStr","code","testObj","testDef","testWKT","testProj","esinp","adjust_lat","dlat","SRS_WGS84_SEMIMAJOR","SRS_WGS84_ESQUARED","dest","point","wp","l","checkParams","fallback","compare_datums","datum_type","src_a","src_es","dst_a","dst_es","apply_gridshift","datum_params","geodetic_to_geocentric","geocentric_to_wgs84","geocentric_from_wgs84","geocentric_to_geodetic","iqsfnz","pj_mlfn","arg","en","delta_theta","e0fn","e1fn","e2fn","e3fn","mlfn","imlfn","ml1","ns","ml2","ml0","TWO_PI","sign","gN","lam","nl","asq","cl","dd","phi1","nl1","rl1","tl1","dsq","SEC_TO_RAD","COS_67P5","datum","grids","ep2","prototype","nadgrids","X","Y","Z","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","Longitude","Latitude","Height","P","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","geocentric_to_geodetic_noniter","W","W2","T0","T1","S0","S1","Sin_B0","Sin3_B0","Cos_B0","Sin_p1","Cos_p1","Sum","At_Pole","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","x_out","y_out","z_out","x_tmp","y_tmp","z_tmp","sin1","cos1","ts1","sin2","cos2","ts2","ts0","f0","sin_p14","cos_p14","infinity_dist","coslon","C04","C06","C08","ssfn_","phit","eccen","coslat0","sinlat0","cons","X0","cosX0","sinX0","A","sinX","cosX","ce","Chi","tanphi","mln","mlnp","ma","eccnth","globals","parseProj","that","arguments","def","charAt","EPSG","ESRI","IAU2000","crs","denorm","xin","yin","zin","axis","pj_enfn","pj_inv_mlfn","C_y","C_x","V","R","sinth","costh","gsq","msq","xx","yy","xys","c1","c2","c3","a1","m1","th1","acos","transform","wgs84","transformer","from","to","coords","transformedArray","checkProj","item","oProj","fromProj","toProj","coord","single","MERIT","ellipseName","SGS85","GRS80","IAU76","airy","APL4","NWL9D","mod_airy","andrae","aust_SA","GRS67","bessel","bess_nam","clrk66","clrk80","clrk58","CPM","delmbr","engelis","evrst30","evrst48","evrst56","evrst69","evrstSS","fschr60","fschr60m","fschr68","helmert","hough","intl","kaula","lerch","mprts","new_intl","plessis","krass","SEasia","walbeck","WGS60","WGS66","WGS7","WGS84","srat","sphi","cphi","C","ratexp","K","num","als","tq","delta_phi","f","h","tan_phi","cs","r","ds","identity","pt","SET_ORIGIN_COLUMN_LETTERS","SET_ORIGIN_ROW_LETTERS","I","O","degToRad","deg","radToDeg","rad","UTMtoLL","utm","UTMNorthing","northing","UTMEasting","easting","zoneLetter","zoneNumber","eccPrimeSquared","N1","C1","R1","D","LongOrigin","mu","phi1Rad","eccSquared","result","accuracy","topRight","top","right","bottom","left","get100kSetForZone","setParm","getMinNorthing","column","row","index","colOrigin","rowOrigin","colInt","rowInt","rollover","seasting","snorthing","floor","charCodeAt","String","fromCharCode","substr","encode","N","T","LongOriginRad","ZoneNumber","Lat","Long","LatRad","LongRad","LetterDesignator","round","LLtoUTM","mgrs","bbox","mgrsString","testChar","hunK","sb","test","parseInt","substring","set","east100k","curCol","eastingValue","rewindMarker","getEastingFromChar","north100k","curRow","northingValue","getNorthingFromChar","remainder","accuracyBonus","sepEastingString","sepNorthingString","sep","sepEasting","sepNorthing","decode","toUpperCase","toPoint","mgrsStr","llbbox","D2R","PrimeMeridian","defData","paramName","paramVal","paramOutname","paramObj","split","trim","filter","push","lat_0","lat_1","lat_2","lon_0","lon_1","lon_2","lonc","x_0","y_0","k_0","r_a","R_A","zone","south","utmSouth","towgs84","from_greenwich","pm","legalAxis","Datum","Ellipsoid","datumDef","ellipse","datumName","a2","b2","iterations","B_re","B_im","C_re","C_im","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_n_im1","th_re","th_im","th_n_re","th_n_im","z_re","z_im","z_n_im1","delta_x","z_n_re","z_n_im","num_re","num_im","den_re","den_im","den2","d_psi_n","defaultDatum","Point","version","phy0","lambda0","sinPhy0","semiMajorAxis","flattening","b0","k2","k3","Sa1","Sa2","S","rotI","rotB","lambda","phy","prevPhy","iteration","datum_transform","adjust_axis","checkNotWGS","S_POLE","N_POLE","EQUIT","OBLIQ","mode","mmf","apa","authset","rq","xmf","ymf","sinb1","cosb1","sinph0","cosph0","coslam","sinlam","sinb","cosb","phi0","cCe","sCe","ab","cosz","sinz","authlat","P00","P01","P02","P10","P11","P20","APA","beta","GOOGLE","sin_p12","cos_p12","Mlp","Ml","Nl1","Nl","psi","Az","G","H","GH","Hs","kp","cos_c","s2","s3","s4","cosAz","B","Ee","F","warn","fromMGRS","toMGRS","tmerc","dependsOn","ch1903","ggrs87","nad83","nad27","potsdam","carthage","hermannskogel","ire65","rassadiran","nzgd49","osgb36","s_jtsk","beduaram","gunung_segara","rnb72"],"sourceRoot":""}