@geoql/v-maplibre 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +84 -16
- package/dist/controls/_shared/index.d.ts +1 -0
- package/dist/controls/_shared/useMapControl.d.ts +10 -0
- package/dist/controls/index.d.ts +6 -0
- package/dist/controls/layer/VControlLayer.vue.d.ts +38 -0
- package/dist/controls/layer/VControlLayerGroup.vue.d.ts +53 -0
- package/dist/controls/layer/events.d.ts +1 -0
- package/dist/controls/layer/index.d.ts +5 -0
- package/dist/controls/layer/types.d.ts +16 -0
- package/dist/controls/legend/VControlLegend.vue.d.ts +54 -0
- package/dist/controls/legend/events.d.ts +2 -0
- package/dist/controls/legend/index.d.ts +3 -0
- package/dist/controls/legend/types.d.ts +63 -0
- package/dist/decoder-CLokFc0V.js +9 -0
- package/dist/decoder-CLokFc0V.js.map +1 -0
- package/dist/deflate-yeu3ogBn.js +11 -0
- package/dist/deflate-yeu3ogBn.js.map +1 -0
- package/dist/geotiff-BUZniE5g.js +3106 -0
- package/dist/geotiff-BUZniE5g.js.map +1 -0
- package/dist/index-Bt_rREAc.js +168 -0
- package/dist/index-Bt_rREAc.js.map +1 -0
- package/dist/index-CA8I5Z2-.js +4667 -0
- package/dist/index-CA8I5Z2-.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +3122 -1230
- package/dist/index.js.map +1 -1
- package/dist/jpeg-B7yImnpY.js +534 -0
- package/dist/jpeg-B7yImnpY.js.map +1 -0
- package/dist/layers/deckgl/_shared/useDeckOverlay.d.ts +2 -0
- package/dist/layers/deckgl/index.d.ts +4 -0
- package/dist/layers/deckgl/mosaic/VLayerDeckglMosaic.vue.d.ts +163 -0
- package/dist/layers/deckgl/mosaic/index.d.ts +2 -0
- package/dist/layers/deckgl/text/VLayerDeckglText.vue.d.ts +19 -2
- package/dist/layers/deckgl/wind-particle/VLayerDeckglWindParticle.vue.d.ts +120 -0
- package/dist/layers/deckgl/wind-particle/index.d.ts +3 -0
- package/dist/layers/index.d.ts +3 -2
- package/dist/layers/maplibre/canvas/VLayerMaplibreCanvas.vue.d.ts +1 -1
- package/dist/layers/maplibre/custom/isochrone/VLayerMaplibreIsochrone.vue.d.ts +71 -0
- package/dist/layers/maplibre/custom/isochrone/index.d.ts +1 -0
- package/dist/layers/maplibre/geojson/VLayerMaplibreGeojson.vue.d.ts +1 -1
- package/dist/layers/maplibre/image/VLayerMaplibreImage.vue.d.ts +1 -1
- package/dist/layers/maplibre/pmtile/VLayerMaplibrePmtile.vue.d.ts +1 -1
- package/dist/layers/maplibre/video/VLayerMaplibreVideo.vue.d.ts +1 -1
- package/dist/lerc-CqgA9njy.js +1032 -0
- package/dist/lerc-CqgA9njy.js.map +1 -0
- package/dist/lzw-DL9RcHOz.js +85 -0
- package/dist/lzw-DL9RcHOz.js.map +1 -0
- package/dist/markers/VMarker.vue.d.ts +1 -2
- package/dist/packbits-YEJGULcy.js +25 -0
- package/dist/packbits-YEJGULcy.js.map +1 -0
- package/dist/pako.esm-Bx5X36Wo.js +1075 -0
- package/dist/pako.esm-Bx5X36Wo.js.map +1 -0
- package/dist/popups/VPopup.vue.d.ts +1 -1
- package/dist/raw-CoQHiEnn.js +10 -0
- package/dist/raw-CoQHiEnn.js.map +1 -0
- package/dist/v-maplibre.css +1 -1
- package/dist/webimage-BXLN-zu8.js +20 -0
- package/dist/webimage-BXLN-zu8.js.map +1 -0
- package/package.json +104 -80
- package/dist/layers/maplibre/{cluster → custom/cluster}/VLayerMaplibreCluster.vue.d.ts +1 -1
- package/dist/layers/maplibre/{cluster → custom/cluster}/index.d.ts +0 -0
- package/dist/layers/maplibre/{route → custom/route}/VLayerMaplibreRoute.vue.d.ts +2 -2
- /package/dist/layers/maplibre/{route → custom/route}/index.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CA8I5Z2-.js","sources":["../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/global.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/constants/values.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/constants/PrimeMeridian.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/constants/units.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/match.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projString.js","../../../node_modules/.bun/wkt-parser@1.5.2/node_modules/wkt-parser/PROJJSONBuilderBase.js","../../../node_modules/.bun/wkt-parser@1.5.2/node_modules/wkt-parser/PROJJSONBuilder2015.js","../../../node_modules/.bun/wkt-parser@1.5.2/node_modules/wkt-parser/PROJJSONBuilder2019.js","../../../node_modules/.bun/wkt-parser@1.5.2/node_modules/wkt-parser/buildPROJJSON.js","../../../node_modules/.bun/wkt-parser@1.5.2/node_modules/wkt-parser/detectWKTVersion.js","../../../node_modules/.bun/wkt-parser@1.5.2/node_modules/wkt-parser/parser.js","../../../node_modules/.bun/wkt-parser@1.5.2/node_modules/wkt-parser/process.js","../../../node_modules/.bun/wkt-parser@1.5.2/node_modules/wkt-parser/util.js","../../../node_modules/.bun/wkt-parser@1.5.2/node_modules/wkt-parser/transformPROJJSON.js","../../../node_modules/.bun/wkt-parser@1.5.2/node_modules/wkt-parser/index.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/defs.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/parseCode.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/extend.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/msfnz.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/sign.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/adjust_lon.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/tsfnz.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/phi2z.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/merc.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/longlat.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/constants/Ellipsoid.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/deriveConstants.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/constants/Datum.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/datum.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/nadgrid.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/Proj.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/datumUtils.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/datum_transform.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/adjust_axis.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/toPoint.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/checkSanity.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/transform.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/core.js","../../../node_modules/.bun/mgrs@1.0.0/node_modules/mgrs/mgrs.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/Point.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/pj_enfn.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/pj_mlfn.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/pj_inv_mlfn.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/tmerc.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/sinh.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/hypot.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/log1py.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/asinhy.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/gatg.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/clens.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/cosh.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/clens_cmplx.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/etmerc.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/adjust_zone.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/utm.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/srat.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/gauss.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/sterea.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/stere.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/somerc.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/omerc.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/lcc.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/krovak.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/mlfn.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/e0fn.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/e1fn.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/e2fn.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/e3fn.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/gN.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/adjust_lat.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/imlfn.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/cass.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/qsfnz.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/laea.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/asinz.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/aea.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/gnom.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/iqsfnz.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/cea.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/eqc.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/poly.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/nzmg.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/mill.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/sinu.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/moll.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/eqdc.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/vandg.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/common/vincenty.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/aeqd.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/ortho.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/qsc.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/robin.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/geocent.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/tpers.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/geos.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/eqearth.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/bonne.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/projections/ob_tran.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/projs.js","../../../node_modules/.bun/proj4@2.20.2/node_modules/proj4/lib/index.js"],"sourcesContent":["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 = 1; 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 defs('EPSG:5041', '+title=WGS 84 / UPS North (E,N) +proj=stere +lat_0=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m');\n defs('EPSG:5042', '+title=WGS 84 / UPS South (E,N) +proj=stere +lat_0=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m');\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 primeMeridian = {};\n\nprimeMeridian.greenwich = 0.0; // \"0dE\",\nprimeMeridian.lisbon = -9.131906111111; // \"9d07'54.862\\\"W\",\nprimeMeridian.paris = 2.337229166667; // \"2d20'14.025\\\"E\",\nprimeMeridian.bogota = -74.080916666667; // \"74d04'51.3\\\"W\",\nprimeMeridian.madrid = -3.687938888889; // \"3d41'16.58\\\"W\",\nprimeMeridian.rome = 12.452333333333; // \"12d27'8.4\\\"E\",\nprimeMeridian.bern = 7.439583333333; // \"7d26'22.5\\\"E\",\nprimeMeridian.jakarta = 106.807719444444; // \"106d48'27.79\\\"E\",\nprimeMeridian.ferro = -17.666666666667; // \"17d40'W\",\nprimeMeridian.brussels = 4.367975; // \"4d22'4.71\\\"E\",\nprimeMeridian.stockholm = 18.058277777778; // \"18d3'29.8\\\"E\",\nprimeMeridian.athens = 23.7163375; // \"23d42'58.815\\\"E\",\nprimeMeridian.oslo = 10.722916666667; // \"10d43'22.5\\\"E\"\n\nexport default primeMeridian;\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.1 },\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\n/**\n * @param {string} defData\n * @returns {import('./defs').ProjectionDefinition}\n */\nexport default function (defData) {\n /** @type {import('./defs').ProjectionDefinition} */\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 /** @type {Array<?>} */\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) * D2R;\n },\n lonc: function (v) {\n self.longc = v * D2R;\n },\n x_0: function (v) {\n self.x0 = parseFloat(v);\n },\n y_0: function (v) {\n self.y0 = parseFloat(v);\n },\n k_0: function (v) {\n self.k0 = parseFloat(v);\n },\n k: function (v) {\n self.k0 = parseFloat(v);\n },\n a: function (v) {\n self.a = parseFloat(v);\n },\n b: function (v) {\n self.b = parseFloat(v);\n },\n r: 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 } 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 over: function () {\n self.over = 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 } else {\n self[paramOutname] = paramVal;\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 self['projStr'] = defData;\n return self;\n}\n","class PROJJSONBuilderBase {\n static getId(node) {\n const idNode = node.find((child) => Array.isArray(child) && child[0] === 'ID');\n if (idNode && idNode.length >= 3) {\n return {\n authority: idNode[1],\n code: parseInt(idNode[2], 10),\n };\n }\n return null;\n }\n\n static convertUnit(node, type = 'unit') {\n if (!node || node.length < 3) {\n return { type, name: 'unknown', conversion_factor: null };\n }\n\n const name = node[1];\n const conversionFactor = parseFloat(node[2]) || null;\n\n const idNode = node.find((child) => Array.isArray(child) && child[0] === 'ID');\n const id = idNode\n ? {\n authority: idNode[1],\n code: parseInt(idNode[2], 10),\n }\n : null;\n\n return {\n type,\n name,\n conversion_factor: conversionFactor,\n id,\n };\n }\n\n static convertAxis(node) {\n const name = node[1] || 'Unknown';\n\n // Determine the direction\n let direction;\n const abbreviationMatch = name.match(/^\\((.)\\)$/); // Match abbreviations like \"(E)\" or \"(N)\"\n if (abbreviationMatch) {\n // Use the abbreviation to determine the direction\n const abbreviation = abbreviationMatch[1].toUpperCase();\n if (abbreviation === 'E') direction = 'east';\n else if (abbreviation === 'N') direction = 'north';\n else if (abbreviation === 'U') direction = 'up';\n else throw new Error(`Unknown axis abbreviation: ${abbreviation}`);\n } else {\n // Use the explicit direction provided in the AXIS node\n direction = node[2] ? node[2].toLowerCase() : 'unknown';\n }\n\n const orderNode = node.find((child) => Array.isArray(child) && child[0] === 'ORDER');\n const order = orderNode ? parseInt(orderNode[1], 10) : null;\n\n const unitNode = node.find(\n (child) =>\n Array.isArray(child) &&\n (child[0] === 'LENGTHUNIT' || child[0] === 'ANGLEUNIT' || child[0] === 'SCALEUNIT')\n );\n const unit = this.convertUnit(unitNode);\n\n return {\n name,\n direction, // Use the valid PROJJSON direction value\n unit,\n order,\n };\n }\n\n static extractAxes(node) {\n return node\n .filter((child) => Array.isArray(child) && child[0] === 'AXIS')\n .map((axis) => this.convertAxis(axis))\n .sort((a, b) => (a.order || 0) - (b.order || 0)); // Sort by the \"order\" property\n }\n\n static convert(node, result = {}) {\n\n switch (node[0]) {\n case 'PROJCRS':\n result.type = 'ProjectedCRS';\n result.name = node[1];\n result.base_crs = node.find((child) => Array.isArray(child) && child[0] === 'BASEGEOGCRS')\n ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'BASEGEOGCRS'))\n : null;\n result.conversion = node.find((child) => Array.isArray(child) && child[0] === 'CONVERSION')\n ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'CONVERSION'))\n : null;\n\n const csNode = node.find((child) => Array.isArray(child) && child[0] === 'CS');\n if (csNode) {\n result.coordinate_system = {\n type: csNode[1],\n axis: this.extractAxes(node),\n };\n }\n\n const lengthUnitNode = node.find((child) => Array.isArray(child) && child[0] === 'LENGTHUNIT');\n if (lengthUnitNode) {\n const unit = this.convertUnit(lengthUnitNode);\n result.coordinate_system.unit = unit; // Add unit to coordinate_system\n }\n\n result.id = this.getId(node);\n break;\n\n case 'BASEGEOGCRS':\n case 'GEOGCRS':\n result.type = 'GeographicCRS';\n result.name = node[1];\n \n // Handle DATUM or ENSEMBLE\n const datumOrEnsembleNode = node.find(\n (child) => Array.isArray(child) && (child[0] === 'DATUM' || child[0] === 'ENSEMBLE')\n );\n if (datumOrEnsembleNode) {\n const datumOrEnsemble = this.convert(datumOrEnsembleNode);\n if (datumOrEnsembleNode[0] === 'ENSEMBLE') {\n result.datum_ensemble = datumOrEnsemble;\n } else {\n result.datum = datumOrEnsemble;\n }\n const primem = node.find((child) => Array.isArray(child) && child[0] === 'PRIMEM');\n if (primem && primem[1] !== 'Greenwich') {\n datumOrEnsemble.prime_meridian = {\n name: primem[1],\n longitude: parseFloat(primem[2]),\n }\n }\n }\n \n result.coordinate_system = {\n type: 'ellipsoidal',\n axis: this.extractAxes(node),\n };\n \n result.id = this.getId(node);\n break;\n\n case 'DATUM':\n result.type = 'GeodeticReferenceFrame';\n result.name = node[1];\n result.ellipsoid = node.find((child) => Array.isArray(child) && child[0] === 'ELLIPSOID')\n ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'ELLIPSOID'))\n : null;\n break;\n \n case 'ENSEMBLE':\n result.type = 'DatumEnsemble';\n result.name = node[1];\n \n // Extract ensemble members\n result.members = node\n .filter((child) => Array.isArray(child) && child[0] === 'MEMBER')\n .map((member) => ({\n type: 'DatumEnsembleMember',\n name: member[1],\n id: this.getId(member), // Extract ID as { authority, code }\n }));\n \n // Extract accuracy\n const accuracyNode = node.find((child) => Array.isArray(child) && child[0] === 'ENSEMBLEACCURACY');\n if (accuracyNode) {\n result.accuracy = parseFloat(accuracyNode[1]);\n }\n \n // Extract ellipsoid\n const ellipsoidNode = node.find((child) => Array.isArray(child) && child[0] === 'ELLIPSOID');\n if (ellipsoidNode) {\n result.ellipsoid = this.convert(ellipsoidNode); // Convert the ellipsoid node\n }\n \n // Extract identifier for the ensemble\n result.id = this.getId(node);\n break;\n\n case 'ELLIPSOID':\n result.type = 'Ellipsoid';\n result.name = node[1];\n result.semi_major_axis = parseFloat(node[2]);\n result.inverse_flattening = parseFloat(node[3]);\n const units = node.find((child) => Array.isArray(child) && child[0] === 'LENGTHUNIT')\n ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'LENGTHUNIT'), result)\n : null;\n break;\n\n case 'CONVERSION':\n result.type = 'Conversion';\n result.name = node[1];\n result.method = node.find((child) => Array.isArray(child) && child[0] === 'METHOD')\n ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'METHOD'))\n : null;\n result.parameters = node\n .filter((child) => Array.isArray(child) && child[0] === 'PARAMETER')\n .map((param) => this.convert(param));\n break;\n\n case 'METHOD':\n result.type = 'Method';\n result.name = node[1];\n result.id = this.getId(node);\n break;\n\n case 'PARAMETER':\n result.type = 'Parameter';\n result.name = node[1];\n result.value = parseFloat(node[2]);\n result.unit = this.convertUnit(\n node.find(\n (child) =>\n Array.isArray(child) &&\n (child[0] === 'LENGTHUNIT' || child[0] === 'ANGLEUNIT' || child[0] === 'SCALEUNIT')\n )\n );\n result.id = this.getId(node);\n break;\n\n case 'BOUNDCRS':\n result.type = 'BoundCRS';\n\n // Process SOURCECRS\n const sourceCrsNode = node.find((child) => Array.isArray(child) && child[0] === 'SOURCECRS');\n if (sourceCrsNode) {\n const sourceCrsContent = sourceCrsNode.find((child) => Array.isArray(child));\n result.source_crs = sourceCrsContent ? this.convert(sourceCrsContent) : null;\n }\n\n // Process TARGETCRS\n const targetCrsNode = node.find((child) => Array.isArray(child) && child[0] === 'TARGETCRS');\n if (targetCrsNode) {\n const targetCrsContent = targetCrsNode.find((child) => Array.isArray(child));\n result.target_crs = targetCrsContent ? this.convert(targetCrsContent) : null;\n }\n\n // Process ABRIDGEDTRANSFORMATION\n const transformationNode = node.find((child) => Array.isArray(child) && child[0] === 'ABRIDGEDTRANSFORMATION');\n if (transformationNode) {\n result.transformation = this.convert(transformationNode);\n } else {\n result.transformation = null;\n }\n break;\n\n case 'ABRIDGEDTRANSFORMATION':\n result.type = 'Transformation';\n result.name = node[1];\n result.method = node.find((child) => Array.isArray(child) && child[0] === 'METHOD')\n ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'METHOD'))\n : null;\n\n result.parameters = node\n .filter((child) => Array.isArray(child) && (child[0] === 'PARAMETER' || child[0] === 'PARAMETERFILE'))\n .map((param) => {\n if (param[0] === 'PARAMETER') {\n return this.convert(param);\n } else if (param[0] === 'PARAMETERFILE') {\n return {\n name: param[1],\n value: param[2],\n id: {\n 'authority': 'EPSG',\n 'code': 8656\n }\n };\n }\n });\n\n // Adjust the Scale difference parameter if present\n if (result.parameters.length === 7) {\n const scaleDifference = result.parameters[6];\n if (scaleDifference.name === 'Scale difference') {\n scaleDifference.value = Math.round((scaleDifference.value - 1) * 1e12) / 1e6;\n }\n }\n\n result.id = this.getId(node);\n break;\n \n case 'AXIS':\n if (!result.coordinate_system) {\n result.coordinate_system = { type: 'unspecified', axis: [] };\n }\n result.coordinate_system.axis.push(this.convertAxis(node));\n break;\n \n case 'LENGTHUNIT':\n const unit = this.convertUnit(node, 'LinearUnit');\n if (result.coordinate_system && result.coordinate_system.axis) {\n result.coordinate_system.axis.forEach((axis) => {\n if (!axis.unit) {\n axis.unit = unit;\n }\n });\n }\n if (unit.conversion_factor && unit.conversion_factor !== 1) {\n if (result.semi_major_axis) {\n result.semi_major_axis = {\n value: result.semi_major_axis,\n unit,\n }\n }\n }\n break;\n\n default:\n result.keyword = node[0];\n break;\n }\n\n return result;\n }\n}\n\nexport default PROJJSONBuilderBase;","import PROJJSONBuilderBase from './PROJJSONBuilderBase.js';\n\nclass PROJJSONBuilder2015 extends PROJJSONBuilderBase {\n static convert(node, result = {}) {\n super.convert(node, result);\n\n // Skip `CS` and `USAGE` nodes for WKT2-2015\n if (result.coordinate_system && result.coordinate_system.subtype === 'Cartesian') {\n delete result.coordinate_system;\n }\n if (result.usage) {\n delete result.usage;\n }\n\n return result;\n }\n}\n\nexport default PROJJSONBuilder2015;","import PROJJSONBuilderBase from './PROJJSONBuilderBase.js';\n\nclass PROJJSONBuilder2019 extends PROJJSONBuilderBase {\n static convert(node, result = {}) {\n super.convert(node, result);\n\n // Handle `CS` node for WKT2-2019\n const csNode = node.find((child) => Array.isArray(child) && child[0] === 'CS');\n if (csNode) {\n result.coordinate_system = {\n subtype: csNode[1],\n axis: this.extractAxes(node),\n };\n }\n\n // Handle `USAGE` node for WKT2-2019\n const usageNode = node.find((child) => Array.isArray(child) && child[0] === 'USAGE');\n if (usageNode) {\n const scope = usageNode.find((child) => Array.isArray(child) && child[0] === 'SCOPE');\n const area = usageNode.find((child) => Array.isArray(child) && child[0] === 'AREA');\n const bbox = usageNode.find((child) => Array.isArray(child) && child[0] === 'BBOX');\n result.usage = {};\n if (scope) {\n result.usage.scope = scope[1];\n }\n if (area) {\n result.usage.area = area[1];\n }\n if (bbox) {\n result.usage.bbox = bbox.slice(1);\n }\n }\n\n return result;\n }\n}\n\nexport default PROJJSONBuilder2019;","import PROJJSONBuilder2015 from './PROJJSONBuilder2015.js';\nimport PROJJSONBuilder2019 from './PROJJSONBuilder2019.js';\n\n/**\n * Detects the WKT2 version based on the structure of the WKT.\n * @param {Array} root The root WKT array node.\n * @returns {string} The detected version (\"2015\" or \"2019\").\n */\nfunction detectWKT2Version(root) {\n // Check for WKT2-2019-specific nodes\n if (root.find((child) => Array.isArray(child) && child[0] === 'USAGE')) {\n return '2019'; // `USAGE` is specific to WKT2-2019\n }\n\n // Check for WKT2-2015-specific nodes\n if (root.find((child) => Array.isArray(child) && child[0] === 'CS')) {\n return '2015'; // `CS` is valid in both, but default to 2015 unless `USAGE` is present\n }\n\n if (root[0] === 'BOUNDCRS' || root[0] === 'PROJCRS' || root[0] === 'GEOGCRS') {\n return '2015'; // These are valid in both, but default to 2015\n }\n\n // Default to WKT2-2015 if no specific indicators are found\n return '2015';\n}\n\n/**\n * Builds a PROJJSON object from a WKT array structure.\n * @param {Array} root The root WKT array node.\n * @returns {Object} The PROJJSON object.\n */\nexport function buildPROJJSON(root) {\n const version = detectWKT2Version(root);\n const builder = version === '2019' ? PROJJSONBuilder2019 : PROJJSONBuilder2015;\n return builder.convert(root);\n}\n","/**\n * Detects whether the WKT string is WKT1 or WKT2.\n * @param {string} wkt The WKT string.\n * @returns {string} The detected version (\"WKT1\" or \"WKT2\").\n */\nexport function detectWKTVersion(wkt) {\n // Normalize the WKT string for easier keyword matching\n const normalizedWKT = wkt.toUpperCase();\n\n // Check for WKT2-specific keywords\n if (\n normalizedWKT.includes('PROJCRS') ||\n normalizedWKT.includes('GEOGCRS') ||\n normalizedWKT.includes('BOUNDCRS') ||\n normalizedWKT.includes('VERTCRS') ||\n normalizedWKT.includes('LENGTHUNIT') ||\n normalizedWKT.includes('ANGLEUNIT') ||\n normalizedWKT.includes('SCALEUNIT')\n ) {\n return 'WKT2';\n }\n\n // Check for WKT1-specific keywords\n if (\n normalizedWKT.includes('PROJCS') ||\n normalizedWKT.includes('GEOGCS') ||\n normalizedWKT.includes('LOCAL_CS') ||\n normalizedWKT.includes('VERT_CS') ||\n normalizedWKT.includes('UNIT')\n ) {\n return 'WKT1';\n }\n\n // Default to WKT1 if no specific indicators are found\n return 'WKT1';\n}","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84_]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n if (typeof text !== 'string') {\n throw new Error('not a string');\n }\n this.text = text.trim();\n this.level = 0;\n this.place = 0;\n this.root = null;\n this.stack = [];\n this.currentObject = null;\n this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n var char = this.text[this.place++];\n if (this.state !== QUOTED) {\n while (whitespace.test(char)) {\n if (this.place >= this.text.length) {\n return;\n }\n char = this.text[this.place++];\n }\n }\n switch (this.state) {\n case NEUTRAL:\n return this.neutral(char);\n case KEYWORD:\n return this.keyword(char)\n case QUOTED:\n return this.quoted(char);\n case AFTERQUOTE:\n return this.afterquote(char);\n case NUMBER:\n return this.number(char);\n case ENDED:\n return;\n }\n};\nParser.prototype.afterquote = function(char) {\n if (char === '\"') {\n this.word += '\"';\n this.state = QUOTED;\n return;\n }\n if (endThings.test(char)) {\n this.word = this.word.trim();\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n if (char === ',') {\n if (this.word !== null) {\n this.currentObject.push(this.word);\n }\n this.word = null;\n this.state = NEUTRAL;\n return;\n }\n if (char === ']') {\n this.level--;\n if (this.word !== null) {\n this.currentObject.push(this.word);\n this.word = null;\n }\n this.state = NEUTRAL;\n this.currentObject = this.stack.pop();\n if (!this.currentObject) {\n this.state = ENDED;\n }\n\n return;\n }\n};\nParser.prototype.number = function(char) {\n if (digets.test(char)) {\n this.word += char;\n return;\n }\n if (endThings.test(char)) {\n this.word = parseFloat(this.word);\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n if (char === '\"') {\n this.state = AFTERQUOTE;\n return;\n }\n this.word += char;\n return;\n};\nParser.prototype.keyword = function(char) {\n if (keyword.test(char)) {\n this.word += char;\n return;\n }\n if (char === '[') {\n var newObjects = [];\n newObjects.push(this.word);\n this.level++;\n if (this.root === null) {\n this.root = newObjects;\n } else {\n this.currentObject.push(newObjects);\n }\n this.stack.push(this.currentObject);\n this.currentObject = newObjects;\n this.state = NEUTRAL;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n if (latin.test(char)) {\n this.word = char;\n this.state = KEYWORD;\n return;\n }\n if (char === '\"') {\n this.word = '';\n this.state = QUOTED;\n return;\n }\n if (digets.test(char)) {\n this.word = char;\n this.state = NUMBER;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n while (this.place < this.text.length) {\n this.readCharicter();\n }\n if (this.state === ENDED) {\n return this.root;\n }\n throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n var parser = new Parser(txt);\n return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n if (Array.isArray(key)) {\n value.unshift(key);\n key = null;\n }\n var thing = key ? {} : obj;\n\n var out = value.reduce(function(newObj, item) {\n sExpr(item, newObj);\n return newObj\n }, thing);\n if (key) {\n obj[key] = out;\n }\n}\n\nexport function sExpr(v, obj) {\n if (!Array.isArray(v)) {\n obj[v] = true;\n return;\n }\n var key = v.shift();\n if (key === 'PARAMETER') {\n key = v.shift();\n }\n if (v.length === 1) {\n if (Array.isArray(v[0])) {\n obj[key] = {};\n sExpr(v[0], obj[key]);\n return;\n }\n obj[key] = v[0];\n return;\n }\n if (!v.length) {\n obj[key] = true;\n return;\n }\n if (key === 'TOWGS84') {\n obj[key] = v;\n return;\n }\n if (key === 'AXIS') {\n if (!(key in obj)) {\n obj[key] = [];\n }\n obj[key].push(v);\n return;\n }\n if (!Array.isArray(key)) {\n obj[key] = {};\n }\n\n var i;\n switch (key) {\n case 'UNIT':\n case 'PRIMEM':\n case 'VERT_DATUM':\n obj[key] = {\n name: v[0].toLowerCase(),\n convert: v[1]\n };\n if (v.length === 3) {\n sExpr(v[2], obj[key]);\n }\n return;\n case 'SPHEROID':\n case 'ELLIPSOID':\n obj[key] = {\n name: v[0],\n a: v[1],\n rf: v[2]\n };\n if (v.length === 4) {\n sExpr(v[3], obj[key]);\n }\n return;\n case 'EDATUM':\n case 'ENGINEERINGDATUM':\n case 'LOCAL_DATUM':\n case 'DATUM':\n case 'VERT_CS':\n case 'VERTCRS':\n case 'VERTICALCRS':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n return;\n case 'COMPD_CS':\n case 'COMPOUNDCRS':\n case 'FITTED_CS':\n // the followings are the crs defined in\n // https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11\n case 'PROJECTEDCRS':\n case 'PROJCRS':\n case 'GEOGCS':\n case 'GEOCCS':\n case 'PROJCS':\n case 'LOCAL_CS':\n case 'GEODCRS':\n case 'GEODETICCRS':\n case 'GEODETICDATUM':\n case 'ENGCRS':\n case 'ENGINEERINGCRS':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n obj[key].type = key;\n return;\n default:\n i = -1;\n while (++i < v.length) {\n if (!Array.isArray(v[i])) {\n return sExpr(v, obj[key]);\n }\n }\n return mapit(obj, key, v);\n }\n}\n","var D2R = 0.01745329251994329577;\n\nexport function d2r(input) {\n return input * D2R;\n}\n\nexport function applyProjectionDefaults(wkt) {\n // Normalize projName for WKT2 compatibility\n const normalizedProjName = (wkt.projName || '').toLowerCase().replace(/_/g, ' ');\n\n if (!wkt.long0 && wkt.longc && (normalizedProjName === 'albers conic equal area' || normalizedProjName === 'lambert azimuthal equal area')) {\n wkt.long0 = wkt.longc;\n }\n if (!wkt.lat_ts && wkt.lat1 && (normalizedProjName === 'stereographic south pole' || normalizedProjName === 'polar stereographic (variant b)')) {\n wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n wkt.lat_ts = wkt.lat1;\n delete wkt.lat1;\n } else if (!wkt.lat_ts && wkt.lat0 && (normalizedProjName === 'polar stereographic' || normalizedProjName === 'polar stereographic (variant a)')) {\n wkt.lat_ts = wkt.lat0;\n wkt.lat0 = d2r(wkt.lat0 > 0 ? 90 : -90);\n delete wkt.lat1;\n }\n}","import { applyProjectionDefaults } from './util.js';\n\n// Helper function to process units and to_meter\nfunction processUnit(unit) {\n let result = { units: null, to_meter: undefined };\n\n if (typeof unit === 'string') {\n result.units = unit.toLowerCase();\n if (result.units === 'metre') {\n result.units = 'meter'; // Normalize 'metre' to 'meter'\n }\n if (result.units === 'meter') {\n result.to_meter = 1; // Only set to_meter if units are 'meter'\n }\n } else if (unit && unit.name) {\n result.units = unit.name.toLowerCase();\n if (result.units === 'metre') {\n result.units = 'meter'; // Normalize 'metre' to 'meter'\n }\n result.to_meter = unit.conversion_factor;\n }\n\n return result;\n}\n\nfunction toValue(valueOrObject) {\n if (typeof valueOrObject === 'object') {\n return valueOrObject.value * valueOrObject.unit.conversion_factor;\n }\n return valueOrObject;\n}\n\nfunction calculateEllipsoid(value, result) {\n if (value.ellipsoid.radius) {\n result.a = value.ellipsoid.radius;\n result.rf = 0;\n } else {\n result.a = toValue(value.ellipsoid.semi_major_axis);\n if (value.ellipsoid.inverse_flattening !== undefined) {\n result.rf = value.ellipsoid.inverse_flattening;\n } else if (value.ellipsoid.semi_major_axis !== undefined && value.ellipsoid.semi_minor_axis !== undefined) {\n result.rf = result.a / (result.a - toValue(value.ellipsoid.semi_minor_axis));\n }\n }\n}\n\nexport function transformPROJJSON(projjson, result = {}) {\n if (!projjson || typeof projjson !== 'object') {\n return projjson; // Return primitive values as-is\n }\n\n if (projjson.type === 'BoundCRS') {\n transformPROJJSON(projjson.source_crs, result);\n\n if (projjson.transformation) {\n if (projjson.transformation.method && projjson.transformation.method.name === 'NTv2') {\n // Set nadgrids to the filename from the parameterfile\n result.nadgrids = projjson.transformation.parameters[0].value;\n } else {\n // Populate datum_params if no parameterfile is found\n result.datum_params = projjson.transformation.parameters.map((param) => param.value);\n }\n }\n return result; // Return early for BoundCRS\n }\n\n // Handle specific keys in PROJJSON\n Object.keys(projjson).forEach((key) => {\n const value = projjson[key];\n if (value === null) {\n return;\n }\n\n switch (key) {\n case 'name':\n if (result.srsCode) {\n break;\n }\n result.name = value;\n result.srsCode = value; // Map `name` to `srsCode`\n break;\n\n case 'type':\n if (value === 'GeographicCRS') {\n result.projName = 'longlat';\n } else if (value === 'ProjectedCRS' && projjson.conversion && projjson.conversion.method) {\n result.projName = projjson.conversion.method.name; // Retain original capitalization\n }\n break;\n\n case 'datum':\n case 'datum_ensemble': // Handle both datum and ensemble\n if (value.ellipsoid) {\n // Extract ellipsoid properties\n result.ellps = value.ellipsoid.name;\n calculateEllipsoid(value, result);\n }\n if (value.prime_meridian) {\n result.from_greenwich = value.prime_meridian.longitude * Math.PI / 180; // Convert to radians\n }\n break;\n\n case 'ellipsoid':\n result.ellps = value.name;\n calculateEllipsoid(value, result);\n break;\n\n case 'prime_meridian':\n result.long0 = (value.longitude || 0) * Math.PI / 180; // Convert to radians\n break;\n\n case 'coordinate_system':\n if (value.axis) {\n result.axis = value.axis\n .map((axis) => {\n const direction = axis.direction;\n if (direction === 'east') return 'e';\n if (direction === 'north') return 'n';\n if (direction === 'west') return 'w';\n if (direction === 'south') return 's';\n throw new Error(`Unknown axis direction: ${direction}`);\n })\n .join('') + 'u'; // Combine into a single string (e.g., \"enu\")\n\n if (value.unit) {\n const { units, to_meter } = processUnit(value.unit);\n result.units = units;\n result.to_meter = to_meter;\n } else if (value.axis[0] && value.axis[0].unit) {\n const { units, to_meter } = processUnit(value.axis[0].unit);\n result.units = units;\n result.to_meter = to_meter;\n }\n }\n break;\n \n case 'id':\n if (value.authority && value.code) {\n result.title = value.authority + ':' + value.code;\n }\n break;\n\n case 'conversion':\n if (value.method && value.method.name) {\n result.projName = value.method.name; // Retain original capitalization\n }\n if (value.parameters) {\n value.parameters.forEach((param) => {\n const paramName = param.name.toLowerCase().replace(/\\s+/g, '_');\n const paramValue = param.value;\n if (param.unit && param.unit.conversion_factor) {\n result[paramName] = paramValue * param.unit.conversion_factor; // Convert to radians or meters\n } else if (param.unit === 'degree') {\n result[paramName] = paramValue * Math.PI / 180; // Convert to radians\n } else {\n result[paramName] = paramValue;\n }\n });\n }\n break;\n\n case 'unit':\n if (value.name) {\n result.units = value.name.toLowerCase();\n if (result.units === 'metre') {\n result.units = 'meter';\n }\n }\n if (value.conversion_factor) {\n result.to_meter = value.conversion_factor;\n }\n break;\n\n case 'base_crs':\n transformPROJJSON(value, result); // Pass `result` directly\n result.datumCode = value.id ? value.id.authority + '_' + value.id.code : value.name; // Set datumCode\n break;\n\n default:\n // Ignore irrelevant or unneeded properties\n break;\n }\n });\n\n // Additional calculated properties\n if (result.latitude_of_false_origin !== undefined) {\n result.lat0 = result.latitude_of_false_origin; // Already in radians\n }\n if (result.longitude_of_false_origin !== undefined) {\n result.long0 = result.longitude_of_false_origin;\n }\n if (result.latitude_of_standard_parallel !== undefined) {\n result.lat0 = result.latitude_of_standard_parallel;\n result.lat1 = result.latitude_of_standard_parallel;\n }\n if (result.latitude_of_1st_standard_parallel !== undefined) {\n result.lat1 = result.latitude_of_1st_standard_parallel;\n }\n if (result.latitude_of_2nd_standard_parallel !== undefined) {\n result.lat2 = result.latitude_of_2nd_standard_parallel; \n }\n if (result.latitude_of_projection_centre !== undefined) {\n result.lat0 = result.latitude_of_projection_centre;\n }\n if (result.longitude_of_projection_centre !== undefined) {\n result.longc = result.longitude_of_projection_centre;\n }\n if (result.easting_at_false_origin !== undefined) {\n result.x0 = result.easting_at_false_origin;\n }\n if (result.northing_at_false_origin !== undefined) {\n result.y0 = result.northing_at_false_origin;\n }\n if (result.latitude_of_natural_origin !== undefined) {\n result.lat0 = result.latitude_of_natural_origin;\n }\n if (result.longitude_of_natural_origin !== undefined) {\n result.long0 = result.longitude_of_natural_origin;\n }\n if (result.longitude_of_origin !== undefined) {\n result.long0 = result.longitude_of_origin;\n }\n if (result.false_easting !== undefined) {\n result.x0 = result.false_easting;\n }\n if (result.easting_at_projection_centre) {\n result.x0 = result.easting_at_projection_centre;\n }\n if (result.false_northing !== undefined) {\n result.y0 = result.false_northing;\n }\n if (result.northing_at_projection_centre) {\n result.y0 = result.northing_at_projection_centre;\n }\n if (result.standard_parallel_1 !== undefined) {\n result.lat1 = result.standard_parallel_1;\n }\n if (result.standard_parallel_2 !== undefined) {\n result.lat2 = result.standard_parallel_2;\n }\n if (result.scale_factor_at_natural_origin !== undefined) {\n result.k0 = result.scale_factor_at_natural_origin;\n }\n if (result.scale_factor_at_projection_centre !== undefined) {\n result.k0 = result.scale_factor_at_projection_centre;\n }\n if (result.scale_factor_on_pseudo_standard_parallel !== undefined) { \n result.k0 = result.scale_factor_on_pseudo_standard_parallel;\n }\n if (result.azimuth !== undefined) {\n result.alpha = result.azimuth;\n }\n if (result.azimuth_at_projection_centre !== undefined) {\n result.alpha = result.azimuth_at_projection_centre;\n }\n if (result.angle_from_rectified_to_skew_grid) {\n result.rectified_grid_angle = result.angle_from_rectified_to_skew_grid;\n }\n\n // Apply projection defaults\n applyProjectionDefaults(result);\n\n return result;\n}","import { buildPROJJSON } from './buildPROJJSON.js';\nimport { detectWKTVersion } from './detectWKTVersion.js';\nimport parser from './parser.js';\nimport {sExpr} from './process.js';\nimport { transformPROJJSON } from './transformPROJJSON.js';\nimport { applyProjectionDefaults, d2r } from './util.js';\n\nvar knownTypes = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS', 'GEOCCS', 'PROJCS', 'LOCAL_CS', 'GEODCRS',\n 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\n\nfunction rename(obj, params) {\n var outName = params[0];\n var inName = params[1];\n if (!(outName in obj) && (inName in obj)) {\n obj[outName] = obj[inName];\n if (params.length === 3) {\n obj[outName] = params[2](obj[outName]);\n }\n }\n}\n\nfunction cleanWKT(wkt) {\n var keys = Object.keys(wkt);\n for (var i = 0, ii = keys.length; i <ii; ++i) {\n var key = keys[i];\n // the followings are the crs defined in\n // https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11\n if (knownTypes.indexOf(key) !== -1) {\n setPropertiesFromWkt(wkt[key]);\n }\n if (typeof wkt[key] === 'object') {\n cleanWKT(wkt[key]);\n }\n }\n}\n\nfunction setPropertiesFromWkt(wkt) {\n if (wkt.AUTHORITY) {\n var authority = Object.keys(wkt.AUTHORITY)[0];\n if (authority && authority in wkt.AUTHORITY) {\n wkt.title = authority + ':' + wkt.AUTHORITY[authority];\n }\n }\n if (wkt.type === 'GEOGCS') {\n wkt.projName = 'longlat';\n } else if (wkt.type === 'LOCAL_CS') {\n wkt.projName = 'identity';\n wkt.local = true;\n } else {\n if (typeof wkt.PROJECTION === 'object') {\n wkt.projName = Object.keys(wkt.PROJECTION)[0];\n } else {\n wkt.projName = wkt.PROJECTION;\n }\n }\n if (wkt.AXIS) {\n var axisOrder = '';\n for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {\n var axis = [wkt.AXIS[i][0].toLowerCase(), wkt.AXIS[i][1].toLowerCase()];\n if (axis[0].indexOf('north') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'north')) {\n axisOrder += 'n';\n } else if (axis[0].indexOf('south') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'south')) {\n axisOrder += 's';\n } else if (axis[0].indexOf('east') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'east')) {\n axisOrder += 'e';\n } else if (axis[0].indexOf('west') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'west')) {\n axisOrder += 'w';\n }\n }\n if (axisOrder.length === 2) {\n axisOrder += 'u';\n }\n if (axisOrder.length === 3) {\n wkt.axis = axisOrder;\n }\n }\n if (wkt.UNIT) {\n wkt.units = wkt.UNIT.name.toLowerCase();\n if (wkt.units === 'metre') {\n wkt.units = 'meter';\n }\n if (wkt.UNIT.convert) {\n if (wkt.type === 'GEOGCS') {\n if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n }\n } else {\n wkt.to_meter = wkt.UNIT.convert;\n }\n }\n }\n var geogcs = wkt.GEOGCS;\n if (wkt.type === 'GEOGCS') {\n geogcs = wkt;\n }\n if (geogcs) {\n //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n //}\n if (geogcs.DATUM) {\n wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n } else {\n wkt.datumCode = geogcs.name.toLowerCase();\n }\n if (wkt.datumCode.slice(0, 2) === 'd_') {\n wkt.datumCode = wkt.datumCode.slice(2);\n }\n if (wkt.datumCode === 'new_zealand_1949') {\n wkt.datumCode = 'nzgd49';\n }\n if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {\n if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n wkt.sphere = true;\n }\n wkt.datumCode = 'wgs84';\n }\n if (wkt.datumCode === 'belge_1972') {\n wkt.datumCode = 'rnb72';\n }\n if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n wkt.ellps = 'intl';\n }\n\n wkt.a = geogcs.DATUM.SPHEROID.a;\n wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);\n }\n\n if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {\n wkt.datum_params = geogcs.DATUM.TOWGS84;\n }\n if (~wkt.datumCode.indexOf('osgb_1936')) {\n wkt.datumCode = 'osgb36';\n }\n if (~wkt.datumCode.indexOf('osni_1952')) {\n wkt.datumCode = 'osni52';\n }\n if (~wkt.datumCode.indexOf('tm65')\n || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {\n wkt.datumCode = 'ire65';\n }\n if (wkt.datumCode === 'ch1903+') {\n wkt.datumCode = 'ch1903';\n }\n if (~wkt.datumCode.indexOf('israel')) {\n wkt.datumCode = 'isr93';\n }\n }\n if (wkt.b && !isFinite(wkt.b)) {\n wkt.b = wkt.a;\n }\n if (wkt.rectified_grid_angle) {\n wkt.rectified_grid_angle = d2r(wkt.rectified_grid_angle);\n }\n\n function toMeter(input) {\n var ratio = wkt.to_meter || 1;\n return input * ratio;\n }\n var renamer = function(a) {\n return rename(wkt, a);\n };\n var list = [\n ['standard_parallel_1', 'Standard_Parallel_1'],\n ['standard_parallel_1', 'Latitude of 1st standard parallel'],\n ['standard_parallel_2', 'Standard_Parallel_2'],\n ['standard_parallel_2', 'Latitude of 2nd standard parallel'],\n ['false_easting', 'False_Easting'],\n ['false_easting', 'False easting'],\n ['false-easting', 'Easting at false origin'],\n ['false_northing', 'False_Northing'],\n ['false_northing', 'False northing'],\n ['false_northing', 'Northing at false origin'],\n ['central_meridian', 'Central_Meridian'],\n ['central_meridian', 'Longitude of natural origin'],\n ['central_meridian', 'Longitude of false origin'],\n ['latitude_of_origin', 'Latitude_Of_Origin'],\n ['latitude_of_origin', 'Central_Parallel'],\n ['latitude_of_origin', 'Latitude of natural origin'],\n ['latitude_of_origin', 'Latitude of false origin'],\n ['scale_factor', 'Scale_Factor'],\n ['k0', 'scale_factor'],\n ['latitude_of_center', 'Latitude_Of_Center'],\n ['latitude_of_center', 'Latitude_of_center'],\n ['lat0', 'latitude_of_center', d2r],\n ['longitude_of_center', 'Longitude_Of_Center'],\n ['longitude_of_center', 'Longitude_of_center'],\n ['longc', 'longitude_of_center', d2r],\n ['x0', 'false_easting', toMeter],\n ['y0', 'false_northing', toMeter],\n ['long0', 'central_meridian', d2r],\n ['lat0', 'latitude_of_origin', d2r],\n ['lat0', 'standard_parallel_1', d2r],\n ['lat1', 'standard_parallel_1', d2r],\n ['lat2', 'standard_parallel_2', d2r],\n ['azimuth', 'Azimuth'],\n ['alpha', 'azimuth', d2r],\n ['srsCode', 'name']\n ];\n list.forEach(renamer);\n applyProjectionDefaults(wkt);\n}\nexport default function(wkt) {\n if (typeof wkt === 'object') {\n return transformPROJJSON(wkt);\n }\n const version = detectWKTVersion(wkt);\n var lisp = parser(wkt);\n if (version === 'WKT2') {\n const projjson = buildPROJJSON(lisp);\n return transformPROJJSON(projjson);\n }\n var type = lisp[0];\n var obj = {};\n sExpr(lisp, obj);\n cleanWKT(obj);\n return obj[type];\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\n/**\n * @typedef {Object} ProjectionDefinition\n * @property {string} title\n * @property {string} [projName]\n * @property {string} [ellps]\n * @property {import('./Proj.js').DatumDefinition} [datum]\n * @property {string} [datumName]\n * @property {number} [rf]\n * @property {number} [lat0]\n * @property {number} [lat1]\n * @property {number} [lat2]\n * @property {number} [lat_ts]\n * @property {number} [long0]\n * @property {number} [long1]\n * @property {number} [long2]\n * @property {number} [alpha]\n * @property {number} [longc]\n * @property {number} [x0]\n * @property {number} [y0]\n * @property {number} [k0]\n * @property {number} [a]\n * @property {number} [b]\n * @property {true} [R_A]\n * @property {number} [zone]\n * @property {true} [utmSouth]\n * @property {string|Array<number>} [datum_params]\n * @property {number} [to_meter]\n * @property {string} [units]\n * @property {number} [from_greenwich]\n * @property {string} [datumCode]\n * @property {string} [nadgrids]\n * @property {string} [axis]\n * @property {boolean} [sphere]\n * @property {number} [rectified_grid_angle]\n * @property {boolean} [approx]\n * @property {boolean} [over]\n * @property {string} [projStr]\n * @property {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} inverse\n * @property {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} forward\n */\n\n/**\n * @overload\n * @param {string} name\n * @param {string|ProjectionDefinition|import('./core.js').PROJJSONDefinition} projection\n * @returns {void}\n */\n/**\n * @overload\n * @param {Array<[string, string]>} name\n * @returns {Array<ProjectionDefinition|undefined>}\n */\n/**\n * @overload\n * @param {string} name\n * @returns {ProjectionDefinition}\n */\n\n/**\n * @param {string | Array<Array<string>> | Partial<Record<'EPSG'|'ESRI'|'IAU2000', ProjectionDefinition>>} name\n * @returns {ProjectionDefinition | Array<ProjectionDefinition|undefined> | void}\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[/** @type {string} */ (name)] = parseProj(arguments[1]);\n } else {\n defs[/** @type {string} */ (name)] = wkt(arguments[1]);\n }\n } else if (def && typeof def === 'object' && !('projName' in def)) {\n // PROJJSON\n defs[/** @type {string} */ (name)] = wkt(arguments[1]);\n } else {\n defs[/** @type {string} */ (name)] = def;\n if (!def) {\n delete defs[/** @type {string} */ (name)];\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 return defs.apply(that, v);\n } else {\n return defs(v);\n }\n });\n } else if (typeof name === 'string') {\n if (name in defs) {\n return defs[name];\n }\n } else if ('EPSG' in name) {\n defs['EPSG:' + name.EPSG] = name;\n } else if ('ESRI' in name) {\n defs['ESRI:' + name.ESRI] = name;\n } else if ('IAU2000' in name) {\n defs['IAU2000:' + name.IAU2000] = name;\n } else {\n console.log(name);\n }\n return;\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}\nfunction testWKT(code) {\n return (code.indexOf('+') !== 0 && code.indexOf('[') !== -1) || (typeof code === 'object' && !('srsCode' in code));\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}\n/**\n * @param {string | import('./core').PROJJSONDefinition | import('./defs').ProjectionDefinition} code\n * @returns {import('./defs').ProjectionDefinition}\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 if (!('projName' in code)) {\n return wkt(code);\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}\n","export default function (x) {\n return x < 0 ? -1 : 1;\n}\n","import { TWO_PI, SPI } from '../constants/values';\nimport sign from './sign';\n\nexport default function (x, skipAdjust) {\n if (skipAdjust) {\n return x;\n }\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';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {number} e\n * @property {number} k\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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 } else {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n } else {\n if (!this.k0) {\n if (this.k) {\n this.k0 = this.k;\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 } else {\n if (this.sphere) {\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0, this.over);\n y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\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, this.over);\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 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 } 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), this.over);\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', 'Mercator_Variant_A', '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';\n/** @type {Array<Partial<import('./Proj').default>>} */\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\n/**\n * @param {import('./Proj').default} proj\n * @param {number} i\n */\nexport function 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 function getNormalizedProjName(n) {\n return n.replace(/[-\\(\\)\\s]+/g, ' ').trim().replace(/ /g, '_');\n}\n\n/**\n * Get a projection by name.\n * @param {string} name\n * @returns {import('./Proj').default|false}\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 = getNormalizedProjName(n);\n if (n in names && 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 ellipsoids = {\n MERIT: {\n a: 6378137,\n rf: 298.257,\n ellipseName: 'MERIT 1983'\n },\n SGS85: {\n a: 6378136,\n rf: 298.257,\n ellipseName: 'Soviet Geodetic System 85'\n },\n GRS80: {\n a: 6378137,\n rf: 298.257222101,\n ellipseName: 'GRS 1980(IUGG, 1980)'\n },\n IAU76: {\n a: 6378140,\n rf: 298.257,\n ellipseName: 'IAU 1976'\n },\n airy: {\n a: 6377563.396,\n b: 6356256.91,\n ellipseName: 'Airy 1830'\n },\n APL4: {\n a: 6378137,\n rf: 298.25,\n ellipseName: 'Appl. Physics. 1965'\n },\n NWL9D: {\n a: 6378145,\n rf: 298.25,\n ellipseName: 'Naval Weapons Lab., 1965'\n },\n mod_airy: {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: 'Modified Airy'\n },\n andrae: {\n a: 6377104.43,\n rf: 300,\n ellipseName: 'Andrae 1876 (Den., Iclnd.)'\n },\n aust_SA: {\n a: 6378160,\n rf: 298.25,\n ellipseName: 'Australian Natl & S. Amer. 1969'\n },\n GRS67: {\n a: 6378160,\n rf: 298.247167427,\n ellipseName: 'GRS 67(IUGG 1967)'\n },\n bessel: {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: 'Bessel 1841'\n },\n bess_nam: {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: 'Bessel 1841 (Namibia)'\n },\n clrk66: {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: 'Clarke 1866'\n },\n clrk80: {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: 'Clarke 1880 mod.'\n },\n clrk80ign: {\n a: 6378249.2,\n b: 6356515,\n rf: 293.4660213,\n ellipseName: 'Clarke 1880 (IGN)'\n },\n clrk58: {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: 'Clarke 1858'\n },\n CPM: {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: 'Comm. des Poids et Mesures 1799'\n },\n delmbr: {\n a: 6376428,\n rf: 311.5,\n ellipseName: 'Delambre 1810 (Belgium)'\n },\n engelis: {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: 'Engelis 1985'\n },\n evrst30: {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: 'Everest 1830'\n },\n evrst48: {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: 'Everest 1948'\n },\n evrst56: {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: 'Everest 1956'\n },\n evrst69: {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: 'Everest 1969'\n },\n evrstSS: {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: 'Everest (Sabah & Sarawak)'\n },\n fschr60: {\n a: 6378166,\n rf: 298.3,\n ellipseName: 'Fischer (Mercury Datum) 1960'\n },\n fschr60m: {\n a: 6378155,\n rf: 298.3,\n ellipseName: 'Fischer 1960'\n },\n fschr68: {\n a: 6378150,\n rf: 298.3,\n ellipseName: 'Fischer 1968'\n },\n helmert: {\n a: 6378200,\n rf: 298.3,\n ellipseName: 'Helmert 1906'\n },\n hough: {\n a: 6378270,\n rf: 297,\n ellipseName: 'Hough'\n },\n intl: {\n a: 6378388,\n rf: 297,\n ellipseName: 'International 1909 (Hayford)'\n },\n kaula: {\n a: 6378163,\n rf: 298.24,\n ellipseName: 'Kaula 1961'\n },\n lerch: {\n a: 6378139,\n rf: 298.257,\n ellipseName: 'Lerch 1979'\n },\n mprts: {\n a: 6397300,\n rf: 191,\n ellipseName: 'Maupertius 1738'\n },\n new_intl: {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: 'New International 1967'\n },\n plessis: {\n a: 6376523,\n rf: 6355863,\n ellipseName: 'Plessis 1817 (France)'\n },\n krass: {\n a: 6378245,\n rf: 298.3,\n ellipseName: 'Krassovsky, 1942'\n },\n SEasia: {\n a: 6378155,\n b: 6356773.3205,\n ellipseName: 'Southeast Asia'\n },\n walbeck: {\n a: 6376896,\n b: 6355834.8467,\n ellipseName: 'Walbeck'\n },\n WGS60: {\n a: 6378165,\n rf: 298.3,\n ellipseName: 'WGS 60'\n },\n WGS66: {\n a: 6378145,\n rf: 298.25,\n ellipseName: 'WGS 66'\n },\n WGS7: {\n a: 6378135,\n rf: 298.26,\n ellipseName: 'WGS 72'\n },\n WGS84: {\n a: 6378137,\n rf: 298.257223563,\n ellipseName: 'WGS 84'\n },\n sphere: {\n a: 6370997,\n b: 6370997,\n ellipseName: 'Normal Sphere (r=6370997)'\n }\n};\n\nexport default ellipsoids;\n","import { SIXTH, RA4, RA6, EPSLN } from './constants/values';\nimport { default as Ellipsoid } from './constants/Ellipsoid';\nimport match from './match';\n\nconst WGS84 = Ellipsoid.WGS84; // default ellipsoid\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 mgi: {\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 EPSG_5451: {\n towgs84: '6.41,-49.05,-11.28,1.5657,0.5242,6.9718,-5.7649'\n },\n IGNF_LURESG: {\n towgs84: '-192.986,13.673,-39.309,-0.4099,-2.9332,2.6881,0.43'\n },\n EPSG_4614: {\n towgs84: '-119.4248,-303.65872,-11.00061,1.164298,0.174458,1.096259,3.657065'\n },\n EPSG_4615: {\n towgs84: '-494.088,-312.129,279.877,-1.423,-1.013,1.59,-0.748'\n },\n ESRI_37241: {\n towgs84: '-76.822,257.457,-12.817,2.136,-0.033,-2.392,-0.031'\n },\n ESRI_37249: {\n towgs84: '-440.296,58.548,296.265,1.128,10.202,4.559,-0.438'\n },\n ESRI_37245: {\n towgs84: '-511.151,-181.269,139.609,1.05,2.703,1.798,3.071'\n },\n EPSG_4178: {\n towgs84: '24.9,-126.4,-93.2,-0.063,-0.247,-0.041,1.01'\n },\n EPSG_4622: {\n towgs84: '-472.29,-5.63,-304.12,0.4362,-0.8374,0.2563,1.8984'\n },\n EPSG_4625: {\n towgs84: '126.93,547.94,130.41,-2.7867,5.1612,-0.8584,13.8227'\n },\n EPSG_5252: {\n towgs84: '0.023,0.036,-0.068,0.00176,0.00912,-0.01136,0.00439'\n },\n EPSG_4314: {\n towgs84: '597.1,71.4,412.1,0.894,0.068,-1.563,7.58'\n },\n EPSG_4282: {\n towgs84: '-178.3,-316.7,-131.5,5.278,6.077,10.979,19.166'\n },\n EPSG_4231: {\n towgs84: '-83.11,-97.38,-117.22,0.0276,-0.2167,0.2147,0.1218'\n },\n EPSG_4274: {\n towgs84: '-230.994,102.591,25.199,0.633,-0.239,0.9,1.95'\n },\n EPSG_4134: {\n towgs84: '-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.71006'\n },\n EPSG_4254: {\n towgs84: '18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013'\n },\n EPSG_4159: {\n towgs84: '-194.513,-63.978,-25.759,-3.4027,3.756,-3.352,-0.9175'\n },\n EPSG_4687: {\n towgs84: '0.072,-0.507,-0.245,0.0183,-0.0003,0.007,-0.0093'\n },\n EPSG_4227: {\n towgs84: '-83.58,-397.54,458.78,-17.595,-2.847,4.256,3.225'\n },\n EPSG_4746: {\n towgs84: '599.4,72.4,419.2,-0.062,-0.022,-2.723,6.46'\n },\n EPSG_4745: {\n towgs84: '612.4,77,440.2,-0.054,0.057,-2.797,2.55'\n },\n EPSG_6311: {\n towgs84: '8.846,-4.394,-1.122,-0.00237,-0.146528,0.130428,0.783926'\n },\n EPSG_4289: {\n towgs84: '565.7381,50.4018,465.2904,-1.91514,1.60363,-9.09546,4.07244'\n },\n EPSG_4230: {\n towgs84: '-68.863,-134.888,-111.49,-0.53,-0.14,0.57,-3.4'\n },\n EPSG_4154: {\n towgs84: '-123.02,-158.95,-168.47'\n },\n EPSG_4156: {\n towgs84: '570.8,85.7,462.8,4.998,1.587,5.261,3.56'\n },\n EPSG_4299: {\n towgs84: '482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15'\n },\n EPSG_4179: {\n towgs84: '33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84'\n },\n EPSG_4313: {\n towgs84: '-106.8686,52.2978,-103.7239,0.3366,-0.457,1.8422,-1.2747'\n },\n EPSG_4194: {\n towgs84: '163.511,127.533,-159.789'\n },\n EPSG_4195: {\n towgs84: '105,326,-102.5'\n },\n EPSG_4196: {\n towgs84: '-45,417,-3.5'\n },\n EPSG_4611: {\n towgs84: '-162.619,-276.959,-161.764,0.067753,-2.243649,-1.158827,-1.094246'\n },\n EPSG_4633: {\n towgs84: '137.092,131.66,91.475,-1.9436,-11.5993,-4.3321,-7.4824'\n },\n EPSG_4641: {\n towgs84: '-408.809,366.856,-412.987,1.8842,-0.5308,2.1655,-121.0993'\n },\n EPSG_4643: {\n towgs84: '-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7002'\n },\n EPSG_4300: {\n towgs84: '482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15'\n },\n EPSG_4188: {\n towgs84: '482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15'\n },\n EPSG_4660: {\n towgs84: '982.6087,552.753,-540.873,32.39344,-153.25684,-96.2266,16.805'\n },\n EPSG_4662: {\n towgs84: '97.295,-263.247,310.882,-1.5999,0.8386,3.1409,13.3259'\n },\n EPSG_3906: {\n towgs84: '577.88891,165.22205,391.18289,4.9145,-0.94729,-13.05098,7.78664'\n },\n EPSG_4307: {\n towgs84: '-209.3622,-87.8162,404.6198,0.0046,3.4784,0.5805,-1.4547'\n },\n EPSG_6892: {\n towgs84: '-76.269,-16.683,68.562,-6.275,10.536,-4.286,-13.686'\n },\n EPSG_4690: {\n towgs84: '221.597,152.441,176.523,2.403,1.3893,0.884,11.4648'\n },\n EPSG_4691: {\n towgs84: '218.769,150.75,176.75,3.5231,2.0037,1.288,10.9817'\n },\n EPSG_4629: {\n towgs84: '72.51,345.411,79.241,-1.5862,-0.8826,-0.5495,1.3653'\n },\n EPSG_4630: {\n towgs84: '165.804,216.213,180.26,-0.6251,-0.4515,-0.0721,7.4111'\n },\n EPSG_4692: {\n towgs84: '217.109,86.452,23.711,0.0183,-0.0003,0.007,-0.0093'\n },\n EPSG_9333: {\n towgs84: '0,0,0,-8.393,0.749,-10.276,0'\n },\n EPSG_9059: {\n towgs84: '0,0,0'\n },\n EPSG_4312: {\n towgs84: '601.705,84.263,485.227,4.7354,1.3145,5.393,-2.3887'\n },\n EPSG_4123: {\n towgs84: '-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496'\n },\n EPSG_4309: {\n towgs84: '-124.45,183.74,44.64,-0.4384,0.5446,-0.9706,-2.1365'\n },\n ESRI_104106: {\n towgs84: '-283.088,-70.693,117.445,-1.157,0.059,-0.652,-4.058'\n },\n EPSG_4281: {\n towgs84: '-219.247,-73.802,269.529'\n },\n EPSG_4322: {\n towgs84: '0,0,4.5'\n },\n EPSG_4324: {\n towgs84: '0,0,1.9'\n },\n EPSG_4284: {\n towgs84: '43.822,-108.842,-119.585,1.455,-0.761,0.737,0.549'\n },\n EPSG_4277: {\n towgs84: '446.448,-125.157,542.06,0.15,0.247,0.842,-20.489'\n },\n EPSG_4207: {\n towgs84: '-282.1,-72.2,120,-1.529,0.145,-0.89,-4.46'\n },\n EPSG_4688: {\n towgs84: '347.175,1077.618,2623.677,33.9058,-70.6776,9.4013,186.0647'\n },\n EPSG_4689: {\n towgs84: '410.793,54.542,80.501,-2.5596,-2.3517,-0.6594,17.3218'\n },\n EPSG_4720: {\n towgs84: '0,0,4.5'\n },\n EPSG_4273: {\n towgs84: '278.3,93,474.5,7.889,0.05,-6.61,6.21'\n },\n EPSG_4240: {\n towgs84: '204.64,834.74,293.8'\n },\n EPSG_4817: {\n towgs84: '278.3,93,474.5,7.889,0.05,-6.61,6.21'\n },\n ESRI_104131: {\n towgs84: '426.62,142.62,460.09,4.98,4.49,-12.42,-17.1'\n },\n EPSG_4265: {\n towgs84: '-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68'\n },\n EPSG_4263: {\n towgs84: '-111.92,-87.85,114.5,1.875,0.202,0.219,0.032'\n },\n EPSG_4298: {\n towgs84: '-689.5937,623.84046,-65.93566,-0.02331,1.17094,-0.80054,5.88536'\n },\n EPSG_4270: {\n towgs84: '-253.4392,-148.452,386.5267,0.15605,0.43,-0.1013,-0.0424'\n },\n EPSG_4229: {\n towgs84: '-121.8,98.1,-10.7'\n },\n EPSG_4220: {\n towgs84: '-55.5,-348,-229.2'\n },\n EPSG_4214: {\n towgs84: '12.646,-155.176,-80.863'\n },\n EPSG_4232: {\n towgs84: '-345,3,223'\n },\n EPSG_4238: {\n towgs84: '-1.977,-13.06,-9.993,0.364,0.254,0.689,-1.037'\n },\n EPSG_4168: {\n towgs84: '-170,33,326'\n },\n EPSG_4131: {\n towgs84: '199,931,318.9'\n },\n EPSG_4152: {\n towgs84: '-0.9102,2.0141,0.5602,0.029039,0.010065,0.010101,0'\n },\n EPSG_5228: {\n towgs84: '572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378'\n },\n EPSG_8351: {\n towgs84: '485.021,169.465,483.839,7.786342,4.397554,4.102655,0'\n },\n EPSG_4683: {\n towgs84: '-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06'\n },\n EPSG_4133: {\n towgs84: '0,0,0'\n },\n EPSG_7373: {\n towgs84: '0.819,-0.5762,-1.6446,-0.00378,-0.03317,0.00318,0.0693'\n },\n EPSG_9075: {\n towgs84: '-0.9102,2.0141,0.5602,0.029039,0.010065,0.010101,0'\n },\n EPSG_9072: {\n towgs84: '-0.9102,2.0141,0.5602,0.029039,0.010065,0.010101,0'\n },\n EPSG_9294: {\n towgs84: '1.16835,-1.42001,-2.24431,-0.00822,-0.05508,0.01818,0.23388'\n },\n EPSG_4212: {\n towgs84: '-267.434,173.496,181.814,-13.4704,8.7154,7.3926,14.7492'\n },\n EPSG_4191: {\n towgs84: '-44.183,-0.58,-38.489,2.3867,2.7072,-3.5196,-8.2703'\n },\n EPSG_4237: {\n towgs84: '52.684,-71.194,-13.975,-0.312,-0.1063,-0.3729,1.0191'\n },\n EPSG_4740: {\n towgs84: '-1.08,-0.27,-0.9'\n },\n EPSG_4124: {\n towgs84: '419.3836,99.3335,591.3451,0.850389,1.817277,-7.862238,-0.99496'\n },\n EPSG_5681: {\n towgs84: '584.9636,107.7175,413.8067,1.1155,0.2824,-3.1384,7.9922'\n },\n EPSG_4141: {\n towgs84: '23.772,17.49,17.859,-0.3132,-1.85274,1.67299,-5.4262'\n },\n EPSG_4204: {\n towgs84: '-85.645,-273.077,-79.708,2.289,-1.421,2.532,3.194'\n },\n EPSG_4319: {\n towgs84: '226.702,-193.337,-35.371,-2.229,-4.391,9.238,0.9798'\n },\n EPSG_4200: {\n towgs84: '24.82,-131.21,-82.66'\n },\n EPSG_4130: {\n towgs84: '0,0,0'\n },\n EPSG_4127: {\n towgs84: '-82.875,-57.097,-156.768,-2.158,1.524,-0.982,-0.359'\n },\n EPSG_4149: {\n towgs84: '674.374,15.056,405.346'\n },\n EPSG_4617: {\n towgs84: '-0.991,1.9072,0.5129,1.25033e-7,4.6785e-8,5.6529e-8,0'\n },\n EPSG_4663: {\n towgs84: '-210.502,-66.902,-48.476,2.094,-15.067,-5.817,0.485'\n },\n EPSG_4664: {\n towgs84: '-211.939,137.626,58.3,-0.089,0.251,0.079,0.384'\n },\n EPSG_4665: {\n towgs84: '-105.854,165.589,-38.312,-0.003,-0.026,0.024,-0.048'\n },\n EPSG_4666: {\n towgs84: '631.392,-66.551,481.442,1.09,-4.445,-4.487,-4.43'\n },\n EPSG_4756: {\n towgs84: '-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188'\n },\n EPSG_4723: {\n towgs84: '-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925'\n },\n EPSG_4726: {\n towgs84: '8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081'\n },\n EPSG_4267: {\n towgs84: '-8.0,160.0,176.0'\n },\n EPSG_5365: {\n towgs84: '-0.16959,0.35312,0.51846,0.03385,-0.16325,0.03446,0.03693'\n },\n EPSG_4218: {\n towgs84: '304.5,306.5,-318.1'\n },\n EPSG_4242: {\n towgs84: '-33.722,153.789,94.959,-8.581,-4.478,4.54,8.95'\n },\n EPSG_4216: {\n towgs84: '-292.295,248.758,429.447,4.9971,2.99,6.6906,1.0289'\n },\n ESRI_104105: {\n towgs84: '631.392,-66.551,481.442,1.09,-4.445,-4.487,-4.43'\n },\n ESRI_104129: {\n towgs84: '0,0,0'\n },\n EPSG_4673: {\n towgs84: '174.05,-25.49,112.57'\n },\n EPSG_4202: {\n towgs84: '-124,-60,154'\n },\n EPSG_4203: {\n towgs84: '-117.763,-51.51,139.061,0.292,0.443,0.277,-0.191'\n },\n EPSG_3819: {\n towgs84: '595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408'\n },\n EPSG_8694: {\n towgs84: '-93.799,-132.737,-219.073,-1.844,0.648,-6.37,-0.169'\n },\n EPSG_4145: {\n towgs84: '275.57,676.78,229.6'\n },\n EPSG_4283: {\n towgs84: '61.55,-10.87,-40.19,39.4924,32.7221,32.8979,-9.994'\n },\n EPSG_4317: {\n towgs84: '2.3287,-147.0425,-92.0802,-0.3092483,0.32482185,0.49729934,5.68906266'\n },\n EPSG_4272: {\n towgs84: '59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993'\n },\n EPSG_4248: {\n towgs84: '-307.7,265.3,-363.5'\n },\n EPSG_5561: {\n towgs84: '24,-121,-76'\n },\n EPSG_5233: {\n towgs84: '-0.293,766.95,87.713,0.195704,1.695068,3.473016,-0.039338'\n },\n ESRI_104130: {\n towgs84: '-86,-98,-119'\n },\n ESRI_104102: {\n towgs84: '682,-203,480'\n },\n ESRI_37207: {\n towgs84: '7,-10,-26'\n },\n EPSG_4675: {\n towgs84: '59.935,118.4,-10.871'\n },\n ESRI_104109: {\n towgs84: '-89.121,-348.182,260.871'\n },\n ESRI_104112: {\n towgs84: '-185.583,-230.096,281.361'\n },\n ESRI_104113: {\n towgs84: '25.1,-275.6,222.6'\n },\n IGNF_WGS72G: {\n towgs84: '0,12,6'\n },\n IGNF_NTFG: {\n towgs84: '-168,-60,320'\n },\n IGNF_EFATE57G: {\n towgs84: '-127,-769,472'\n },\n IGNF_PGP50G: {\n towgs84: '324.8,153.6,172.1'\n },\n IGNF_REUN47G: {\n towgs84: '94,-948,-1262'\n },\n IGNF_CSG67G: {\n towgs84: '-186,230,110'\n },\n IGNF_GUAD48G: {\n towgs84: '-467,-16,-300'\n },\n IGNF_TAHI51G: {\n towgs84: '162,117,154'\n },\n IGNF_TAHAAG: {\n towgs84: '65,342,77'\n },\n IGNF_NUKU72G: {\n towgs84: '84,274,65'\n },\n IGNF_PETRELS72G: {\n towgs84: '365,194,166'\n },\n IGNF_WALL78G: {\n towgs84: '253,-133,-127'\n },\n IGNF_MAYO50G: {\n towgs84: '-382,-59,-262'\n },\n IGNF_TANNAG: {\n towgs84: '-139,-967,436'\n },\n IGNF_IGN72G: {\n towgs84: '-13,-348,292'\n },\n IGNF_ATIGG: {\n towgs84: '1118,23,66'\n },\n IGNF_FANGA84G: {\n towgs84: '150.57,158.33,118.32'\n },\n IGNF_RUSAT84G: {\n towgs84: '202.13,174.6,-15.74'\n },\n IGNF_KAUE70G: {\n towgs84: '126.74,300.1,-75.49'\n },\n IGNF_MOP90G: {\n towgs84: '-10.8,-1.8,12.77'\n },\n IGNF_MHPF67G: {\n towgs84: '338.08,212.58,-296.17'\n },\n IGNF_TAHI79G: {\n towgs84: '160.61,116.05,153.69'\n },\n IGNF_ANAA92G: {\n towgs84: '1.5,3.84,4.81'\n },\n IGNF_MARQUI72G: {\n towgs84: '330.91,-13.92,58.56'\n },\n IGNF_APAT86G: {\n towgs84: '143.6,197.82,74.05'\n },\n IGNF_TUBU69G: {\n towgs84: '237.17,171.61,-77.84'\n },\n IGNF_STPM50G: {\n towgs84: '11.363,424.148,373.13'\n },\n EPSG_4150: {\n towgs84: '674.374,15.056,405.346'\n },\n EPSG_4754: {\n towgs84: '-208.4058,-109.8777,-2.5764'\n },\n ESRI_104101: {\n towgs84: '374,150,588'\n },\n EPSG_4693: {\n towgs84: '0,-0.15,0.68'\n },\n EPSG_6207: {\n towgs84: '293.17,726.18,245.36'\n },\n EPSG_4153: {\n towgs84: '-133.63,-157.5,-158.62'\n },\n EPSG_4132: {\n towgs84: '-241.54,-163.64,396.06'\n },\n EPSG_4221: {\n towgs84: '-154.5,150.7,100.4'\n },\n EPSG_4266: {\n towgs84: '-80.7,-132.5,41.1'\n },\n EPSG_4193: {\n towgs84: '-70.9,-151.8,-41.4'\n },\n EPSG_5340: {\n towgs84: '-0.41,0.46,-0.35'\n },\n EPSG_4246: {\n towgs84: '-294.7,-200.1,525.5'\n },\n EPSG_4318: {\n towgs84: '-3.2,-5.7,2.8'\n },\n EPSG_4121: {\n towgs84: '-199.87,74.79,246.62'\n },\n EPSG_4223: {\n towgs84: '-260.1,5.5,432.2'\n },\n EPSG_4158: {\n towgs84: '-0.465,372.095,171.736'\n },\n EPSG_4285: {\n towgs84: '-128.16,-282.42,21.93'\n },\n EPSG_4613: {\n towgs84: '-404.78,685.68,45.47'\n },\n EPSG_4607: {\n towgs84: '195.671,332.517,274.607'\n },\n EPSG_4475: {\n towgs84: '-381.788,-57.501,-256.673'\n },\n EPSG_4208: {\n towgs84: '-157.84,308.54,-146.6'\n },\n EPSG_4743: {\n towgs84: '70.995,-335.916,262.898'\n },\n EPSG_4710: {\n towgs84: '-323.65,551.39,-491.22'\n },\n EPSG_7881: {\n towgs84: '-0.077,0.079,0.086'\n },\n EPSG_4682: {\n towgs84: '283.729,735.942,261.143'\n },\n EPSG_4739: {\n towgs84: '-156,-271,-189'\n },\n EPSG_4679: {\n towgs84: '-80.01,253.26,291.19'\n },\n EPSG_4750: {\n towgs84: '-56.263,16.136,-22.856'\n },\n EPSG_4644: {\n towgs84: '-10.18,-350.43,291.37'\n },\n EPSG_4695: {\n towgs84: '-103.746,-9.614,-255.95'\n },\n EPSG_4292: {\n towgs84: '-355,21,72'\n },\n EPSG_4302: {\n towgs84: '-61.702,284.488,472.052'\n },\n EPSG_4143: {\n towgs84: '-124.76,53,466.79'\n },\n EPSG_4606: {\n towgs84: '-153,153,307'\n },\n EPSG_4699: {\n towgs84: '-770.1,158.4,-498.2'\n },\n EPSG_4247: {\n towgs84: '-273.5,110.6,-357.9'\n },\n EPSG_4160: {\n towgs84: '8.88,184.86,106.69'\n },\n EPSG_4161: {\n towgs84: '-233.43,6.65,173.64'\n },\n EPSG_9251: {\n towgs84: '-9.5,122.9,138.2'\n },\n EPSG_9253: {\n towgs84: '-78.1,101.6,133.3'\n },\n EPSG_4297: {\n towgs84: '-198.383,-240.517,-107.909'\n },\n EPSG_4269: {\n towgs84: '0,0,0'\n },\n EPSG_4301: {\n towgs84: '-147,506,687'\n },\n EPSG_4618: {\n towgs84: '-59,-11,-52'\n },\n EPSG_4612: {\n towgs84: '0,0,0'\n },\n EPSG_4678: {\n towgs84: '44.585,-131.212,-39.544'\n },\n EPSG_4250: {\n towgs84: '-130,29,364'\n },\n EPSG_4144: {\n towgs84: '214,804,268'\n },\n EPSG_4147: {\n towgs84: '-17.51,-108.32,-62.39'\n },\n EPSG_4259: {\n towgs84: '-254.1,-5.36,-100.29'\n },\n EPSG_4164: {\n towgs84: '-76,-138,67'\n },\n EPSG_4211: {\n towgs84: '-378.873,676.002,-46.255'\n },\n EPSG_4182: {\n towgs84: '-422.651,-172.995,84.02'\n },\n EPSG_4224: {\n towgs84: '-143.87,243.37,-33.52'\n },\n EPSG_4225: {\n towgs84: '-205.57,168.77,-4.12'\n },\n EPSG_5527: {\n towgs84: '-67.35,3.88,-38.22'\n },\n EPSG_4752: {\n towgs84: '98,390,-22'\n },\n EPSG_4310: {\n towgs84: '-30,190,89'\n },\n EPSG_9248: {\n towgs84: '-192.26,65.72,132.08'\n },\n EPSG_4680: {\n towgs84: '124.5,-63.5,-281'\n },\n EPSG_4701: {\n towgs84: '-79.9,-158,-168.9'\n },\n EPSG_4706: {\n towgs84: '-146.21,112.63,4.05'\n },\n EPSG_4805: {\n towgs84: '682,-203,480'\n },\n EPSG_4201: {\n towgs84: '-165,-11,206'\n },\n EPSG_4210: {\n towgs84: '-157,-2,-299'\n },\n EPSG_4183: {\n towgs84: '-104,167,-38'\n },\n EPSG_4139: {\n towgs84: '11,72,-101'\n },\n EPSG_4668: {\n towgs84: '-86,-98,-119'\n },\n EPSG_4717: {\n towgs84: '-2,151,181'\n },\n EPSG_4732: {\n towgs84: '102,52,-38'\n },\n EPSG_4280: {\n towgs84: '-377,681,-50'\n },\n EPSG_4209: {\n towgs84: '-138,-105,-289'\n },\n EPSG_4261: {\n towgs84: '31,146,47'\n },\n EPSG_4658: {\n towgs84: '-73,46,-86'\n },\n EPSG_4721: {\n towgs84: '265.025,384.929,-194.046'\n },\n EPSG_4222: {\n towgs84: '-136,-108,-292'\n },\n EPSG_4601: {\n towgs84: '-255,-15,71'\n },\n EPSG_4602: {\n towgs84: '725,685,536'\n },\n EPSG_4603: {\n towgs84: '72,213.7,93'\n },\n EPSG_4605: {\n towgs84: '9,183,236'\n },\n EPSG_4621: {\n towgs84: '137,248,-430'\n },\n EPSG_4657: {\n towgs84: '-28,199,5'\n },\n EPSG_4316: {\n towgs84: '103.25,-100.4,-307.19'\n },\n EPSG_4642: {\n towgs84: '-13,-348,292'\n },\n EPSG_4698: {\n towgs84: '145,-187,103'\n },\n EPSG_4192: {\n towgs84: '-206.1,-174.7,-87.7'\n },\n EPSG_4311: {\n towgs84: '-265,120,-358'\n },\n EPSG_4135: {\n towgs84: '58,-283,-182'\n },\n ESRI_104138: {\n towgs84: '198,-226,-347'\n },\n EPSG_4245: {\n towgs84: '-11,851,5'\n },\n EPSG_4142: {\n towgs84: '-125,53,467'\n },\n EPSG_4213: {\n towgs84: '-106,-87,188'\n },\n EPSG_4253: {\n towgs84: '-133,-77,-51'\n },\n EPSG_4129: {\n towgs84: '-132,-110,-335'\n },\n EPSG_4713: {\n towgs84: '-77,-128,142'\n },\n EPSG_4239: {\n towgs84: '217,823,299'\n },\n EPSG_4146: {\n towgs84: '295,736,257'\n },\n EPSG_4155: {\n towgs84: '-83,37,124'\n },\n EPSG_4165: {\n towgs84: '-173,253,27'\n },\n EPSG_4672: {\n towgs84: '175,-38,113'\n },\n EPSG_4236: {\n towgs84: '-637,-549,-203'\n },\n EPSG_4251: {\n towgs84: '-90,40,88'\n },\n EPSG_4271: {\n towgs84: '-2,374,172'\n },\n EPSG_4175: {\n towgs84: '-88,4,101'\n },\n EPSG_4716: {\n towgs84: '298,-304,-375'\n },\n EPSG_4315: {\n towgs84: '-23,259,-9'\n },\n EPSG_4744: {\n towgs84: '-242.2,-144.9,370.3'\n },\n EPSG_4244: {\n towgs84: '-97,787,86'\n },\n EPSG_4293: {\n towgs84: '616,97,-251'\n },\n EPSG_4714: {\n towgs84: '-127,-769,472'\n },\n EPSG_4736: {\n towgs84: '260,12,-147'\n },\n EPSG_6883: {\n towgs84: '-235,-110,393'\n },\n EPSG_6894: {\n towgs84: '-63,176,185'\n },\n EPSG_4205: {\n towgs84: '-43,-163,45'\n },\n EPSG_4256: {\n towgs84: '41,-220,-134'\n },\n EPSG_4262: {\n towgs84: '639,405,60'\n },\n EPSG_4604: {\n towgs84: '174,359,365'\n },\n EPSG_4169: {\n towgs84: '-115,118,426'\n },\n EPSG_4620: {\n towgs84: '-106,-129,165'\n },\n EPSG_4184: {\n towgs84: '-203,141,53'\n },\n EPSG_4616: {\n towgs84: '-289,-124,60'\n },\n EPSG_9403: {\n towgs84: '-307,-92,127'\n },\n EPSG_4684: {\n towgs84: '-133,-321,50'\n },\n EPSG_4708: {\n towgs84: '-491,-22,435'\n },\n EPSG_4707: {\n towgs84: '114,-116,-333'\n },\n EPSG_4709: {\n towgs84: '145,75,-272'\n },\n EPSG_4712: {\n towgs84: '-205,107,53'\n },\n EPSG_4711: {\n towgs84: '124,-234,-25'\n },\n EPSG_4718: {\n towgs84: '230,-199,-752'\n },\n EPSG_4719: {\n towgs84: '211,147,111'\n },\n EPSG_4724: {\n towgs84: '208,-435,-229'\n },\n EPSG_4725: {\n towgs84: '189,-79,-202'\n },\n EPSG_4735: {\n towgs84: '647,1777,-1124'\n },\n EPSG_4722: {\n towgs84: '-794,119,-298'\n },\n EPSG_4728: {\n towgs84: '-307,-92,127'\n },\n EPSG_4734: {\n towgs84: '-632,438,-609'\n },\n EPSG_4727: {\n towgs84: '912,-58,1227'\n },\n EPSG_4729: {\n towgs84: '185,165,42'\n },\n EPSG_4730: {\n towgs84: '170,42,84'\n },\n EPSG_4733: {\n towgs84: '276,-57,149'\n },\n ESRI_37218: {\n towgs84: '230,-199,-752'\n },\n ESRI_37240: {\n towgs84: '-7,215,225'\n },\n ESRI_37221: {\n towgs84: '252,-209,-751'\n },\n ESRI_4305: {\n towgs84: '-123,-206,219'\n },\n ESRI_104139: {\n towgs84: '-73,-247,227'\n },\n EPSG_4748: {\n towgs84: '51,391,-36'\n },\n EPSG_4219: {\n towgs84: '-384,664,-48'\n },\n EPSG_4255: {\n towgs84: '-333,-222,114'\n },\n EPSG_4257: {\n towgs84: '-587.8,519.75,145.76'\n },\n EPSG_4646: {\n towgs84: '-963,510,-359'\n },\n EPSG_6881: {\n towgs84: '-24,-203,268'\n },\n EPSG_6882: {\n towgs84: '-183,-15,273'\n },\n EPSG_4715: {\n towgs84: '-104,-129,239'\n },\n IGNF_RGF93GDD: {\n towgs84: '0,0,0'\n },\n IGNF_RGM04GDD: {\n towgs84: '0,0,0'\n },\n IGNF_RGSPM06GDD: {\n towgs84: '0,0,0'\n },\n IGNF_RGTAAF07GDD: {\n towgs84: '0,0,0'\n },\n IGNF_RGFG95GDD: {\n towgs84: '0,0,0'\n },\n IGNF_RGNCG: {\n towgs84: '0,0,0'\n },\n IGNF_RGPFGDD: {\n towgs84: '0,0,0'\n },\n IGNF_ETRS89G: {\n towgs84: '0,0,0'\n },\n IGNF_RGR92GDD: {\n towgs84: '0,0,0'\n },\n EPSG_4173: {\n towgs84: '0,0,0'\n },\n EPSG_4180: {\n towgs84: '0,0,0'\n },\n EPSG_4619: {\n towgs84: '0,0,0'\n },\n EPSG_4667: {\n towgs84: '0,0,0'\n },\n EPSG_4075: {\n towgs84: '0,0,0'\n },\n EPSG_6706: {\n towgs84: '0,0,0'\n },\n EPSG_7798: {\n towgs84: '0,0,0'\n },\n EPSG_4661: {\n towgs84: '0,0,0'\n },\n EPSG_4669: {\n towgs84: '0,0,0'\n },\n EPSG_8685: {\n towgs84: '0,0,0'\n },\n EPSG_4151: {\n towgs84: '0,0,0'\n },\n EPSG_9702: {\n towgs84: '0,0,0'\n },\n EPSG_4758: {\n towgs84: '0,0,0'\n },\n EPSG_4761: {\n towgs84: '0,0,0'\n },\n EPSG_4765: {\n towgs84: '0,0,0'\n },\n EPSG_8997: {\n towgs84: '0,0,0'\n },\n EPSG_4023: {\n towgs84: '0,0,0'\n },\n EPSG_4670: {\n towgs84: '0,0,0'\n },\n EPSG_4694: {\n towgs84: '0,0,0'\n },\n EPSG_4148: {\n towgs84: '0,0,0'\n },\n EPSG_4163: {\n towgs84: '0,0,0'\n },\n EPSG_4167: {\n towgs84: '0,0,0'\n },\n EPSG_4189: {\n towgs84: '0,0,0'\n },\n EPSG_4190: {\n towgs84: '0,0,0'\n },\n EPSG_4176: {\n towgs84: '0,0,0'\n },\n EPSG_4659: {\n towgs84: '0,0,0'\n },\n EPSG_3824: {\n towgs84: '0,0,0'\n },\n EPSG_3889: {\n towgs84: '0,0,0'\n },\n EPSG_4046: {\n towgs84: '0,0,0'\n },\n EPSG_4081: {\n towgs84: '0,0,0'\n },\n EPSG_4558: {\n towgs84: '0,0,0'\n },\n EPSG_4483: {\n towgs84: '0,0,0'\n },\n EPSG_5013: {\n towgs84: '0,0,0'\n },\n EPSG_5264: {\n towgs84: '0,0,0'\n },\n EPSG_5324: {\n towgs84: '0,0,0'\n },\n EPSG_5354: {\n towgs84: '0,0,0'\n },\n EPSG_5371: {\n towgs84: '0,0,0'\n },\n EPSG_5373: {\n towgs84: '0,0,0'\n },\n EPSG_5381: {\n towgs84: '0,0,0'\n },\n EPSG_5393: {\n towgs84: '0,0,0'\n },\n EPSG_5489: {\n towgs84: '0,0,0'\n },\n EPSG_5593: {\n towgs84: '0,0,0'\n },\n EPSG_6135: {\n towgs84: '0,0,0'\n },\n EPSG_6365: {\n towgs84: '0,0,0'\n },\n EPSG_5246: {\n towgs84: '0,0,0'\n },\n EPSG_7886: {\n towgs84: '0,0,0'\n },\n EPSG_8431: {\n towgs84: '0,0,0'\n },\n EPSG_8427: {\n towgs84: '0,0,0'\n },\n EPSG_8699: {\n towgs84: '0,0,0'\n },\n EPSG_8818: {\n towgs84: '0,0,0'\n },\n EPSG_4757: {\n towgs84: '0,0,0'\n },\n EPSG_9140: {\n towgs84: '0,0,0'\n },\n EPSG_8086: {\n towgs84: '0,0,0'\n },\n EPSG_4686: {\n towgs84: '0,0,0'\n },\n EPSG_4737: {\n towgs84: '0,0,0'\n },\n EPSG_4702: {\n towgs84: '0,0,0'\n },\n EPSG_4747: {\n towgs84: '0,0,0'\n },\n EPSG_4749: {\n towgs84: '0,0,0'\n },\n EPSG_4674: {\n towgs84: '0,0,0'\n },\n EPSG_4755: {\n towgs84: '0,0,0'\n },\n EPSG_4759: {\n towgs84: '0,0,0'\n },\n EPSG_4762: {\n towgs84: '0,0,0'\n },\n EPSG_4763: {\n towgs84: '0,0,0'\n },\n EPSG_4764: {\n towgs84: '0,0,0'\n },\n EPSG_4166: {\n towgs84: '0,0,0'\n },\n EPSG_4170: {\n towgs84: '0,0,0'\n },\n EPSG_5546: {\n towgs84: '0,0,0'\n },\n EPSG_7844: {\n towgs84: '0,0,0'\n },\n EPSG_4818: {\n towgs84: '589,76,480'\n }\n};\n\nfor (var key in datums) {\n var datum = datums[key];\n if (!datum.datumName) {\n continue;\n }\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\n/**\n * @typedef {Object} NadgridInfo\n * @property {string} name The name of the NAD grid or 'null' if not specified.\n * @property {boolean} mandatory Indicates if the grid is mandatory (true) or optional (false).\n * @property {*} grid The loaded NAD grid object, or null if not loaded or not applicable.\n * @property {boolean} isNull True if the grid is explicitly 'null', otherwise false.\n */\n\n/**\n * @typedef {Object} NTV2GridOptions\n * @property {boolean} [includeErrorFields=true] Whether to include error fields in the subgrids.\n */\n\n/**\n * @typedef {Object} NadgridHeader\n * @property {number} [nFields] Number of fields in the header.\n * @property {number} [nSubgridFields] Number of fields in each subgrid header.\n * @property {number} nSubgrids Number of subgrids in the file.\n * @property {string} [shiftType] Type of shift (e.g., \"SECONDS\").\n * @property {number} [fromSemiMajorAxis] Source ellipsoid semi-major axis.\n * @property {number} [fromSemiMinorAxis] Source ellipsoid semi-minor axis.\n * @property {number} [toSemiMajorAxis] Target ellipsoid semi-major axis.\n * @property {number} [toSemiMinorAxis] Target ellipsoid semi-minor axis.\n */\n\n/**\n * @typedef {Object} Subgrid\n * @property {Array<number>} ll Lower left corner of the grid in radians [longitude, latitude].\n * @property {Array<number>} del Grid spacing in radians [longitude interval, latitude interval].\n * @property {Array<number>} lim Number of columns in the grid [longitude columns, latitude columns].\n * @property {number} [count] Total number of grid nodes.\n * @property {Array} cvs Mapped node values for the grid.\n */\n\n/** @typedef {{header: NadgridHeader, subgrids: Array<Subgrid>}} NADGrid */\n\n/**\n * @typedef {Object} GeoTIFF\n * @property {() => Promise<number>} getImageCount - Returns the number of images in the GeoTIFF.\n * @property {(index: number) => Promise<GeoTIFFImage>} getImage - Returns a GeoTIFFImage for the given index.\n */\n\n/**\n * @typedef {Object} GeoTIFFImage\n * @property {() => number} getWidth - Returns the width of the image.\n * @property {() => number} getHeight - Returns the height of the image.\n * @property {() => number[]} getBoundingBox - Returns the bounding box as [minX, minY, maxX, maxY] in degrees.\n * @property {() => Promise<ArrayLike<ArrayLike<number>>>} readRasters - Returns the raster data as an array of bands.\n * @property {Object} fileDirectory - The file directory object containing metadata.\n * @property {Object} fileDirectory.ModelPixelScale - The pixel scale array [scaleX, scaleY, scaleZ] in degrees.\n */\n\nvar loadedNadgrids = {};\n\n/**\n * @overload\n * @param {string} key - The key to associate with the loaded grid.\n * @param {ArrayBuffer} data - The NTv2 grid data as an ArrayBuffer.\n * @param {NTV2GridOptions} [options] - Optional parameters for loading the grid.\n * @returns {NADGrid} - The loaded NAD grid information.\n */\n/**\n * @overload\n * @param {string} key - The key to associate with the loaded grid.\n * @param {GeoTIFF} data - The GeoTIFF instance to read the grid from.\n * @returns {{ready: Promise<NADGrid>}} - A promise that resolves to the loaded grid information.\n */\n/**\n * Load either a NTv2 file (.gsb) or a Geotiff (.tif) to a key that can be used in a proj string like +nadgrids=<key>. Pass the NTv2 file\n * as an ArrayBuffer. Pass Geotiff as a GeoTIFF instance from the geotiff.js library.\n * @param {string} key - The key to associate with the loaded grid.\n * @param {ArrayBuffer|GeoTIFF} data The data to load, either an ArrayBuffer for NTv2 or a GeoTIFF instance.\n * @param {NTV2GridOptions} [options] Optional parameters.\n * @returns {{ready: Promise<NADGrid>}|NADGrid} - A promise that resolves to the loaded grid information.\n */\nexport default function nadgrid(key, data, options) {\n if (data instanceof ArrayBuffer) {\n return readNTV2Grid(key, data, options);\n }\n return { ready: readGeotiffGrid(key, data) };\n}\n\n/**\n * @param {string} key The key to associate with the loaded grid.\n * @param {ArrayBuffer} data The NTv2 grid data as an ArrayBuffer.\n * @param {NTV2GridOptions} [options] Optional parameters for loading the grid.\n * @returns {NADGrid} The loaded NAD grid information.\n */\nfunction readNTV2Grid(key, data, options) {\n var includeErrorFields = true;\n if (options !== undefined && options.includeErrorFields === false) {\n includeErrorFields = false;\n }\n var view = new DataView(data);\n var isLittleEndian = detectLittleEndian(view);\n var header = readHeader(view, isLittleEndian);\n var subgrids = readSubgrids(view, header, isLittleEndian, includeErrorFields);\n var nadgrid = { header: header, subgrids: subgrids };\n loadedNadgrids[key] = nadgrid;\n return nadgrid;\n}\n\n/**\n * @param {string} key The key to associate with the loaded grid.\n * @param {GeoTIFF} tiff The GeoTIFF instance to read the grid from.\n * @returns {Promise<NADGrid>} A promise that resolves to the loaded NAD grid information.\n */\nasync function readGeotiffGrid(key, tiff) {\n var subgrids = [];\n var subGridCount = await tiff.getImageCount();\n // proj produced tiff grid shift files appear to organize lower res subgrids first, higher res/ child subgrids last.\n for (var subgridIndex = subGridCount - 1; subgridIndex >= 0; subgridIndex--) {\n var image = await tiff.getImage(subgridIndex);\n\n var rasters = await image.readRasters();\n var data = rasters;\n var lim = [image.getWidth(), image.getHeight()];\n var imageBBoxRadians = image.getBoundingBox().map(degreesToRadians);\n var del = [image.fileDirectory.ModelPixelScale[0], image.fileDirectory.ModelPixelScale[1]].map(degreesToRadians);\n\n var maxX = imageBBoxRadians[0] + (lim[0] - 1) * del[0];\n var minY = imageBBoxRadians[3] - (lim[1] - 1) * del[1];\n\n var latitudeOffsetBand = data[0];\n var longitudeOffsetBand = data[1];\n var nodes = [];\n\n for (let i = lim[1] - 1; i >= 0; i--) {\n for (let j = lim[0] - 1; j >= 0; j--) {\n var index = i * lim[0] + j;\n nodes.push([-secondsToRadians(longitudeOffsetBand[index]), secondsToRadians(latitudeOffsetBand[index])]);\n }\n }\n\n subgrids.push({\n del: del,\n lim: lim,\n ll: [-maxX, minY],\n cvs: nodes\n });\n }\n\n var tifGrid = {\n header: {\n nSubgrids: subGridCount\n },\n subgrids: subgrids\n };\n loadedNadgrids[key] = tifGrid;\n return tifGrid;\n};\n\n/**\n * Given a proj4 value for nadgrids, return an array of loaded grids\n * @param {string} nadgrids A comma-separated list of grid names, optionally prefixed with '@' to indicate optional grids.\n * @returns\n */\nexport function getNadgrids(nadgrids) {\n // Format details: http://proj.maptools.org/gen_parms.html\n if (nadgrids === undefined) {\n return null;\n }\n var grids = nadgrids.split(',');\n return grids.map(parseNadgridString);\n}\n\n/**\n * @param {string} value The nadgrid string to get information for.\n * @returns {NadgridInfo|null} An object with grid information, or null if the input is empty.\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 degreesToRadians(degrees) {\n return (degrees) * Math.PI / 180;\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, includeErrorFields) {\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, includeErrorFields);\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 var rowSize = 16;\n if (includeErrorFields === false) {\n rowSize = 8;\n }\n gridOffset += 176 + subHeader.gridNodeCount * rowSize;\n }\n return grids;\n}\n\n/**\n * @param {*} nodes\n * @returns Array<Array<number>>\n */\nfunction mapNodes(nodes) {\n return nodes.map(function (r) {\n return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];\n });\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, includeErrorFields) {\n var nodesOffset = offset + 176;\n var gridRecordLength = 16;\n\n if (includeErrorFields === false) {\n gridRecordLength = 8;\n }\n\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\n };\n\n if (includeErrorFields !== false) {\n record.latitudeAccuracy = view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian);\n record.longitudeAccuracy = view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian);\n }\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\n/**\n * @typedef {Object} DatumDefinition\n * @property {number} datum_type - The type of datum.\n * @property {number} a - Semi-major axis of the ellipsoid.\n * @property {number} b - Semi-minor axis of the ellipsoid.\n * @property {number} es - Eccentricity squared of the ellipsoid.\n * @property {number} ep2 - Second eccentricity squared of the ellipsoid.\n */\n\n/**\n * @param {string | import('./core').PROJJSONDefinition | import('./defs').ProjectionDefinition} srsCode\n * @param {(errorMessage?: string, instance?: Projection) => void} [callback]\n */\nfunction Projection(srsCode, callback) {\n if (!(this instanceof Projection)) {\n return new Projection(srsCode);\n }\n /** @type {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} */\n this.forward = null;\n /** @type {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} */\n this.inverse = null;\n /** @type {function(): void} */\n this.init = null;\n /** @type {string} */\n this.name;\n /** @type {Array<string>} */\n this.names = null;\n /** @type {string} */\n this.title;\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 /** @type {DatumDefinition} */\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 if ('init' in this && typeof this.init === 'function') {\n this.init();\n }\n\n // legecy callback from back in the day when it went to spatialreference.org\n callback(null, this);\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 /* 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/** 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 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 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 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 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 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)) {\n return val;\n }\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 /** @type {import(\"./core\").InterfaceCoordinates} */\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 } 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 } 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","/**\n * @param {Array<number>} array\n * @returns {import(\"../core\").InterfaceCoordinates}\n */\nexport 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}\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\n/**\n * @param {import('./defs').ProjectionDefinition} source\n * @param {import('./defs').ProjectionDefinition} dest\n * @param {import('./core').TemplateCoordinates} point\n * @param {boolean} enforceAxis\n * @returns {import('./core').InterfaceCoordinates | undefined}\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 point = /** @type {import('./core').InterfaceCoordinates} */ (point);\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\n/**\n * @typedef {{x: number, y: number, z?: number, m?: number}} InterfaceCoordinates\n */\n\n/**\n * @typedef {Array<number> | InterfaceCoordinates} TemplateCoordinates\n */\n\n/**\n * @typedef {Object} Converter\n * @property {<T extends TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} forward\n * @property {<T extends TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} inverse\n * @property {proj} [oProj]\n */\n\n/**\n * @typedef {Object} PROJJSONDefinition\n * @property {string} [$schema]\n * @property {string} type\n * @property {string} [name]\n * @property {{authority: string, code: number}} [id]\n * @property {string} [scope]\n * @property {string} [area]\n * @property {{south_latitude: number, west_longitude: number, north_latitude: number, east_longitude: number}} [bbox]\n * @property {PROJJSONDefinition[]} [components]\n * @property {{type: string, name: string}} [datum]\n * @property {{\n * name: string,\n * members: Array<{\n * name: string,\n * id?: {authority: string, code: number}\n * }>,\n * ellipsoid?: {\n * name: string,\n * semi_major_axis: number,\n * inverse_flattening?: number\n * },\n * accuracy?: string,\n * id?: {authority: string, code: number}\n * }} [datum_ensemble]\n * @property {{\n * subtype: string,\n * axis: Array<{\n * name: string,\n * abbreviation?: string,\n * direction: string,\n * unit: string\n * }>\n * }} [coordinate_system]\n * @property {{\n * name: string,\n * method: {name: string},\n * parameters: Array<{\n * name: string,\n * value: number,\n * unit?: string\n * }>\n * }} [conversion]\n * @property {{\n * name: string,\n * method: {name: string},\n * parameters: Array<{\n * name: string,\n * value: number,\n * unit?: string,\n * type?: string,\n * file_name?: string\n * }>\n * }} [transformation]\n */\n\n/**\n * @template {TemplateCoordinates} T\n * @param {proj} from\n * @param {proj} to\n * @param {T} coords\n * @param {boolean} [enforceAxis]\n * @returns {T}\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 /** @type {T} */ ([transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.slice(3)));\n } else {\n return /** @type {T} */ ([transformedArray.x, transformedArray.y, coords[2]].concat(coords.slice(3)));\n }\n } else {\n return /** @type {T} */ ([transformedArray.x, transformedArray.y].concat(coords.slice(2)));\n }\n } else {\n return /** @type {T} */ ([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 /** @type {T} */ (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 /** @type {T} */ (out);\n }\n}\n\n/**\n * @param {proj | string | PROJJSONDefinition | Converter} item\n * @returns {import('./Proj').default}\n */\nfunction checkProj(item) {\n if (item instanceof proj) {\n return item;\n }\n if (typeof item === 'object' && 'oProj' in item) {\n return item.oProj;\n }\n return proj(/** @type {string | PROJJSONDefinition} */ (item));\n}\n\n/**\n * @overload\n * @param {string | PROJJSONDefinition | proj} toProj\n * @returns {Converter}\n */\n/**\n * @overload\n * @param {string | PROJJSONDefinition | proj} fromProj\n * @param {string | PROJJSONDefinition | proj} toProj\n * @returns {Converter}\n */\n/**\n * @template {TemplateCoordinates} T\n * @overload\n * @param {string | PROJJSONDefinition | proj} toProj\n * @param {T} coord\n * @returns {T}\n */\n/**\n * @template {TemplateCoordinates} T\n * @overload\n * @param {string | PROJJSONDefinition | proj} fromProj\n * @param {string | PROJJSONDefinition | proj} toProj\n * @param {T} coord\n * @returns {T}\n */\n/**\n * @template {TemplateCoordinates} T\n * @param {string | PROJJSONDefinition | proj} fromProjOrToProj\n * @param {string | PROJJSONDefinition | proj | TemplateCoordinates} [toProjOrCoord]\n * @param {T} [coord]\n * @returns {T|Converter}\n */\nfunction proj4(fromProjOrToProj, toProjOrCoord, coord) {\n /** @type {proj} */\n var fromProj;\n /** @type {proj} */\n var toProj;\n var single = false;\n /** @type {Converter} */\n var obj;\n if (typeof toProjOrCoord === 'undefined') {\n toProj = checkProj(fromProjOrToProj);\n fromProj = wgs84;\n single = true;\n } else if (typeof /** @type {?} */ (toProjOrCoord).x !== 'undefined' || Array.isArray(toProjOrCoord)) {\n coord = /** @type {T} */ (/** @type {?} */ (toProjOrCoord));\n toProj = checkProj(fromProjOrToProj);\n fromProj = wgs84;\n single = true;\n }\n if (!fromProj) {\n fromProj = checkProj(fromProjOrToProj);\n }\n if (!toProj) {\n toProj = checkProj(/** @type {string | PROJJSONDefinition | proj } */ (toProjOrCoord));\n }\n if (coord) {\n return transformer(fromProj, toProj, coord);\n } else {\n obj = {\n /**\n * @template {TemplateCoordinates} T\n * @param {T} coords\n * @param {boolean=} enforceAxis\n * @returns {T}\n */\n forward: function (coords, enforceAxis) {\n return transformer(fromProj, toProj, coords, enforceAxis);\n },\n /**\n * @template {TemplateCoordinates} T\n * @param {T} coords\n * @param {boolean=} enforceAxis\n * @returns {T}\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}\n\nexport default proj4;\n","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n forward: forward,\n inverse: inverse,\n toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n * WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n accuracy = accuracy || 5; // default accuracy 1m\n return encode(LLtoUTM({\n lat: ll[1],\n lon: ll[0]\n }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n * (longitude) and top (latitude) values in WGS84, representing the\n * bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n }\n return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat];\n }\n return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n * representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n * northing, zoneNumber and zoneLetter properties, and an optional\n * accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n var Lat = ll.lat;\n var Long = ll.lon;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var k0 = 0.9996;\n var LongOrigin;\n var eccPrimeSquared;\n var N, T, C, A, M;\n var LatRad = degToRad(Lat);\n var LongRad = degToRad(Long);\n var LongOriginRad;\n var ZoneNumber;\n // (int)\n ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n //Make sure the longitude 180.00 is in Zone 60\n if (Long === 180) {\n ZoneNumber = 60;\n }\n\n // Special zone for Norway\n if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n ZoneNumber = 32;\n }\n\n // Special zones for Svalbard\n if (Lat >= 72.0 && Lat < 84.0) {\n if (Long >= 0.0 && Long < 9.0) {\n ZoneNumber = 31;\n }\n else if (Long >= 9.0 && Long < 21.0) {\n ZoneNumber = 33;\n }\n else if (Long >= 21.0 && Long < 33.0) {\n ZoneNumber = 35;\n }\n else if (Long >= 33.0 && Long < 42.0) {\n ZoneNumber = 37;\n }\n }\n\n LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n // in middle of\n // zone\n LongOriginRad = degToRad(LongOrigin);\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n T = Math.tan(LatRad) * Math.tan(LatRad);\n C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n if (Lat < 0.0) {\n UTMNorthing += 10000000.0; //10000000 meter offset for\n // southern hemisphere\n }\n\n return {\n northing: Math.round(UTMNorthing),\n easting: Math.round(UTMEasting),\n zoneNumber: ZoneNumber,\n zoneLetter: getLetterDesignator(Lat)\n };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n * and zoneLetter properties. If an optional accuracy property is\n * provided (in meters), a bounding box will be returned instead of\n * latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n * (if no accuracy was provided), or top, right, bottom and left values\n * for the bounding box calculated according to the provided accuracy.\n * Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n var UTMNorthing = utm.northing;\n var UTMEasting = utm.easting;\n var zoneLetter = utm.zoneLetter;\n var zoneNumber = utm.zoneNumber;\n // check the ZoneNummber is valid\n if (zoneNumber < 0 || zoneNumber > 60) {\n return null;\n }\n\n var k0 = 0.9996;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var eccPrimeSquared;\n var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n var N1, T1, C1, R1, D, M;\n var LongOrigin;\n var mu, phi1Rad;\n\n // remove 500,000 meter offset for longitude\n var x = UTMEasting - 500000.0;\n var y = UTMNorthing;\n\n // We must know somehow if we are in the Northern or Southern\n // hemisphere, this is the only time we use the letter So even\n // if the Zone letter isn't exactly correct it should indicate\n // the hemisphere correctly\n if (zoneLetter < 'N') {\n y -= 10000000.0; // remove 10,000,000 meter offset used\n // for southern hemisphere\n }\n\n // There are 60 zones with zone 1 being at West -180 to -174\n LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n // in middle of\n // zone\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n M = y / k0;\n mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n D = x / (N1 * k0);\n\n var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n lat = radToDeg(lat);\n\n var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n lon = LongOrigin + radToDeg(lon);\n\n var result;\n if (utm.accuracy) {\n var topRight = UTMtoLL({\n northing: utm.northing + utm.accuracy,\n easting: utm.easting + utm.accuracy,\n zoneLetter: utm.zoneLetter,\n zoneNumber: utm.zoneNumber\n });\n result = {\n top: topRight.lat,\n right: topRight.lon,\n bottom: lat,\n left: lon\n };\n }\n else {\n result = {\n lat: lat,\n lon: lon\n };\n }\n return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n * for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n //This is here as an error flag to show that the Latitude is\n //outside MGRS limits\n var LetterDesignator = 'Z';\n\n if ((84 >= lat) && (lat >= 72)) {\n LetterDesignator = 'X';\n }\n else if ((72 > lat) && (lat >= 64)) {\n LetterDesignator = 'W';\n }\n else if ((64 > lat) && (lat >= 56)) {\n LetterDesignator = 'V';\n }\n else if ((56 > lat) && (lat >= 48)) {\n LetterDesignator = 'U';\n }\n else if ((48 > lat) && (lat >= 40)) {\n LetterDesignator = 'T';\n }\n else if ((40 > lat) && (lat >= 32)) {\n LetterDesignator = 'S';\n }\n else if ((32 > lat) && (lat >= 24)) {\n LetterDesignator = 'R';\n }\n else if ((24 > lat) && (lat >= 16)) {\n LetterDesignator = 'Q';\n }\n else if ((16 > lat) && (lat >= 8)) {\n LetterDesignator = 'P';\n }\n else if ((8 > lat) && (lat >= 0)) {\n LetterDesignator = 'N';\n }\n else if ((0 > lat) && (lat >= -8)) {\n LetterDesignator = 'M';\n }\n else if ((-8 > lat) && (lat >= -16)) {\n LetterDesignator = 'L';\n }\n else if ((-16 > lat) && (lat >= -24)) {\n LetterDesignator = 'K';\n }\n else if ((-24 > lat) && (lat >= -32)) {\n LetterDesignator = 'J';\n }\n else if ((-32 > lat) && (lat >= -40)) {\n LetterDesignator = 'H';\n }\n else if ((-40 > lat) && (lat >= -48)) {\n LetterDesignator = 'G';\n }\n else if ((-48 > lat) && (lat >= -56)) {\n LetterDesignator = 'F';\n }\n else if ((-56 > lat) && (lat >= -64)) {\n LetterDesignator = 'E';\n }\n else if ((-64 > lat) && (lat >= -72)) {\n LetterDesignator = 'D';\n }\n else if ((-72 > lat) && (lat >= -80)) {\n LetterDesignator = 'C';\n }\n return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n * zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n // prepend with leading zeroes\n var seasting = \"00000\" + utm.easting,\n snorthing = \"00000\" + utm.northing;\n\n return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n var setParm = get100kSetForZone(zoneNumber);\n var setColumn = Math.floor(easting / 100000);\n var setRow = Math.floor(northing / 100000) % 20;\n return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n var setParm = i % NUM_100K_SETS;\n if (setParm === 0) {\n setParm = NUM_100K_SETS;\n }\n\n return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n * 100k set spreadsheet, created from the UTM easting.\n * Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM northing value. Values\n * are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM zone. Values are from\n * 1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n // colOrigin and rowOrigin are the letters at the origin of the set\n var index = parm - 1;\n var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n // colInt and rowInt are the letters to build to return\n var colInt = colOrigin + column - 1;\n var rowInt = rowOrigin + row;\n var rollover = false;\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n rollover = true;\n }\n\n if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n colInt++;\n }\n\n if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n colInt++;\n\n if (colInt === I) {\n colInt++;\n }\n }\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n rollover = true;\n }\n else {\n rollover = false;\n }\n\n if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n rowInt++;\n }\n\n if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n rowInt++;\n\n if (rowInt === I) {\n rowInt++;\n }\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n }\n\n var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n * zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n if (mgrsString && mgrsString.length === 0) {\n throw (\"MGRSPoint coverting from nothing\");\n }\n\n var length = mgrsString.length;\n\n var hunK = null;\n var sb = \"\";\n var testChar;\n var i = 0;\n\n // get Zone number\n while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n if (i >= 2) {\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n sb += testChar;\n i++;\n }\n\n var zoneNumber = parseInt(sb, 10);\n\n if (i === 0 || i + 3 > length) {\n // A good MGRS string has to be 4-5 digits long,\n // ##AAA/#AAA at least.\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n\n var zoneLetter = mgrsString.charAt(i++);\n\n // Should we check the zone letter here? Why not.\n if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n }\n\n hunK = mgrsString.substring(i, i += 2);\n\n var set = get100kSetForZone(zoneNumber);\n\n var east100k = getEastingFromChar(hunK.charAt(0), set);\n var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n // We have a bug where the northing may be 2000000 too low.\n // How\n // do we know when to roll over?\n\n while (north100k < getMinNorthing(zoneLetter)) {\n north100k += 2000000;\n }\n\n // calculate the char index for easting/northing separator\n var remainder = length - i;\n\n if (remainder % 2 !== 0) {\n throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n }\n\n var sep = remainder / 2;\n\n var sepEasting = 0.0;\n var sepNorthing = 0.0;\n var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n if (sep > 0) {\n accuracyBonus = 100000.0 / Math.pow(10, sep);\n sepEastingString = mgrsString.substring(i, i + sep);\n sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n sepNorthingString = mgrsString.substring(i + sep);\n sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n }\n\n easting = sepEasting + east100k;\n northing = sepNorthing + north100k;\n\n return {\n easting: easting,\n northing: northing,\n zoneLetter: zoneLetter,\n zoneNumber: zoneNumber,\n accuracy: accuracyBonus\n };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n // colOrigin is the letter at the origin of the set for the\n // column\n var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n var eastingValue = 100000.0;\n var rewindMarker = false;\n\n while (curCol !== e.charCodeAt(0)) {\n curCol++;\n if (curCol === I) {\n curCol++;\n }\n if (curCol === O) {\n curCol++;\n }\n if (curCol > Z) {\n if (rewindMarker) {\n throw (\"Bad character: \" + e);\n }\n curCol = A;\n rewindMarker = true;\n }\n eastingValue += 100000.0;\n }\n\n return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n * UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n if (n > 'V') {\n throw (\"MGRSPoint given invalid Northing \" + n);\n }\n\n // rowOrigin is the letter at the origin of the set for the\n // column\n var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n var northingValue = 0.0;\n var rewindMarker = false;\n\n while (curRow !== n.charCodeAt(0)) {\n curRow++;\n if (curRow === I) {\n curRow++;\n }\n if (curRow === O) {\n curRow++;\n }\n // fixing a bug making whole application hang in this loop\n // when 'n' is a wrong character\n if (curRow > V) {\n if (rewindMarker) { // making sure that this loop ends\n throw (\"Bad character: \" + n);\n }\n curRow = A;\n rewindMarker = true;\n }\n northingValue += 100000.0;\n }\n\n return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n var northing;\n switch (zoneLetter) {\n case 'C':\n northing = 1100000.0;\n break;\n case 'D':\n northing = 2000000.0;\n break;\n case 'E':\n northing = 2800000.0;\n break;\n case 'F':\n northing = 3700000.0;\n break;\n case 'G':\n northing = 4600000.0;\n break;\n case 'H':\n northing = 5500000.0;\n break;\n case 'J':\n northing = 6400000.0;\n break;\n case 'K':\n northing = 7300000.0;\n break;\n case 'L':\n northing = 8200000.0;\n break;\n case 'M':\n northing = 9100000.0;\n break;\n case 'N':\n northing = 0.0;\n break;\n case 'P':\n northing = 800000.0;\n break;\n case 'Q':\n northing = 1700000.0;\n break;\n case 'R':\n northing = 2600000.0;\n break;\n case 'S':\n northing = 3500000.0;\n break;\n case 'T':\n northing = 4400000.0;\n break;\n case 'U':\n northing = 5300000.0;\n break;\n case 'V':\n northing = 6200000.0;\n break;\n case 'W':\n northing = 7000000.0;\n break;\n case 'X':\n northing = 7900000.0;\n break;\n default:\n northing = -1.0;\n }\n if (northing >= 0.0) {\n return northing;\n }\n else {\n throw (\"Invalid zone letter: \" + zoneLetter);\n }\n\n}\n","import { toPoint, forward } from 'mgrs';\n\n/**\n * @deprecated v3.0.0 - use proj4.toPoint instead\n * @param {number | import('./core').TemplateCoordinates | string} x\n * @param {number} [y]\n * @param {number} [z]\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]);\n this.y = parseFloat(coords[1]);\n this.z = parseFloat(coords[2]) || 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}\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}\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\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {Array<number>} en\n * @property {number} ml0\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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, this.over);\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 } 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 } else {\n y = 0;\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 } 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 } else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0, this.over);\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), this.over);\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}\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}\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\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {Array<number>} cbg\n * @property {Array<number>} cgb\n * @property {Array<number>} utg\n * @property {Array<number>} gtu\n * @property {number} Qn\n * @property {number} Zb\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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, this.over);\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 } 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, this.over);\n lat = gatg(this.cgb, Cn);\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/** @this {import('../defs.js').ProjectionDefinition} */\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}\n","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport { HALF_PI, FORTPI } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} rc\n * @property {number} C\n * @property {number} phic0\n * @property {number} ratexp\n * @property {number} K\n * @property {number} e\n * @property {number} es\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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\n/**\n * @typedef {Object} LocalThis\n * @property {number} sinc0\n * @property {number} cosc0\n * @property {number} R2\n * @property {number} rc\n * @property {number} phic0\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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, this.over);\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 } 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, this.over);\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\n/**\n * @typedef {Object} LocalThis\n * @property {number} coslat0\n * @property {number} sinlat0\n * @property {number} ms1\n * @property {number} X0\n * @property {number} cosX0\n * @property {number} sinX0\n * @property {number} con\n * @property {number} cons\n * @property {number} e\n */\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\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\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 } 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 } 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(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, this.over);\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 } else {\n X = 2 * Math.atan(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 } 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 } 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), this.over);\n } else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y), this.over);\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)), this.over);\n }\n p.x = lon;\n p.y = lat;\n return p;\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), this.over);\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 } 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)), this.over);\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\nexport var names = ['stere', 'Stereographic_South_Pole', 'Polar_Stereographic_variant_A', '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\n/**\n * @typedef {Object} LocalThis\n * @property {number} lambda0\n * @property {number} e\n * @property {number} R\n * @property {number} b0\n * @property {number} K\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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 { EPSLN, HALF_PI, TWO_PI, FORTPI } from '../constants/values';\nimport { getNormalizedProjName } from '../projections';\n\n/**\n * @typedef {Object} LocalThis\n * @property {boolean} no_off\n * @property {boolean} no_rot\n * @property {number} rectified_grid_angle\n * @property {number} es\n * @property {number} A\n * @property {number} B\n * @property {number} E\n * @property {number} e\n * @property {number} lam0\n * @property {number} singam\n * @property {number} cosgam\n * @property {number} sinrot\n * @property {number} cosrot\n * @property {number} rB\n * @property {number} ArB\n * @property {number} BrA\n * @property {number} u_0\n * @property {number} v_pole_n\n * @property {number} v_pole_s\n */\n\nvar TOL = 1e-7;\n\nfunction isTypeA(P) {\n var typeAProjections = ['Hotine_Oblique_Mercator', 'Hotine_Oblique_Mercator_variant_A', 'Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];\n var projectionName = typeof P.projName === 'object' ? Object.keys(P.projName)[0] : P.projName;\n\n return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1 || typeAProjections.indexOf(getNormalizedProjName(projectionName)) !== -1;\n}\n\n/**\n * Initialize the Oblique Mercator projection\n * @this {import('../defs.js').ProjectionDefinition & LocalThis}\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;\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;\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, this.over);\n gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0, this.over)) / (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\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/* 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_variant_A', 'Hotine_Oblique_Mercator_Variant_B', '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';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} e\n * @property {number} ns\n * @property {number} f0\n * @property {number} rh\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\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 = Math.abs(Math.abs(this.lat0) - HALF_PI) < EPSLN\n ? 0 // Handle poles by setting ts0 to 0\n : 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 } 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 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 } 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, this.over);\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 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 } 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 } else {\n lat = -HALF_PI;\n }\n lon = adjust_lon(theta / this.ns + this.long0, this.over);\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, this.over);\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}\n","export default function (x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}\n","export default function (x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}\n","export default function (x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n}\n","export default function (x) {\n return (x * x * x * (35 / 3072));\n}\n","export default function (a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n}\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}\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\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {number} e0\n * @property {number} e1\n * @property {number} e2\n * @property {number} e3\n * @property {number} ml0\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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 /* Forward equations\n ----------------- */\n var x, y;\n var lam = p.x;\n var phi = p.y;\n lam = adjust_lon(lam - this.long0, this.over);\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 } 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 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 } 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 p.x = adjust_lon(lam + this.long0, this.over);\n p.y = adjust_lat(phi);\n return p;\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 } else {\n return (2 * sinphi);\n }\n}\n","import { HALF_PI, EPSLN, FORTPI } from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} mode\n * @property {Array<number>} apa\n * @property {number} dd\n * @property {number} e\n * @property {number} es\n * @property {number} mmf\n * @property {number} rq\n * @property {number} qp\n * @property {number} sinb1\n * @property {number} cosb1\n * @property {number} ymf\n * @property {number} xmf\n * @property {number} sinph0\n * @property {number} cosph0\n */\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;\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/**\n * Initialize the Lambert Azimuthal Equal Area projection\n * @this {import('../defs.js').ProjectionDefinition & LocalThis}\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 ? S_POLE : N_POLE;\n } else if (Math.abs(t) < EPSLN) {\n this.mode = EQUIT;\n } else {\n this.mode = 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 N_POLE:\n this.dd = 1;\n break;\n case S_POLE:\n this.dd = 1;\n break;\n case 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 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 } else {\n if (this.mode === 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 /* 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, this.over);\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 } 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 } 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 } 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 } 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 } 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 } else {\n ab = y * sCe / rho;\n q = this.qp * ab;\n y = rho * cCe;\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, this.over);\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}\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\n/**\n * @typedef {Object} LocalThis\n * @property {number} temp\n * @property {number} es\n * @property {number} e3\n * @property {number} sin_po\n * @property {number} cos_po\n * @property {number} t1\n * @property {number} con\n * @property {number} ms1\n * @property {number} qs1\n * @property {number} t2\n * @property {number} ms2\n * @property {number} qs2\n * @property {number} t3\n * @property {number} qs0\n * @property {number} ns0\n * @property {number} c\n * @property {number} rh\n * @property {number} sin_phi\n * @property {number} cos_phi\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\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 } 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 ------------------------------------------------------------------- */\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function forward(p) {\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, this.over);\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 } 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 } 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, this.over);\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_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 * @typedef {Object} LocalThis\n * @property {number} sin_p14\n * @property {number} cos_p14\n * @property {number} infinity_dist\n * @property {number} rc\n */\n\n/**\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n @this {import('../defs.js').ProjectionDefinition & LocalThis}\n */\nexport function init() {\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, this.over);\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 } else {\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 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, this.over);\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 } 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 * @typedef {Object} LocalThis\n * @property {number} e\n */\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 @this {import('../defs.js').ProjectionDefinition & LocalThis}\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, this.over);\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 } 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), this.over);\n lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\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), this.over);\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 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 var lon = p.x;\n var lat = p.y;\n\n var dlon = adjust_lon(lon - this.long0, this.over);\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 var x = p.x;\n var y = p.y;\n\n p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)), this.over);\n p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n return p;\n}\n\nexport var names = ['Equirectangular', 'Equidistant_Cylindrical', 'Equidistant_Cylindrical_Spherical', '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';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} temp\n * @property {number} es\n * @property {number} e\n * @property {number} e0\n * @property {number} e1\n * @property {number} e2\n * @property {number} e3\n * @property {number} ml0\n */\n\nvar MAX_ITER = 20;\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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, this.over);\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 } 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 } else {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.ml0;\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 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, this.over);\n lat = 0;\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), this.over);\n }\n } else {\n if (Math.abs(y + this.ml0) <= EPSLN) {\n lat = 0;\n lon = adjust_lon(this.long0 + x / this.a, this.over);\n } else {\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), this.over);\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = ['Polyconic', 'American_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/* 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, this.over);\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, this.over);\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/**\n * @typedef {Object} LocalThis\n * @property {Array<number>} en\n * @property {number} n\n * @property {number} m\n * @property {number} C_y\n * @property {number} C_x\n * @property {number} es\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n /* Place parameters in static storage for common use\n ------------------------------------------------- */\n\n if (!this.sphere) {\n this.en = pj_enfn(this.es);\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/* 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, this.over);\n\n if (this.sphere) {\n if (!this.m) {\n lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\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 } else {\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 } else if (this.n !== 1) {\n lat = asinz(Math.sin(lat) / this.n);\n }\n lon = adjust_lon(lon + this.long0, this.over);\n lat = adjust_lat(lat);\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, this.over);\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';\nimport { EPSLN } from '../constants/values';\n\n/** @this {import('../defs.js').ProjectionDefinition} */\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}\n\n/* Mollweide forward equations--mapping lat,long to x,y\n ---------------------------------------------------- */\nexport function forward(p) {\n /* Forward equations\n ----------------- */\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0, this.over);\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))), this.over);\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\n/**\n * @typedef {Object} LocalThis\n * @property {number} temp\n * @property {number} es\n * @property {number} e\n * @property {number} e0\n * @property {number} e1\n * @property {number} e2\n * @property {number} e3\n * @property {number} sin_phi\n * @property {number} cos_phi\n * @property {number} ms1\n * @property {number} ml1\n * @property {number} ms2\n * @property {number} ml2\n * @property {number} ns\n * @property {number} g\n * @property {number} ml0\n * @property {number} rh\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\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.sin_phi = Math.sin(this.lat1);\n this.cos_phi = Math.cos(this.lat1);\n\n this.ms1 = msfnz(this.e, this.sin_phi, this.cos_phi);\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.sin_phi;\n } else {\n this.sin_phi = Math.sin(this.lat2);\n this.cos_phi = Math.cos(this.lat2);\n this.ms2 = msfnz(this.e, this.sin_phi, this.cos_phi);\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 } 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, this.over);\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 } 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, this.over);\n lat = adjust_lat(this.g - rh1 / this.a);\n p.x = lon;\n p.y = lat;\n return p;\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, this.over);\n p.x = lon;\n p.y = lat;\n return p;\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/**\n * @typedef {Object} LocalThis\n * @property {number} R - Radius of the Earth\n */\n\n/**\n * Initialize the Van Der Grinten projection\n * @this {import('../defs.js').ProjectionDefinition & LocalThis}\n */\nexport function init() {\n // this.R = 6370997; //Radius of earth\n this.R = this.a;\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n /* Forward equations\n ----------------- */\n var dlon = adjust_lon(lon - this.long0, this.over);\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 } 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 } 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 } 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 } 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 } else {\n lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx, this.over);\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = ['Van_der_Grinten_I', 'VanDerGrinten', 'Van_der_Grinten', 'vandg'];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","/**\n * Calculates the inverse geodesic problem using Vincenty's formulae.\n * Computes the forward azimuth and ellipsoidal distance between two points\n * specified by latitude and longitude on the surface of an ellipsoid.\n *\n * @param {number} lat1 Latitude of the first point in radians.\n * @param {number} lon1 Longitude of the first point in radians.\n * @param {number} lat2 Latitude of the second point in radians.\n * @param {number} lon2 Longitude of the second point in radians.\n * @param {number} a Semi-major axis of the ellipsoid (meters).\n * @param {number} f Flattening of the ellipsoid.\n * @returns {{ azi1: number, s12: number }} An object containing:\n * - azi1: Forward azimuth from the first point to the second point (radians).\n * - s12: Ellipsoidal distance between the two points (meters).\n */\nexport function vincentyInverse(lat1, lon1, lat2, lon2, a, f) {\n const L = lon2 - lon1;\n const U1 = Math.atan((1 - f) * Math.tan(lat1));\n const U2 = Math.atan((1 - f) * Math.tan(lat2));\n const sinU1 = Math.sin(U1), cosU1 = Math.cos(U1);\n const sinU2 = Math.sin(U2), cosU2 = Math.cos(U2);\n\n let lambda = L, lambdaP, iterLimit = 100;\n let sinLambda, cosLambda, sinSigma, cosSigma, sigma, sinAlpha, cos2Alpha, cos2SigmaM, C;\n let uSq, A, B, deltaSigma, s;\n\n do {\n sinLambda = Math.sin(lambda);\n cosLambda = Math.cos(lambda);\n sinSigma = Math.sqrt(\n (cosU2 * sinLambda) * (cosU2 * sinLambda)\n + (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda)\n * (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda)\n );\n if (sinSigma === 0) {\n return { azi1: 0, s12: 0 }; // coincident points\n }\n cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = Math.atan2(sinSigma, cosSigma);\n sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma;\n cos2Alpha = 1 - sinAlpha * sinAlpha;\n cos2SigmaM = (cos2Alpha !== 0) ? (cosSigma - 2 * sinU1 * sinU2 / cos2Alpha) : 0;\n C = f / 16 * cos2Alpha * (4 + f * (4 - 3 * cos2Alpha));\n lambdaP = lambda;\n lambda = L + (1 - C) * f * sinAlpha\n * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));\n } while (Math.abs(lambda - lambdaP) > 1e-12 && --iterLimit > 0);\n\n if (iterLimit === 0) {\n return { azi1: NaN, s12: NaN }; // formula failed to converge\n }\n\n uSq = cos2Alpha * (a * a - (a * (1 - f)) * (a * (1 - f))) / ((a * (1 - f)) * (a * (1 - f)));\n A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));\n B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));\n deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)\n - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));\n\n s = (a * (1 - f)) * A * (sigma - deltaSigma);\n\n // Forward azimuth\n const azi1 = Math.atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n\n return { azi1, s12: s };\n}\n\n/**\n * Solves the direct geodetic problem using Vincenty's formulae.\n * Given a starting point, initial azimuth, and distance, computes the destination point on the ellipsoid.\n *\n * @param {number} lat1 Latitude of the starting point in radians.\n * @param {number} lon1 Longitude of the starting point in radians.\n * @param {number} azi1 Initial azimuth (forward azimuth) in radians.\n * @param {number} s12 Distance to travel from the starting point in meters.\n * @param {number} a Semi-major axis of the ellipsoid in meters.\n * @param {number} f Flattening of the ellipsoid.\n * @returns {{lat2: number, lon2: number}} The latitude and longitude (in radians) of the destination point.\n */\nexport function vincentyDirect(lat1, lon1, azi1, s12, a, f) {\n const U1 = Math.atan((1 - f) * Math.tan(lat1));\n const sinU1 = Math.sin(U1), cosU1 = Math.cos(U1);\n const sinAlpha1 = Math.sin(azi1), cosAlpha1 = Math.cos(azi1);\n\n const sigma1 = Math.atan2(sinU1, cosU1 * cosAlpha1);\n const sinAlpha = cosU1 * sinAlpha1;\n const cos2Alpha = 1 - sinAlpha * sinAlpha;\n const uSq = cos2Alpha * (a * a - (a * (1 - f)) * (a * (1 - f))) / ((a * (1 - f)) * (a * (1 - f)));\n const A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));\n const B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));\n\n let sigma = s12 / ((a * (1 - f)) * A), sigmaP, iterLimit = 100;\n let cos2SigmaM, sinSigma, cosSigma, deltaSigma;\n\n do {\n cos2SigmaM = Math.cos(2 * sigma1 + sigma);\n sinSigma = Math.sin(sigma);\n cosSigma = Math.cos(sigma);\n deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)\n - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));\n sigmaP = sigma;\n sigma = s12 / ((a * (1 - f)) * A) + deltaSigma;\n } while (Math.abs(sigma - sigmaP) > 1e-12 && --iterLimit > 0);\n\n if (iterLimit === 0) {\n return { lat2: NaN, lon2: NaN };\n }\n\n const tmp = sinU1 * sinSigma - cosU1 * cosSigma * cosAlpha1;\n const lat2 = Math.atan2(\n sinU1 * cosSigma + cosU1 * sinSigma * cosAlpha1,\n (1 - f) * Math.sqrt(sinAlpha * sinAlpha + tmp * tmp)\n );\n const lambda = Math.atan2(\n sinSigma * sinAlpha1,\n cosU1 * cosSigma - sinU1 * sinSigma * cosAlpha1\n );\n const C = f / 16 * cos2Alpha * (4 + f * (4 - 3 * cos2Alpha));\n const L = lambda - (1 - C) * f * sinAlpha\n * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));\n const lon2 = lon1 + L;\n\n return { lat2, lon2 };\n}\n","import adjust_lon from '../common/adjust_lon';\nimport { HALF_PI, EPSLN } from '../constants/values';\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 asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\nimport { vincentyDirect, vincentyInverse } from '../common/vincenty';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {number} sin_p12\n * @property {number} cos_p12\n * @property {number} a\n * @property {number} f\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n // flattening for ellipsoid\n this.f = this.es / (1 + Math.sqrt(1 - this.es));\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, this.over);\n var e0, e1, e2, e3, Mlp, Ml, c, kp, cos_c, vars, azi1;\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 } 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 } 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 } 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 } 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 } else {\n // Default case\n if (Math.abs(lon) < EPSLN && Math.abs(lat - this.lat0) < EPSLN) {\n p.x = p.y = 0;\n return p;\n }\n vars = vincentyInverse(this.lat0, this.long0, lat, lon, this.a, this.f);\n azi1 = vars.azi1;\n p.x = vars.s12 * Math.sin(azi1);\n p.y = vars.s12 * Math.cos(azi1);\n return p;\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, azi1, s12, vars;\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 } 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), this.over);\n } else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y), this.over);\n }\n } else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz), this.over);\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\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), this.over);\n p.x = lon;\n p.y = lat;\n return p;\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), this.over);\n p.x = lon;\n p.y = lat;\n return p;\n } else {\n // default case\n azi1 = Math.atan2(p.x, p.y);\n s12 = Math.sqrt(p.x * p.x + p.y * p.y);\n vars = vincentyDirect(this.lat0, this.long0, azi1, s12, this.a, this.f);\n\n p.x = vars.lon2;\n p.y = vars.lat2;\n return p;\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\n/**\n * @typedef {Object} LocalThis\n * @property {number} sin_p14\n * @property {number} cos_p14\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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, this.over);\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), this.over);\n } else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y), this.over);\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), this.over);\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/**\n * @typedef {Object} LocalThis\n * @property {number} face\n * @property {number} x0\n * @property {number} y0\n * @property {number} es\n * @property {number} one_minus_f\n * @property {number} one_minus_f_squared\n */\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\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\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","// 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, this.over);\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, this.over);\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\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};\n","import { D2R, HALF_PI, EPSLN } from '../constants/values';\nimport hypot from '../common/hypot';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} mode\n * @property {number} sinph0\n * @property {number} cosph0\n * @property {number} pn1\n * @property {number} h\n * @property {number} rp\n * @property {number} p\n * @property {number} h1\n * @property {number} pfact\n * @property {number} es\n * @property {number} tilt\n * @property {number} azi\n * @property {number} cg\n * @property {number} sg\n * @property {number} cw\n * @property {number} sw\n */\n\nvar mode = {\n N_POLE: 0,\n S_POLE: 1,\n EQUIT: 2,\n OBLIQ: 3\n};\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\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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\n/**\n * @typedef {Object} LocalThis\n * @property {1 | 0} flip_axis\n * @property {number} h\n * @property {number} radius_g_1\n * @property {number} radius_g\n * @property {number} radius_p\n * @property {number} radius_p2\n * @property {number} radius_p_inv2\n * @property {'ellipse'|'sphere'} shape\n * @property {number} C\n * @property {string} sweep\n * @property {number} es\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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 * 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 this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n}\n\nexport function forward(p) {\n var lam = adjust_lon(p.x - this.long0, this.over);\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, this.over);\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};\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\n/**\n * @typedef {Object} LocalThis\n * @property {number} phi1\n * @property {number} cphi1\n * @property {number} es\n * @property {Array<number>} en\n * @property {number} m1\n * @property {number} am1\n */\n\nvar EPS10 = 1e-10;\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\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 } 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), this.over);\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 } else {\n throw new Error();\n }\n p.x = adjust_lon(lam + (this.long0 || 0), this.over);\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), this.over);\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), this.over);\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};\n","import adjust_lon from '../common/adjust_lon';\nimport { D2R, R2D, HALF_PI, EPSLN } from '../constants/values';\nimport Proj from '../Proj';\nimport { names as longLatNames } from './longlat';\n\n/**\n Original projection implementation:\n https://github.com/OSGeo/PROJ/blob/46c47e9adf6376ae06afabe5d24a0016a05ced82/src/projections/ob_tran.cpp\n\n Documentation:\n https://proj.org/operations/projections/ob_tran.html\n\n References/Formulas:\n https://pubs.usgs.gov/pp/1395/report.pdf\n\n Examples:\n +proj=ob_tran +o_proj=moll +o_lat_p=45 +o_lon_p=-90\n +proj=ob_tran +o_proj=moll +o_lat_p=45 +o_lon_p=-90 +lon_0=60\n +proj=ob_tran +o_proj=moll +o_lat_p=45 +o_lon_p=-90 +lon_0=-90\n*/\n\nconst projectionType = {\n OBLIQUE: {\n forward: forwardOblique,\n inverse: inverseOblique\n },\n TRANSVERSE: {\n forward: forwardTransverse,\n inverse: inverseTransverse\n }\n};\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} lamp\n * @property {number} cphip\n * @property {number} sphip\n * @property {Object} projectionType\n * @property {string | undefined} o_proj\n * @property {string | undefined} o_lon_p\n * @property {string | undefined} o_lat_p\n * @property {string | undefined} o_alpha\n * @property {string | undefined} o_lon_c\n * @property {string | undefined} o_lat_c\n * @property {string | undefined} o_lon_1\n * @property {string | undefined} o_lat_1\n * @property {string | undefined} o_lon_2\n * @property {string | undefined} o_lat_2\n * @property {number | undefined} oLongP\n * @property {number | undefined} oLatP\n * @property {number | undefined} oAlpha\n * @property {number | undefined} oLongC\n * @property {number | undefined} oLatC\n * @property {number | undefined} oLong1\n * @property {number | undefined} oLat1\n * @property {number | undefined} oLong2\n * @property {number | undefined} oLat2\n * @property {boolean} isIdentity\n * @property {import('..').Converter} obliqueProjection\n *\n */\n\n/**\n * Parameters can be from the following sets:\n * New pole --> o_lat_p, o_lon_p\n * Rotate about point --> o_alpha, o_lon_c, o_lat_c\n * New equator points --> lon_1, lat_1, lon_2, lat_2\n *\n * Per the original source code, the parameter sets are\n * checked in the order of the object below.\n */\nconst paramSets = {\n ROTATE: {\n o_alpha: 'oAlpha',\n o_lon_c: 'oLongC',\n o_lat_c: 'oLatC'\n },\n NEW_POLE: {\n o_lat_p: 'oLatP',\n o_lon_p: 'oLongP'\n },\n NEW_EQUATOR: {\n o_lon_1: 'oLong1',\n o_lat_1: 'oLat1',\n o_lon_2: 'oLong2',\n o_lat_2: 'oLat2'\n }\n};\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.long0 = this.long0 || 0;\n this.title = this.title || 'General Oblique Transformation';\n this.isIdentity = longLatNames.includes(this.o_proj);\n\n /** Verify required parameters exist */\n if (!this.o_proj) {\n throw new Error('Missing parameter: o_proj');\n }\n\n if (this.o_proj === `ob_tran`) {\n throw new Error('Invalid value for o_proj: ' + this.o_proj);\n }\n\n const newProjStr = this.projStr.replace('+proj=ob_tran', '').replace('+o_proj=', '+proj=').trim();\n\n /** @type {import('../defs.js').ProjectionDefinition} */\n const oProj = Proj(newProjStr);\n if (!oProj) {\n throw new Error('Invalid parameter: o_proj. Unknown projection ' + this.o_proj);\n }\n oProj.long0 = 0; // we handle long0 before/after forward/inverse\n this.obliqueProjection = oProj;\n\n let matchedSet;\n const paramSetsKeys = Object.keys(paramSets);\n\n /**\n * parse strings, convert to radians, throw on NaN\n * @param {string} name\n * @returns {number | undefined}\n */\n const parseParam = (name) => {\n if (typeof this[name] === `undefined`) {\n return undefined;\n }\n const val = parseFloat(this[name]) * D2R;\n if (isNaN(val)) {\n throw new Error('Invalid value for ' + name + ': ' + this[name]);\n }\n return val;\n };\n\n for (let i = 0; i < paramSetsKeys.length; i++) {\n const setKey = paramSetsKeys[i];\n const set = paramSets[setKey];\n const params = Object.entries(set);\n const setHasParams = params.some(\n ([p]) => typeof this[p] !== 'undefined'\n );\n if (!setHasParams) {\n continue;\n }\n matchedSet = set;\n for (let ii = 0; ii < params.length; ii++) {\n const [inputParam, param] = params[ii];\n const val = parseParam(inputParam);\n if (typeof val === 'undefined') {\n throw new Error('Missing parameter: ' + inputParam + '.');\n }\n this[param] = val;\n }\n break;\n }\n\n if (!matchedSet) {\n throw new Error('No valid parameters provided for ob_tran projection.');\n }\n\n const { lamp, phip } = createRotation(this, matchedSet);\n this.lamp = lamp;\n\n if (Math.abs(phip) > EPSLN) {\n this.cphip = Math.cos(phip);\n this.sphip = Math.sin(phip);\n this.projectionType = projectionType.OBLIQUE;\n } else {\n this.projectionType = projectionType.TRANSVERSE;\n }\n}\n\n// ob_tran forward equations--mapping (lat,long) to (x,y)\n// transverse (90 degrees from normal orientation) - forwardTransverse\n// or oblique (arbitrary angle) used based on parameters - forwardOblique\n// -----------------------------------------------------------------\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function forward(p) {\n return this.projectionType.forward(this, p);\n}\n\n// inverse equations--mapping (x,y) to (lat,long)\n// transverse: inverseTransverse\n// oblique: inverseOblique\n// -----------------------------------------------------------------\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function inverse(p) {\n return this.projectionType.inverse(this, p);\n}\n\n/**\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} params - Initialized projection definition\n * @param {Object} how - Transformation method\n * @returns {{phip: number, lamp: number}}\n */\nfunction createRotation(params, how) {\n let phip, lamp;\n if (how === paramSets.ROTATE) {\n let lamc = params.oLongC;\n let phic = params.oLatC;\n let alpha = params.oAlpha;\n if (Math.abs(Math.abs(phic) - HALF_PI) <= EPSLN) {\n throw new Error('Invalid value for o_lat_c: ' + params.o_lat_c + ' should be < 90°');\n }\n lamp = lamc + Math.atan2(-1 * Math.cos(alpha), -1 * Math.sin(alpha) * Math.sin(phic));\n phip = Math.asin(Math.cos(phic) * Math.sin(alpha));\n } else if (how === paramSets.NEW_POLE) {\n lamp = params.oLongP;\n phip = params.oLatP;\n } else {\n let lam1 = params.oLong1;\n let phi1 = params.oLat1;\n let lam2 = params.oLong2;\n let phi2 = params.oLat2;\n let con = Math.abs(phi1);\n\n if (Math.abs(phi1) > HALF_PI - EPSLN) {\n throw new Error('Invalid value for o_lat_1: ' + params.o_lat_1 + ' should be < 90°');\n }\n\n if (Math.abs(phi2) > HALF_PI - EPSLN) {\n throw new Error('Invalid value for o_lat_2: ' + params.o_lat_2 + ' should be < 90°');\n }\n\n if (Math.abs(phi1 - phi2) < EPSLN) {\n throw new Error('Invalid value for o_lat_1 and o_lat_2: o_lat_1 should be different from o_lat_2');\n }\n if (con < EPSLN) {\n throw new Error('Invalid value for o_lat_1: o_lat_1 should be different from zero');\n }\n\n lamp = Math.atan2(\n (Math.cos(phi1) * Math.sin(phi2) * Math.cos(lam1))\n - (Math.sin(phi1) * Math.cos(phi2) * Math.cos(lam2)),\n (Math.sin(phi1) * Math.cos(phi2) * Math.sin(lam2))\n - (Math.cos(phi1) * Math.sin(phi2) * Math.sin(lam1))\n );\n\n phip = Math.atan(-1 * Math.cos(lamp - lam1) / Math.tan(phi1));\n }\n\n return { lamp, phip };\n}\n\n/**\n * Forward (lng, lat) to (x, y) for oblique case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction forwardOblique(self, lp) {\n let { x: lam, y: phi } = lp;\n lam += self.long0;\n const coslam = Math.cos(lam);\n const sinphi = Math.sin(phi);\n const cosphi = Math.cos(phi);\n\n lp.x = adjust_lon(\n Math.atan2(\n cosphi * Math.sin(lam),\n (self.sphip * cosphi * coslam) + (self.cphip * sinphi)\n ) + self.lamp\n );\n lp.y = Math.asin(\n (self.sphip * sinphi) - (self.cphip * cosphi * coslam)\n );\n\n const result = self.obliqueProjection.forward(lp);\n if (self.isIdentity) {\n result.x *= R2D;\n result.y *= R2D;\n }\n return result;\n}\n\n/**\n * Forward (lng, lat) to (x, y) for transverse case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction forwardTransverse(self, lp) {\n let { x: lam, y: phi } = lp;\n lam += self.long0;\n const cosphi = Math.cos(phi);\n const coslam = Math.cos(lam);\n lp.x = adjust_lon(\n Math.atan2(\n cosphi * Math.sin(lam),\n Math.sin(phi)\n ) + self.lamp\n );\n lp.y = Math.asin(-1 * cosphi * coslam);\n\n const result = self.obliqueProjection.forward(lp);\n\n if (self.isIdentity) {\n result.x *= R2D;\n result.y *= R2D;\n }\n return result;\n}\n\n/**\n * Inverse (x, y) to (lng, lat) for oblique case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction inverseOblique(self, lp) {\n if (self.isIdentity) {\n lp.x *= D2R;\n lp.y *= D2R;\n }\n\n const innerLp = self.obliqueProjection.inverse(lp);\n let { x: lam, y: phi } = innerLp;\n\n if (lam < Number.MAX_VALUE) {\n lam -= self.lamp;\n const coslam = Math.cos(lam);\n const sinphi = Math.sin(phi);\n const cosphi = Math.cos(phi);\n lp.x = Math.atan2(\n cosphi * Math.sin(lam),\n (self.sphip * cosphi * coslam) - (self.cphip * sinphi)\n );\n lp.y = Math.asin(\n (self.sphip * sinphi) + (self.cphip * cosphi * coslam)\n );\n }\n\n lp.x = adjust_lon(lp.x + self.long0);\n return lp;\n}\n\n/**\n * Inverse (x, y) to (lng, lat) for transverse case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction inverseTransverse(self, lp) {\n if (self.isIdentity) {\n lp.x *= D2R;\n lp.y *= D2R;\n }\n\n const innerLp = self.obliqueProjection.inverse(lp);\n let { x: lam, y: phi } = innerLp;\n\n if (lam < Number.MAX_VALUE) {\n const cosphi = Math.cos(phi);\n lam -= self.lamp;\n lp.x = Math.atan2(\n cosphi * Math.sin(lam),\n -1 * Math.sin(phi)\n );\n lp.y = Math.asin(\n cosphi * Math.cos(lam)\n );\n }\n\n lp.x = adjust_lon(lp.x + self.long0);\n return lp;\n}\n\nexport var names = ['General Oblique Transformation', 'General_Oblique_Transformation', 'ob_tran'];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\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';\nimport ob_tran from './lib/projections/ob_tran';\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 proj4.Proj.projections.add(ob_tran);\n}\n","import core 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\n/**\n * @typedef {Object} Mgrs\n * @property {(lonlat: [number, number]) => string} forward\n * @property {(mgrsString: string) => [number, number, number, number]} inverse\n * @property {(mgrsString: string) => [number, number]} toPoint\n */\n\n/**\n * @typedef {import('./defs').ProjectionDefinition} ProjectionDefinition\n * @typedef {import('./core').TemplateCoordinates} TemplateCoordinates\n * @typedef {import('./core').InterfaceCoordinates} InterfaceCoordinates\n * @typedef {import('./core').Converter} Converter\n * @typedef {import('./Proj').DatumDefinition} DatumDefinition\n */\n\n/**\n * @template {import('./core').TemplateCoordinates} T\n * @type {core<T> & {defaultDatum: string, Proj: typeof Proj, WGS84: Proj, Point: typeof Point, toPoint: typeof common, defs: typeof defs, nadgrid: typeof nadgrid, transform: typeof transform, mgrs: Mgrs, version: string}}\n */\nconst proj4 = Object.assign(core, {\n defaultDatum: 'WGS84',\n Proj,\n WGS84: new Proj('WGS84'),\n Point,\n toPoint: common,\n defs,\n nadgrid,\n transform,\n mgrs,\n version: '__VERSION__'\n});\nincludedProjections(proj4);\nexport default proj4;\n"],"names":["globals","defs","PJD_3PARAM","PJD_7PARAM","PJD_GRIDSHIFT","PJD_WGS84","PJD_NODATUM","SRS_WGS84_SEMIMAJOR","SRS_WGS84_SEMIMINOR","SRS_WGS84_ESQUARED","SEC_TO_RAD","HALF_PI","SIXTH","RA4","RA6","EPSLN","D2R","R2D","FORTPI","TWO_PI","SPI","primeMeridian","units","ignoredChar","match","obj","key","keys","lkey","i","testkey","processedKey","projStr","defData","self","paramObj","v","a","p","split","paramName","paramVal","paramOutname","params","unit","pm","PrimeMeridian","legalAxis","PROJJSONBuilderBase","node","idNode","child","type","name","conversionFactor","id","direction","abbreviationMatch","abbreviation","orderNode","order","unitNode","axis","b","result","csNode","lengthUnitNode","datumOrEnsembleNode","datumOrEnsemble","primem","member","accuracyNode","ellipsoidNode","param","sourceCrsNode","sourceCrsContent","targetCrsNode","targetCrsContent","transformationNode","scaleDifference","PROJJSONBuilder2015","PROJJSONBuilder2019","usageNode","scope","area","bbox","detectWKT2Version","root","buildPROJJSON","detectWKTVersion","wkt","normalizedWKT","NEUTRAL","KEYWORD","NUMBER","QUOTED","AFTERQUOTE","ENDED","whitespace","latin","keyword","endThings","digets","Parser","text","char","newObjects","parseString","txt","parser","mapit","value","thing","out","newObj","item","sExpr","d2r","input","applyProjectionDefaults","normalizedProjName","processUnit","toValue","valueOrObject","calculateEllipsoid","transformPROJJSON","projjson","to_meter","paramValue","knownTypes","rename","outName","inName","cleanWKT","ii","setPropertiesFromWkt","authority","axisOrder","geogcs","toMeter","ratio","renamer","list","version","lisp","that","def","parseProj","testObj","code","testDef","testWKT","codes","checkMercator","auth","checkProjStr","ext","testProj","parse","maybeProjStr","extend","destination","source","property","msfnz","eccent","sinphi","cosphi","con","sign","x","adjust_lon","skipAdjust","tsfnz","phi","com","phi2z","ts","eccnth","dphi","init","forward","lon","lat","y","inverse","names","merc","identity","pt","longlat","projs","projStore","add","proj","len","n","getNormalizedProjName","get","start","projections","ellipsoids","WGS84","Ellipsoid","eccentricity","rf","R_A","a2","b2","es","e","ep2","sphere","ellps","ellipse","datums","datum","datumCode","datum_params","nadgrids","loadedNadgrids","nadgrid","data","options","readNTV2Grid","readGeotiffGrid","includeErrorFields","view","isLittleEndian","detectLittleEndian","header","readHeader","subgrids","readSubgrids","tiff","subGridCount","subgridIndex","image","rasters","lim","imageBBoxRadians","degreesToRadians","del","maxX","minY","latitudeOffsetBand","longitudeOffsetBand","nodes","j","index","secondsToRadians","tifGrid","getNadgrids","grids","parseNadgridString","optional","degrees","seconds","nFields","decodeString","end","gridOffset","subHeader","readGridHeader","readGridNodes","lngColumnCount","latColumnCount","mapNodes","rowSize","r","offset","gridHeader","nodesOffset","gridRecordLength","gridShiftRecords","record","Projection","srsCode","callback","error","json","parseCode","ourProj","datumDef","Datum","sphere_","dc_sphere","ecc","dc_eccentricity","datumObj","compareDatums","dest","geodeticToGeocentric","Longitude","Latitude","Height","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","geocentricToGeodetic","genau","genau2","maxiter","P","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","iter","X","Y","Z","geocentricToWgs84","datum_type","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","geocentricFromWgs84","x_tmp","y_tmp","z_tmp","checkParams","datum_transform","point","source_a","source_es","gridShiftCode","applyGridShift","dest_a","dest_b","dest_es","destGridShiftResult","output","attemptedGrids","outer","grid","jj","subgrid","epsilon","minX","maxY","applySubgridShift","pin","ct","val","tb","t","nadInterpolate","tol","dif","indx","frct","inx","f00","f10","f11","f01","m11","m10","m00","m01","adjust_axis","crs","denorm","xin","yin","zin","common","array","checkSanity","checkCoord","num","checkNotWGS","transform","enforceAxis","wgs84","toPoint","hasZ","transformer","from","to","coords","transformedArray","checkProj","proj4","fromProjOrToProj","toProjOrCoord","coord","fromProj","toProj","single","NUM_100K_SETS","SET_ORIGIN_COLUMN_LETTERS","SET_ORIGIN_ROW_LETTERS","A","I","O","V","mgrs","ll","accuracy","encode","LLtoUTM","UTMtoLL","decode","degToRad","deg","radToDeg","rad","Lat","Long","eccSquared","k0","LongOrigin","eccPrimeSquared","N","T","C","M","LatRad","LongRad","LongOriginRad","ZoneNumber","UTMEasting","UTMNorthing","getLetterDesignator","utm","zoneLetter","zoneNumber","e1","N1","T1","C1","R1","D","mu","phi1Rad","topRight","LetterDesignator","seasting","snorthing","get100kID","easting","northing","setParm","get100kSetForZone","setColumn","setRow","getLetter100kID","column","row","parm","colOrigin","rowOrigin","colInt","rowInt","rollover","twoLetter","mgrsString","length","hunK","sb","testChar","set","east100k","getEastingFromChar","north100k","getNorthingFromChar","getMinNorthing","remainder","sep","sepEasting","sepNorthing","accuracyBonus","sepEastingString","sepNorthingString","curCol","eastingValue","rewindMarker","curRow","northingValue","Point","z","mgrsStr","C00","C02","C04","C06","C08","C22","C44","C46","C48","C66","C68","C88","pj_enfn","en","pj_mlfn","sphi","cphi","MAX_ITER","pj_inv_mlfn","arg","k","s","delta_lon","sin_phi","cos_phi","al","als","c","cs","tq","ml","tan_phi","d","ds","f","g","temp","h","tmerc","sinh","hypot","log1py","asinhy","gatg","pp","B","cos_2B","h1","h2","clens","arg_r","hr1","hr2","hr","cosh","clens_cmplx","arg_i","sin_arg_r","cos_arg_r","sinh_arg_i","cosh_arg_i","hi1","hi","hi2","np","Ce","Cn","sin_Cn","cos_Cn","sin_Ce","cos_Ce","tmp","etmerc","adjust_zone","zone","dependsOn","srat","esinp","exp","DEL_TOL","gauss","sinc","cosc","cosl","rho","sterea","ssfn_","phit","eccen","sinlat","coslat","sinX","cosX","rh","dlon","ce","Chi","stere","phy0","sinPhy0","semiMajorAxis","invF","flattening","e2","k1","k2","k3","Sa1","Sa2","S","rotI","rotB","lambda","phy","prevPhy","iteration","somerc","TOL","isTypeA","typeAProjections","projectionName","cosph0","F","H","L","sinph0","J","gamma","gamma0","lamc","lam1","lam2","phi1","phi2","alpha_c","alp","gam","one_es","U","W","u","Qp","Sp","Tp","Vp","Up","omerc","sin1","cos1","ms1","ts1","sin2","cos2","ms2","ts2","ts0","rh1","theta","lcc","gfi","deltav","eps","ro","fi1","ok","krovak","mlfn","e0","e3","e0fn","e1fn","e2fn","e3fn","gN","adjust_lat","imlfn","lam","nl","tl","asq","cl","dd","ml1","nl1","rl1","tl1","dl","dsq","cass","qsfnz","S_POLE","N_POLE","EQUIT","OBLIQ","authset","coslam","sinlam","q","sinb","cosb","cCe","sCe","ab","cosz","sinz","authlat","P00","P01","P02","P10","P11","P20","APA","beta","laea","asinz","qs","phi1z","eccnts","aea","coslon","ksp","gnom","iqsfnz","cea","dlat","eqc","el","bl","tanphi","mln","mlnp","ma","poly","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_re","th_im","th_n_re","th_n_im","th_n_re1","th_n_im1","z_re","z_im","delta_x","delta_y","z_n_re","z_n_im","z_n_re1","z_n_im1","num_re","num_im","den_re","den_im","den2","d_psi_n","nzmg","mill","sinu","delta_theta","moll","eqdc","sinth","costh","gsq","m","msq","xx","yy","xys","c1","c2","c3","a1","m1","th1","vandg","vincentyInverse","lat1","lon1","lat2","lon2","U1","U2","sinU1","cosU1","sinU2","cosU2","lambdaP","iterLimit","sinLambda","cosLambda","sinSigma","cosSigma","sigma","sinAlpha","cos2Alpha","cos2SigmaM","uSq","deltaSigma","vincentyDirect","azi1","s12","sinAlpha1","cosAlpha1","sigma1","sigmaP","Mlp","Ml","kp","cos_c","vars","aeqd","ortho","FACE_ENUM","AREA_ENUM","xy","sinlon","qsc_shift_lon_origin","qsc_fwd_equat_face_theta","lp","nu","cosmu","tannu","tantheta","invert_sign","xa","slon","qsc","COEFS_X","COEFS_Y","FXC","FYC","RC1","NODES","poly3_val","coefs","poly3_der","newton_rapshon","f_df","max_err","iters","upd","robin","geocent","mode","omega","yt","ba","bm","bq","tpers","rone_es","v_x","v_y","v_z","det","v_zp","geos","A1","A2","A3","A4","paramLat","paramLatSq","paramLatPow6","EPS","NITER","fy","fpy","eqearth","EPS10","e_inv","e_fwd","s_inv","s_fwd","E","bonne","projectionType","forwardOblique","inverseOblique","forwardTransverse","inverseTransverse","paramSets","longLatNames","newProjStr","oProj","Proj","matchedSet","paramSetsKeys","parseParam","setKey","inputParam","lamp","phip","createRotation","how","phic","alpha","innerLp","ob_tran","includedProjections","core"],"mappings":"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AAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,aAAa;AAAA,IACX,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,aAAa;AAAA,IACX,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,S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CT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,aAAa;AAAA,IACX,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IA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AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;AAAA,IACT,SAAS;AAAA,EACb;AAAA,EACE,WAAW;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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]}
|