{"version":3,"sources":["webpack:///./node_modules/rfdc/index.js","webpack:///./node_modules/url/url.js","webpack:///./node_modules/reinterval/index.js","webpack:///./node_modules/rfdc/default.js","webpack:///./node_modules/url/util.js","webpack:///./node_modules/qs/lib/stringify.js","webpack:///./node_modules/qs/lib/index.js","webpack:///./node_modules/side-channel/index.js","webpack:///./node_modules/property-expr/index.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/querystring-es3/decode.js","webpack:///./node_modules/tiny-case/index.js","webpack:///./node_modules/register-service-worker/index.js","webpack:///./node_modules/proj4leaflet/src/proj4leaflet.js","webpack:///./node_modules/qs/lib/parse.js","webpack:///./node_modules/proj4/lib/global.js","webpack:///./node_modules/proj4/lib/constants/values.js","webpack:///./node_modules/proj4/lib/constants/PrimeMeridian.js","webpack:///./node_modules/proj4/lib/constants/units.js","webpack:///./node_modules/proj4/lib/match.js","webpack:///./node_modules/proj4/lib/projString.js","webpack:///./node_modules/proj4/lib/defs.js","webpack:///./node_modules/proj4/lib/parseCode.js","webpack:///./node_modules/proj4/lib/extend.js","webpack:///./node_modules/proj4/lib/common/msfnz.js","webpack:///./node_modules/proj4/lib/common/sign.js","webpack:///./node_modules/proj4/lib/common/adjust_lon.js","webpack:///./node_modules/proj4/lib/common/tsfnz.js","webpack:///./node_modules/proj4/lib/common/phi2z.js","webpack:///./node_modules/proj4/lib/projections/merc.js","webpack:///./node_modules/proj4/lib/projections/longlat.js","webpack:///./node_modules/proj4/lib/projections.js","webpack:///./node_modules/proj4/lib/constants/Ellipsoid.js","webpack:///./node_modules/proj4/lib/deriveConstants.js","webpack:///./node_modules/proj4/lib/constants/Datum.js","webpack:///./node_modules/proj4/lib/datum.js","webpack:///./node_modules/proj4/lib/nadgrid.js","webpack:///./node_modules/proj4/lib/Proj.js","webpack:///./node_modules/proj4/lib/datumUtils.js","webpack:///./node_modules/proj4/lib/datum_transform.js","webpack:///./node_modules/proj4/lib/adjust_axis.js","webpack:///./node_modules/proj4/lib/common/toPoint.js","webpack:///./node_modules/proj4/lib/checkSanity.js","webpack:///./node_modules/proj4/lib/transform.js","webpack:///./node_modules/proj4/lib/core.js","webpack:///./node_modules/proj4/lib/Point.js","webpack:///./node_modules/proj4/lib/common/pj_enfn.js","webpack:///./node_modules/proj4/lib/common/pj_mlfn.js","webpack:///./node_modules/proj4/lib/common/pj_inv_mlfn.js","webpack:///./node_modules/proj4/lib/projections/tmerc.js","webpack:///./node_modules/proj4/lib/common/sinh.js","webpack:///./node_modules/proj4/lib/common/hypot.js","webpack:///./node_modules/proj4/lib/common/log1py.js","webpack:///./node_modules/proj4/lib/common/asinhy.js","webpack:///./node_modules/proj4/lib/common/gatg.js","webpack:///./node_modules/proj4/lib/common/clens.js","webpack:///./node_modules/proj4/lib/common/cosh.js","webpack:///./node_modules/proj4/lib/common/clens_cmplx.js","webpack:///./node_modules/proj4/lib/projections/etmerc.js","webpack:///./node_modules/proj4/lib/common/adjust_zone.js","webpack:///./node_modules/proj4/lib/projections/utm.js","webpack:///./node_modules/proj4/lib/common/srat.js","webpack:///./node_modules/proj4/lib/projections/gauss.js","webpack:///./node_modules/proj4/lib/projections/sterea.js","webpack:///./node_modules/proj4/lib/projections/stere.js","webpack:///./node_modules/proj4/lib/projections/somerc.js","webpack:///./node_modules/proj4/lib/projections/omerc.js","webpack:///./node_modules/proj4/lib/projections/lcc.js","webpack:///./node_modules/proj4/lib/projections/krovak.js","webpack:///./node_modules/proj4/lib/common/mlfn.js","webpack:///./node_modules/proj4/lib/common/e0fn.js","webpack:///./node_modules/proj4/lib/common/e1fn.js","webpack:///./node_modules/proj4/lib/common/e2fn.js","webpack:///./node_modules/proj4/lib/common/e3fn.js","webpack:///./node_modules/proj4/lib/common/gN.js","webpack:///./node_modules/proj4/lib/common/adjust_lat.js","webpack:///./node_modules/proj4/lib/common/imlfn.js","webpack:///./node_modules/proj4/lib/projections/cass.js","webpack:///./node_modules/proj4/lib/common/qsfnz.js","webpack:///./node_modules/proj4/lib/projections/laea.js","webpack:///./node_modules/proj4/lib/common/asinz.js","webpack:///./node_modules/proj4/lib/projections/aea.js","webpack:///./node_modules/proj4/lib/projections/gnom.js","webpack:///./node_modules/proj4/lib/common/iqsfnz.js","webpack:///./node_modules/proj4/lib/projections/cea.js","webpack:///./node_modules/proj4/lib/projections/eqc.js","webpack:///./node_modules/proj4/lib/projections/poly.js","webpack:///./node_modules/proj4/lib/projections/nzmg.js","webpack:///./node_modules/proj4/lib/projections/mill.js","webpack:///./node_modules/proj4/lib/projections/sinu.js","webpack:///./node_modules/proj4/lib/projections/moll.js","webpack:///./node_modules/proj4/lib/projections/eqdc.js","webpack:///./node_modules/proj4/lib/projections/vandg.js","webpack:///./node_modules/proj4/lib/projections/aeqd.js","webpack:///./node_modules/proj4/lib/projections/ortho.js","webpack:///./node_modules/proj4/lib/projections/qsc.js","webpack:///./node_modules/proj4/lib/projections/robin.js","webpack:///./node_modules/proj4/lib/projections/geocent.js","webpack:///./node_modules/proj4/lib/projections/tpers.js","webpack:///./node_modules/proj4/lib/projections/geos.js","webpack:///./node_modules/proj4/lib/projections/eqearth.js","webpack:///./node_modules/proj4/lib/projections/bonne.js","webpack:///./node_modules/proj4/projs.js","webpack:///./node_modules/proj4/lib/index.js","webpack:///./node_modules/toposort/index.js","webpack:///./node_modules/qs/lib/formats.js","webpack:///./node_modules/querystring-es3/index.js","webpack:///./node_modules/qs/lib/utils.js","webpack:///./node_modules/querystring-es3/encode.js","webpack:///./node_modules/stream-shift/index.js"],"names":["copyBuffer","cur","Buffer","from","constructor","buffer","slice","byteOffset","length","rfdc","opts","circles","rfdcCircles","proto","cloneProto","clone","cloneArray","a","fn","keys","Object","a2","Array","i","k","Date","ArrayBuffer","isView","o","isArray","Map","Set","o2","hasOwnProperty","call","refs","refsNew","index","indexOf","push","pop","module","exports","punycode","util","Url","this","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","path","href","parse","urlParse","resolve","urlResolve","resolveObject","urlResolveObject","format","urlFormat","protocolPattern","portPattern","simplePathPattern","delims","unwise","concat","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","url","parseQueryString","slashesDenoteHost","isObject","u","obj","isString","prototype","source","relative","TypeError","queryIndex","splitter","uSplit","split","slashRegex","replace","join","rest","trim","simplePath","exec","substr","lowerProto","toLowerCase","match","atSign","hostEnd","hec","lastIndexOf","decodeURIComponent","parseHost","ipv6Hostname","hostparts","l","part","newpart","j","charCodeAt","validParts","notHost","bit","unshift","toASCII","p","h","ae","esc","encodeURIComponent","escape","qm","s","stringify","charAt","rel","result","tkeys","tk","tkey","rkeys","rk","rkey","v","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","isNullOrUndefined","authInHost","isNull","last","hasTrailingSlash","up","splice","isAbsolute","ReInterval","callback","interval","args","self","_callback","_args","_interval","setInterval","reschedule","clearInterval","clear","undefined","destroy","reInterval","arguments","Error","arg","getSideChannel","utils","formats","has","arrayPrefixGenerators","brackets","prefix","comma","indices","key","repeat","String","pushToArray","arr","valueOrArray","apply","toISO","toISOString","defaultFormat","defaults","addQueryPrefix","allowDots","charset","charsetSentinel","delimiter","encode","encoder","encodeValuesOnly","formatter","formatters","serializeDate","date","skipNulls","strictNullHandling","isNonNullishPrimitive","sentinel","object","generateArrayPrefix","filter","sort","sideChannel","tmpSc","step","findFlag","get","pos","RangeError","maybeMap","value","isBuffer","keyValue","valuesArray","valuesJoined","objKeys","values","keyPrefix","set","valueSideChannel","normalizeStringifyOptions","options","arrayFormat","joined","GetIntrinsic","callBound","inspect","$TypeError","$WeakMap","$Map","$weakMapGet","$weakMapSet","$weakMapHas","$mapGet","$mapSet","$mapHas","listGetNode","list","curr","prev","next","listGet","objects","node","listSet","listHas","$wm","$m","$o","channel","assert","Cache","maxSize","_maxSize","_size","_values","create","SPLIT_REGEX","DIGIT_REGEX","LEAD_DIGIT_REGEX","SPEC_CHAR_REGEX","CLEAN_QUOTES_REGEX","MAX_CACHE_SIZE","pathCache","setCache","getCache","normalizePath","map","forEach","parts","iter","thisArg","idx","isBracket","len","shouldBeQuoted","isQuoted","test","str","hasLeadingNumber","hasSpecialChars","setter","data","getter","safe","segments","reduce","cb","isEncoding","encoding","_normalizeEncoding","enc","retried","normalizeEncoding","nenc","StringDecoder","nb","text","utf16Text","end","utf16End","fillLast","utf8FillLast","base64Text","base64End","write","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","allocUnsafe","utf8CheckByte","byte","utf8CheckIncomplete","buf","utf8CheckExtraBytes","r","copy","toString","utf8Text","total","utf8End","c","n","copyProps","src","dst","SafeBuffer","encodingOrOffset","alloc","allocUnsafeSlow","size","fill","SlowBuffer","prop","qs","sep","eq","regexp","maxKeys","kstr","vstr","x","xs","reWords","words","upperFirst","toUpperCase","d","camelCase","acc","pascalCase","snakeCase","kebabCase","sentenceCase","titleCase","waitWindowLoad","isLocalhost","Boolean","window","location","register","swUrl","hooks","registrationOptions","emit","hook","navigator","then","checkValidServiceWorker","serviceWorker","ready","registration","catch","error","handleError","registerValidSW","onLine","waiting","onupdatefound","installingWorker","installing","onstatechange","state","controller","fetch","response","status","unregister","headers","Promise","addEventListener","L","proj4","__esModule","default","Proj","_isProj4Obj","inverse","forward","Projection","Class","extend","initialize","code","def","bounds","isP4","_proj","_projFromCodeDef","project","latlng","point","lng","lat","Point","unproject","unbounded","point2","y","LatLng","defs","urn","CRS","includes","transformation","Transformation","b","proj","srsCode","projection","Util","setOptions","origin","scales","_scales","resolutions","infinite","scale","zoom","baseScale","nextScale","scaleDiff","zDiff","iZoom","Math","floor","nextZoom","downScale","_closestElement","downZoom","Infinity","distance","Earth","R","array","element","low","GeoJSON","geojson","_callLevel","addData","crs","type","properties","name","coordsToLatLng","coords","geoJson","ImageOverlay","_projectedBounds","_animateZoom","event","_map","getZoomScale","northWest","min","max","offset","_projectedToNewLayerPoint","center","DomUtil","setTransform","_image","_reset","getZoom","pixelOrigin","getPixelOrigin","_transform","_subtract","getSize","setPosition","style","width","height","viewHalf","_divideBy","newTopLeft","_round","topLeft","add","_getMapPanePos","transform","imageOverlay","allowPrototypes","allowSparse","arrayLimit","decoder","decode","depth","ignoreQueryPrefix","interpretNumericEntities","parameterLimit","parseArrays","plainObjects","$0","numberStr","fromCharCode","parseInt","parseArrayValue","val","isoSentinel","parseValues","cleanStr","limit","skipIndex","bracketEqualsPos","encodedVal","combine","parseObject","chain","valuesParsed","leaf","root","cleanRoot","isNaN","0","parseKeys","givenKey","child","segment","parent","normalizeParseOptions","isRegExp","tempObj","newObj","merge","compact","WGS84","GOOGLE","PJD_3PARAM","PJD_7PARAM","PJD_GRIDSHIFT","PJD_WGS84","PJD_NODATUM","SRS_WGS84_SEMIMAJOR","SRS_WGS84_SEMIMINOR","SRS_WGS84_ESQUARED","SEC_TO_RAD","HALF_PI","PI","SIXTH","RA4","RA6","EPSLN","D2R","R2D","FORTPI","TWO_PI","SPI","to_meter","ignoredChar","testkey","processedKey","lkey","paramName","paramVal","paramOutname","paramObj","defData","params","datum","rf","parseFloat","lat_0","lat0","lat_1","lat1","lat_2","lat2","lat_ts","lon_0","long0","lon_1","long1","lon_2","long2","alpha","gamma","rectified_grid_angle","lonc","longc","x_0","x0","y_0","y0","k_0","k0","r_a","R_A","zone","south","utmSouth","towgs84","datum_params","units","unit","from_greenwich","pm","nadgrids","datumCode","axis","legalAxis","approx","that","EPSG","ESRI","IAU2000","console","log","global","testObj","testDef","codeWords","testWKT","some","word","codes","checkMercator","item","checkProjStr","ext","testProj","out","maybeProjStr","property","destination","con","eccent","sinphi","cosphi","sqrt","abs","sign","com","pow","tan","phi","dphi","eccnth","atan","ts","sin","init","es","e","sphere","cos","msfnz","lon","adjust_lon","tsfnz","exp","phi2z","names","identity","pt","projs","merc","longlat","projStore","start","ellipseName","eccentricity","b2","ep2","ellps","ellipse","datums","wgs84","datumName","ch1903","ggrs87","nad83","nad27","potsdam","carthage","hermannskogel","militargeographische_institut","osni52","ire65","rassadiran","nzgd49","osgb36","s_jtsk","beduaram","gunung_segara","rnb72","datum_type","grids","loadedNadgrids","nadgrid","view","DataView","isLittleEndian","detectLittleEndian","header","readHeader","subgrids","readSubgrids","getNadgrids","parseNadgridString","optional","mandatory","grid","secondsToRadians","seconds","nFields","getInt32","warn","nSubgridFields","nSubgrids","shiftType","decodeString","fromSemiMajorAxis","getFloat64","fromSemiMinorAxis","toSemiMajorAxis","toSemiMinorAxis","Uint8Array","gridOffset","subHeader","readGridHeader","nodes","readGridNodes","lngColumnCount","round","upperLongitude","lowerLongitude","longitudeInterval","latColumnCount","upperLatitude","lowerLatitude","latitudeInterval","ll","del","lim","count","gridNodeCount","cvs","mapNodes","longitudeShift","latitudeShift","gridHeader","nodesOffset","gridRecordLength","gridShiftRecords","record","getFloat32","latitudeAccuracy","longitudeAccuracy","json","parseCode","ourProj","projections","projName","datumDef","Datum","sphere_","ecc","datumObj","compareDatums","dest","geodeticToGeocentric","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","Longitude","Latitude","Height","z","geocentricToGeodetic","P","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","genau","genau2","maxiter","X","Y","Z","atan2","geocentricToWgs84","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","geocentricFromWgs84","x_tmp","y_tmp","z_tmp","checkParams","source_a","source_es","gridShiftCode","applyGridShift","dest_a","dest_b","dest_es","destGridShiftResult","input","output","Number","NaN","attemptedGrids","outer","jj","subgrid","epsilon","minX","minY","maxX","maxY","applySubgridShift","pin","ct","tb","t","nadInterpolate","dif","tol","inx","indx","frct","f00","f10","f11","f01","m11","m10","m00","m01","xin","yin","zin","denorm","m","checkCoord","num","isFinite","checkNotWGS","enforceAxis","toPoint","hasZ","checkSanity","adjust_axis","datum_transform","transformer","to","transformedArray","checkProj","oProj","fromProj","toProj","coord","single","fromMGRS","mgrsStr","toMGRS","accuracy","C00","C02","C04","C06","C08","C22","C44","C46","C48","C66","C68","C88","en","cphi","sphi","MAX_ITER","pj_mlfn","pj_enfn","ml0","delta_lon","sin_phi","cos_phi","al","als","cs","tq","ml","acos","pj_inv_mlfn","tan_phi","ds","f","g","temp","asin","log1py","hypot","cos_2B","B","pp","h1","h2","hr","arg_r","hr1","hr2","hi2","sin_arg_r","cos_arg_r","sinh_arg_i","sinh","arg_i","cosh_arg_i","cosh","hi1","hi","tmerc","cgb","cbg","utg","gtu","np","Qn","gatg","Zb","clens","Ce","Cn","sin_Cn","cos_Cn","sin_Ce","cos_Ce","asinhy","tmp","clens_cmplx","dependsOn","adjust_zone","etmerc","esinp","rc","C","phic0","ratexp","K","srat","DEL_TOL","gauss","sinc0","cosc0","R2","title","sinc","cosc","cosl","rho","ssfn_","phit","eccen","coslat0","sinlat0","cons","ms1","X0","cosX0","sinX0","A","sinX","cosX","rh","sinlat","coslat","dlon","ce","Chi","phy0","lambda0","sinPhy0","semiMajorAxis","invF","flattening","e2","b0","k1","k2","k3","Sa1","Sa2","S","I","rotI","rotB","lambda","phy","prevPhy","iteration","TOL","isTypeA","typeAProjections","projectionName","PROJECTION","cosph0","D","F","H","sinph0","J","gamma0","lamc","lam1","lam2","phi1","phi2","alpha_c","no_off","no_rot","alp","gam","one_es","E","lam0","pi","singam","cosgam","sinrot","cosrot","rB","ArB","BrA","u_0","v_pole_n","v_pole_s","T","U","V","W","Qp","Sp","Tp","Vp","Up","sin1","cos1","ts1","sin2","cos2","ms2","ts2","ts0","ns","f0","rh1","theta","s45","s90","fi0","alfa","uq","u0","n0","s0","ro0","ad","gfi","deltav","eps","ro","czech","fi1","ok","e0","e1","e3","e0fn","e1fn","e2fn","e3fn","mlfn","lam","nl","gN","tl","asq","cl","dd","ml1","imlfn","nl1","rl1","tl1","dl","dsq","adjust_lat","S_POLE","N_POLE","EQUIT","OBLIQ","mode","qp","qsfnz","mmf","apa","authset","rq","xmf","ymf","sinb1","cosb1","coslam","sinlam","q","sinb","cosb","cCe","sCe","ab","cosz","sinz","authlat","P00","P01","P02","P10","P11","P20","APA","beta","sin_po","cos_po","t1","qs1","t2","qs2","t3","qs0","ns0","phi1z","asinz","eccnts","sin_p14","cos_p14","infinity_dist","coslon","ksp","iqsfnz","dlat","el","bl","tanphi","mln","mlnp","ma","B_re","B_im","C_re","C_im","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_n_re1","th_n_im1","th_re","th_im","th_n_re","th_n_im","z_re","z_im","z_n_re1","z_n_im1","delta_x","delta_y","z_n_re","z_n_im","iterations","num_re","num_im","den_re","den_im","den2","d_psi_n","C_y","C_x","delta_theta","ml2","sinth","costh","gsq","msq","xx","yy","xys","c1","c2","c3","a1","m1","th1","sin_p12","cos_p12","Mlp","Ml","Nl1","Nl","psi","Az","G","GH","Hs","kp","cos_c","s2","s3","s4","s5","M","N1","cosAz","Ee","sinpsi","FACE_ENUM","FRONT","RIGHT","BACK","LEFT","TOP","BOTTOM","AREA_ENUM","AREA_0","AREA_1","AREA_2","AREA_3","face","one_minus_f","one_minus_f_squared","mu","xy","area","sinlon","qsc_shift_lon_origin","qsc_fwd_equat_face_theta","nu","cosmu","tannu","tantheta","invert_sign","xa","lp","slon","COEFS_X","COEFS_Y","FXC","FYC","C1","RC1","NODES","poly3_val","coefs","poly3_der","newton_rapshon","f_df","max_err","iters","upd","azi","degrees","tilt","bind","pn1","rp","pfact","omega","cg","sg","cw","sw","yt","ba","bm","bq","flip_axis","sweep","radius_g_1","radius_g","rone_es","radius_p","radius_p2","radius_p_inv2","shape","v_x","v_y","v_z","det","v_zp","A1","A2","A3","A4","paramLat","paramLatSq","paramLatPow6","fy","fpy","EPS","NITER","EPS10","am1","e_inv","e_fwd","cphi1","s_inv","s_fwd","utm","sterea","stere","somerc","omerc","lcc","krovak","cass","laea","aea","gnom","cea","eqc","poly","nzmg","mill","sinu","moll","eqdc","vandg","aeqd","ortho","qsc","robin","geocent","tpers","geos","eqearth","bonne","defaultDatum","mgrs","version","toposort","edges","cursor","sorted","visited","outgoingEdges","makeOutgoingEdges","nodesHash","makeNodesHash","edge","visit","predecessors","nodeRep","JSON","outgoing","delete","uniqueNodes","res","percentTwenties","Format","RFC1738","RFC3986","hexTable","compactQueue","queue","compacted","arrayToObject","target","mergeTarget","targetItem","assign","strWithoutPlus","unescape","defaultEncoder","kind","string","Symbol","mapped","stringifyPrimitive","objectKeys","ks","stream","rs","_readableState","objectMode","_duplexState","read","getStateLength","head"],"mappings":"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","file":"js/chunk-vendors~f9ca8911.33e7f6ed.js","sourcesContent":["'use strict'\nmodule.exports = rfdc\n\nfunction copyBuffer (cur) {\n if (cur instanceof Buffer) {\n return Buffer.from(cur)\n }\n\n return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length)\n}\n\nfunction rfdc (opts) {\n opts = opts || {}\n\n if (opts.circles) return rfdcCircles(opts)\n return opts.proto ? cloneProto : clone\n\n function cloneArray (a, fn) {\n var keys = Object.keys(a)\n var a2 = new Array(keys.length)\n for (var i = 0; i < keys.length; i++) {\n var k = keys[i]\n var cur = a[k]\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur\n } else if (cur instanceof Date) {\n a2[k] = new Date(cur)\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur)\n } else {\n a2[k] = fn(cur)\n }\n }\n return a2\n }\n\n function clone (o) {\n if (typeof o !== 'object' || o === null) return o\n if (o instanceof Date) return new Date(o)\n if (Array.isArray(o)) return cloneArray(o, clone)\n if (o instanceof Map) return new Map(cloneArray(Array.from(o), clone))\n if (o instanceof Set) return new Set(cloneArray(Array.from(o), clone))\n var o2 = {}\n for (var k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) continue\n var cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur instanceof Date) {\n o2[k] = new Date(cur)\n } else if (cur instanceof Map) {\n o2[k] = new Map(cloneArray(Array.from(cur), clone))\n } else if (cur instanceof Set) {\n o2[k] = new Set(cloneArray(Array.from(cur), clone))\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n o2[k] = clone(cur)\n }\n }\n return o2\n }\n\n function cloneProto (o) {\n if (typeof o !== 'object' || o === null) return o\n if (o instanceof Date) return new Date(o)\n if (Array.isArray(o)) return cloneArray(o, cloneProto)\n if (o instanceof Map) return new Map(cloneArray(Array.from(o), cloneProto))\n if (o instanceof Set) return new Set(cloneArray(Array.from(o), cloneProto))\n var o2 = {}\n for (var k in o) {\n var cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur instanceof Date) {\n o2[k] = new Date(cur)\n } else if (cur instanceof Map) {\n o2[k] = new Map(cloneArray(Array.from(cur), cloneProto))\n } else if (cur instanceof Set) {\n o2[k] = new Set(cloneArray(Array.from(cur), cloneProto))\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n o2[k] = cloneProto(cur)\n }\n }\n return o2\n }\n}\n\nfunction rfdcCircles (opts) {\n var refs = []\n var refsNew = []\n\n return opts.proto ? cloneProto : clone\n\n function cloneArray (a, fn) {\n var keys = Object.keys(a)\n var a2 = new Array(keys.length)\n for (var i = 0; i < keys.length; i++) {\n var k = keys[i]\n var cur = a[k]\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur\n } else if (cur instanceof Date) {\n a2[k] = new Date(cur)\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur)\n } else {\n var index = refs.indexOf(cur)\n if (index !== -1) {\n a2[k] = refsNew[index]\n } else {\n a2[k] = fn(cur)\n }\n }\n }\n return a2\n }\n\n function clone (o) {\n if (typeof o !== 'object' || o === null) return o\n if (o instanceof Date) return new Date(o)\n if (Array.isArray(o)) return cloneArray(o, clone)\n if (o instanceof Map) return new Map(cloneArray(Array.from(o), clone))\n if (o instanceof Set) return new Set(cloneArray(Array.from(o), clone))\n var o2 = {}\n refs.push(o)\n refsNew.push(o2)\n for (var k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) continue\n var cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur instanceof Date) {\n o2[k] = new Date(cur)\n } else if (cur instanceof Map) {\n o2[k] = new Map(cloneArray(Array.from(cur), clone))\n } else if (cur instanceof Set) {\n o2[k] = new Set(cloneArray(Array.from(cur), clone))\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n var i = refs.indexOf(cur)\n if (i !== -1) {\n o2[k] = refsNew[i]\n } else {\n o2[k] = clone(cur)\n }\n }\n }\n refs.pop()\n refsNew.pop()\n return o2\n }\n\n function cloneProto (o) {\n if (typeof o !== 'object' || o === null) return o\n if (o instanceof Date) return new Date(o)\n if (Array.isArray(o)) return cloneArray(o, cloneProto)\n if (o instanceof Map) return new Map(cloneArray(Array.from(o), cloneProto))\n if (o instanceof Set) return new Set(cloneArray(Array.from(o), cloneProto))\n var o2 = {}\n refs.push(o)\n refsNew.push(o2)\n for (var k in o) {\n var cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur instanceof Date) {\n o2[k] = new Date(cur)\n } else if (cur instanceof Map) {\n o2[k] = new Map(cloneArray(Array.from(cur), cloneProto))\n } else if (cur instanceof Set) {\n o2[k] = new Set(cloneArray(Array.from(cur), cloneProto))\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n var i = refs.indexOf(cur)\n if (i !== -1) {\n o2[k] = refsNew[i]\n } else {\n o2[k] = cloneProto(cur)\n }\n }\n }\n refs.pop()\n refsNew.pop()\n return o2\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","'use strict'\n\nfunction ReInterval (callback, interval, args) {\n var self = this;\n\n this._callback = callback;\n this._args = args;\n\n this._interval = setInterval(callback, interval, this._args);\n\n this.reschedule = function (interval) {\n // if no interval entered, use the interval passed in on creation\n if (!interval)\n interval = self._interval;\n\n if (self._interval)\n clearInterval(self._interval);\n self._interval = setInterval(self._callback, interval, self._args);\n };\n\n this.clear = function () {\n if (self._interval) {\n clearInterval(self._interval);\n self._interval = undefined;\n }\n };\n \n this.destroy = function () {\n if (self._interval) {\n clearInterval(self._interval);\n }\n self._callback = undefined;\n self._interval = undefined;\n self._args = undefined;\n };\n}\n\nfunction reInterval () {\n if (typeof arguments[0] !== 'function')\n throw new Error('callback needed');\n if (typeof arguments[1] !== 'number')\n throw new Error('interval needed');\n\n var args;\n\n if (arguments.length > 0) {\n args = new Array(arguments.length - 2);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 2];\n }\n }\n\n return new ReInterval(arguments[0], arguments[1], args);\n}\n\nmodule.exports = reInterval;\n","'use strict'\n\nmodule.exports = require('./index.js')()\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar split = String.prototype.split;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encoder: utils.encode,\n encodeValuesOnly: false,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n sideChannel\n) {\n var obj = object;\n\n var tmpSc = sideChannel;\n var step = 0;\n var findFlag = false;\n while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n // Where object last appeared in the ref tree\n var pos = tmpSc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n } else {\n findFlag = true; // Break while\n }\n }\n if (typeof tmpSc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = utils.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value);\n }\n return value;\n });\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n if (generateArrayPrefix === 'comma' && encodeValuesOnly) {\n var valuesArray = split.call(String(obj), ',');\n var valuesJoined = '';\n for (var i = 0; i < valuesArray.length; ++i) {\n valuesJoined += (i === 0 ? '' : ',') + formatter(encoder(valuesArray[i], defaults.encoder, charset, 'value', format));\n }\n return [formatter(keyValue) + '=' + valuesJoined];\n }\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n } else if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n for (var j = 0; j < objKeys.length; ++j) {\n var key = objKeys[j];\n var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n if (skipNulls && value === null) {\n continue;\n }\n\n var keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix\n : prefix + (allowDots ? '.' + key : '[' + key + ']');\n\n sideChannel.set(object, step);\n var valueSideChannel = getSideChannel();\n valueSideChannel.set(sentinel, sideChannel);\n pushToArray(values, stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n valueSideChannel\n ));\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var arrayFormat;\n if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if (opts && 'indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = 'indices';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n var sideChannel = getSideChannel();\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n pushToArray(keys, stringify(\n obj[key],\n key,\n generateArrayPrefix,\n options.strictNullHandling,\n options.skipNulls,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.format,\n options.formatter,\n options.encodeValuesOnly,\n options.charset,\n sideChannel\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n } else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n","/**\n * Based on Kendo UI Core expression code \n */\n'use strict'\n\nfunction Cache(maxSize) {\n this._maxSize = maxSize\n this.clear()\n}\nCache.prototype.clear = function () {\n this._size = 0\n this._values = Object.create(null)\n}\nCache.prototype.get = function (key) {\n return this._values[key]\n}\nCache.prototype.set = function (key, value) {\n this._size >= this._maxSize && this.clear()\n if (!(key in this._values)) this._size++\n\n return (this._values[key] = value)\n}\n\nvar SPLIT_REGEX = /[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,\n DIGIT_REGEX = /^\\d+$/,\n LEAD_DIGIT_REGEX = /^\\d/,\n SPEC_CHAR_REGEX = /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,\n CLEAN_QUOTES_REGEX = /^\\s*(['\"]?)(.*?)(\\1)\\s*$/,\n MAX_CACHE_SIZE = 512\n\nvar pathCache = new Cache(MAX_CACHE_SIZE),\n setCache = new Cache(MAX_CACHE_SIZE),\n getCache = new Cache(MAX_CACHE_SIZE)\n\nvar config\n\nmodule.exports = {\n Cache: Cache,\n\n split: split,\n\n normalizePath: normalizePath,\n\n setter: function (path) {\n var parts = normalizePath(path)\n\n return (\n setCache.get(path) ||\n setCache.set(path, function setter(obj, value) {\n var index = 0\n var len = parts.length\n var data = obj\n\n while (index < len - 1) {\n var part = parts[index]\n if (\n part === '__proto__' ||\n part === 'constructor' ||\n part === 'prototype'\n ) {\n return obj\n }\n\n data = data[parts[index++]]\n }\n data[parts[index]] = value\n })\n )\n },\n\n getter: function (path, safe) {\n var parts = normalizePath(path)\n return (\n getCache.get(path) ||\n getCache.set(path, function getter(data) {\n var index = 0,\n len = parts.length\n while (index < len) {\n if (data != null || !safe) data = data[parts[index++]]\n else return\n }\n return data\n })\n )\n },\n\n join: function (segments) {\n return segments.reduce(function (path, part) {\n return (\n path +\n (isQuoted(part) || DIGIT_REGEX.test(part)\n ? '[' + part + ']'\n : (path ? '.' : '') + part)\n )\n }, '')\n },\n\n forEach: function (path, cb, thisArg) {\n forEach(Array.isArray(path) ? path : split(path), cb, thisArg)\n },\n}\n\nfunction normalizePath(path) {\n return (\n pathCache.get(path) ||\n pathCache.set(\n path,\n split(path).map(function (part) {\n return part.replace(CLEAN_QUOTES_REGEX, '$2')\n })\n )\n )\n}\n\nfunction split(path) {\n return path.match(SPLIT_REGEX) || ['']\n}\n\nfunction forEach(parts, iter, thisArg) {\n var len = parts.length,\n part,\n idx,\n isArray,\n isBracket\n\n for (idx = 0; idx < len; idx++) {\n part = parts[idx]\n\n if (part) {\n if (shouldBeQuoted(part)) {\n part = '\"' + part + '\"'\n }\n\n isBracket = isQuoted(part)\n isArray = !isBracket && /^\\d+$/.test(part)\n\n iter.call(thisArg, part, isBracket, isArray, idx, parts)\n }\n }\n}\n\nfunction isQuoted(str) {\n return (\n typeof str === 'string' && str && [\"'\", '\"'].indexOf(str.charAt(0)) !== -1\n )\n}\n\nfunction hasLeadingNumber(part) {\n return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX)\n}\n\nfunction hasSpecialChars(part) {\n return SPEC_CHAR_REGEX.test(part)\n}\n\nfunction shouldBeQuoted(part) {\n return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part))\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","const reWords = /[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+|(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*/g\n\nconst words = (str) => str.match(reWords) || []\n\nconst upperFirst = (str) => str[0].toUpperCase() + str.slice(1)\n\nconst join = (str, d) => words(str).join(d).toLowerCase()\n\nconst camelCase = (str) =>\n words(str).reduce(\n (acc, next) =>\n `${acc}${\n !acc\n ? next.toLowerCase()\n : next[0].toUpperCase() + next.slice(1).toLowerCase()\n }`,\n '',\n )\n\nconst pascalCase = (str) => upperFirst(camelCase(str))\n\nconst snakeCase = (str) => join(str, '_')\n\nconst kebabCase = (str) => join(str, '-')\n\nconst sentenceCase = (str) => upperFirst(join(str, ' '))\n\nconst titleCase = (str) => words(str).map(upperFirst).join(' ')\n\nmodule.exports = {\n words,\n upperFirst,\n camelCase,\n pascalCase,\n snakeCase,\n kebabCase,\n sentenceCase,\n titleCase,\n}\n","// Register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\nvar isLocalhost = function () { return Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n); }\n\nvar waitWindowLoad\n// https://github.com/yyx990803/register-service-worker/pull/33#discussion_r394181861\nif (typeof window !== 'undefined') {\n // Typically, a browser that supports `serviceWorker` should also have supported\n // `Promise`. But as this package can be used in environments without service\n // worker support (in that case it would do nothing), there's a chance that\n // `Promise` does not exist. So we must check for its existence first.\n if (typeof Promise !== 'undefined') {\n waitWindowLoad = new Promise(function (resolve) { return window.addEventListener('load', resolve); })\n } else {\n waitWindowLoad = { then: function (cb) { return window.addEventListener('load', cb); } }\n }\n}\n\nexport function register (swUrl, hooks) {\n if ( hooks === void 0 ) hooks = {};\n\n var registrationOptions = hooks.registrationOptions; if ( registrationOptions === void 0 ) registrationOptions = {};\n delete hooks.registrationOptions\n\n var emit = function (hook) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n if (hooks && hooks[hook]) {\n hooks[hook].apply(hooks, args)\n }\n }\n\n if ('serviceWorker' in navigator) {\n waitWindowLoad.then(function () {\n if (isLocalhost()) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, emit, registrationOptions)\n navigator.serviceWorker.ready.then(function (registration) {\n emit('ready', registration)\n }).catch(function (error) { return handleError(emit, error); })\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl, emit, registrationOptions)\n navigator.serviceWorker.ready.then(function (registration) {\n emit('ready', registration)\n }).catch(function (error) { return handleError(emit, error); })\n }\n })\n }\n}\n\nfunction handleError (emit, error) {\n if (!navigator.onLine) {\n emit('offline')\n }\n emit('error', error)\n}\n\nfunction registerValidSW (swUrl, emit, registrationOptions) {\n navigator.serviceWorker\n .register(swUrl, registrationOptions)\n .then(function (registration) {\n emit('registered', registration)\n if (registration.waiting) {\n emit('updated', registration)\n return\n }\n registration.onupdatefound = function () {\n emit('updatefound', registration)\n var installingWorker = registration.installing\n installingWorker.onstatechange = function () {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n emit('updated', registration)\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n emit('cached', registration)\n }\n }\n }\n }\n })\n .catch(function (error) { return handleError(emit, error); })\n}\n\nfunction checkValidServiceWorker (swUrl, emit, registrationOptions) {\n // Check if the service worker can be found.\n fetch(swUrl)\n .then(function (response) {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (response.status === 404) {\n // No service worker found.\n emit('error', new Error((\"Service worker not found at \" + swUrl)))\n unregister()\n } else if (response.headers.get('content-type').indexOf('javascript') === -1) {\n emit('error', new Error(\n \"Expected \" + swUrl + \" to have javascript content-type, \" +\n \"but received \" + (response.headers.get('content-type'))))\n unregister()\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, emit, registrationOptions)\n }\n })\n .catch(function (error) { return handleError(emit, error); })\n}\n\nexport function unregister () {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(function (registration) {\n registration.unregister()\n }).catch(function (error) { return handleError(emit, error); })\n }\n}\n","(function (factory) {\r\n\tvar L, proj4;\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\t// AMD\r\n\t\tdefine(['leaflet', 'proj4'], factory);\r\n\t} else if (typeof module === 'object' && typeof module.exports === \"object\") {\r\n\t\t// Node/CommonJS\r\n\t\tL = require('leaflet');\r\n\t\tproj4 = require('proj4');\r\n\t\tmodule.exports = factory(L, proj4);\r\n\t} else {\r\n\t\t// Browser globals\r\n\t\tif (typeof window.L === 'undefined' || typeof window.proj4 === 'undefined')\r\n\t\t\tthrow 'Leaflet and proj4 must be loaded first';\r\n\t\tfactory(window.L, window.proj4);\r\n\t}\r\n}(function (L, proj4) {\r\n\tif (proj4.__esModule && proj4.default) {\r\n\t\t// If proj4 was bundled as an ES6 module, unwrap it to get\r\n\t\t// to the actual main proj4 object.\r\n\t\t// See discussion in https://github.com/kartena/Proj4Leaflet/pull/147\r\n\t\tproj4 = proj4.default;\r\n\t}\r\n \r\n\tL.Proj = {};\r\n\r\n\tL.Proj._isProj4Obj = function(a) {\r\n\t\treturn (typeof a.inverse !== 'undefined' &&\r\n\t\t\ttypeof a.forward !== 'undefined');\r\n\t};\r\n\r\n\tL.Proj.Projection = L.Class.extend({\r\n\t\tinitialize: function(code, def, bounds) {\r\n\t\t\tvar isP4 = L.Proj._isProj4Obj(code);\r\n\t\t\tthis._proj = isP4 ? code : this._projFromCodeDef(code, def);\r\n\t\t\tthis.bounds = isP4 ? def : bounds;\r\n\t\t},\r\n\r\n\t\tproject: function (latlng) {\r\n\t\t\tvar point = this._proj.forward([latlng.lng, latlng.lat]);\r\n\t\t\treturn new L.Point(point[0], point[1]);\r\n\t\t},\r\n\r\n\t\tunproject: function (point, unbounded) {\r\n\t\t\tvar point2 = this._proj.inverse([point.x, point.y]);\r\n\t\t\treturn new L.LatLng(point2[1], point2[0], unbounded);\r\n\t\t},\r\n\r\n\t\t_projFromCodeDef: function(code, def) {\r\n\t\t\tif (def) {\r\n\t\t\t\tproj4.defs(code, def);\r\n\t\t\t} else if (proj4.defs[code] === undefined) {\r\n\t\t\t\tvar urn = code.split(':');\r\n\t\t\t\tif (urn.length > 3) {\r\n\t\t\t\t\tcode = urn[urn.length - 3] + ':' + urn[urn.length - 1];\r\n\t\t\t\t}\r\n\t\t\t\tif (proj4.defs[code] === undefined) {\r\n\t\t\t\t\tthrow 'No projection definition for code ' + code;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn proj4(code);\r\n\t\t}\r\n\t});\r\n\r\n\tL.Proj.CRS = L.Class.extend({\r\n\t\tincludes: L.CRS,\r\n\r\n\t\toptions: {\r\n\t\t\ttransformation: new L.Transformation(1, 0, -1, 0)\r\n\t\t},\r\n\r\n\t\tinitialize: function(a, b, c) {\r\n\t\t\tvar code,\r\n\t\t\t proj,\r\n\t\t\t def,\r\n\t\t\t options;\r\n\r\n\t\t\tif (L.Proj._isProj4Obj(a)) {\r\n\t\t\t\tproj = a;\r\n\t\t\t\tcode = proj.srsCode;\r\n\t\t\t\toptions = b || {};\r\n\r\n\t\t\t\tthis.projection = new L.Proj.Projection(proj, options.bounds);\r\n\t\t\t} else {\r\n\t\t\t\tcode = a;\r\n\t\t\t\tdef = b;\r\n\t\t\t\toptions = c || {};\r\n\t\t\t\tthis.projection = new L.Proj.Projection(code, def, options.bounds);\r\n\t\t\t}\r\n\r\n\t\t\tL.Util.setOptions(this, options);\r\n\t\t\tthis.code = code;\r\n\t\t\tthis.transformation = this.options.transformation;\r\n\r\n\t\t\tif (this.options.origin) {\r\n\t\t\t\tthis.transformation =\r\n\t\t\t\t\tnew L.Transformation(1, -this.options.origin[0],\r\n\t\t\t\t\t\t-1, this.options.origin[1]);\r\n\t\t\t}\r\n\r\n\t\t\tif (this.options.scales) {\r\n\t\t\t\tthis._scales = this.options.scales;\r\n\t\t\t} else if (this.options.resolutions) {\r\n\t\t\t\tthis._scales = [];\r\n\t\t\t\tfor (var i = this.options.resolutions.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tif (this.options.resolutions[i]) {\r\n\t\t\t\t\t\tthis._scales[i] = 1 / this.options.resolutions[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.infinite = !this.options.bounds;\r\n\r\n\t\t},\r\n\r\n\t\tscale: function(zoom) {\r\n\t\t\tvar iZoom = Math.floor(zoom),\r\n\t\t\t\tbaseScale,\r\n\t\t\t\tnextScale,\r\n\t\t\t\tscaleDiff,\r\n\t\t\t\tzDiff;\r\n\t\t\tif (zoom === iZoom) {\r\n\t\t\t\treturn this._scales[zoom];\r\n\t\t\t} else {\r\n\t\t\t\t// Non-integer zoom, interpolate\r\n\t\t\t\tbaseScale = this._scales[iZoom];\r\n\t\t\t\tnextScale = this._scales[iZoom + 1];\r\n\t\t\t\tscaleDiff = nextScale - baseScale;\r\n\t\t\t\tzDiff = (zoom - iZoom);\r\n\t\t\t\treturn baseScale + scaleDiff * zDiff;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tzoom: function(scale) {\r\n\t\t\t// Find closest number in this._scales, down\r\n\t\t\tvar downScale = this._closestElement(this._scales, scale),\r\n\t\t\t\tdownZoom = this._scales.indexOf(downScale),\r\n\t\t\t\tnextScale,\r\n\t\t\t\tnextZoom,\r\n\t\t\t\tscaleDiff;\r\n\t\t\t// Check if scale is downScale => return array index\r\n\t\t\tif (scale === downScale) {\r\n\t\t\t\treturn downZoom;\r\n\t\t\t}\r\n\t\t\tif (downScale === undefined) {\r\n\t\t\t\treturn -Infinity;\r\n\t\t\t}\r\n\t\t\t// Interpolate\r\n\t\t\tnextZoom = downZoom + 1;\r\n\t\t\tnextScale = this._scales[nextZoom];\r\n\t\t\tif (nextScale === undefined) {\r\n\t\t\t\treturn Infinity;\r\n\t\t\t}\r\n\t\t\tscaleDiff = nextScale - downScale;\r\n\t\t\treturn (scale - downScale) / scaleDiff + downZoom;\r\n\t\t},\r\n\r\n\t\tdistance: L.CRS.Earth.distance,\r\n\r\n\t\tR: L.CRS.Earth.R,\r\n\r\n\t\t/* Get the closest lowest element in an array */\r\n\t\t_closestElement: function(array, element) {\r\n\t\t\tvar low;\r\n\t\t\tfor (var i = array.length; i--;) {\r\n\t\t\t\tif (array[i] <= element && (low === undefined || low < array[i])) {\r\n\t\t\t\t\tlow = array[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn low;\r\n\t\t}\r\n\t});\r\n\r\n\tL.Proj.GeoJSON = L.GeoJSON.extend({\r\n\t\tinitialize: function(geojson, options) {\r\n\t\t\tthis._callLevel = 0;\r\n\t\t\tL.GeoJSON.prototype.initialize.call(this, geojson, options);\r\n\t\t},\r\n\r\n\t\taddData: function(geojson) {\r\n\t\t\tvar crs;\r\n\r\n\t\t\tif (geojson) {\r\n\t\t\t\tif (geojson.crs && geojson.crs.type === 'name') {\r\n\t\t\t\t\tcrs = new L.Proj.CRS(geojson.crs.properties.name);\r\n\t\t\t\t} else if (geojson.crs && geojson.crs.type) {\r\n\t\t\t\t\tcrs = new L.Proj.CRS(geojson.crs.type + ':' + geojson.crs.properties.code);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (crs !== undefined) {\r\n\t\t\t\t\tthis.options.coordsToLatLng = function(coords) {\r\n\t\t\t\t\t\tvar point = L.point(coords[0], coords[1]);\r\n\t\t\t\t\t\treturn crs.projection.unproject(point);\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Base class' addData might call us recursively, but\r\n\t\t\t// CRS shouldn't be cleared in that case, since CRS applies\r\n\t\t\t// to the whole GeoJSON, inluding sub-features.\r\n\t\t\tthis._callLevel++;\r\n\t\t\ttry {\r\n\t\t\t\tL.GeoJSON.prototype.addData.call(this, geojson);\r\n\t\t\t} finally {\r\n\t\t\t\tthis._callLevel--;\r\n\t\t\t\tif (this._callLevel === 0) {\r\n\t\t\t\t\tdelete this.options.coordsToLatLng;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tL.Proj.geoJson = function(geojson, options) {\r\n\t\treturn new L.Proj.GeoJSON(geojson, options);\r\n\t};\r\n\r\n\tL.Proj.ImageOverlay = L.ImageOverlay.extend({\r\n\t\tinitialize: function (url, bounds, options) {\r\n\t\t\tL.ImageOverlay.prototype.initialize.call(this, url, null, options);\r\n\t\t\tthis._projectedBounds = bounds;\r\n\t\t},\r\n\r\n\t\t// Danger ahead: Overriding internal methods in Leaflet.\r\n\t\t// Decided to do this rather than making a copy of L.ImageOverlay\r\n\t\t// and doing very tiny modifications to it.\r\n\t\t// Future will tell if this was wise or not.\r\n\t\t_animateZoom: function (event) {\r\n\t\t\tvar scale = this._map.getZoomScale(event.zoom);\r\n\t\t\tvar northWest = L.point(this._projectedBounds.min.x, this._projectedBounds.max.y);\r\n\t\t\tvar offset = this._projectedToNewLayerPoint(northWest, event.zoom, event.center);\r\n\r\n\t\t\tL.DomUtil.setTransform(this._image, offset, scale);\r\n\t\t},\r\n\r\n\t\t_reset: function () {\r\n\t\t\tvar zoom = this._map.getZoom();\r\n\t\t\tvar pixelOrigin = this._map.getPixelOrigin();\r\n\t\t\tvar bounds = L.bounds(\r\n\t\t\t\tthis._transform(this._projectedBounds.min, zoom)._subtract(pixelOrigin),\r\n\t\t\t\tthis._transform(this._projectedBounds.max, zoom)._subtract(pixelOrigin)\r\n\t\t\t);\r\n\t\t\tvar size = bounds.getSize();\r\n\r\n\t\t\tL.DomUtil.setPosition(this._image, bounds.min);\r\n\t\t\tthis._image.style.width = size.x + 'px';\r\n\t\t\tthis._image.style.height = size.y + 'px';\r\n\t\t},\r\n\r\n\t\t_projectedToNewLayerPoint: function (point, zoom, center) {\r\n\t\t\tvar viewHalf = this._map.getSize()._divideBy(2);\r\n\t\t\tvar newTopLeft = this._map.project(center, zoom)._subtract(viewHalf)._round();\r\n\t\t\tvar topLeft = newTopLeft.add(this._map._getMapPanePos());\r\n\r\n\t\t\treturn this._transform(point, zoom)._subtract(topLeft);\r\n\t\t},\r\n\r\n\t\t_transform: function (point, zoom) {\r\n\t\t\tvar crs = this._map.options.crs;\r\n\t\t\tvar transformation = crs.transformation;\r\n\t\t\tvar scale = crs.scale(zoom);\r\n\r\n\t\t\treturn transformation.transform(point, scale);\r\n\t\t}\r\n\t});\r\n\r\n\tL.Proj.imageOverlay = function (url, bounds, options) {\r\n\t\treturn new L.Proj.ImageOverlay(url, bounds, options);\r\n\t};\r\n\r\n\treturn L.Proj;\r\n}));\r\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n allowDots: false,\n allowPrototypes: false,\n allowSparse: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\nvar parseArrayValue = function (val, options) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n return val.split(',');\n }\n\n return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = {};\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n var parts = cleanStr.split(options.delimiter, limit);\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key, val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset, 'key');\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n val = utils.maybeMap(\n parseArrayValue(part.slice(pos + 1), options),\n function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n }\n );\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(val);\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val;\n }\n\n if (has.call(obj, key)) {\n obj[key] = utils.combine(obj[key], val);\n } else {\n obj[key] = val;\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n obj = [].concat(leaf);\n } else {\n obj = options.plainObjects ? Object.create(null) : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var index = parseInt(cleanRoot, 10);\n if (!options.parseArrays && cleanRoot === '') {\n obj = { 0: leaf };\n } else if (\n !isNaN(index)\n && root !== cleanRoot\n && String(index) === cleanRoot\n && index >= 0\n && (options.parseArrays && index <= options.arrayLimit)\n ) {\n obj = [];\n obj[index] = leaf;\n } else if (cleanRoot !== '__proto__') {\n obj[cleanRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n if (!givenKey) {\n return;\n }\n\n // Transform dot notation to bracket notation\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n // The regex chunks\n\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n\n // Get the parent\n\n var segment = options.depth > 0 && brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n\n // Stash the parent if it exists\n\n var keys = [];\n if (parent) {\n // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys.push(parent);\n }\n\n // Loop through children appending to the array until we hit depth\n\n var i = 0;\n while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n keys.push(segment[1]);\n }\n\n // If there's a remainder, just add whatever is left\n\n if (segment) {\n keys.push('[' + key.slice(segment.index) + ']');\n }\n\n return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n return {\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? Object.create(null) : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? Object.create(null) : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n obj = utils.merge(obj, newObj, options);\n }\n\n if (options.allowSparse === true) {\n return obj;\n }\n\n return utils.compact(obj);\n};\n","export default 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 // UTM WGS84\n for (var i = 0; i <= 60; ++i) {\n defs('EPSG:' + (32600 + i), \"+proj=utm +zone=\" + i + \" +datum=WGS84 +units=m\");\n defs('EPSG:' + (32700 + i), \"+proj=utm +zone=\" + i + \" +south +datum=WGS84 +units=m\");\n }\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","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_GRIDSHIFT = 3;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SRS_WGS84_SEMIMAJOR = 6378137.0; // only used in grid shift transforms\nexport var SRS_WGS84_SEMIMINOR = 6356752.314; // only used in grid shift transforms\nexport var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI/2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI/4;\nexport 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.\nexport var SPI = 3.14159265359;\n","var exports = {};\nexport {exports as default};\n\nexports.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\"\n","export default {\n 'mm': {to_meter: 0.001},\n 'cm': {to_meter: 0.01},\n 'ft': {to_meter: 0.3048},\n 'us-ft': {to_meter: 1200 / 3937},\n 'fath': {to_meter: 1.8288},\n 'kmi': {to_meter: 1852},\n 'us-ch': {to_meter: 20.1168402336805},\n 'us-mi': {to_meter: 1609.34721869444},\n 'km': {to_meter: 1000},\n 'ind-ft': {to_meter: 0.30479841},\n 'ind-yd': {to_meter: 0.91439523},\n 'mi': {to_meter: 1609.344},\n 'yd': {to_meter: 0.9144},\n 'ch': {to_meter: 20.1168},\n 'link': {to_meter: 0.201168},\n 'dm': {to_meter: 0.01},\n 'in': {to_meter: 0.0254},\n 'ind-ch': {to_meter: 20.11669506},\n 'us-in': {to_meter: 0.025400050800101},\n 'us-yd': {to_meter: 0.914401828803658}\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n if (obj[key]) {\n return obj[key];\n }\n var keys = Object.keys(obj);\n var lkey = key.toLowerCase().replace(ignoredChar, '');\n var i = -1;\n var testkey, processedKey;\n while (++i < keys.length) {\n testkey = keys[i];\n processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n if (processedKey === lkey) {\n return obj[testkey];\n }\n }\n}\n","import {D2R} from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\nexport default function(defData) {\n var self = {};\n var paramObj = defData.split('+').map(function(v) {\n return v.trim();\n }).filter(function(a) {\n return a;\n }).reduce(function(p, a) {\n var split = a.split('=');\n split.push(true);\n p[split[0].toLowerCase()] = split[1];\n return p;\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 gamma: function(v) {\n self.rectified_grid_angle = parseFloat(v);\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: function(v) {\n self.a = 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 var unit = match(units, v);\n if (unit) {\n self.to_meter = unit.to_meter;\n }\n },\n from_greenwich: function(v) {\n self.from_greenwich = v * D2R;\n },\n pm: function(v) {\n var pm = match(PrimeMeridian, v);\n self.from_greenwich = (pm ? pm : 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 approx: function() {\n self.approx = true;\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","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\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);\nexport default defs;\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code){\n return typeof code === 'string';\n}\nfunction testDef(code){\n return code in defs;\n}\nvar codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\nfunction testWKT(code){\n return codeWords.some(function (word) {\n return code.indexOf(word) > -1;\n });\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n var auth = match(item, 'authority');\n if (!auth) {\n return;\n }\n var code = match(auth, 'epsg');\n return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n var ext = match(item, 'extension');\n if (!ext) {\n return;\n }\n return match(ext, 'proj4');\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 if (testWKT(code)) {\n var out = wkt(code);\n // test of spetial case, due to this being a very common and often malformed\n if (checkMercator(out)) {\n return defs['EPSG:3857'];\n }\n var maybeProjStr = checkProjStr(out);\n if (maybeProjStr) {\n return projStr(maybeProjStr);\n }\n return out;\n }\n if (testProj(code)) {\n return projStr(code);\n }\n }else{\n return code;\n }\n}\n\nexport default parse;\n","export default 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","export default function(eccent, sinphi, cosphi) {\n var con = eccent * sinphi;\n return cosphi / (Math.sqrt(1 - con * con));\n}","export default function(x) {\n return x<0 ? -1 : 1;\n}","\nimport {TWO_PI, SPI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default 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}\n","import {HALF_PI} from '../constants/values';\n\nexport default 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}\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport {FORTPI, R2D, EPSLN, HALF_PI} from '../constants/values';\nexport function init() {\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\nexport function forward(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/* Mercator inverse equations--mapping x,y to lat/long\n --------------------------------------------------*/\nexport function inverse(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\nexport var names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export function init() {\n //no-op for longlat\n}\n\nfunction identity(pt) {\n return pt;\n}\nexport {identity as forward};\nexport {identity as inverse};\nexport var names = [\"longlat\", \"identity\"];\nexport default {\n init: init,\n forward: identity,\n inverse: identity,\n names: names\n};\n","import merc from \"./projections/merc\";\nimport longlat from \"./projections/longlat\";\nvar projs = [merc, longlat];\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\nexport {add};\n\nexport function get(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}\n\nexport function start() {\n projs.forEach(add);\n}\nexport default {\n start: start,\n add: add,\n get: get\n};\n","var exports = {};\nexport {exports as default};\nexports.MERIT = {\n a: 6378137.0,\n rf: 298.257,\n ellipseName: \"MERIT 1983\"\n};\n\nexports.SGS85 = {\n a: 6378136.0,\n rf: 298.257,\n ellipseName: \"Soviet Geodetic System 85\"\n};\n\nexports.GRS80 = {\n a: 6378137.0,\n rf: 298.257222101,\n ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\n\nexports.IAU76 = {\n a: 6378140.0,\n rf: 298.257,\n ellipseName: \"IAU 1976\"\n};\n\nexports.airy = {\n a: 6377563.396,\n b: 6356256.910,\n ellipseName: \"Airy 1830\"\n};\n\nexports.APL4 = {\n a: 6378137,\n rf: 298.25,\n ellipseName: \"Appl. Physics. 1965\"\n};\n\nexports.NWL9D = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"Naval Weapons Lab., 1965\"\n};\n\nexports.mod_airy = {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: \"Modified Airy\"\n};\n\nexports.andrae = {\n a: 6377104.43,\n rf: 300.0,\n ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\n\nexports.aust_SA = {\n a: 6378160.0,\n rf: 298.25,\n ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\n\nexports.GRS67 = {\n a: 6378160.0,\n rf: 298.2471674270,\n ellipseName: \"GRS 67(IUGG 1967)\"\n};\n\nexports.bessel = {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841\"\n};\n\nexports.bess_nam = {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841 (Namibia)\"\n};\n\nexports.clrk66 = {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: \"Clarke 1866\"\n};\n\nexports.clrk80 = {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: \"Clarke 1880 mod.\"\n};\n\nexports.clrk80ign = {\n a: 6378249.2,\n b: 6356515,\n rf: 293.4660213,\n ellipseName: \"Clarke 1880 (IGN)\"\n};\n\nexports.clrk58 = {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: \"Clarke 1858\"\n};\n\nexports.CPM = {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\n\nexports.delmbr = {\n a: 6376428.0,\n rf: 311.5,\n ellipseName: \"Delambre 1810 (Belgium)\"\n};\n\nexports.engelis = {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: \"Engelis 1985\"\n};\n\nexports.evrst30 = {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: \"Everest 1830\"\n};\n\nexports.evrst48 = {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: \"Everest 1948\"\n};\n\nexports.evrst56 = {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: \"Everest 1956\"\n};\n\nexports.evrst69 = {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: \"Everest 1969\"\n};\n\nexports.evrstSS = {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: \"Everest (Sabah & Sarawak)\"\n};\n\nexports.fschr60 = {\n a: 6378166.0,\n rf: 298.3,\n ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\n\nexports.fschr60m = {\n a: 6378155.0,\n rf: 298.3,\n ellipseName: \"Fischer 1960\"\n};\n\nexports.fschr68 = {\n a: 6378150.0,\n rf: 298.3,\n ellipseName: \"Fischer 1968\"\n};\n\nexports.helmert = {\n a: 6378200.0,\n rf: 298.3,\n ellipseName: \"Helmert 1906\"\n};\n\nexports.hough = {\n a: 6378270.0,\n rf: 297.0,\n ellipseName: \"Hough\"\n};\n\nexports.intl = {\n a: 6378388.0,\n rf: 297.0,\n ellipseName: \"International 1909 (Hayford)\"\n};\n\nexports.kaula = {\n a: 6378163.0,\n rf: 298.24,\n ellipseName: \"Kaula 1961\"\n};\n\nexports.lerch = {\n a: 6378139.0,\n rf: 298.257,\n ellipseName: \"Lerch 1979\"\n};\n\nexports.mprts = {\n a: 6397300.0,\n rf: 191.0,\n ellipseName: \"Maupertius 1738\"\n};\n\nexports.new_intl = {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: \"New International 1967\"\n};\n\nexports.plessis = {\n a: 6376523.0,\n rf: 6355863.0,\n ellipseName: \"Plessis 1817 (France)\"\n};\n\nexports.krass = {\n a: 6378245.0,\n rf: 298.3,\n ellipseName: \"Krassovsky, 1942\"\n};\n\nexports.SEasia = {\n a: 6378155.0,\n b: 6356773.3205,\n ellipseName: \"Southeast Asia\"\n};\n\nexports.walbeck = {\n a: 6376896.0,\n b: 6355834.8467,\n ellipseName: \"Walbeck\"\n};\n\nexports.WGS60 = {\n a: 6378165.0,\n rf: 298.3,\n ellipseName: \"WGS 60\"\n};\n\nexports.WGS66 = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"WGS 66\"\n};\n\nexports.WGS7 = {\n a: 6378135.0,\n rf: 298.26,\n ellipseName: \"WGS 72\"\n};\n\nexport var WGS84 = exports.WGS84 = {\n a: 6378137.0,\n rf: 298.257223563,\n ellipseName: \"WGS 84\"\n};\n\nexports.sphere = {\n a: 6370997.0,\n b: 6370997.0,\n ellipseName: \"Normal Sphere (r=6370997)\"\n};\n","import {SIXTH, RA4, RA6, EPSLN} from './constants/values';\nimport {default as Ellipsoid, WGS84} from './constants/Ellipsoid';\nimport match from './match';\n\nexport function eccentricity(a, b, rf, R_A) {\n var a2 = a * a; // used in geocentric\n var b2 = b * b; // used in geocentric\n var es = (a2 - b2) / a2; // e ^ 2\n var e = 0;\n if (R_A) {\n a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n a2 = a * a;\n es = 0;\n } else {\n e = Math.sqrt(es); // eccentricity\n }\n var ep2 = (a2 - b2) / b2; // used in geocentric\n return {\n es: es,\n e: e,\n ep2: ep2\n };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n if (!a) { // do we have an ellipsoid?\n var ellipse = match(Ellipsoid, ellps);\n if (!ellipse) {\n ellipse = WGS84;\n }\n a = ellipse.a;\n b = ellipse.b;\n rf = ellipse.rf;\n }\n\n if (rf && !b) {\n b = (1.0 - 1.0 / rf) * a;\n }\n if (rf === 0 || Math.abs(a - b) < EPSLN) {\n sphere = true;\n b = a;\n }\n return {\n a: a,\n b: b,\n rf: rf,\n sphere: sphere\n };\n}\n","var datums = {\n wgs84: {\n towgs84: \"0,0,0\",\n ellipse: \"WGS84\",\n datumName: \"WGS84\"\n },\n ch1903: {\n towgs84: \"674.374,15.056,405.346\",\n ellipse: \"bessel\",\n datumName: \"swiss\"\n },\n ggrs87: {\n towgs84: \"-199.87,74.79,246.62\",\n ellipse: \"GRS80\",\n datumName: \"Greek_Geodetic_Reference_System_1987\"\n },\n nad83: {\n towgs84: \"0,0,0\",\n ellipse: \"GRS80\",\n datumName: \"North_American_Datum_1983\"\n },\n nad27: {\n nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n ellipse: \"clrk66\",\n datumName: \"North_American_Datum_1927\"\n },\n potsdam: {\n towgs84: \"598.1,73.7,418.2,0.202,0.045,-2.455,6.7\",\n ellipse: \"bessel\",\n datumName: \"Potsdam Rauenberg 1950 DHDN\"\n },\n carthage: {\n towgs84: \"-263.0,6.0,431.0\",\n ellipse: \"clark80\",\n datumName: \"Carthage 1934 Tunisia\"\n },\n hermannskogel: {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Hermannskogel\"\n },\n militargeographische_institut: {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Militar-Geographische Institut\",\n },\n osni52: {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"airy\",\n datumName: \"Irish National\"\n },\n 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 },\n rassadiran: {\n towgs84: \"-133.63,-157.5,-158.62\",\n ellipse: \"intl\",\n datumName: \"Rassadiran\"\n },\n 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 },\n osgb36: {\n towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n ellipse: \"airy\",\n datumName: \"Ordnance Survey of Great Britain 1936\"\n },\n s_jtsk: {\n towgs84: \"589,76,480\",\n ellipse: 'bessel',\n datumName: 'S-JTSK (Ferro)'\n },\n beduaram: {\n towgs84: '-106,-87,188',\n ellipse: 'clrk80',\n datumName: 'Beduaram'\n },\n gunung_segara: {\n towgs84: '-403,684,41',\n ellipse: 'bessel',\n datumName: 'Gunung Segara Jakarta'\n },\n 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 }\n};\n\nfor (var key in datums) {\n var datum = datums[key];\n datums[datum.datumName] = datum;\n}\n\nexport default datums;\n","import {PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD} from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {\n var out = {};\n\n if (datumCode === undefined || datumCode === 'none') {\n out.datum_type = PJD_NODATUM;\n } else {\n out.datum_type = PJD_WGS84;\n }\n\n if (datum_params) {\n out.datum_params = datum_params.map(parseFloat);\n if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n out.datum_type = PJD_3PARAM;\n }\n if (out.datum_params.length > 3) {\n if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n out.datum_type = PJD_7PARAM;\n out.datum_params[3] *= SEC_TO_RAD;\n out.datum_params[4] *= SEC_TO_RAD;\n out.datum_params[5] *= SEC_TO_RAD;\n out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n }\n }\n }\n\n if (nadgrids) {\n out.datum_type = PJD_GRIDSHIFT;\n out.grids = nadgrids;\n }\n out.a = a; //datum object also uses these values\n out.b = b;\n out.es = es;\n out.ep2 = ep2;\n return out;\n}\n\nexport default datum;\n","/**\n * Resources for details of NTv2 file formats:\n * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf\n * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm\n */\n\nvar loadedNadgrids = {};\n\n/**\n * Load a binary NTv2 file (.gsb) to a key that can be used in a proj string like +nadgrids=. Pass the NTv2 file\n * as an ArrayBuffer.\n */\nexport default function nadgrid(key, data) {\n var view = new DataView(data);\n var isLittleEndian = detectLittleEndian(view);\n var header = readHeader(view, isLittleEndian);\n var subgrids = readSubgrids(view, header, isLittleEndian);\n var nadgrid = {header: header, subgrids: subgrids};\n loadedNadgrids[key] = nadgrid;\n return nadgrid;\n}\n\n/**\n * Given a proj4 value for nadgrids, return an array of loaded grids\n */\nexport function getNadgrids(nadgrids) {\n // Format details: http://proj.maptools.org/gen_parms.html\n if (nadgrids === undefined) { return null; }\n var grids = nadgrids.split(',');\n return grids.map(parseNadgridString);\n}\n\nfunction parseNadgridString(value) {\n if (value.length === 0) {\n return null;\n }\n var optional = value[0] === '@';\n if (optional) {\n value = value.slice(1);\n }\n if (value === 'null') {\n return {name: 'null', mandatory: !optional, grid: null, isNull: true};\n }\n return {\n name: value,\n mandatory: !optional,\n grid: loadedNadgrids[value] || null,\n isNull: false\n };\n}\n\nfunction secondsToRadians(seconds) {\n return (seconds / 3600) * Math.PI / 180;\n}\n\nfunction detectLittleEndian(view) {\n var nFields = view.getInt32(8, false);\n if (nFields === 11) {\n return false;\n }\n nFields = view.getInt32(8, true);\n if (nFields !== 11) {\n console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');\n }\n return true;\n}\n\nfunction readHeader(view, isLittleEndian) {\n return {\n nFields: view.getInt32(8, isLittleEndian),\n nSubgridFields: view.getInt32(24, isLittleEndian),\n nSubgrids: view.getInt32(40, isLittleEndian),\n shiftType: decodeString(view, 56, 56 + 8).trim(),\n fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),\n fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),\n toSemiMajorAxis: view.getFloat64(152, isLittleEndian),\n toSemiMinorAxis: view.getFloat64(168, isLittleEndian),\n };\n}\n\nfunction decodeString(view, start, end) {\n return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));\n}\n\nfunction readSubgrids(view, header, isLittleEndian) {\n var gridOffset = 176;\n var grids = [];\n for (var i = 0; i < header.nSubgrids; i++) {\n var subHeader = readGridHeader(view, gridOffset, isLittleEndian);\n var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian);\n var lngColumnCount = Math.round(\n 1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);\n var latColumnCount = Math.round(\n 1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);\n // Proj4 operates on radians whereas the coordinates are in seconds in the grid\n grids.push({\n ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],\n del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],\n lim: [lngColumnCount, latColumnCount],\n count: subHeader.gridNodeCount,\n cvs: mapNodes(nodes)\n });\n gridOffset += 176 + subHeader.gridNodeCount * 16;\n }\n return grids;\n}\n\nfunction mapNodes(nodes) {\n return nodes.map(function (r) {return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];});\n}\n\nfunction readGridHeader(view, offset, isLittleEndian) {\n return {\n name: decodeString(view, offset + 8, offset + 16).trim(),\n parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),\n lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),\n upperLatitude: view.getFloat64(offset + 88, isLittleEndian),\n lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),\n upperLongitude: view.getFloat64(offset + 120, isLittleEndian),\n latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),\n longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),\n gridNodeCount: view.getInt32(offset + 168, isLittleEndian)\n };\n}\n\nfunction readGridNodes(view, offset, gridHeader, isLittleEndian) {\n var nodesOffset = offset + 176;\n var gridRecordLength = 16;\n var gridShiftRecords = [];\n for (var i = 0; i < gridHeader.gridNodeCount; i++) {\n var record = {\n latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),\n longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian),\n latitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian),\n longitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian),\n };\n gridShiftRecords.push(record);\n }\n return gridShiftRecords;\n}\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\nimport {getNadgrids} from \"./nadgrid\";\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('Could not parse to valid json: ' + srsCode);\n return;\n }\n var ourProj = Projection.projections.get(json.projName);\n if(!ourProj){\n callback('Could not get projection name from: ' + srsCode);\n return;\n }\n if (json.datumCode && json.datumCode !== 'none') {\n var datumDef = match(Datum, json.datumCode);\n if (datumDef) {\n json.datum_params = 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 json.k0 = json.k0 || 1.0;\n json.axis = json.axis || 'enu';\n json.ellps = json.ellps || 'wgs84';\n json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this\n\n var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n var nadgrids = getNadgrids(json.nadgrids);\n var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,\n nadgrids);\n\n extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n extend(this, ourProj); // transfer all the methods from the projection\n\n // copy the 4 things over we calculated in deriveConstants.sphere\n this.a = sphere_.a;\n this.b = sphere_.b;\n this.rf = sphere_.rf;\n this.sphere = sphere_.sphere;\n\n // copy the 3 things we calculated in deriveConstants.eccentricity\n this.es = ecc.es;\n this.e = ecc.e;\n this.ep2 = ecc.ep2;\n\n // add in the datum object\n this.datum = datumObj;\n\n // init the projection\n this.init();\n\n // legecy callback from back in the day when it went to spatialreference.org\n callback(null, this);\n\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","'use strict';\nimport {PJD_3PARAM, PJD_7PARAM, HALF_PI} from './constants/values';\nexport function compareDatums(source, dest) {\n if (source.datum_type !== dest.datum_type) {\n return false; // false, datums are not equal\n } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n // the tolerance for es is to ensure that GRS80 and WGS84\n // are considered identical\n return false;\n } else if (source.datum_type === PJD_3PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n } else if (source.datum_type === PJD_7PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\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 */\nexport function geodeticToGeocentric(p, es, a) {\n var Longitude = p.x;\n var Latitude = p.y;\n var Height = p.z ? p.z : 0; //Z value not always supplied\n\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 } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n Latitude = HALF_PI;\n } else if (Latitude < -HALF_PI) {\n /* Latitude out of range */\n //..reportError('geocent:lat out of range:' + Latitude);\n return { x: -Infinity, y: -Infinity, z: p.z };\n } else if (Latitude > HALF_PI) {\n /* Latitude out of range */\n return { x: Infinity, y: Infinity, z: p.z };\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 = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n return {\n x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n z: ((Rn * (1 - es)) + Height) * Sin_Lat\n };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\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 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 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 / a < genau) {\n\n /* special case, if P=0. (X=0., Y=0.) */\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 / a < genau) {\n Latitude = HALF_PI;\n Height = -b;\n return {\n x: p.x,\n y: p.y,\n z: p.z\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 - es * (2.0 - es) * ST * ST);\n CPHI0 = ST * (1.0 - 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 = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n /* ellipsoidal (geodetic) height */\n Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n RK = 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 return {\n x: Longitude,\n y: Latitude,\n z: Height\n };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n// p = point to transform in geocentric coordinates (x,y,z)\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*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x + datum_params[0],\n y: p.y + datum_params[1],\n z: p.z + datum_params[2],\n };\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n };\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)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n //if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x - datum_params[0],\n y: p.y - datum_params[1],\n z: p.z - datum_params[2],\n };\n\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = 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 return {\n x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n };\n } //cs_geocentric_from_wgs84()\n}\n","import {\n PJD_3PARAM,\n PJD_7PARAM,\n PJD_GRIDSHIFT,\n PJD_NODATUM,\n R2D,\n SRS_WGS84_ESQUARED,\n SRS_WGS84_SEMIMAJOR, SRS_WGS84_SEMIMINOR\n} from './constants/values';\n\nimport {geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums} from './datumUtils';\nimport adjust_lon from \"./common/adjust_lon\";\nfunction checkParams(type) {\n return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function(source, dest, point) {\n // Short cut if the datums are identical.\n if (compareDatums(source, 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 // If this datum requires grid shifts, then apply it to geodetic coordinates.\n var source_a = source.a;\n var source_es = source.es;\n if (source.datum_type === PJD_GRIDSHIFT) {\n var gridShiftCode = applyGridShift(source, false, point);\n if (gridShiftCode !== 0) {\n return undefined;\n }\n source_a = SRS_WGS84_SEMIMAJOR;\n source_es = SRS_WGS84_ESQUARED;\n }\n\n var dest_a = dest.a;\n var dest_b = dest.b;\n var dest_es = dest.es;\n if (dest.datum_type === PJD_GRIDSHIFT) {\n dest_a = SRS_WGS84_SEMIMAJOR;\n dest_b = SRS_WGS84_SEMIMINOR;\n dest_es = SRS_WGS84_ESQUARED;\n }\n\n // Do we need to go through geocentric coordinates?\n if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {\n return point;\n }\n\n // Convert to geocentric coordinates.\n point = geodeticToGeocentric(point, source_es, source_a);\n // Convert between datums\n if (checkParams(source.datum_type)) {\n point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n }\n if (checkParams(dest.datum_type)) {\n point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n }\n point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);\n\n if (dest.datum_type === PJD_GRIDSHIFT) {\n var destGridShiftResult = applyGridShift(dest, true, point);\n if (destGridShiftResult !== 0) {\n return undefined;\n }\n }\n\n return point;\n}\n\nexport function applyGridShift(source, inverse, point) {\n if (source.grids === null || source.grids.length === 0) {\n console.log('Grid shift grids not found');\n return -1;\n }\n var input = {x: -point.x, y: point.y};\n var output = {x: Number.NaN, y: Number.NaN};\n var onlyMandatoryGrids = false;\n var attemptedGrids = [];\n outer:\n for (var i = 0; i < source.grids.length; i++) {\n var grid = source.grids[i];\n attemptedGrids.push(grid.name);\n if (grid.isNull) {\n output = input;\n break;\n }\n onlyMandatoryGrids = grid.mandatory;\n if (grid.grid === null) {\n if (grid.mandatory) {\n console.log(\"Unable to find mandatory grid '\" + grid.name + \"'\");\n return -1;\n }\n continue;\n }\n var subgrids = grid.grid.subgrids;\n for (var j = 0, jj = subgrids.length; j < jj; j++) {\n var subgrid = subgrids[j];\n // skip tables that don't match our point at all\n var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;\n var minX = subgrid.ll[0] - epsilon;\n var minY = subgrid.ll[1] - epsilon;\n var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;\n var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;\n if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x ) {\n continue;\n }\n output = applySubgridShift(input, inverse, subgrid);\n if (!isNaN(output.x)) {\n break outer;\n }\n }\n }\n if (isNaN(output.x)) {\n console.log(\"Failed to find a grid shift table for location '\"+\n -input.x * R2D + \" \" + input.y * R2D + \" tried: '\" + attemptedGrids + \"'\");\n return -1;\n }\n point.x = -output.x;\n point.y = output.y;\n return 0;\n}\n\nfunction applySubgridShift(pin, inverse, ct) {\n var val = {x: Number.NaN, y: Number.NaN};\n if (isNaN(pin.x)) { return val; }\n var tb = {x: pin.x, y: pin.y};\n tb.x -= ct.ll[0];\n tb.y -= ct.ll[1];\n tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;\n var t = nadInterpolate(tb, ct);\n if (inverse) {\n if (isNaN(t.x)) {\n return val;\n }\n t.x = tb.x - t.x;\n t.y = tb.y - t.y;\n var i = 9, tol = 1e-12;\n var dif, del;\n do {\n del = nadInterpolate(t, ct);\n if (isNaN(del.x)) {\n console.log(\"Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.\");\n break;\n }\n dif = {x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y)};\n t.x += dif.x;\n t.y += dif.y;\n } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);\n if (i < 0) {\n console.log(\"Inverse grid shift iterator failed to converge.\");\n return val;\n }\n val.x = adjust_lon(t.x + ct.ll[0]);\n val.y = t.y + ct.ll[1];\n } else {\n if (!isNaN(t.x)) {\n val.x = pin.x + t.x;\n val.y = pin.y + t.y;\n }\n }\n return val;\n}\n\nfunction nadInterpolate(pin, ct) {\n var t = {x: pin.x / ct.del[0], y: pin.y / ct.del[1]};\n var indx = {x: Math.floor(t.x), y: Math.floor(t.y)};\n var frct = {x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y};\n var val= {x: Number.NaN, y: Number.NaN};\n var inx;\n if (indx.x < 0 || indx.x >= ct.lim[0]) {\n return val;\n }\n if (indx.y < 0 || indx.y >= ct.lim[1]) {\n return val;\n }\n inx = (indx.y * ct.lim[0]) + indx.x;\n var f00 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx++;\n var f10= {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx += ct.lim[0];\n var f11 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx--;\n var f01 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),\n m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;\n val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);\n val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);\n return val;\n}\n","export default 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 var out = {};\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 if (\"ew\".indexOf(crs.axis[i]) !== -1) {\n t = 'x';\n } else {\n t = 'y';\n }\n\n }\n else if (i === 1) {\n v = yin;\n if (\"ns\".indexOf(crs.axis[i]) !== -1) {\n t = 'y';\n } else {\n t = 'x';\n }\n }\n else {\n v = zin;\n t = 'z';\n }\n switch (crs.axis[i]) {\n case 'e':\n out[t] = v;\n break;\n case 'w':\n out[t] = -v;\n break;\n case 'n':\n out[t] = v;\n break;\n case 's':\n out[t] = -v;\n break;\n case 'u':\n if (point[t] !== undefined) {\n out.z = v;\n }\n break;\n case 'd':\n if (point[t] !== undefined) {\n out.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 out;\n}\n","export default 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}","export default function (point) {\n checkCoord(point.x);\n checkCoord(point.y);\n}\nfunction checkCoord(num) {\n if (typeof Number.isFinite === 'function') {\n if (Number.isFinite(num)) {\n return;\n }\n throw new TypeError('coordinates must be finite numbers');\n }\n if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n throw new TypeError('coordinates must be finite numbers');\n }\n}\n","import {D2R, R2D, PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT} from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n return (\n (source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM || source.datum.datum_type === PJD_GRIDSHIFT) && dest.datumCode !== 'WGS84') ||\n ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM || dest.datum.datum_type === PJD_GRIDSHIFT) && source.datumCode !== 'WGS84');\n}\n\nexport default function transform(source, dest, point, enforceAxis) {\n var wgs84;\n if (Array.isArray(point)) {\n point = toPoint(point);\n } else {\n // Clone the point object so inputs don't get modified\n point = {\n x: point.x,\n y: point.y,\n z: point.z,\n m: point.m\n };\n }\n var hasZ = point.z !== undefined;\n checkSanity(point);\n // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n wgs84 = new proj('WGS84');\n point = transform(source, wgs84, point, enforceAxis);\n source = wgs84;\n }\n // DGR, 2010/11/12\n if (enforceAxis && source.axis !== 'enu') {\n point = 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 = {\n x: point.x * D2R,\n y: point.y * D2R,\n z: point.z || 0\n };\n } else {\n if (source.to_meter) {\n point = {\n x: point.x * source.to_meter,\n y: point.y * source.to_meter,\n z: point.z || 0\n };\n }\n point = source.inverse(point); // Convert Cartesian to longlat\n if (!point) {\n return;\n }\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 if (!point) {\n return;\n }\n\n // Adjust for the prime meridian if necessary\n if (dest.from_greenwich) {\n point = {\n x: point.x - dest.from_greenwich,\n y: point.y,\n z: point.z || 0\n };\n }\n\n if (dest.projName === 'longlat') {\n // convert radians to decimal degrees\n point = {\n x: point.x * R2D,\n y: point.y * R2D,\n z: point.z || 0\n };\n } else { // else project\n point = dest.forward(point);\n if (dest.to_meter) {\n point = {\n x: point.x / dest.to_meter,\n y: point.y / dest.to_meter,\n z: point.z || 0\n };\n }\n }\n\n // DGR, 2010/11/12\n if (enforceAxis && dest.axis !== 'enu') {\n return adjust_axis(dest, true, point);\n }\n\n if (point && !hasZ) {\n delete point.z;\n }\n return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords, enforceAxis) {\n var transformedArray, out, keys;\n if (Array.isArray(coords)) {\n transformedArray = transform(from, to, coords, enforceAxis) || {x: NaN, y: NaN};\n if (coords.length > 2) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (typeof transformedArray.z === 'number') {\n return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.slice(3));\n } else {\n return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.slice(3));\n }\n } else {\n return [transformedArray.x, transformedArray.y].concat(coords.slice(2));\n }\n } else {\n return [transformedArray.x, transformedArray.y];\n }\n } else {\n out = transform(from, to, coords, enforceAxis);\n keys = Object.keys(coords);\n if (keys.length === 2) {\n return out;\n }\n keys.forEach(function (key) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (key === 'x' || key === 'y' || key === 'z') {\n return;\n }\n } else {\n if (key === 'x' || key === 'y') {\n return;\n }\n }\n out[key] = coords[key];\n });\n return out;\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}\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 } 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 } else {\n obj = {\n forward: function (coords, enforceAxis) {\n return transformer(fromProj, toProj, coords, enforceAxis);\n },\n inverse: function (coords, enforceAxis) {\n return transformer(toProj, fromProj, coords, enforceAxis);\n }\n };\n if (single) {\n obj.oProj = toProj;\n }\n return obj;\n }\n}\nexport default proj4;","import {toPoint, forward} from '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 } 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(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n return forward([this.x, this.y], accuracy);\n};\nexport default Point;\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\nexport default 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}","export default 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}","import pj_mlfn from \"./pj_mlfn\";\nimport {EPSLN} from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default 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}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport {EPSLN, HALF_PI} from '../constants/values';\nimport sign from '../common/sign';\n\nexport function init() {\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n }\n}\n\n/**\n Transverse Mercator Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(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.es) {\n var b = cos_phi * Math.sin(delta_lon);\n\n if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n return (93);\n }\n else {\n x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n b = Math.abs(y);\n\n if (b >= 1) {\n if ((b - 1) > EPSLN) {\n return (93);\n }\n else {\n y = 0;\n }\n }\n else {\n y = Math.acos(y);\n }\n\n if (lat < 0) {\n y = -y;\n }\n\n y = this.a * this.k0 * (y - this.lat0) + this.y0;\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 cs = Math.pow(c, 2);\n var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n var t = Math.pow(tq, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n al = al / Math.sqrt(con);\n var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n x = this.a * (this.k0 * al * (1 +\n als / 6 * (1 - t + c +\n als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n this.x0;\n\n y = this.a * (this.k0 * (ml - this.ml0 +\n sin_phi * delta_lon * al / 2 * (1 +\n als / 12 * (5 - t + 9 * c + 4 * cs +\n als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n this.y0;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\n/**\n Transverse Mercator Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var con, phi;\n var lat, lon;\n var x = (p.x - this.x0) * (1 / this.a);\n var y = (p.y - this.y0) * (1 / this.a);\n\n if (!this.es) {\n var f = Math.exp(x / this.k0);\n var g = 0.5 * (f - 1 / f);\n var temp = this.lat0 + y / this.k0;\n var h = Math.cos(temp);\n con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n lat = Math.asin(con);\n\n if (y < 0) {\n lat = -lat;\n }\n\n if ((g === 0) && (h === 0)) {\n lon = 0;\n }\n else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0);\n }\n }\n else { // ellipsoidal form\n con = this.ml0 + y / this.k0;\n phi = pj_inv_mlfn(con, this.es, this.en);\n\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.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\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 d = x * Math.sqrt(con) / this.k0;\n var ds = Math.pow(d, 2);\n con = con * tan_phi;\n\n lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n lon = adjust_lon(this.long0 + (d * (1 -\n ds / 6 * (1 + 2 * t + c -\n ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n }\n else {\n lat = HALF_PI * sign(y);\n lon = 0;\n }\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Fast_Transverse_Mercator\", \"Fast Transverse Mercator\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(x) {\n var r = Math.exp(x);\n r = (r - 1 / r) / 2;\n return r;\n}","export default function(x, y) {\n x = Math.abs(x);\n y = Math.abs(y);\n var a = Math.max(x, y);\n var b = Math.min(x, y) / (a ? a : 1);\n\n return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","export default function(x) {\n var y = 1 + x;\n var z = y - 1;\n\n return z === 0 ? x : x * Math.log(y) / z;\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function(x) {\n var y = Math.abs(x);\n y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n return x < 0 ? -y : y;\n}\n","export default function(pp, B) {\n var cos_2B = 2 * Math.cos(2 * B);\n var i = pp.length - 1;\n var h1 = pp[i];\n var h2 = 0;\n var h;\n\n while (--i >= 0) {\n h = -h2 + cos_2B * h1 + pp[i];\n h2 = h1;\n h1 = h;\n }\n\n return (B + h * Math.sin(2 * B));\n}\n","export default function(pp, arg_r) {\n var r = 2 * Math.cos(arg_r);\n var i = pp.length - 1;\n var hr1 = pp[i];\n var hr2 = 0;\n var hr;\n\n while (--i >= 0) {\n hr = -hr2 + r * hr1 + pp[i];\n hr2 = hr1;\n hr1 = hr;\n }\n\n return Math.sin(arg_r) * hr;\n}\n","export default function(x) {\n var r = Math.exp(x);\n r = (r + 1 / r) / 2;\n return r;\n}","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function(pp, arg_r, arg_i) {\n var sin_arg_r = Math.sin(arg_r);\n var cos_arg_r = Math.cos(arg_r);\n var sinh_arg_i = sinh(arg_i);\n var cosh_arg_i = cosh(arg_i);\n var r = 2 * cos_arg_r * cosh_arg_i;\n var i = -2 * sin_arg_r * sinh_arg_i;\n var j = pp.length - 1;\n var hr = pp[j];\n var hi1 = 0;\n var hr1 = 0;\n var hi = 0;\n var hr2;\n var hi2;\n\n while (--j >= 0) {\n hr2 = hr1;\n hi2 = hi1;\n hr1 = hr;\n hi1 = hi;\n hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n hi = -hi2 + i * hr1 + r * hi1;\n }\n\n r = sin_arg_r * cosh_arg_i;\n i = cos_arg_r * sinh_arg_i;\n\n return [r * hr - i * hi, r * hi + i * hr];\n}\n","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport tmerc from '../projections/tmerc';\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n if (!this.approx && (isNaN(this.es) || this.es <= 0)) {\n throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION[\"Fast_Transverse_Mercator\"] in the WKT.');\n }\n if (this.approx) {\n // When '+approx' is set, use tmerc instead\n tmerc.init.apply(this);\n this.forward = tmerc.forward;\n this.inverse = tmerc.inverse;\n }\n\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n this.cgb = [];\n this.cbg = [];\n this.utg = [];\n this.gtu = [];\n\n var f = this.es / (1 + Math.sqrt(1 - this.es));\n var n = f / (2 - f);\n var np = n;\n\n this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n np = np * n;\n this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n np = np * n;\n this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n np = np * n;\n this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n np = np * n;\n this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n np = np * n;\n this.cgb[5] = np * (601676 / 22275);\n this.cbg[5] = np * (444337 / 155925);\n\n np = Math.pow(n, 2);\n this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n np = np * n;\n this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n np = np * n;\n this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n np = np * n;\n this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n np = np * n;\n this.utg[5] = np * (-20648693 / 638668800);\n this.gtu[5] = np * (212378941 / 319334400);\n\n var Z = gatg(this.cbg, this.lat0);\n this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n var Ce = adjust_lon(p.x - this.long0);\n var Cn = p.y;\n\n Cn = gatg(this.cbg, Cn);\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n Ce = asinhy(Math.tan(Ce));\n\n var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n\n var x;\n var y;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n x = this.a * (this.Qn * Ce) + this.x0;\n y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n }\n else {\n x = Infinity;\n y = Infinity;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\nexport function inverse(p) {\n var Ce = (p.x - this.x0) * (1 / this.a);\n var Cn = (p.y - this.y0) * (1 / this.a);\n\n Cn = (Cn - this.Zb) / this.Qn;\n Ce = Ce / this.Qn;\n\n var lon;\n var lat;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n Ce = Math.atan(sinh(Ce));\n\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n lon = adjust_lon(Ce + this.long0);\n lat = gatg(this.cgb, Cn);\n }\n else {\n lon = Infinity;\n lat = Infinity;\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\", \"Transverse_Mercator\", \"Transverse Mercator\", \"Gauss Kruger\", \"Gauss_Kruger\", \"tmerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function(zone, lon) {\n if (zone === undefined) {\n zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n if (zone < 0) {\n return 0;\n } else if (zone > 60) {\n return 60;\n }\n }\n return zone;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport {D2R} from '../constants/values';\n\n\nexport function init() {\n var zone = adjust_zone(this.zone, this.long0);\n if (zone === undefined) {\n throw new Error('unknown utm zone');\n }\n this.lat0 = 0;\n this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;\n this.x0 = 500000;\n this.y0 = this.utmSouth ? 10000000 : 0;\n this.k0 = 0.9996;\n\n etmerc.init.apply(this);\n this.forward = etmerc.forward;\n this.inverse = etmerc.inverse;\n}\n\nexport var names = [\"Universal Transverse Mercator System\", \"utm\"];\nexport default {\n init: init,\n names: names,\n dependsOn: dependsOn\n};\n","export default function(esinp, exp) {\n return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport {HALF_PI, FORTPI} from '../constants/values';\n\nexport function init() {\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\nexport function forward(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\nexport function inverse(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}\n\nexport var names = [\"gauss\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\nimport hypot from '../common/hypot';\n\nexport function init() {\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\nexport function forward(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\nexport function inverse(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 = hypot(p.x, 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\nexport var names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {EPSLN, HALF_PI} from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function ssfn_(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\nexport function init() {\n\n // setting default parameters\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\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 && Math.abs(Math.cos(this.lat_ts)) > EPSLN) {\n // When k0 is 1 (default value) and lat_ts is a vaild number and lat0 is at a pole and lat_ts is not at a pole\n // Recalculate k0 using formula 21-35 from p161 of Snyder, 1987\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\nexport function forward(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//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(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 / (2 * 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}\n\nexport var names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\", \"Polar_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n ssfn_: ssfn_\n};\n","/*\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 */\n\nexport function init() {\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\nexport function forward(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\nexport function inverse(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\nexport var names = [\"somerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { D2R, EPSLN, HALF_PI, TWO_PI, FORTPI } from '../constants/values';\n\nvar TOL = 1e-7;\n\nfunction isTypeA(P) {\n var typeAProjections = ['Hotine_Oblique_Mercator','Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];\n var projectionName = typeof P.PROJECTION === \"object\" ? Object.keys(P.PROJECTION)[0] : P.PROJECTION;\n \n return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1;\n}\n\n\n/* Initialize the Oblique Mercator projection\n ------------------------------------------*/\nexport function init() { \n var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0,\n gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0, AB;\n \n // only Type A uses the no_off or no_uoff property\n // https://github.com/OSGeo/proj.4/issues/104\n this.no_off = isTypeA(this);\n this.no_rot = 'no_rot' in this;\n \n var alp = false;\n if (\"alpha\" in this) {\n alp = true;\n }\n\n var gam = false;\n if (\"rectified_grid_angle\" in this) {\n gam = true;\n }\n\n if (alp) {\n alpha_c = this.alpha;\n }\n \n if (gam) {\n gamma = (this.rectified_grid_angle * D2R);\n }\n \n if (alp || gam) {\n lamc = this.longc;\n } else {\n lam1 = this.long1;\n phi1 = this.lat1;\n lam2 = this.long2;\n phi2 = this.lat2;\n \n if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL ||\n Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL ||\n Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) {\n throw new Error();\n }\n }\n \n var one_es = 1.0 - this.es;\n com = Math.sqrt(one_es);\n \n if (Math.abs(this.lat0) > EPSLN) {\n sinph0 = Math.sin(this.lat0);\n cosph0 = Math.cos(this.lat0);\n con = 1 - this.es * sinph0 * sinph0;\n this.B = cosph0 * cosph0;\n this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es);\n this.A = this.B * this.k0 * com / con;\n D = this.B * com / (cosph0 * Math.sqrt(con));\n F = D * D -1;\n \n if (F <= 0) {\n F = 0;\n } else {\n F = Math.sqrt(F);\n if (this.lat0 < 0) {\n F = -F;\n }\n }\n \n this.E = F += D;\n this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B);\n } else {\n this.B = 1 / com;\n this.A = this.k0;\n this.E = D = F = 1;\n }\n \n if (alp || gam) {\n if (alp) {\n gamma0 = Math.asin(Math.sin(alpha_c) / D);\n if (!gam) {\n gamma = alpha_c;\n }\n } else {\n gamma0 = gamma;\n alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B;\n } else {\n H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B);\n L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B);\n F = this.E / H;\n p = (L - H) / (L + H);\n J = this.E * this.E;\n J = (J - L * H) / (J + L * H);\n con = lam1 - lam2;\n \n if (con < -Math.pi) {\n lam2 -=TWO_PI;\n } else if (con > Math.pi) {\n lam2 += TWO_PI;\n }\n \n this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B);\n gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0)) / (F - 1 / F));\n gamma = alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n \n this.singam = Math.sin(gamma0);\n this.cosgam = Math.cos(gamma0);\n this.sinrot = Math.sin(gamma);\n this.cosrot = Math.cos(gamma);\n \n this.rB = 1 / this.B;\n this.ArB = this.A * this.rB;\n this.BrA = 1 / this.ArB;\n AB = this.A * this.B;\n \n if (this.no_off) {\n this.u_0 = 0;\n } else {\n this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c)));\n \n if (this.lat0 < 0) {\n this.u_0 = - this.u_0;\n } \n }\n \n F = 0.5 * gamma0;\n this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F));\n this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F));\n}\n\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n ----------------------------------------------------------*/\nexport function forward(p) {\n var coords = {};\n var S, T, U, V, W, temp, u, v;\n p.x = p.x - this.lam0;\n \n if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) {\n W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B);\n \n temp = 1 / W;\n S = 0.5 * (W - temp);\n T = 0.5 * (W + temp);\n V = Math.sin(this.B * p.x);\n U = (S * this.singam - V * this.cosgam) / T;\n \n if (Math.abs(Math.abs(U) - 1.0) < EPSLN) {\n throw new Error();\n }\n \n v = 0.5 * this.ArB * Math.log((1 - U)/(1 + U));\n temp = Math.cos(this.B * p.x);\n \n if (Math.abs(temp) < TOL) {\n u = this.A * p.x;\n } else {\n u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp);\n } \n } else {\n v = p.y > 0 ? this.v_pole_n : this.v_pole_s;\n u = this.ArB * p.y;\n }\n \n if (this.no_rot) {\n coords.x = u;\n coords.y = v;\n } else {\n u -= this.u_0;\n coords.x = v * this.cosrot + u * this.sinrot;\n coords.y = u * this.cosrot - v * this.sinrot;\n }\n \n coords.x = (this.a * coords.x + this.x0);\n coords.y = (this.a * coords.y + this.y0);\n \n return coords;\n}\n\nexport function inverse(p) {\n var u, v, Qp, Sp, Tp, Vp, Up;\n var coords = {};\n \n p.x = (p.x - this.x0) * (1.0 / this.a);\n p.y = (p.y - this.y0) * (1.0 / this.a);\n\n if (this.no_rot) {\n v = p.y;\n u = p.x;\n } else {\n v = p.x * this.cosrot - p.y * this.sinrot;\n u = p.y * this.cosrot + p.x * this.sinrot + this.u_0;\n }\n \n Qp = Math.exp(-this.BrA * v);\n Sp = 0.5 * (Qp - 1 / Qp);\n Tp = 0.5 * (Qp + 1 / Qp);\n Vp = Math.sin(this.BrA * u);\n Up = (Vp * this.cosgam + Sp * this.singam) / Tp;\n \n if (Math.abs(Math.abs(Up) - 1) < EPSLN) {\n coords.x = 0;\n coords.y = Up < 0 ? -HALF_PI : HALF_PI;\n } else {\n coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up));\n coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B));\n \n if (coords.y === Infinity) {\n throw new Error();\n }\n \n coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u));\n }\n \n coords.x += this.lam0;\n \n return coords;\n}\n\nexport var names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Two_Point_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"Oblique_Mercator\", \"omerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {HALF_PI, EPSLN} from '../constants/values';\nexport function init() {\n \n //double lat0; /* the reference latitude */\n //double long0; /* the reference 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 //the above value can be set with proj4.defs\n //example: proj4.defs(\"EPSG:2154\",\"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\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// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(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// -----------------------------------------------------------------\nexport function inverse(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\nexport var names = [\n \"Lambert Tangential Conformal Conic Projection\",\n \"Lambert_Conformal_Conic\",\n \"Lambert_Conformal_Conic_1SP\",\n \"Lambert_Conformal_Conic_2SP\",\n \"lcc\",\n \"Lambert Conic Conformal (1SP)\",\n \"Lambert Conic Conformal (2SP)\"\n];\n\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\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 */\nexport function forward(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 */\nexport function inverse(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}\n\nexport var names = [\"Krovak\", \"krovak\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default 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}","export default function(x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}","export default function(x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}","export default function(x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n}","export default function(x) {\n return (x * x * x * (35 / 3072));\n}","export default function(a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n}","import {HALF_PI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default 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}","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nexport function init() {\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/* Cassini forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(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 -----------------*/\nexport function inverse(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}\n\nexport var names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default 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}","\nimport {HALF_PI, EPSLN, FORTPI} from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\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\nexport var S_POLE = 1;\n\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n ------------------------------------------------------*/\nexport function init() {\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 = 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 -----------------------------------------------------------------------*/\nexport function forward(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 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.lat0) < 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 -----------------*/\nexport function inverse(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 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.lat0 : 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 = this.long0;\n p.y = this.lat0;\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 = this.long0;\n p.y = this.lat0;\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 = authlat(Math.asin(ab), this.apa);\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 */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n var t;\n var APA = [];\n APA[0] = es * P00;\n t = es * es;\n APA[0] += t * P01;\n APA[1] = t * P10;\n t *= es;\n APA[0] += t * P02;\n APA[1] += t * P11;\n APA[2] = t * P20;\n return APA;\n}\n\nfunction authlat(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}\n\nexport var names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n S_POLE: S_POLE,\n N_POLE: N_POLE,\n EQUIT: EQUIT,\n OBLIQ: OBLIQ\n};\n","export default function(x) {\n if (Math.abs(x) > 1) {\n x = (x > 1) ? 1 : -1;\n }\n return Math.asin(x);\n}","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\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);\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);\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);\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 -------------------------------------------------------------------*/\nexport function forward(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);\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\nexport function inverse(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-------------------------------------------*/\nexport function phi1z(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}\n\nexport var names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\n/*\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n */\nexport function init() {\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/* Gnomonic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(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\nexport function inverse(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}\n\nexport var names = [\"gnom\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {HALF_PI} from '../constants/values';\n\nexport default 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}\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\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*/\nexport function init() {\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/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(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 ------------------------------------------------------------*/\nexport function inverse(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}\n\nexport var names = [\"cea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\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// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(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// -----------------------------------------------------------------\nexport function inverse(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}\n\nexport var names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport {EPSLN} from '../constants/values';\n\nimport gN from '../common/gN';\nvar MAX_ITER = 20;\n\nexport function init() {\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/* Polyconic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(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/* Inverse equations\n -----------------*/\nexport function inverse(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}\n\nexport var names = [\"Polyconic\", \"poly\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {SEC_TO_RAD} from '../constants/values';\n\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 */\nexport var iterations = 1;\n\nexport function init() {\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 */\nexport function forward(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 New Zealand Map Grid Inverse - x/y to long/lat\n */\nexport function inverse(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}\n\nexport var names = [\"New_Zealand_Map_Grid\", \"nzmg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\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 -------------------------------------------*/\nexport function init() {\n //no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(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 ------------------------------------------------------------*/\nexport function inverse(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}\n\nexport var names = [\"Miller_Cylindrical\", \"mill\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n\nexport function init() {\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 -----------------------------------------------------*/\nexport function forward(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\nexport function inverse(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}\n\nexport var names = [\"Sinusoidal\", \"sinu\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nexport function init() {}\nimport {EPSLN} from '../constants/values';\n/* Mollweide forward equations--mapping lat,long to x,y\n ----------------------------------------------------*/\nexport function forward(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 while (true) {\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\nexport function inverse(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}\n\nexport var names = [\"Mollweide\", \"moll\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\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/* Equidistant Conic forward equations--mapping lat,long to x,y\n -----------------------------------------------------------*/\nexport function forward(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 -----------------*/\nexport function inverse(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}\n\nexport var names = [\"Equidistant_Conic\", \"eqdc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/* Initialize the Van Der Grinten projection\n ----------------------------------------*/\nexport function init() {\n //this.R = 6370997; //Radius of earth\n this.R = this.a;\n}\n\nexport function forward(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 ---------------------------------------------------------*/\nexport function inverse(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}\n\nexport var names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\n\n\n\nexport function init() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n}\n\nexport function forward(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 ? c / Math.sin(c) : 1;\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\nexport function inverse(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, sinpsi;\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 sinpsi = Math.sin(psi);\n lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));\n p.x = lon;\n p.y = lat;\n return p;\n }\n }\n\n}\n\nexport var names = [\"Azimuthal_Equidistant\", \"aeqd\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nexport function init() {\n //double temp; /* temporary variable */\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}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(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, 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.a * ksp * cosphi * Math.sin(dlon);\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* height above ellipsoid */\n var z; /* angle */\n var sinz, cosz; /* sin of z and cos of z */\n var con;\n var lon, lat;\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n z = asinz(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 p.x = lon;\n p.y = lat;\n return p;\n }\n lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / 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 p.x = lon;\n p.y = lat;\n return p;\n }\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"ortho\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport {EPSLN, TWO_PI, SPI, HALF_PI, FORTPI} from '../constants/values';\n\n/* constants */\nvar FACE_ENUM = {\n FRONT: 1,\n RIGHT: 2,\n BACK: 3,\n LEFT: 4,\n TOP: 5,\n BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n AREA_0: 1,\n AREA_1: 2,\n AREA_2: 3,\n AREA_3: 4\n};\n\nexport function init() {\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 || \"Quadrilateralized Spherical Cube\";\n\n /* Determine the cube face from the center of projection. */\n if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n this.face = FACE_ENUM.TOP;\n } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n this.face = FACE_ENUM.BOTTOM;\n } else if (Math.abs(this.long0) <= FORTPI) {\n this.face = FACE_ENUM.FRONT;\n } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n } else {\n this.face = FACE_ENUM.BACK;\n }\n\n /* Fill in useful values for the ellipsoid <-> sphere shift\n * described in [LK12]. */\n if (this.es !== 0) {\n this.one_minus_f = 1 - (this.a - this.b) / this.a;\n this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n var xy = {x: 0, y: 0};\n var lat, lon;\n var theta, phi;\n var t, mu;\n /* nu; */\n var area = {value: 0};\n\n // move lon according to projection's lon\n p.x -= this.long0;\n\n /* Convert the geodetic latitude to a geocentric latitude.\n * This corresponds to the shift from the ellipsoid to the sphere\n * described in [LK12]. */\n if (this.es !== 0) {//if (P->es != 0) {\n lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n } else {\n lat = p.y;\n }\n\n /* Convert the input lat, lon into theta, phi as used by QSC.\n * This depends on the cube face and the area on it.\n * For the top and bottom face, we can compute theta and phi\n * directly from phi, lam. For the other faces, we must use\n * unit sphere cartesian coordinates as an intermediate step. */\n lon = p.x; //lon = lp.lam;\n if (this.face === FACE_ENUM.TOP) {\n phi = HALF_PI - lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = lon - HALF_PI;\n } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_1;\n theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n area.value = AREA_ENUM.AREA_2;\n theta = lon + HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = lon;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = HALF_PI + lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = -lon + HALF_PI;\n } else if (lon < FORTPI && lon >= -FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta = -lon;\n } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = -lon - HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n }\n } else {\n var q, r, s;\n var sinlat, coslat;\n var sinlon, coslon;\n\n if (this.face === FACE_ENUM.RIGHT) {\n lon = qsc_shift_lon_origin(lon, +HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lon = qsc_shift_lon_origin(lon, +SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lon = qsc_shift_lon_origin(lon, -HALF_PI);\n }\n sinlat = Math.sin(lat);\n coslat = Math.cos(lat);\n sinlon = Math.sin(lon);\n coslon = Math.cos(lon);\n q = coslat * coslon;\n r = coslat * sinlon;\n s = sinlat;\n\n if (this.face === FACE_ENUM.FRONT) {\n phi = Math.acos(q);\n theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n } else if (this.face === FACE_ENUM.RIGHT) {\n phi = Math.acos(r);\n theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n } else if (this.face === FACE_ENUM.BACK) {\n phi = Math.acos(-q);\n theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n } else if (this.face === FACE_ENUM.LEFT) {\n phi = Math.acos(-r);\n theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n } else {\n /* Impossible */\n phi = theta = 0;\n area.value = AREA_ENUM.AREA_0;\n }\n }\n\n /* Compute mu and nu for the area of definition.\n * For mu, see Eq. (3-21) in [OL76], but note the typos:\n * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n /* Apply the result to the real area. */\n if (area.value === AREA_ENUM.AREA_1) {\n mu += HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_2) {\n mu += SPI;\n } else if (area.value === AREA_ENUM.AREA_3) {\n mu += 1.5 * SPI;\n }\n\n /* Now compute x, y from mu and nu */\n xy.x = t * Math.cos(mu);\n xy.y = t * Math.sin(mu);\n xy.x = xy.x * this.a + this.x0;\n xy.y = xy.y * this.a + this.y0;\n\n p.x = xy.x;\n p.y = xy.y;\n return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n var lp = {lam: 0, phi: 0};\n var mu, nu, cosmu, tannu;\n var tantheta, theta, cosphi, phi;\n var t;\n var area = {value: 0};\n\n /* de-offset */\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n /* Convert the input x, y to the mu and nu angles as used by QSC.\n * This depends on the area of the cube face. */\n nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n mu = Math.atan2(p.y, p.x);\n if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_0;\n } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n area.value = AREA_ENUM.AREA_1;\n mu -= HALF_PI;\n } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_2;\n mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n mu += HALF_PI;\n }\n\n /* Compute phi and theta for the area of definition.\n * The inverse projection is not described in the original paper, but some\n * good hints can be found here (as of 2011-12-14):\n * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n t = (SPI / 12) * Math.tan(mu);\n tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n theta = Math.atan(tantheta);\n cosmu = Math.cos(mu);\n tannu = Math.tan(nu);\n cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n if (cosphi < -1) {\n cosphi = -1;\n } else if (cosphi > +1) {\n cosphi = +1;\n }\n\n /* Apply the result to the real area on the cube face.\n * For the top and bottom face, we can compute phi and lam directly.\n * For the other faces, we must use unit sphere cartesian coordinates\n * as an intermediate step. */\n if (this.face === FACE_ENUM.TOP) {\n phi = Math.acos(cosphi);\n lp.phi = HALF_PI - phi;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = theta;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = Math.acos(cosphi);\n lp.phi = phi - HALF_PI;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = -theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = -theta;\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = -theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n }\n } else {\n /* Compute phi and lam via cartesian unit sphere coordinates. */\n var q, r, s;\n q = cosphi;\n t = q * q;\n if (t >= 1) {\n s = 0;\n } else {\n s = Math.sqrt(1 - t) * Math.sin(theta);\n }\n t += s * s;\n if (t >= 1) {\n r = 0;\n } else {\n r = Math.sqrt(1 - t);\n }\n /* Rotate q,r,s into the correct area. */\n if (area.value === AREA_ENUM.AREA_1) {\n t = r;\n r = -s;\n s = t;\n } else if (area.value === AREA_ENUM.AREA_2) {\n r = -r;\n s = -s;\n } else if (area.value === AREA_ENUM.AREA_3) {\n t = r;\n r = s;\n s = -t;\n }\n /* Rotate q,r,s into the correct cube face. */\n if (this.face === FACE_ENUM.RIGHT) {\n t = q;\n q = -r;\n r = t;\n } else if (this.face === FACE_ENUM.BACK) {\n q = -q;\n r = -r;\n } else if (this.face === FACE_ENUM.LEFT) {\n t = q;\n q = r;\n r = -t;\n }\n /* Now compute phi and lam from the unit sphere coordinates. */\n lp.phi = Math.acos(-s) - HALF_PI;\n lp.lam = Math.atan2(r, q);\n if (this.face === FACE_ENUM.RIGHT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n }\n }\n\n /* Apply the shift from the sphere to the ellipsoid as described\n * in [LK12]. */\n if (this.es !== 0) {\n var invert_sign;\n var tanphi, xa;\n invert_sign = (lp.phi < 0 ? 1 : 0);\n tanphi = Math.tan(lp.phi);\n xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n if (invert_sign) {\n lp.phi = -lp.phi;\n }\n }\n\n lp.lam += this.long0;\n p.x = lp.lam;\n p.y = lp.phi;\n return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n var theta;\n if (phi < EPSLN) {\n area.value = AREA_ENUM.AREA_0;\n theta = 0.0;\n } else {\n theta = Math.atan2(y, x);\n if (Math.abs(theta) <= FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta -= HALF_PI;\n } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta += HALF_PI;\n }\n }\n return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n var slon = lon + offset;\n if (slon < -SPI) {\n slon += TWO_PI;\n } else if (slon > +SPI) {\n slon -= TWO_PI;\n }\n return slon;\n}\n\nexport var names = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport {HALF_PI, D2R, R2D, EPSLN} from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D/5; // rad to 5-degree interval\nvar RC1 = 1/C1;\nvar NODES = 18;\n\nvar poly3_val = function(coefs, x) {\n return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function(coefs, x) {\n return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n var x = start;\n for (; iters; --iters) {\n var upd = f_df(x);\n x -= upd;\n if (Math.abs(upd) < max_err) {\n break;\n }\n }\n return x;\n}\n\nexport function init() {\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.long0 = this.long0 || 0;\n this.es = 0;\n this.title = this.title || \"Robinson\";\n}\n\nexport function forward(ll) {\n var lon = adjust_lon(ll.x - this.long0);\n\n var dphi = Math.abs(ll.y);\n var i = Math.floor(dphi * C1);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n dphi = R2D * (dphi - RC1 * i);\n var xy = {\n x: poly3_val(COEFS_X[i], dphi) * lon,\n y: poly3_val(COEFS_Y[i], dphi)\n };\n if (ll.y < 0) {\n xy.y = -xy.y;\n }\n\n xy.x = xy.x * this.a * FXC + this.x0;\n xy.y = xy.y * this.a * FYC + this.y0;\n return xy;\n}\n\nexport function inverse(xy) {\n var ll = {\n x: (xy.x - this.x0) / (this.a * FXC),\n y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n };\n\n if (ll.y >= 1) { // pathologic case\n ll.x /= COEFS_X[NODES][0];\n ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n } else {\n // find table interval\n var i = Math.floor(ll.y * NODES);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n for (;;) {\n if (COEFS_Y[i][0] > ll.y) {\n --i;\n } else if (COEFS_Y[i+1][0] <= ll.y) {\n ++i;\n } else {\n break;\n }\n }\n // linear interpolation in 5 degree interval\n var coefs = COEFS_Y[i];\n var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n // find t so that poly3_val(coefs, t) = ll.y\n t = newton_rapshon(function(x) {\n return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n }, t, EPSLN, 100);\n\n ll.x /= poly3_val(COEFS_X[i], t);\n ll.y = (5 * i + t) * D2R;\n if (xy.y < 0) {\n ll.y = -ll.y;\n }\n }\n\n ll.x = adjust_lon(ll.x + this.long0);\n return ll;\n}\n\nexport var names = [\"Robinson\", \"robin\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {\n geodeticToGeocentric,\n geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n this.name = 'geocent';\n\n}\n\nexport function forward(p) {\n var point = geodeticToGeocentric(p, this.es, this.a);\n return point;\n}\n\nexport function inverse(p) {\n var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n return point;\n}\n\nexport var names = [\"Geocentric\", 'geocentric', \"geocent\", \"Geocent\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","\nvar mode = {\n N_POLE: 0,\n S_POLE: 1,\n EQUIT: 2,\n OBLIQ: 3\n};\n\nimport { D2R, HALF_PI, EPSLN } from \"../constants/values\";\nimport hypot from \"../common/hypot\";\n\nvar params = {\n h: { def: 100000, num: true }, // default is Karman line, no default in PROJ.7\n azi: { def: 0, num: true, degrees: true }, // default is North\n tilt: { def: 0, num: true, degrees: true }, // default is Nadir\n long0: { def: 0, num: true }, // default is Greenwich, conversion to rad is automatic\n lat0: { def: 0, num: true } // default is Equator, conversion to rad is automatic\n};\n\nexport function init() {\n Object.keys(params).forEach(function (p) {\n if (typeof this[p] === \"undefined\") {\n this[p] = params[p].def;\n } else if (params[p].num && isNaN(this[p])) {\n throw new Error(\"Invalid parameter value, must be numeric \" + p + \" = \" + this[p]);\n } else if (params[p].num) {\n this[p] = parseFloat(this[p]);\n }\n if (params[p].degrees) {\n this[p] = this[p] * D2R;\n }\n }.bind(this));\n\n if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {\n this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;\n } else if (Math.abs(this.lat0) < EPSLN) {\n this.mode = mode.EQUIT;\n } else {\n this.mode = mode.OBLIQ;\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n\n this.pn1 = this.h / this.a; // Normalize relative to the Earth's radius\n\n if (this.pn1 <= 0 || this.pn1 > 1e10) {\n throw new Error(\"Invalid height\");\n }\n \n this.p = 1 + this.pn1;\n this.rp = 1 / this.p;\n this.h1 = 1 / this.pn1;\n this.pfact = (this.p + 1) * this.h1;\n this.es = 0;\n\n var omega = this.tilt;\n var gamma = this.azi;\n this.cg = Math.cos(gamma);\n this.sg = Math.sin(gamma);\n this.cw = Math.cos(omega);\n this.sw = Math.sin(omega);\n}\n\nexport function forward(p) {\n p.x -= this.long0;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var coslam = Math.cos(p.x);\n var x, y;\n switch (this.mode) {\n case mode.OBLIQ:\n y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y = cosphi * coslam;\n break;\n case mode.S_POLE:\n y = -sinphi;\n break;\n case mode.N_POLE:\n y = sinphi;\n break;\n }\n y = this.pn1 / (this.p - y);\n x = y * cosphi * Math.sin(p.x);\n\n switch (this.mode) {\n case mode.OBLIQ:\n y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y *= sinphi;\n break;\n case mode.N_POLE:\n y *= -(cosphi * coslam);\n break;\n case mode.S_POLE:\n y *= cosphi * coslam;\n break;\n }\n\n // Tilt \n var yt, ba;\n yt = y * this.cg + x * this.sg;\n ba = 1 / (yt * this.sw * this.h1 + this.cw);\n x = (x * this.cg - y * this.sg) * this.cw * ba;\n y = yt * ba;\n\n p.x = x * this.a;\n p.y = y * this.a;\n return p;\n}\n\nexport function inverse(p) {\n p.x /= this.a;\n p.y /= this.a;\n var r = { x: p.x, y: p.y };\n\n // Un-Tilt\n var bm, bq, yt;\n yt = 1 / (this.pn1 - p.y * this.sw);\n bm = this.pn1 * p.x * yt;\n bq = this.pn1 * p.y * this.cw * yt;\n p.x = bm * this.cg + bq * this.sg;\n p.y = bq * this.cg - bm * this.sg;\n\n var rh = hypot(p.x, p.y);\n if (Math.abs(rh) < EPSLN) {\n r.x = 0;\n r.y = p.y;\n } else {\n var cosz, sinz;\n sinz = 1 - rh * rh * this.pfact;\n sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);\n cosz = Math.sqrt(1 - sinz * sinz);\n switch (this.mode) {\n case mode.OBLIQ:\n r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);\n p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;\n p.x *= sinz * this.cosph0;\n break;\n case mode.EQUIT:\n r.y = Math.asin(p.y * sinz / rh);\n p.y = cosz * rh;\n p.x *= sinz;\n break;\n case mode.N_POLE:\n r.y = Math.asin(cosz);\n p.y = -p.y;\n break;\n case mode.S_POLE:\n r.y = -Math.asin(cosz);\n break;\n }\n r.x = Math.atan2(p.x, p.y);\n }\n\n p.x = r.x + this.long0;\n p.y = r.y;\n return p;\n}\n\nexport var names = [\"Tilted_Perspective\", \"tpers\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import hypot from '../common/hypot';\n\nexport function init() {\n this.flip_axis = (this.sweep === 'x' ? 1 : 0);\n this.h = Number(this.h);\n this.radius_g_1 = this.h / this.a;\n\n if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) {\n throw new Error();\n }\n\n this.radius_g = 1.0 + this.radius_g_1;\n this.C = this.radius_g * this.radius_g - 1.0;\n\n if (this.es !== 0.0) {\n var one_es = 1.0 - this.es;\n var rone_es = 1 / one_es;\n\n this.radius_p = Math.sqrt(one_es);\n this.radius_p2 = one_es;\n this.radius_p_inv2 = rone_es;\n\n this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions.\n } else {\n this.radius_p = 1.0;\n this.radius_p2 = 1.0;\n this.radius_p_inv2 = 1.0;\n\n this.shape = 'sphere'; // Use as a condition in the forward and inverse functions.\n }\n\n if (!this.title) {\n this.title = \"Geostationary Satellite View\";\n }\n}\n\nfunction forward(p) {\n var lon = p.x;\n var lat = p.y;\n var tmp, v_x, v_y, v_z;\n lon = lon - this.long0;\n\n if (this.shape === 'ellipse') {\n lat = Math.atan(this.radius_p2 * Math.tan(lat));\n var r = this.radius_p / hypot(this.radius_p * Math.cos(lat), Math.sin(lat));\n\n v_x = r * Math.cos(lon) * Math.cos(lat);\n v_y = r * Math.sin(lon) * Math.cos(lat);\n v_z = r * Math.sin(lat);\n\n if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n tmp = this.radius_g - v_x;\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n } else if (this.shape === 'sphere') {\n tmp = Math.cos(lat);\n v_x = Math.cos(lon) * tmp;\n v_y = Math.sin(lon) * tmp;\n v_z = Math.sin(lat);\n tmp = this.radius_g - v_x;\n\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n }\n p.x = p.x * this.a;\n p.y = p.y * this.a;\n return p;\n}\n\nfunction inverse(p) {\n var v_x = -1.0;\n var v_y = 0.0;\n var v_z = 0.0;\n var a, b, det, k;\n\n p.x = p.x / this.a;\n p.y = p.y / this.a;\n\n if (this.shape === 'ellipse') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * hypot(1.0, v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * hypot(1.0, v_y);\n }\n\n var v_zp = v_z / this.radius_p;\n a = v_y * v_y + v_zp * v_zp + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y));\n } else if (this.shape === 'sphere') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y);\n }\n\n a = v_y * v_y + v_z * v_z + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n }\n p.x = p.x + this.long0;\n return p;\n}\n\nexport var names = [\"Geostationary Satellite View\", \"Geostationary_Satellite\", \"geos\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n};\n\n","/**\n * Copyright 2018 Bernie Jenny, Monash University, Melbourne, Australia.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Equal Earth is a projection inspired by the Robinson projection, but unlike\n * the Robinson projection retains the relative size of areas. The projection\n * was designed in 2018 by Bojan Savric, Tom Patterson and Bernhard Jenny.\n *\n * Publication:\n * Bojan Savric, Tom Patterson & Bernhard Jenny (2018). The Equal Earth map\n * projection, International Journal of Geographical Information Science,\n * DOI: 10.1080/13658816.2018.1504949\n *\n * Code released August 2018\n * Ported to JavaScript and adapted for mapshaper-proj by Matthew Bloch August 2018\n * Modified for proj4js by Andreas Hocevar by Andreas Hocevar March 2024\n */\n\nimport adjust_lon from \"../common/adjust_lon\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = Math.sqrt(3) / 2.0;\n\nexport function init() {\n this.es = 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n}\n\nexport function forward(p) {\n var lam = adjust_lon(p.x - this.long0);\n var phi = p.y;\n var paramLat = Math.asin(M * Math.sin(phi)),\n paramLatSq = paramLat * paramLat,\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n p.x = lam * Math.cos(paramLat) /\n (M * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)));\n p.y = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq));\n\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n var EPS = 1e-9,\n NITER = 12,\n paramLat = p.y,\n paramLatSq, paramLatPow6, fy, fpy, dlat, i;\n\n for (i = 0; i < NITER; ++i) {\n paramLatSq = paramLat * paramLat;\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n fy = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq)) - p.y;\n fpy = A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq);\n paramLat -= dlat = fy / fpy;\n if (Math.abs(dlat) < EPS) {\n break;\n }\n }\n paramLatSq = paramLat * paramLat;\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n p.x = M * p.x * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)) /\n Math.cos(paramLat);\n p.y = Math.asin(Math.sin(paramLat) / M);\n\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"eqearth\", \"Equal Earth\", \"Equal_Earth\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","import adjust_lat from \"../common/adjust_lat\";\nimport adjust_lon from \"../common/adjust_lon\";\nimport hypot from \"../common/hypot\";\nimport pj_enfn from \"../common/pj_enfn\";\nimport pj_inv_mlfn from \"../common/pj_inv_mlfn\";\nimport pj_mlfn from \"../common/pj_mlfn\";\nimport { HALF_PI } from \"../constants/values\";\n\nvar EPS10 = 1e-10;\n\nexport function init() {\n var c;\n\n this.phi1 = this.lat1;\n if (Math.abs(this.phi1) < EPS10) {\n throw new Error();\n }\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.m1 = pj_mlfn(this.phi1, this.am1 = Math.sin(this.phi1),\n c = Math.cos(this.phi1), this.en);\n this.am1 = c / (Math.sqrt(1 - this.es * this.am1 * this.am1) * this.am1);\n this.inverse = e_inv;\n this.forward = e_fwd;\n } else {\n if (Math.abs(this.phi1) + EPS10 >= HALF_PI) {\n this.cphi1 = 0;\n }\n else {\n this.cphi1 = 1 / Math.tan(this.phi1);\n }\n this.inverse = s_inv;\n this.forward = s_fwd;\n }\n}\n\nfunction e_fwd(p) {\n var lam = adjust_lon(p.x - (this.long0 || 0));\n var phi = p.y;\n var rh, E, c;\n rh = this.am1 + this.m1 - pj_mlfn(phi, E = Math.sin(phi), c = Math.cos(phi), this.en);\n E = c * lam / (rh * Math.sqrt(1 - this.es * E * E));\n p.x = rh * Math.sin(E);\n p.y = this.am1 - rh * Math.cos(E);\n\n p.x = this.a * p.x + (this.x0 || 0);\n p.y = this.a * p.y + (this.y0 || 0);\n return p;\n}\n\nfunction e_inv(p) {\n p.x = (p.x - (this.x0 || 0)) / this.a;\n p.y = (p.y - (this.y0 || 0)) / this.a;\n\n var s, rh, lam, phi;\n rh = hypot(p.x, p.y = this.am1 - p.y);\n phi = pj_inv_mlfn(this.am1 + this.m1 - rh, this.es, this.en);\n if ((s = Math.abs(phi)) < HALF_PI) {\n s = Math.sin(phi);\n lam = rh * Math.atan2(p.x, p.y) * Math.sqrt(1 - this.es * s * s) / Math.cos(phi);\n } else if (Math.abs(s - HALF_PI) <= EPS10) {\n lam = 0;\n }\n else {\n throw new Error();\n }\n p.x = adjust_lon(lam + (this.long0 || 0));\n p.y = adjust_lat(phi);\n return p;\n}\n\nfunction s_fwd(p) {\n var lam = adjust_lon(p.x - (this.long0 || 0));\n var phi = p.y;\n var E, rh;\n rh = this.cphi1 + this.phi1 - phi;\n if (Math.abs(rh) > EPS10) {\n p.x = rh * Math.sin(E = lam * Math.cos(phi) / rh);\n p.y = this.cphi1 - rh * Math.cos(E);\n } else {\n p.x = p.y = 0;\n }\n\n p.x = this.a * p.x + (this.x0 || 0);\n p.y = this.a * p.y + (this.y0 || 0);\n return p;\n}\n\nfunction s_inv(p) {\n p.x = (p.x - (this.x0 || 0)) / this.a;\n p.y = (p.y - (this.y0 || 0)) / this.a;\n\n var lam, phi;\n var rh = hypot(p.x, p.y = this.cphi1 - p.y);\n phi = this.cphi1 + this.phi1 - rh;\n if (Math.abs(phi) > HALF_PI) {\n throw new Error();\n }\n if (Math.abs(Math.abs(phi) - HALF_PI) <= EPS10) {\n lam = 0;\n } else {\n lam = rh * Math.atan2(p.x, p.y) / Math.cos(phi);\n }\n p.x = adjust_lon(lam + (this.long0 || 0));\n p.y = adjust_lat(phi);\n return p;\n}\n\nexport var names = [\"bonne\", \"Bonne (Werner lat_1=90)\"];\nexport default {\n init: init,\n names: names\n};","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nimport tpers from './lib/projections/tpers';\nimport geos from './lib/projections/geos';\nimport eqearth from './lib/projections/eqearth';\nimport bonne from './lib/projections/bonne';\nexport default function(proj4){\n proj4.Proj.projections.add(tmerc);\n proj4.Proj.projections.add(etmerc);\n proj4.Proj.projections.add(utm);\n proj4.Proj.projections.add(sterea);\n proj4.Proj.projections.add(stere);\n proj4.Proj.projections.add(somerc);\n proj4.Proj.projections.add(omerc);\n proj4.Proj.projections.add(lcc);\n proj4.Proj.projections.add(krovak);\n proj4.Proj.projections.add(cass);\n proj4.Proj.projections.add(laea);\n proj4.Proj.projections.add(aea);\n proj4.Proj.projections.add(gnom);\n proj4.Proj.projections.add(cea);\n proj4.Proj.projections.add(eqc);\n proj4.Proj.projections.add(poly);\n proj4.Proj.projections.add(nzmg);\n proj4.Proj.projections.add(mill);\n proj4.Proj.projections.add(sinu);\n proj4.Proj.projections.add(moll);\n proj4.Proj.projections.add(eqdc);\n proj4.Proj.projections.add(vandg);\n proj4.Proj.projections.add(aeqd);\n proj4.Proj.projections.add(ortho);\n proj4.Proj.projections.add(qsc);\n proj4.Proj.projections.add(robin);\n proj4.Proj.projections.add(geocent);\n proj4.Proj.projections.add(tpers);\n proj4.Proj.projections.add(geos);\n proj4.Proj.projections.add(eqearth);\n proj4.Proj.projections.add(bonne);\n}","import proj4 from './core';\nimport Proj from \"./Proj\";\nimport Point from \"./Point\";\nimport common from \"./common/toPoint\";\nimport defs from \"./defs\";\nimport nadgrid from \"./nadgrid\";\nimport transform from \"./transform\";\nimport mgrs from \"mgrs\";\nimport includedProjections from \"../projs\";\n\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = Proj;\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = Point;\nproj4.toPoint = common;\nproj4.defs = defs;\nproj4.nadgrid = nadgrid;\nproj4.transform = transform;\nproj4.mgrs = mgrs;\nproj4.version = '__VERSION__';\nincludedProjections(proj4);\nexport default proj4;\n","\n/**\n * Topological sorting function\n *\n * @param {Array} edges\n * @returns {Array}\n */\n\nmodule.exports = function(edges) {\n return toposort(uniqueNodes(edges), edges)\n}\n\nmodule.exports.array = toposort\n\nfunction toposort(nodes, edges) {\n var cursor = nodes.length\n , sorted = new Array(cursor)\n , visited = {}\n , i = cursor\n // Better data structures make algorithm much faster.\n , outgoingEdges = makeOutgoingEdges(edges)\n , nodesHash = makeNodesHash(nodes)\n\n // check for unknown nodes\n edges.forEach(function(edge) {\n if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n throw new Error('Unknown node. There is an unknown node in the supplied edges.')\n }\n })\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, new Set())\n }\n\n return sorted\n\n function visit(node, i, predecessors) {\n if(predecessors.has(node)) {\n var nodeRep\n try {\n nodeRep = \", node was:\" + JSON.stringify(node)\n } catch(e) {\n nodeRep = \"\"\n }\n throw new Error('Cyclic dependency' + nodeRep)\n }\n\n if (!nodesHash.has(node)) {\n throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node))\n }\n\n if (visited[i]) return;\n visited[i] = true\n\n var outgoing = outgoingEdges.get(node) || new Set()\n outgoing = Array.from(outgoing)\n\n if (i = outgoing.length) {\n predecessors.add(node)\n do {\n var child = outgoing[--i]\n visit(child, nodesHash.get(child), predecessors)\n } while (i)\n predecessors.delete(node)\n }\n\n sorted[--cursor] = node\n }\n}\n\nfunction uniqueNodes(arr){\n var res = new Set()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n res.add(edge[0])\n res.add(edge[1])\n }\n return Array.from(res)\n}\n\nfunction makeOutgoingEdges(arr){\n var edges = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n if (!edges.has(edge[0])) edges.set(edge[0], new Set())\n if (!edges.has(edge[1])) edges.set(edge[1], new Set())\n edges.get(edge[0]).add(edge[1])\n }\n return edges\n}\n\nfunction makeNodesHash(arr){\n var res = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n res.set(arr[i], i)\n }\n return res\n}\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n },\n RFC1738: Format.RFC1738,\n RFC3986: Format.RFC3986\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? Object.create(null) : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n /* eslint no-param-reassign: 0 */\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n } else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target.push(item);\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n\n var out = '';\n for (var i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n out += string.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n out = out + hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n /* eslint operator-linebreak: [2, \"before\"] */\n out += hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n\n compactQueue(queue);\n\n return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n var mapped = [];\n for (var i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n maybeMap: maybeMap,\n merge: merge\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","module.exports = shift\n\nfunction shift (stream) {\n var rs = stream._readableState\n if (!rs) return null\n return (rs.objectMode || typeof stream._duplexState === 'number') ? stream.read() : stream.read(getStateLength(rs))\n}\n\nfunction getStateLength (state) {\n if (state.buffer.length) {\n // Since node 6.3.0 state.buffer is a BufferList not an array\n if (state.buffer.head) {\n return state.buffer.head.data.length\n }\n\n return state.buffer[0].length\n }\n\n return state.length\n}\n"],"sourceRoot":""}