UNPKG

517 kBSource Map (JSON)View Raw
1{"version":3,"file":"covutils-lite.src.js","sources":["src/array.js","src/constants.js","src/i18n.js","src/unit.js","../../../../../\u0000babelHelpers","src/range.js","src/parameter.js","src/validate.js","../../../../../\u0000commonjsHelpers","node_modules/uriproj/node_modules/proj4/lib/common/imlfn.js","node_modules/uriproj/node_modules/proj4/lib/common/asinz.js","node_modules/uriproj/node_modules/proj4/lib/common/gN.js","node_modules/uriproj/node_modules/proj4/lib/common/e3fn.js","node_modules/uriproj/node_modules/proj4/lib/common/e2fn.js","node_modules/uriproj/node_modules/proj4/lib/common/e1fn.js","node_modules/uriproj/node_modules/proj4/lib/common/e0fn.js","node_modules/uriproj/node_modules/proj4/lib/common/mlfn.js","node_modules/uriproj/node_modules/proj4/lib/common/sign.js","node_modules/uriproj/node_modules/proj4/lib/common/adjust_lon.js","node_modules/uriproj/node_modules/proj4/lib/projections/aeqd.js","node_modules/uriproj/node_modules/proj4/lib/projections/vandg.js","node_modules/uriproj/node_modules/proj4/lib/common/adjust_lat.js","node_modules/uriproj/node_modules/proj4/lib/common/msfnz.js","node_modules/uriproj/node_modules/proj4/lib/projections/eqdc.js","node_modules/uriproj/node_modules/proj4/lib/projections/moll.js","node_modules/uriproj/node_modules/proj4/lib/common/pj_mlfn.js","node_modules/uriproj/node_modules/proj4/lib/common/pj_inv_mlfn.js","node_modules/uriproj/node_modules/proj4/lib/common/pj_enfn.js","node_modules/uriproj/node_modules/proj4/lib/projections/sinu.js","node_modules/uriproj/node_modules/proj4/lib/projections/mill.js","node_modules/uriproj/node_modules/proj4/lib/projections/nzmg.js","node_modules/uriproj/node_modules/proj4/lib/projections/poly.js","node_modules/uriproj/node_modules/proj4/lib/projections/eqc.js","node_modules/uriproj/node_modules/proj4/lib/common/iqsfnz.js","node_modules/uriproj/node_modules/proj4/lib/common/qsfnz.js","node_modules/uriproj/node_modules/proj4/lib/projections/cea.js","node_modules/uriproj/node_modules/proj4/lib/projections/gnom.js","node_modules/uriproj/node_modules/proj4/lib/projections/aea.js","node_modules/uriproj/node_modules/proj4/lib/projections/laea.js","node_modules/uriproj/node_modules/proj4/lib/projections/cass.js","node_modules/uriproj/node_modules/proj4/lib/projections/krovak.js","node_modules/uriproj/node_modules/proj4/lib/common/phi2z.js","node_modules/uriproj/node_modules/proj4/lib/common/tsfnz.js","node_modules/uriproj/node_modules/proj4/lib/projections/lcc.js","node_modules/uriproj/node_modules/proj4/lib/projections/omerc.js","node_modules/uriproj/node_modules/proj4/lib/projections/somerc.js","node_modules/uriproj/node_modules/proj4/lib/projections/stere.js","node_modules/uriproj/node_modules/proj4/lib/common/srat.js","node_modules/uriproj/node_modules/proj4/lib/projections/gauss.js","node_modules/uriproj/node_modules/proj4/lib/projections/sterea.js","node_modules/uriproj/node_modules/proj4/lib/projections/tmerc.js","node_modules/uriproj/node_modules/proj4/lib/projections/utm.js","node_modules/uriproj/node_modules/proj4/lib/includedProjections.js","node_modules/uriproj/node_modules/proj4/package.json","node_modules/uriproj/node_modules/proj4/node_modules/mgrs/mgrs.js","node_modules/uriproj/node_modules/proj4/lib/common/toPoint.js","node_modules/uriproj/node_modules/proj4/lib/datum.js","node_modules/uriproj/node_modules/proj4/lib/extend.js","node_modules/uriproj/node_modules/proj4/lib/constants/Ellipsoid.js","node_modules/uriproj/node_modules/proj4/lib/constants/Datum.js","node_modules/uriproj/node_modules/proj4/lib/deriveConstants.js","node_modules/uriproj/node_modules/proj4/lib/projections/longlat.js","node_modules/uriproj/node_modules/proj4/lib/projections/merc.js","node_modules/uriproj/node_modules/proj4/lib/projections.js","node_modules/uriproj/node_modules/proj4/lib/constants/units.js","node_modules/uriproj/node_modules/proj4/lib/constants/PrimeMeridian.js","node_modules/uriproj/node_modules/proj4/lib/projString.js","node_modules/uriproj/node_modules/proj4/lib/wkt.js","node_modules/uriproj/node_modules/proj4/lib/global.js","node_modules/uriproj/node_modules/proj4/lib/defs.js","node_modules/uriproj/node_modules/proj4/lib/parseCode.js","node_modules/uriproj/node_modules/proj4/lib/Proj.js","node_modules/uriproj/node_modules/proj4/lib/adjust_axis.js","node_modules/uriproj/node_modules/proj4/lib/datum_transform.js","node_modules/uriproj/node_modules/proj4/lib/transform.js","node_modules/uriproj/node_modules/proj4/lib/Point.js","node_modules/uriproj/node_modules/proj4/lib/core.js","node_modules/uriproj/node_modules/proj4/lib/index.js","node_modules/uriproj/node_modules/whatwg-fetch/fetch.js","node_modules/uriproj/lib/index.js","src/domain/referencing.js","src/domain/subset.js","src/coverage/subset.js","src/coverage/create.js","src/util.js","src/coverage/referencing.js","src/coverage/transform.js","src/collection/create.js"],"sourcesContent":["export function minMax (arr) {\r\n var len = arr.length\r\n var min = Infinity\r\n var max = -Infinity\r\n while (len--) {\r\n var el = arr[len]\r\n if (el == null) {\r\n // do nothing\r\n } else if (el < min) {\r\n min = el\r\n } else if (el > max) {\r\n max = el\r\n }\r\n }\r\n if (min === Infinity) {\r\n min = max\r\n } else if (max === -Infinity) {\r\n max = min\r\n }\r\n if (min === Infinity || min === -Infinity) {\r\n // all values were null\r\n min = null\r\n max = null\r\n }\r\n return [min, max]\r\n}\r\n\r\n/**\r\n * Return the indices of the two neighbors in the sorted array closest to the given number.\r\n *\r\n * @example\r\n * var a = [2,5,8,12,13]\r\n * var i = CovUtils.indicesOfNearest(a, 6)\r\n * // i == [1,2]\r\n * var j = CovUtils.indicesOfNearest(a, 5)\r\n * // j == [1,1]\r\n * var k = CovUtils.indicesOfNearest(a, 50)\r\n * // k == [4,4]\r\n *\r\n * @param {Array<number>} a The array to search through. Must be sorted, ascending or descending.\r\n * @param {number} x The target number.\r\n * @return {[lo,hi]} The indices of the two closest values, may be equal.\r\n * If `x` exists in the array, both neighbors point to `x`.\r\n * If `x` is lower (greater if descending) than the first value, both neighbors point to 0.\r\n * If `x` is greater (lower if descending) than the last value, both neighbors point to the last index.\r\n */\r\nexport function indicesOfNearest (a, x) {\r\n if (a.length === 0) {\r\n throw new Error('Array must have at least one element')\r\n }\r\n var lo = -1\r\n var hi = a.length\r\n const ascending = a.length === 1 || a[0] < a[1]\r\n // we have two separate code paths to help the runtime optimize the loop\r\n if (ascending) {\r\n while (hi - lo > 1) {\r\n let mid = Math.round((lo + hi) / 2)\r\n if (a[mid] <= x) {\r\n lo = mid\r\n } else {\r\n hi = mid\r\n }\r\n }\r\n } else {\r\n while (hi - lo > 1) {\r\n let mid = Math.round((lo + hi) / 2)\r\n if (a[mid] >= x) { // here's the difference\r\n lo = mid\r\n } else {\r\n hi = mid\r\n }\r\n }\r\n }\r\n if (a[lo] === x) hi = lo\r\n if (lo === -1) lo = hi\r\n if (hi === a.length) hi = lo\r\n return [lo, hi]\r\n}\r\n\r\n/**\r\n * Return the index of the value closest to the given number in a sorted array.\r\n *\r\n * @example\r\n * var a = [2,5,8,12,13]\r\n * var i = CovUtils.indexOfNearest(a, 6)\r\n * // i == 1\r\n * var j = CovUtils.indexOfNearest(a, 7)\r\n * // j == 2\r\n * var k = CovUtils.indexOfNearest(a, 50)\r\n * // k == 4\r\n *\r\n * @param {Array<number>} a The array to search through. Must be sorted, ascending or descending.\r\n * @param {number} x The target number.\r\n * @return {number} The array index whose value is closest to `x`.\r\n * If `x` happens to be exactly between two values, then the lower index is returned.\r\n */\r\nexport function indexOfNearest (a, x) {\r\n var i = indicesOfNearest(a, x)\r\n var lo = i[0]\r\n var hi = i[1]\r\n if (Math.abs(x - a[lo]) <= Math.abs(x - a[hi])) {\r\n return lo\r\n } else {\r\n return hi\r\n }\r\n}\r\n","export const DOMAIN = 'Domain'\r\nexport const COVERAGE = 'Coverage'\r\nexport const COVERAGECOLLECTION = COVERAGE + 'Collection'\r\n\r\nconst COVJSON_NS = 'http://covjson.org/def/core#'\r\n\r\nexport const COVJSON_DATATYPE_TUPLE = COVJSON_NS + 'tuple'\r\nexport const COVJSON_DATATYPE_POLYGON = COVJSON_NS + 'polygon'\r\n","const DEFAULT_LANGUAGE = 'en'\r\n\r\n/**\r\n * @example\r\n * var labels = {'en': 'Temperature', 'de': 'Temperatur'}\r\n * var tag = CovUtils.getLanguageTag(labels, 'en-GB')\r\n * // tag == 'en'\r\n *\r\n * @param {object} map An object that maps language tags to strings.\r\n * @param {string} [preferredLanguage='en'] The preferred language as a language tag, e.g. 'de'.\r\n * @return {string} The best matched language tag of the input map.\r\n * If no match was found then this is an arbitrary tag of the map.\r\n */\r\nexport function getLanguageTag (map, preferredLanguage = DEFAULT_LANGUAGE) {\r\n if (preferredLanguage in map) {\r\n return preferredLanguage\r\n }\r\n\r\n // cut off any subtags following the language subtag and try to find a match\r\n let prefTag = preferredLanguage.split('-')[0]\r\n let matches = Object.keys(map).filter(tag => prefTag === tag.split('-')[0])\r\n if (matches.length) {\r\n return matches[0]\r\n }\r\n\r\n // no luck, return a random tag\r\n return Object.keys(map)[0]\r\n}\r\n\r\n/**\r\n * @example\r\n * var labels = {'en': 'Temperature', 'de': 'Temperatur'}\r\n * var label = CovUtils.getLanguageString(labels, 'en-GB')\r\n * // label == 'Temperature'\r\n *\r\n * @param {object} map An object that maps language tags to strings.\r\n * @param {string} [preferredLanguage='en'] The preferred language as a language tag, e.g. 'de'.\r\n * @return {string} The string within the input map whose language tag best matched.\r\n * If no match was found then this is an arbitrary string of the map.\r\n */\r\nexport function getLanguageString (map, preferredLanguage = DEFAULT_LANGUAGE) {\r\n let tag = getLanguageTag(map, preferredLanguage)\r\n return map[tag]\r\n}\r\n","import { getLanguageString } from './i18n.js'\r\n\r\n/**\r\n * Converts a unit object to a human-readable symbol or label, where symbols are preferred.\r\n *\r\n * @example\r\n * var unit = {\r\n * symbol: '°C'\r\n * }\r\n * var str = CovUtils.stringifyUnit(unit) // str == '°C'\r\n *\r\n * @example\r\n * var unit = {\r\n * symbol: {\r\n * value: 'Cel',\r\n * type: 'http://www.opengis.net/def/uom/UCUM/'\r\n * },\r\n * label: {\r\n * en: 'Degree Celsius'\r\n * }\r\n * }\r\n * var str = CovUtils.stringifyUnit(unit) // str == '°C'\r\n *\r\n * @example\r\n * var unit = {\r\n * label: {\r\n * en: 'Degree Celsius',\r\n * de: 'Grad Celsius'\r\n * }\r\n * }\r\n * var str = CovUtils.stringifyUnit(unit, 'en') // str == 'Degree Celsius'\r\n */\r\nexport function stringifyUnit (unit, language) {\r\n if (!unit) {\r\n return ''\r\n }\r\n if (unit.symbol) {\r\n let symbol = unit.symbol.value || unit.symbol\r\n let scheme = unit.symbol.type\r\n if (scheme === 'http://www.opengis.net/def/uom/UCUM/') {\r\n if (symbol === 'Cel') {\r\n symbol = '°C'\r\n } else if (symbol === '1') {\r\n symbol = ''\r\n }\r\n }\r\n return symbol\r\n } else {\r\n return getLanguageString(unit.label, language)\r\n }\r\n}\r\n","var babelHelpers = {};\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n};\n\nexport var jsx = function () {\n var REACT_ELEMENT_TYPE = typeof Symbol === \"function\" && Symbol.for && Symbol.for(\"react.element\") || 0xeac7;\n return function createRawReactElement(type, props, key, children) {\n var defaultProps = type && type.defaultProps;\n var childrenLength = arguments.length - 3;\n\n if (!props && childrenLength !== 0) {\n props = {};\n }\n\n if (props && defaultProps) {\n for (var propName in defaultProps) {\n if (props[propName] === void 0) {\n props[propName] = defaultProps[propName];\n }\n }\n } else if (!props) {\n props = defaultProps || {};\n }\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n\n props.children = childArray;\n }\n\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key === undefined ? null : '' + key,\n ref: null,\n props: props,\n _owner: null\n };\n };\n}();\n\nexport var asyncToGenerator = function (fn) {\n return function () {\n var gen = fn.apply(this, arguments);\n return new Promise(function (resolve, reject) {\n function step(key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n return Promise.resolve(value).then(function (value) {\n return step(\"next\", value);\n }, function (err) {\n return step(\"throw\", err);\n });\n }\n }\n\n return step(\"next\");\n });\n };\n};\n\nexport var classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nexport var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nexport var defineEnumerableProperties = function (obj, descs) {\n for (var key in descs) {\n var desc = descs[key];\n desc.configurable = desc.enumerable = true;\n if (\"value\" in desc) desc.writable = true;\n Object.defineProperty(obj, key, desc);\n }\n\n return obj;\n};\n\nexport var defaults = function (obj, defaults) {\n var keys = Object.getOwnPropertyNames(defaults);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = Object.getOwnPropertyDescriptor(defaults, key);\n\n if (value && value.configurable && obj[key] === undefined) {\n Object.defineProperty(obj, key, value);\n }\n }\n\n return obj;\n};\n\nexport var defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nexport var get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nexport var inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar _instanceof = function (left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n};\n\nexport var interopRequireDefault = function (obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n};\n\nexport var interopRequireWildcard = function (obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n return newObj;\n }\n};\n\nexport var newArrowCheck = function (innerThis, boundThis) {\n if (innerThis !== boundThis) {\n throw new TypeError(\"Cannot instantiate an arrow function\");\n }\n};\n\nexport var objectDestructuringEmpty = function (obj) {\n if (obj == null) throw new TypeError(\"Cannot destructure undefined\");\n};\n\nexport var objectWithoutProperties = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nexport var possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nexport var selfGlobal = typeof global === \"undefined\" ? self : global;\n\nexport var set = function set(object, property, value, receiver) {\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent !== null) {\n set(parent, property, value, receiver);\n }\n } else if (\"value\" in desc && desc.writable) {\n desc.value = value;\n } else {\n var setter = desc.set;\n\n if (setter !== undefined) {\n setter.call(receiver, value);\n }\n }\n\n return value;\n};\n\nexport var slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\nexport var slicedToArrayLoose = function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n var _arr = [];\n\n for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {\n _arr.push(_step.value);\n\n if (i && _arr.length === i) break;\n }\n\n return _arr;\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n};\n\nexport var taggedTemplateLiteral = function (strings, raw) {\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n};\n\nexport var taggedTemplateLiteralLoose = function (strings, raw) {\n strings.raw = raw;\n return strings;\n};\n\nexport var temporalRef = function (val, name, undef) {\n if (val === undef) {\n throw new ReferenceError(name + \" is not defined - temporal dead zone\");\n } else {\n return val;\n }\n};\n\nexport var temporalUndefined = {};\n\nexport var toArray = function (arr) {\n return Array.isArray(arr) ? arr : Array.from(arr);\n};\n\nexport var toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nbabelHelpers;\n\nexport { _typeof as typeof, _extends as extends, _instanceof as instanceof }","/**\r\n * @external {Range} https://github.com/Reading-eScience-Centre/coverage-jsapi/blob/master/Range.md\r\n */\r\n\r\n/**\r\n * Return the minimum/maximum across all range values, ignoring null's.\r\n *\r\n * @param {Range<number>} range The numeric coverage data range.\r\n * @return {[min,max]} The minimum and maximum values of the range,\r\n * or [undefined, undefined] if the range contains only `null` values.\r\n */\r\nexport function minMaxOfRange (range) {\r\n let min = Infinity\r\n let max = -Infinity\r\n let fn = val => {\r\n if (val === null) return\r\n if (val < min) min = val\r\n if (val > max) max = val\r\n }\r\n iterateRange(range, fn)\r\n return min === Infinity ? [undefined, undefined] : [min, max]\r\n}\r\n\r\n/**\r\n * Apply a reduce function over the range values.\r\n *\r\n * @param {Range} range The coverage data range.\r\n * @param {function} callback Function to execute on each value in the array with arguments `(previousValue, currentValue)`.\r\n * @param start Value to use as the first argument to the first call of the `callback`.\r\n * @return The reduced value.\r\n */\r\nexport function reduceRange (range, callback, start) {\r\n let v1 = start\r\n let iterFn = v2 => {\r\n v1 = callback(v1, v2)\r\n }\r\n iterateRange(range, iterFn)\r\n return v1\r\n}\r\n\r\n/**\r\n * Iterate over all range values and run a function for each value.\r\n * No particular iteration order must be assumed.\r\n */\r\nexport function iterateRange (range, fn) {\r\n // We use a precompiled function here for efficiency.\r\n // See below for a slower recursive version.\r\n\r\n // Benchmarks compared to recursive version:\r\n // Chrome 46: around 1.03x faster\r\n // Firefox 42: around 2x faster (and around 6x faster than Chrome 46!)\r\n\r\n // nest loops from smallest to biggest\r\n let shape = [...range.shape]\r\n shape.sort(([, size1], [, size2]) => size1 - size2)\r\n\r\n let begin = 'var obj = {}'\r\n let end = ''\r\n for (let [axis, size] of shape) {\r\n begin += `\r\n for (var i${axis}=0; i${axis} < ${size}; ++i${axis}) {\r\n obj['${axis}'] = i${axis}\r\n `\r\n end += `}`\r\n }\r\n begin += `\r\n fn(get(obj))\r\n `\r\n\r\n let iterateLoop = new Function(`return function iterRange (get, fn) { ${begin} ${end} }`)() // eslint-disable-line\r\n iterateLoop(range.get, fn)\r\n}\r\n\r\n/*\r\n * Recursive version of iterate(). For reference only.\r\n *\r\nexport function iterate (range, fn) {\r\n let get = range.get\r\n let shape = [...range.shape]\r\n // iterate from smallest to biggest dimension\r\n shape.sort(([,size1], [,size2]) => size1 - size2)\r\n let dims = shape.length\r\n\r\n function iterateRecurse (obj, axisIdx) {\r\n if (dims === axisIdx) {\r\n fn(get(obj))\r\n } else {\r\n let [axis,size] = shape[axisIdx]\r\n for (let i=0; i < size; i++) {\r\n obj[axis] = i\r\n iterateRecurse(obj, axisIdx+1)\r\n }\r\n }\r\n }\r\n iterateRecurse({}, 0)\r\n}\r\n*/\r\n","/**\r\n * Returns the category of the given parameter corresponding to the encoded integer value.\r\n *\r\n * @param {Parameter} parameter\r\n * @param {number} val\r\n * @return {Category}\r\n */\r\nexport function getCategory (parameter, val) {\r\n for (let [catId, vals] of parameter.categoryEncoding) {\r\n if (vals.indexOf(val) !== -1) {\r\n let cat = parameter.observedProperty.categories.filter(c => c.id === catId)[0]\r\n return cat\r\n }\r\n }\r\n}\r\n","import { COVERAGE, DOMAIN } from './constants.js'\r\n\r\nexport function isCoverage (obj) {\r\n return obj.type === COVERAGE\r\n}\r\n\r\nexport function checkCoverage (obj) {\r\n if (!isCoverage(obj)) {\r\n throw new Error('must be a Coverage')\r\n }\r\n}\r\n\r\nexport function isDomain (obj) {\r\n return obj.type === DOMAIN\r\n}\r\n\r\nexport function checkDomain (obj) {\r\n if (!isDomain(obj)) {\r\n throw new Error('must be a Domain')\r\n }\r\n}\r\n","\nexport var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}\n\nexport function createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}","module.exports = function(ml, e0, e1, e2, e3) {\n var phi;\n var dphi;\n\n phi = ml / e0;\n for (var i = 0; i < 15; i++) {\n dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n return NaN;\n};","module.exports = function(x) {\n if (Math.abs(x) > 1) {\n x = (x > 1) ? 1 : -1;\n }\n return Math.asin(x);\n};","module.exports = function(a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n};","module.exports = function(x) {\n return (x * x * x * (35 / 3072));\n};","module.exports = function(x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n};","module.exports = function(x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n};","module.exports = function(x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n};","module.exports = function(e0, e1, e2, e3, phi) {\n return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n};","module.exports = function(x) {\n return x<0 ? -1 : 1;\n};","var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nvar SPI = 3.14159265359;\nvar sign = require('./sign');\n\nmodule.exports = function(x) {\n return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n};","var adjust_lon = require('../common/adjust_lon');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar mlfn = require('../common/mlfn');\nvar e0fn = require('../common/e0fn');\nvar e1fn = require('../common/e1fn');\nvar e2fn = require('../common/e2fn');\nvar e3fn = require('../common/e3fn');\nvar gN = require('../common/gN');\nvar asinz = require('../common/asinz');\nvar imlfn = require('../common/imlfn');\nexports.init = function() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n};\n\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var dlon = adjust_lon(lon - this.long0);\n var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n if (this.sphere) {\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n return p;\n }\n else {\n //default case\n cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n c = Math.acos(cos_c);\n kp = c / Math.sin(c);\n p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n return p;\n }\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n return p;\n }\n else {\n //Default case\n tanphi = sinphi / cosphi;\n Nl1 = gN(this.a, this.e, this.sin_p12);\n Nl = gN(this.a, this.e, sinphi);\n psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n if (Az === 0) {\n s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else {\n s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n }\n G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n GH = G * H;\n Hs = H * H;\n s2 = s * s;\n s3 = s2 * s;\n s4 = s3 * s;\n s5 = s4 * s;\n c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n p.x = this.x0 + c * Math.sin(Az);\n p.y = this.y0 + c * Math.cos(Az);\n return p;\n }\n }\n\n\n};\n\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F;\n if (this.sphere) {\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (rh > (2 * HALF_PI * this.a)) {\n return;\n }\n z = rh / this.a;\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n }\n else {\n lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n }\n else {\n /*con = cosz - this.sin_p12 * Math.sin(lat);\n if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n //no-op, just keep the lon value as is\n } else {\n var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n }*/\n lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = Mlp - rh;\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = rh - Mlp;\n\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n //default case\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n Az = Math.atan2(p.x, p.y);\n N1 = gN(this.a, this.e, this.sin_p12);\n cosAz = Math.cos(Az);\n tmp = this.e * this.cos_p12 * cosAz;\n A = -tmp * tmp / (1 - this.es);\n B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n D = rh / N1;\n Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es));\n p.x = lon;\n p.y = lat;\n return p;\n }\n }\n\n};\nexports.names = [\"Azimuthal_Equidistant\", \"aeqd\"];\n","var adjust_lon = require('../common/adjust_lon');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar asinz = require('../common/asinz');\n/* Initialize the Van Der Grinten projection\n ----------------------------------------*/\nexports.init = function() {\n //this.R = 6370997; //Radius of earth\n this.R = this.a;\n};\n\nexports.forward = function(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x, y;\n\n if (Math.abs(lat) <= EPSLN) {\n x = this.x0 + this.R * dlon;\n y = this.y0;\n }\n var theta = asinz(2 * Math.abs(lat / Math.PI));\n if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n x = this.x0;\n if (lat >= 0) {\n y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n }\n else {\n y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n }\n // return(OK);\n }\n var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n var asq = al * al;\n var sinth = Math.sin(theta);\n var costh = Math.cos(theta);\n\n var g = costh / (sinth + costh - 1);\n var gsq = g * g;\n var m = g * (2 / sinth - 1);\n var msq = m * m;\n var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n if (dlon < 0) {\n con = -con;\n }\n x = this.x0 + con;\n //con = Math.abs(con / (Math.PI * this.R));\n var q = asq + g;\n con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n if (lat >= 0) {\n //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 + con;\n }\n else {\n //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 - con;\n }\n p.x = x;\n p.y = y;\n return p;\n};\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n ---------------------------------------------------------*/\nexports.inverse = function(p) {\n var lon, lat;\n var xx, yy, xys, c1, c2, c3;\n var a1;\n var m1;\n var con;\n var th1;\n var d;\n\n /* inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n con = Math.PI * this.R;\n xx = p.x / con;\n yy = p.y / con;\n xys = xx * xx + yy * yy;\n c1 = -Math.abs(yy) * (1 + xys);\n c2 = c1 - 2 * yy * yy + xx * xx;\n c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n m1 = 2 * Math.sqrt(-a1 / 3);\n con = ((3 * d) / a1) / m1;\n if (Math.abs(con) > 1) {\n if (con >= 0) {\n con = 1;\n }\n else {\n con = -1;\n }\n }\n th1 = Math.acos(con) / 3;\n if (p.y >= 0) {\n lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n else {\n lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n\n if (Math.abs(xx) < EPSLN) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];","var HALF_PI = Math.PI/2;\nvar sign = require('./sign');\n\nmodule.exports = function(x) {\n return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n};","module.exports = function(eccent, sinphi, cosphi) {\n var con = eccent * sinphi;\n return cosphi / (Math.sqrt(1 - con * con));\n};","var e0fn = require('../common/e0fn');\nvar e1fn = require('../common/e1fn');\nvar e2fn = require('../common/e2fn');\nvar e3fn = require('../common/e3fn');\nvar msfnz = require('../common/msfnz');\nvar mlfn = require('../common/mlfn');\nvar adjust_lon = require('../common/adjust_lon');\nvar adjust_lat = require('../common/adjust_lat');\nvar imlfn = require('../common/imlfn');\nvar EPSLN = 1.0e-10;\nexports.init = function() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.lat2 = this.lat2 || this.lat1;\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n\n this.sinphi = Math.sin(this.lat1);\n this.cosphi = Math.cos(this.lat1);\n\n this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n this.ns = this.sinphi;\n }\n else {\n this.sinphi = Math.sin(this.lat2);\n this.cosphi = Math.cos(this.lat2);\n this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n }\n this.g = this.ml1 + this.ms1 / this.ns;\n this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n this.rh = this.a * (this.g - this.ml0);\n};\n\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n -----------------------------------------------------------*/\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var rh1;\n\n /* Forward equations\n -----------------*/\n if (this.sphere) {\n rh1 = this.a * (this.g - lat);\n }\n else {\n var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n rh1 = this.a * (this.g - ml);\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n var x = this.x0 + rh1 * Math.sin(theta);\n var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n p.x = x;\n p.y = y;\n return p;\n};\n\n/* Inverse equations\n -----------------*/\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n var con, rh1, lat, lon;\n if (this.ns >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + theta / this.ns);\n lat = adjust_lat(this.g - rh1 / this.a);\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n var ml = this.g - rh1 / this.a;\n lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n lon = adjust_lon(this.long0 + theta / this.ns);\n p.x = lon;\n p.y = lat;\n return p;\n }\n\n};\nexports.names = [\"Equidistant_Conic\", \"eqdc\"];\n","var adjust_lon = require('../common/adjust_lon');\nvar EPSLN = 1.0e-10;\nexports.init = function() {};\n\n/* Mollweide forward equations--mapping lat,long to x,y\n ----------------------------------------------------*/\nexports.forward = function(p) {\n\n /* Forward equations\n -----------------*/\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var theta = lat;\n var con = Math.PI * Math.sin(lat);\n\n /* Iterate using the Newton-Raphson method to find theta\n -----------------------------------------------------*/\n for (var i = 0; true; i++) {\n var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n theta += delta_theta;\n if (Math.abs(delta_theta) < EPSLN) {\n break;\n }\n }\n theta /= 2;\n\n /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n this is done here because of precision problems with \"cos(theta)\"\n --------------------------------------------------------------------------*/\n if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n delta_lon = 0;\n }\n var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n};\n\nexports.inverse = function(p) {\n var theta;\n var arg;\n\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n arg = p.y / (1.4142135623731 * this.a);\n\n /* Because of division by zero problems, 'arg' can not be 1. Therefore\n a number very close to one is used instead.\n -------------------------------------------------------------------*/\n if (Math.abs(arg) > 0.999999999999) {\n arg = 0.999999999999;\n }\n theta = Math.asin(arg);\n var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n if (lon < (-Math.PI)) {\n lon = -Math.PI;\n }\n if (lon > Math.PI) {\n lon = Math.PI;\n }\n arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n if (Math.abs(arg) > 1) {\n arg = 1;\n }\n var lat = Math.asin(arg);\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Mollweide\", \"moll\"];\n","module.exports = function(phi, sphi, cphi, en) {\n cphi *= sphi;\n sphi *= sphi;\n return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n};","var pj_mlfn = require(\"./pj_mlfn\");\nvar EPSLN = 1.0e-10;\nvar MAX_ITER = 20;\nmodule.exports = function(arg, es, en) {\n var k = 1 / (1 - es);\n var phi = arg;\n for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n var s = Math.sin(phi);\n var t = 1 - es * s * s;\n //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n //phi -= t * (t * Math.sqrt(t)) * k;\n t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n phi -= t;\n if (Math.abs(t) < EPSLN) {\n return phi;\n }\n }\n //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n return phi;\n};","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nmodule.exports = function(es) {\n var en = [];\n en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n var t = es * es;\n en[2] = t * (C44 - es * (C46 + es * C48));\n t *= es;\n en[3] = t * (C66 - es * C68);\n en[4] = t * es * C88;\n return en;\n};","var adjust_lon = require('../common/adjust_lon');\nvar adjust_lat = require('../common/adjust_lat');\nvar pj_enfn = require('../common/pj_enfn');\nvar MAX_ITER = 20;\nvar pj_mlfn = require('../common/pj_mlfn');\nvar pj_inv_mlfn = require('../common/pj_inv_mlfn');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar asinz = require('../common/asinz');\nexports.init = function() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n\n\n if (!this.sphere) {\n this.en = pj_enfn(this.es);\n }\n else {\n this.n = 1;\n this.m = 0;\n this.es = 0;\n this.C_y = Math.sqrt((this.m + 1) / this.n);\n this.C_x = this.C_y / (this.m + 1);\n }\n\n};\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n -----------------------------------------------------*/\nexports.forward = function(p) {\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n lon = adjust_lon(lon - this.long0);\n\n if (this.sphere) {\n if (!this.m) {\n lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n }\n else {\n var k = this.n * Math.sin(lat);\n for (var i = MAX_ITER; i; --i) {\n var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n lat -= V;\n if (Math.abs(V) < EPSLN) {\n break;\n }\n }\n }\n x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n y = this.a * this.C_y * lat;\n\n }\n else {\n\n var s = Math.sin(lat);\n var c = Math.cos(lat);\n y = this.a * pj_mlfn(lat, s, c, this.en);\n x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n }\n\n p.x = x;\n p.y = y;\n return p;\n};\n\nexports.inverse = function(p) {\n var lat, temp, lon, s;\n\n p.x -= this.x0;\n lon = p.x / this.a;\n p.y -= this.y0;\n lat = p.y / this.a;\n\n if (this.sphere) {\n lat /= this.C_y;\n lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n if (this.m) {\n lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n }\n else if (this.n !== 1) {\n lat = asinz(Math.sin(lat) / this.n);\n }\n lon = adjust_lon(lon + this.long0);\n lat = adjust_lat(lat);\n }\n else {\n lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n s = Math.abs(lat);\n if (s < HALF_PI) {\n s = Math.sin(lat);\n temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n lon = adjust_lon(temp);\n }\n else if ((s - EPSLN) < HALF_PI) {\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Sinusoidal\", \"sinu\"];","var adjust_lon = require('../common/adjust_lon');\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\n\n/* Initialize the Miller Cylindrical projection\n -------------------------------------------*/\nexports.init = function() {\n //no-op\n};\n\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x = this.x0 + this.a * dlon;\n var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n p.x = x;\n p.y = y;\n return p;\n};\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n\n var lon = adjust_lon(this.long0 + p.x / this.a);\n var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Miller_Cylindrical\", \"mill\"];\n","var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\n/*\n reference\n Department of Land and Survey Technical Circular 1973/32\n http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n OSG Technical Report 4.1\n http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n * 0 -> km accuracy\n * 1 -> m accuracy -- suitable for most mapping applications\n * 2 -> mm accuracy\n */\nexports.iterations = 1;\n\nexports.init = function() {\n this.A = [];\n this.A[1] = 0.6399175073;\n this.A[2] = -0.1358797613;\n this.A[3] = 0.063294409;\n this.A[4] = -0.02526853;\n this.A[5] = 0.0117879;\n this.A[6] = -0.0055161;\n this.A[7] = 0.0026906;\n this.A[8] = -0.001333;\n this.A[9] = 0.00067;\n this.A[10] = -0.00034;\n\n this.B_re = [];\n this.B_im = [];\n this.B_re[1] = 0.7557853228;\n this.B_im[1] = 0;\n this.B_re[2] = 0.249204646;\n this.B_im[2] = 0.003371507;\n this.B_re[3] = -0.001541739;\n this.B_im[3] = 0.041058560;\n this.B_re[4] = -0.10162907;\n this.B_im[4] = 0.01727609;\n this.B_re[5] = -0.26623489;\n this.B_im[5] = -0.36249218;\n this.B_re[6] = -0.6870983;\n this.B_im[6] = -1.1651967;\n\n this.C_re = [];\n this.C_im = [];\n this.C_re[1] = 1.3231270439;\n this.C_im[1] = 0;\n this.C_re[2] = -0.577245789;\n this.C_im[2] = -0.007809598;\n this.C_re[3] = 0.508307513;\n this.C_im[3] = -0.112208952;\n this.C_re[4] = -0.15094762;\n this.C_im[4] = 0.18200602;\n this.C_re[5] = 1.01418179;\n this.C_im[5] = 1.64497696;\n this.C_re[6] = 1.9660549;\n this.C_im[6] = 2.5127645;\n\n this.D = [];\n this.D[1] = 1.5627014243;\n this.D[2] = 0.5185406398;\n this.D[3] = -0.03333098;\n this.D[4] = -0.1052906;\n this.D[5] = -0.0368594;\n this.D[6] = 0.007317;\n this.D[7] = 0.01220;\n this.D[8] = 0.00394;\n this.D[9] = -0.0013;\n};\n\n/**\n New Zealand Map Grid Forward - long/lat to x/y\n long/lat in radians\n */\nexports.forward = function(p) {\n var n;\n var lon = p.x;\n var lat = p.y;\n\n var delta_lat = lat - this.lat0;\n var delta_lon = lon - this.long0;\n\n // 1. Calculate d_phi and d_psi ... // and d_lambda\n // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n var d_lambda = delta_lon;\n var d_phi_n = 1; // d_phi^0\n\n var d_psi = 0;\n for (n = 1; n <= 10; n++) {\n d_phi_n = d_phi_n * d_phi;\n d_psi = d_psi + this.A[n] * d_phi_n;\n }\n\n // 2. Calculate theta\n var th_re = d_psi;\n var th_im = d_lambda;\n\n // 3. Calculate z\n var th_n_re = 1;\n var th_n_im = 0; // theta^0\n var th_n_re1;\n var th_n_im1;\n\n var z_re = 0;\n var z_im = 0;\n for (n = 1; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n }\n\n // 4. Calculate easting and northing\n p.x = (z_im * this.a) + this.x0;\n p.y = (z_re * this.a) + this.y0;\n\n return p;\n};\n\n\n/**\n New Zealand Map Grid Inverse - x/y to long/lat\n */\nexports.inverse = function(p) {\n var n;\n var x = p.x;\n var y = p.y;\n\n var delta_x = x - this.x0;\n var delta_y = y - this.y0;\n\n // 1. Calculate z\n var z_re = delta_y / this.a;\n var z_im = delta_x / this.a;\n\n // 2a. Calculate theta - first approximation gives km accuracy\n var z_n_re = 1;\n var z_n_im = 0; // z^0\n var z_n_re1;\n var z_n_im1;\n\n var th_re = 0;\n var th_im = 0;\n for (n = 1; n <= 6; n++) {\n z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n z_n_re = z_n_re1;\n z_n_im = z_n_im1;\n th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n }\n\n // 2b. Iterate to refine the accuracy of the calculation\n // 0 iterations gives km accuracy\n // 1 iteration gives m accuracy -- good enough for most mapping applications\n // 2 iterations bives mm accuracy\n for (var i = 0; i < this.iterations; i++) {\n var th_n_re = th_re;\n var th_n_im = th_im;\n var th_n_re1;\n var th_n_im1;\n\n var num_re = z_re;\n var num_im = z_im;\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n th_n_re = 1;\n th_n_im = 0;\n var den_re = this.B_re[1];\n var den_im = this.B_im[1];\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n // Complex division\n var den2 = den_re * den_re + den_im * den_im;\n th_re = (num_re * den_re + num_im * den_im) / den2;\n th_im = (num_im * den_re - num_re * den_im) / den2;\n }\n\n // 3. Calculate d_phi ... // and d_lambda\n var d_psi = th_re;\n var d_lambda = th_im;\n var d_psi_n = 1; // d_psi^0\n\n var d_phi = 0;\n for (n = 1; n <= 9; n++) {\n d_psi_n = d_psi_n * d_psi;\n d_phi = d_phi + this.D[n] * d_psi_n;\n }\n\n // 4. Calculate latitude and longitude\n // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n var lon = this.long0 + d_lambda;\n\n p.x = lon;\n p.y = lat;\n\n return p;\n};\nexports.names = [\"New_Zealand_Map_Grid\", \"nzmg\"];","var e0fn = require('../common/e0fn');\nvar e1fn = require('../common/e1fn');\nvar e2fn = require('../common/e2fn');\nvar e3fn = require('../common/e3fn');\nvar adjust_lon = require('../common/adjust_lon');\nvar adjust_lat = require('../common/adjust_lat');\nvar mlfn = require('../common/mlfn');\nvar EPSLN = 1.0e-10;\nvar gN = require('../common/gN');\nvar MAX_ITER = 20;\nexports.init = function() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n};\n\n\n/* Polyconic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y, el;\n var dlon = adjust_lon(lon - this.long0);\n el = dlon * Math.sin(lat);\n if (this.sphere) {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.a * this.lat0;\n }\n else {\n x = this.a * Math.sin(el) / Math.tan(lat);\n y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n }\n }\n else {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.ml0;\n }\n else {\n var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n x = nl * Math.sin(el);\n y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n }\n\n }\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n};\n\n\n/* Inverse equations\n -----------------*/\nexports.inverse = function(p) {\n var lon, lat, x, y, i;\n var al, bl;\n var phi, dphi;\n x = p.x - this.x0;\n y = p.y - this.y0;\n\n if (this.sphere) {\n if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n lon = adjust_lon(x / this.a + this.long0);\n lat = 0;\n }\n else {\n al = this.lat0 + y / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var tanphi;\n for (i = MAX_ITER; i; --i) {\n tanphi = Math.tan(phi);\n dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n phi += dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n }\n }\n else {\n if (Math.abs(y + this.ml0) <= EPSLN) {\n lat = 0;\n lon = adjust_lon(this.long0 + x / this.a);\n }\n else {\n\n al = (this.ml0 + y) / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var cl, mln, mlnp, ma;\n var con;\n for (i = MAX_ITER; i; --i) {\n con = this.e * Math.sin(phi);\n cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n ma = mln / this.a;\n dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n phi -= dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n\n //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Polyconic\", \"poly\"];","var adjust_lon = require('../common/adjust_lon');\nvar adjust_lat = require('../common/adjust_lat');\nexports.init = function() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n this.rc = Math.cos(this.lat_ts);\n};\n\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexports.forward = function(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n var dlon = adjust_lon(lon - this.long0);\n var dlat = adjust_lat(lat - this.lat0);\n p.x = this.x0 + (this.a * dlon * this.rc);\n p.y = this.y0 + (this.a * dlat);\n return p;\n};\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexports.inverse = function(p) {\n\n var x = p.x;\n var y = p.y;\n\n p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n return p;\n};\nexports.names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\n","var HALF_PI = Math.PI/2;\n\nmodule.exports = function(eccent, q) {\n var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n if (q < 0) {\n return (-1 * HALF_PI);\n }\n else {\n return HALF_PI;\n }\n }\n //var phi = 0.5* q/(1-eccent*eccent);\n var phi = Math.asin(0.5 * q);\n var dphi;\n var sin_phi;\n var cos_phi;\n var con;\n for (var i = 0; i < 30; i++) {\n sin_phi = Math.sin(phi);\n cos_phi = Math.cos(phi);\n con = eccent * sin_phi;\n dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n return NaN;\n};","module.exports = function(eccent, sinphi) {\n var con;\n if (eccent > 1.0e-7) {\n con = eccent * sinphi;\n return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n }\n else {\n return (2 * sinphi);\n }\n};","var adjust_lon = require('../common/adjust_lon');\nvar qsfnz = require('../common/qsfnz');\nvar msfnz = require('../common/msfnz');\nvar iqsfnz = require('../common/iqsfnz');\n/*\n reference: \n \"Cartographic Projection Procedures for the UNIX Environment-\n A User's Manual\" by Gerald I. Evenden,\n USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexports.init = function() {\n //no-op\n if (!this.sphere) {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n};\n\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n if (this.sphere) {\n x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n }\n else {\n var qs = qsfnz(this.e, Math.sin(lat));\n x = this.x0 + this.a * this.k0 * dlon;\n y = this.y0 + this.a * qs * 0.5 / this.k0;\n }\n\n p.x = x;\n p.y = y;\n return p;\n};\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n }\n else {\n lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"cea\"];\n","var adjust_lon = require('../common/adjust_lon');\nvar EPSLN = 1.0e-10;\nvar asinz = require('../common/asinz');\n\n/*\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n */\nexports.init = function() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n // Approximation for projecting points to the horizon (infinity)\n this.infinity_dist = 1000 * this.a;\n this.rc = 1;\n};\n\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexports.forward = function(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g;\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n }\n else {\n\n // Point is in the opposing hemisphere and is unprojectable\n // We still need to return a reasonable point, so we project \n // to infinity, on a bearing \n // equivalent to the northern hemisphere equivalent\n // This is a reasonable approximation for short shapes and lines that \n // straddle the horizon.\n\n x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n }\n p.x = x;\n p.y = y;\n return p;\n};\n\n\nexports.inverse = function(p) {\n var rh; /* Rho */\n var sinc, cosc;\n var c;\n var lon, lat;\n\n /* Inverse equations\n -----------------*/\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n\n if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n c = Math.atan2(rh, this.rc);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n\n lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n lon = adjust_lon(this.long0 + lon);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"gnom\"];\n","var EPSLN = 1.0e-10;\nvar msfnz = require('../common/msfnz');\nvar qsfnz = require('../common/qsfnz');\nvar adjust_lon = require('../common/adjust_lon');\nvar asinz = require('../common/asinz');\nexports.init = function() {\n\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e3 = Math.sqrt(this.es);\n\n this.sin_po = Math.sin(this.lat1);\n this.cos_po = Math.cos(this.lat1);\n this.t1 = this.sin_po;\n this.con = this.sin_po;\n this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n this.sin_po = Math.sin(this.lat2);\n this.cos_po = Math.cos(this.lat2);\n this.t2 = this.sin_po;\n this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n this.sin_po = Math.sin(this.lat0);\n this.cos_po = Math.cos(this.lat0);\n this.t3 = this.sin_po;\n this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n }\n else {\n this.ns0 = this.con;\n }\n this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n};\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n -------------------------------------------------------------------*/\nexports.forward = function(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n this.sin_phi = Math.sin(lat);\n this.cos_phi = Math.cos(lat);\n\n var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);\n var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n var theta = this.ns0 * adjust_lon(lon - this.long0);\n var x = rh1 * Math.sin(theta) + this.x0;\n var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n};\n\n\nexports.inverse = function(p) {\n var rh1, qs, con, theta, lon, lat;\n\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n if (this.ns0 >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n con = rh1 * this.ns0 / this.a;\n if (this.sphere) {\n lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n }\n else {\n qs = (this.c - con * con) / this.ns0;\n lat = this.phi1z(this.e3, qs);\n }\n\n lon = adjust_lon(theta / this.ns0 + this.long0);\n p.x = lon;\n p.y = lat;\n return p;\n};\n\n/* Function to compute phi1, the latitude for the inverse of the\n Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexports.phi1z = function(eccent, qs) {\n var sinphi, cosphi, con, com, dphi;\n var phi = asinz(0.5 * qs);\n if (eccent < EPSLN) {\n return phi;\n }\n\n var eccnts = eccent * eccent;\n for (var i = 1; i <= 25; i++) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n con = eccent * sinphi;\n com = 1 - con * con;\n dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi = phi + dphi;\n if (Math.abs(dphi) <= 1e-7) {\n return phi;\n }\n }\n return null;\n};\nexports.names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\n","var HALF_PI = Math.PI/2;\nvar FORTPI = Math.PI/4;\nvar EPSLN = 1.0e-10;\nvar qsfnz = require('../common/qsfnz');\nvar adjust_lon = require('../common/adjust_lon');\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\nexports.S_POLE = 1;\nexports.N_POLE = 2;\nexports.EQUIT = 3;\nexports.OBLIQ = 4;\n\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n ------------------------------------------------------*/\nexports.init = function() {\n var t = Math.abs(this.lat0);\n if (Math.abs(t - HALF_PI) < EPSLN) {\n this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n }\n else if (Math.abs(t) < EPSLN) {\n this.mode = this.EQUIT;\n }\n else {\n this.mode = this.OBLIQ;\n }\n if (this.es > 0) {\n var sinphi;\n\n this.qp = qsfnz(this.e, 1);\n this.mmf = 0.5 / (1 - this.es);\n this.apa = this.authset(this.es);\n switch (this.mode) {\n case this.N_POLE:\n this.dd = 1;\n break;\n case this.S_POLE:\n this.dd = 1;\n break;\n case this.EQUIT:\n this.rq = Math.sqrt(0.5 * this.qp);\n this.dd = 1 / this.rq;\n this.xmf = 1;\n this.ymf = 0.5 * this.qp;\n break;\n case this.OBLIQ:\n this.rq = Math.sqrt(0.5 * this.qp);\n sinphi = Math.sin(this.lat0);\n this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n this.ymf = (this.xmf = this.rq) / this.dd;\n this.xmf *= this.dd;\n break;\n }\n }\n else {\n if (this.mode === this.OBLIQ) {\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n }\n};\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexports.forward = function(p) {\n\n /* Forward equations\n -----------------*/\n var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n var lam = p.x;\n var phi = p.y;\n\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n coslam = Math.cos(lam);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n if (y <= EPSLN) {\n return null;\n }\n y = Math.sqrt(2 / y);\n x = y * cosphi * Math.sin(lam);\n y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n coslam = -coslam;\n }\n if (Math.abs(phi + this.phi0) < EPSLN) {\n return null;\n }\n y = FORTPI - phi * 0.5;\n y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n x = y * Math.sin(lam);\n y *= coslam;\n }\n }\n else {\n sinb = 0;\n cosb = 0;\n b = 0;\n coslam = Math.cos(lam);\n sinlam = Math.sin(lam);\n sinphi = Math.sin(phi);\n q = qsfnz(this.e, sinphi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinb = q / this.qp;\n cosb = Math.sqrt(1 - sinb * sinb);\n }\n switch (this.mode) {\n case this.OBLIQ:\n b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n break;\n case this.EQUIT:\n b = 1 + cosb * coslam;\n break;\n case this.N_POLE:\n b = HALF_PI + phi;\n q = this.qp - q;\n break;\n case this.S_POLE:\n b = phi - HALF_PI;\n q = this.qp + q;\n break;\n }\n if (Math.abs(b) < EPSLN) {\n return null;\n }\n switch (this.mode) {\n case this.OBLIQ:\n case this.EQUIT:\n b = Math.sqrt(2 / b);\n if (this.mode === this.OBLIQ) {\n y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n }\n else {\n y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n }\n x = this.xmf * b * cosb * sinlam;\n break;\n case this.N_POLE:\n case this.S_POLE:\n if (q >= 0) {\n x = (b = Math.sqrt(q)) * sinlam;\n y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n }\n else {\n x = y = 0;\n }\n break;\n }\n }\n\n p.x = this.a * x + this.x0;\n p.y = this.a * y + this.y0;\n return p;\n};\n\n/* Inverse equations\n -----------------*/\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var lam, phi, cCe, sCe, q, rho, ab;\n\n if (this.sphere) {\n var cosz = 0,\n rh, sinz = 0;\n\n rh = Math.sqrt(x * x + y * y);\n phi = rh * 0.5;\n if (phi > 1) {\n return null;\n }\n phi = 2 * Math.asin(phi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinz = Math.sin(phi);\n cosz = Math.cos(phi);\n }\n switch (this.mode) {\n case this.EQUIT:\n phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n x *= sinz;\n y = cosz * rh;\n break;\n case this.OBLIQ:\n phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n x *= sinz * this.cosph0;\n y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n break;\n case this.N_POLE:\n y = -y;\n phi = HALF_PI - phi;\n break;\n case this.S_POLE:\n phi -= HALF_PI;\n break;\n }\n lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n }\n else {\n ab = 0;\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n x /= this.dd;\n y *= this.dd;\n rho = Math.sqrt(x * x + y * y);\n if (rho < EPSLN) {\n p.x = 0;\n p.y = this.phi0;\n return p;\n }\n sCe = 2 * Math.asin(0.5 * rho / this.rq);\n cCe = Math.cos(sCe);\n x *= (sCe = Math.sin(sCe));\n if (this.mode === this.OBLIQ) {\n ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n q = this.qp * ab;\n y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n }\n else {\n ab = y * sCe / rho;\n q = this.qp * ab;\n y = rho * cCe;\n }\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n y = -y;\n }\n q = (x * x + y * y);\n if (!q) {\n p.x = 0;\n p.y = this.phi0;\n return p;\n }\n ab = 1 - q / this.qp;\n if (this.mode === this.S_POLE) {\n ab = -ab;\n }\n }\n lam = Math.atan2(x, y);\n phi = this.authlat(Math.asin(ab), this.apa);\n }\n\n\n p.x = adjust_lon(this.long0 + lam);\n p.y = phi;\n return p;\n};\n\n/* determine latitude from authalic latitude */\nexports.P00 = 0.33333333333333333333;\nexports.P01 = 0.17222222222222222222;\nexports.P02 = 0.10257936507936507936;\nexports.P10 = 0.06388888888888888888;\nexports.P11 = 0.06640211640211640211;\nexports.P20 = 0.01641501294219154443;\n\nexports.authset = function(es) {\n var t;\n var APA = [];\n APA[0] = es * this.P00;\n t = es * es;\n APA[0] += t * this.P01;\n APA[1] = t * this.P10;\n t *= es;\n APA[0] += t * this.P02;\n APA[1] += t * this.P11;\n APA[2] = t * this.P20;\n return APA;\n};\n\nexports.authlat = function(beta, APA) {\n var t = beta + beta;\n return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n};\nexports.names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\n","var mlfn = require('../common/mlfn');\nvar e0fn = require('../common/e0fn');\nvar e1fn = require('../common/e1fn');\nvar e2fn = require('../common/e2fn');\nvar e3fn = require('../common/e3fn');\nvar gN = require('../common/gN');\nvar adjust_lon = require('../common/adjust_lon');\nvar adjust_lat = require('../common/adjust_lat');\nvar imlfn = require('../common/imlfn');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nexports.init = function() {\n if (!this.sphere) {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n }\n};\n\n\n\n/* Cassini forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexports.forward = function(p) {\n\n /* Forward equations\n -----------------*/\n var x, y;\n var lam = p.x;\n var phi = p.y;\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n }\n else {\n //ellipsoid\n var sinphi = Math.sin(phi);\n var cosphi = Math.cos(phi);\n var nl = gN(this.a, this.e, sinphi);\n var tl = Math.tan(phi) * Math.tan(phi);\n var al = lam * Math.cos(phi);\n var asq = al * al;\n var cl = this.es * cosphi * cosphi / (1 - this.es);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n }\n\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n};\n\n/* Inverse equations\n -----------------*/\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var phi, lam;\n\n if (this.sphere) {\n var dd = y + this.lat0;\n phi = Math.asin(Math.sin(dd) * Math.cos(x));\n lam = Math.atan2(Math.tan(x), Math.cos(dd));\n }\n else {\n /* ellipsoid */\n var ml1 = this.ml0 / this.a + y;\n var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n if (y < 0) {\n p.y *= -1;\n }\n return p;\n }\n var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n var tl1 = Math.pow(Math.tan(phi1), 2);\n var dl = x * this.a / nl1;\n var dsq = dl * dl;\n phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n }\n\n p.x = adjust_lon(lam + this.long0);\n p.y = adjust_lat(phi);\n return p;\n\n};\nexports.names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];","var adjust_lon = require('../common/adjust_lon');\nexports.init = function() {\n this.a = 6377397.155;\n this.es = 0.006674372230614;\n this.e = Math.sqrt(this.es);\n if (!this.lat0) {\n this.lat0 = 0.863937979737193;\n }\n if (!this.long0) {\n this.long0 = 0.7417649320975901 - 0.308341501185665;\n }\n /* if scale not set default to 0.9999 */\n if (!this.k0) {\n this.k0 = 0.9999;\n }\n this.s45 = 0.785398163397448; /* 45 */\n this.s90 = 2 * this.s45;\n this.fi0 = this.lat0;\n this.e2 = this.es;\n this.e = Math.sqrt(this.e2);\n this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n this.uq = 1.04216856380474;\n this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n this.k1 = this.k0;\n this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n this.s0 = 1.37008346281555;\n this.n = Math.sin(this.s0);\n this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n this.ad = this.s90 - this.uq;\n};\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexports.forward = function(p) {\n var gfi, u, deltav, s, d, eps, ro;\n var lon = p.x;\n var lat = p.y;\n var delta_lon = adjust_lon(lon - this.long0);\n /* Transformation */\n gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n deltav = -delta_lon * this.alfa;\n s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n eps = this.n * d;\n ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n p.y = ro * Math.cos(eps) / 1;\n p.x = ro * Math.sin(eps) / 1;\n\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n return (p);\n};\n\n/* calculate lat/lon from xy */\nexports.inverse = function(p) {\n var u, deltav, s, d, eps, ro, fi1;\n var ok;\n\n /* Transformation */\n /* revert y, x*/\n var tmp = p.x;\n p.x = p.y;\n p.y = tmp;\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n ro = Math.sqrt(p.x * p.x + p.y * p.y);\n eps = Math.atan2(p.y, p.x);\n d = eps / Math.sin(this.s0);\n s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n p.x = this.long0 - deltav / this.alfa;\n fi1 = u;\n ok = 0;\n var iter = 0;\n do {\n p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n if (Math.abs(fi1 - p.y) < 0.0000000001) {\n ok = 1;\n }\n fi1 = p.y;\n iter += 1;\n } while (ok === 0 && iter < 15);\n if (iter >= 15) {\n return null;\n }\n\n return (p);\n};\nexports.names = [\"Krovak\", \"krovak\"];\n","var HALF_PI = Math.PI/2;\nmodule.exports = function(eccent, ts) {\n var eccnth = 0.5 * eccent;\n var con, dphi;\n var phi = HALF_PI - 2 * Math.atan(ts);\n for (var i = 0; i <= 15; i++) {\n con = eccent * Math.sin(phi);\n dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n //console.log(\"phi2z has NoConvergence\");\n return -9999;\n};","var HALF_PI = Math.PI/2;\n\nmodule.exports = function(eccent, phi, sinphi) {\n var con = eccent * sinphi;\n var com = 0.5 * eccent;\n con = Math.pow(((1 - con) / (1 + con)), com);\n return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n};","var EPSLN = 1.0e-10;\nvar msfnz = require('../common/msfnz');\nvar tsfnz = require('../common/tsfnz');\nvar HALF_PI = Math.PI/2;\nvar sign = require('../common/sign');\nvar adjust_lon = require('../common/adjust_lon');\nvar phi2z = require('../common/phi2z');\nexports.init = function() {\n\n // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north\n //double c_lat; /* center latitude */\n //double c_lon; /* center longitude */\n //double lat1; /* first standard parallel */\n //double lat2; /* second standard parallel */\n //double r_maj; /* major axis */\n //double r_min; /* minor axis */\n //double false_east; /* x offset in meters */\n //double false_north; /* y offset in meters */\n\n if (!this.lat2) {\n this.lat2 = this.lat1;\n } //if lat2 is not defined\n if (!this.k0) {\n this.k0 = 1;\n }\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n\n var temp = this.b / this.a;\n this.e = Math.sqrt(1 - temp * temp);\n\n var sin1 = Math.sin(this.lat1);\n var cos1 = Math.cos(this.lat1);\n var ms1 = msfnz(this.e, sin1, cos1);\n var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n var sin2 = Math.sin(this.lat2);\n var cos2 = Math.cos(this.lat2);\n var ms2 = msfnz(this.e, sin2, cos2);\n var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n }\n else {\n this.ns = sin1;\n }\n if (isNaN(this.ns)) {\n this.ns = sin1;\n }\n this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n if (!this.title) {\n this.title = \"Lambert Conformal Conic\";\n }\n};\n\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexports.forward = function(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n // singular cases :\n if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n }\n\n var con = Math.abs(Math.abs(lat) - HALF_PI);\n var ts, rh1;\n if (con > EPSLN) {\n ts = tsfnz(this.e, lat, Math.sin(lat));\n rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n }\n else {\n con = lat * this.ns;\n if (con <= 0) {\n return null;\n }\n rh1 = 0;\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n return p;\n};\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexports.inverse = function(p) {\n\n var rh1, con, ts;\n var lat, lon;\n var x = (p.x - this.x0) / this.k0;\n var y = (this.rh - (p.y - this.y0) / this.k0);\n if (this.ns > 0) {\n rh1 = Math.sqrt(x * x + y * y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(x * x + y * y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2((con * x), (con * y));\n }\n if ((rh1 !== 0) || (this.ns > 0)) {\n con = 1 / this.ns;\n ts = Math.pow((rh1 / (this.a * this.f0)), con);\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n else {\n lat = -HALF_PI;\n }\n lon = adjust_lon(theta / this.ns + this.long0);\n\n p.x = lon;\n p.y = lat;\n return p;\n};\n\nexports.names = [\"Lambert Tangential Conformal Conic Projection\", \"Lambert_Conformal_Conic\", \"Lambert_Conformal_Conic_2SP\", \"lcc\"];\n","var tsfnz = require('../common/tsfnz');\nvar adjust_lon = require('../common/adjust_lon');\nvar phi2z = require('../common/phi2z');\nvar HALF_PI = Math.PI/2;\nvar FORTPI = Math.PI/4;\nvar EPSLN = 1.0e-10;\n\n/* Initialize the Oblique Mercator projection\n ------------------------------------------*/\nexports.init = function() {\n this.no_off = this.no_off || false;\n this.no_rot = this.no_rot || false;\n\n if (isNaN(this.k0)) {\n this.k0 = 1;\n }\n var sinlat = Math.sin(this.lat0);\n var coslat = Math.cos(this.lat0);\n var con = this.e * sinlat;\n\n this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));\n this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);\n var t0 = tsfnz(this.e, this.lat0, sinlat);\n var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));\n if (dl * dl < 1) {\n dl = 1;\n }\n var fl;\n var gl;\n if (!isNaN(this.longc)) {\n //Central point and azimuth method\n\n if (this.lat0 >= 0) {\n fl = dl + Math.sqrt(dl * dl - 1);\n }\n else {\n fl = dl - Math.sqrt(dl * dl - 1);\n }\n this.el = fl * Math.pow(t0, this.bl);\n gl = 0.5 * (fl - 1 / fl);\n this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);\n this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;\n\n }\n else {\n //2 points method\n var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));\n var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));\n if (this.lat0 >= 0) {\n this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n }\n else {\n this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n }\n var hl = Math.pow(t1, this.bl);\n var ll = Math.pow(t2, this.bl);\n fl = this.el / hl;\n gl = 0.5 * (fl - 1 / fl);\n var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);\n var pl = (ll - hl) / (ll + hl);\n var dlon12 = adjust_lon(this.long1 - this.long2);\n this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;\n this.long0 = adjust_lon(this.long0);\n var dlon10 = adjust_lon(this.long1 - this.long0);\n this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);\n this.alpha = Math.asin(dl * Math.sin(this.gamma0));\n }\n\n if (this.no_off) {\n this.uc = 0;\n }\n else {\n if (this.lat0 >= 0) {\n this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n }\n else {\n this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n }\n }\n\n};\n\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n ----------------------------------------------------------*/\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var dlon = adjust_lon(lon - this.long0);\n var us, vs;\n var con;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n if (lat > 0) {\n con = -1;\n }\n else {\n con = 1;\n }\n vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));\n us = -1 * con * HALF_PI * this.al / this.bl;\n }\n else {\n var t = tsfnz(this.e, lat, Math.sin(lat));\n var ql = this.el / Math.pow(t, this.bl);\n var sl = 0.5 * (ql - 1 / ql);\n var tl = 0.5 * (ql + 1 / ql);\n var vl = Math.sin(this.bl * (dlon));\n var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;\n if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {\n vs = Number.POSITIVE_INFINITY;\n }\n else {\n vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;\n }\n if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {\n us = this.al * this.bl * (dlon);\n }\n else {\n us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;\n }\n }\n\n if (this.no_rot) {\n p.x = this.x0 + us;\n p.y = this.y0 + vs;\n }\n else {\n\n us -= this.uc;\n p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);\n p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);\n }\n return p;\n};\n\nexports.inverse = function(p) {\n var us, vs;\n if (this.no_rot) {\n vs = p.y - this.y0;\n us = p.x - this.x0;\n }\n else {\n vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);\n us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);\n us += this.uc;\n }\n var qp = Math.exp(-1 * this.bl * vs / this.al);\n var sp = 0.5 * (qp - 1 / qp);\n var tp = 0.5 * (qp + 1 / qp);\n var vp = Math.sin(this.bl * us / this.al);\n var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;\n var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);\n if (Math.abs(up - 1) < EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n }\n else if (Math.abs(up + 1) < EPSLN) {\n p.x = this.long0;\n p.y = -1 * HALF_PI;\n }\n else {\n p.y = phi2z(this.e, ts);\n p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);\n }\n return p;\n};\n\nexports.names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"omerc\"];","/*\n references:\n Formules et constantes pour le Calcul pour la\n projection cylindrique conforme à axe oblique et pour la transformation entre\n des systèmes de référence.\n http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n */\nexports.init = function() {\n var phy0 = this.lat0;\n this.lambda0 = this.long0;\n var sinPhy0 = Math.sin(phy0);\n var semiMajorAxis = this.a;\n var invF = this.rf;\n var flattening = 1 / invF;\n var e2 = 2 * flattening - Math.pow(flattening, 2);\n var e = this.e = Math.sqrt(e2);\n this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n this.b0 = Math.asin(sinPhy0 / this.alpha);\n var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n};\n\n\nexports.forward = function(p) {\n var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n // spheric latitude\n var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n // spheric longitude\n var I = this.alpha * (p.x - this.lambda0);\n\n // psoeudo equatorial rotation\n var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n p.x = this.R * rotI + this.x0;\n return p;\n};\n\nexports.inverse = function(p) {\n var Y = p.x - this.x0;\n var X = p.y - this.y0;\n\n var rotI = Y / this.R;\n var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n var lambda = this.lambda0 + I / this.alpha;\n\n var S = 0;\n var phy = b;\n var prevPhy = -1000;\n var iteration = 0;\n while (Math.abs(phy - prevPhy) > 0.0000001) {\n if (++iteration > 20) {\n //...reportError(\"omercFwdInfinity\");\n return;\n }\n //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n prevPhy = phy;\n phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n }\n\n p.x = lambda;\n p.y = phy;\n return p;\n};\n\nexports.names = [\"somerc\"];\n","var HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar sign = require('../common/sign');\nvar msfnz = require('../common/msfnz');\nvar tsfnz = require('../common/tsfnz');\nvar phi2z = require('../common/phi2z');\nvar adjust_lon = require('../common/adjust_lon');\nexports.ssfn_ = function(phit, sinphi, eccen) {\n sinphi *= eccen;\n return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n};\n\nexports.init = function() {\n this.coslat0 = Math.cos(this.lat0);\n this.sinlat0 = Math.sin(this.lat0);\n if (this.sphere) {\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n }\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (this.lat0 > 0) {\n //North pole\n //trace('stere:north pole');\n this.con = 1;\n }\n else {\n //South pole\n //trace('stere:south pole');\n this.con = -1;\n }\n }\n this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n }\n this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n this.cosX0 = Math.cos(this.X0);\n this.sinX0 = Math.sin(this.X0);\n }\n};\n\n// Stereographic forward equations--mapping lat,long to x,y\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n var sinlat = Math.sin(lat);\n var coslat = Math.cos(lat);\n var A, X, sinX, cosX, ts, rh;\n var dlon = adjust_lon(lon - this.long0);\n\n if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n //case of the origine point\n //trace('stere:this is the origin point');\n p.x = NaN;\n p.y = NaN;\n return p;\n }\n if (this.sphere) {\n //trace('stere:sphere case');\n A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n return p;\n }\n else {\n X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n cosX = Math.cos(X);\n sinX = Math.sin(X);\n if (Math.abs(this.coslat0) <= EPSLN) {\n ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n rh = 2 * this.a * this.k0 * ts / this.cons;\n p.x = this.x0 + rh * Math.sin(lon - this.long0);\n p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n //trace(p.toString());\n return p;\n }\n else if (Math.abs(this.sinlat0) < EPSLN) {\n //Eq\n //trace('stere:equateur');\n A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n p.y = A * sinX;\n }\n else {\n //other case\n //trace('stere:normal case');\n A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n }\n p.x = A * cosX * Math.sin(dlon) + this.x0;\n }\n //trace(p.toString());\n return p;\n};\n\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexports.inverse = function(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat, ts, ce, Chi;\n var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (this.sphere) {\n var c = 2 * Math.atan(rh / (0.5 * this.a * this.k0));\n lon = this.long0;\n lat = this.lat0;\n if (rh <= EPSLN) {\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n if (Math.abs(this.coslat0) < EPSLN) {\n if (this.lat0 > 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n }\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (rh <= EPSLN) {\n lat = this.lat0;\n lon = this.long0;\n p.x = lon;\n p.y = lat;\n //trace(p.toString());\n return p;\n }\n p.x *= this.con;\n p.y *= this.con;\n ts = rh * this.cons / (2 * this.a * this.k0);\n lat = this.con * phi2z(this.e, ts);\n lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n lon = this.long0;\n if (rh <= EPSLN) {\n Chi = this.X0;\n }\n else {\n Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n }\n lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n }\n }\n p.x = lon;\n p.y = lat;\n\n //trace(p.toString());\n return p;\n\n};\nexports.names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\n","module.exports = function(esinp, exp) {\n return (Math.pow((1 - esinp) / (1 + esinp), exp));\n};","var FORTPI = Math.PI/4;\nvar srat = require('../common/srat');\nvar HALF_PI = Math.PI/2;\nvar MAX_ITER = 20;\nexports.init = function() {\n var sphi = Math.sin(this.lat0);\n var cphi = Math.cos(this.lat0);\n cphi *= cphi;\n this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n this.phic0 = Math.asin(sphi / this.C);\n this.ratexp = 0.5 * this.C * this.e;\n this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n};\n\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n\n p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n p.x = this.C * lon;\n return p;\n};\n\nexports.inverse = function(p) {\n var DEL_TOL = 1e-14;\n var lon = p.x / this.C;\n var lat = p.y;\n var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n for (var i = MAX_ITER; i > 0; --i) {\n lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n if (Math.abs(lat - p.y) < DEL_TOL) {\n break;\n }\n p.y = lat;\n }\n /* convergence failed */\n if (!i) {\n return null;\n }\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"gauss\"];\n","var gauss = require('./gauss');\nvar adjust_lon = require('../common/adjust_lon');\nexports.init = function() {\n gauss.init.apply(this);\n if (!this.rc) {\n return;\n }\n this.sinc0 = Math.sin(this.phic0);\n this.cosc0 = Math.cos(this.phic0);\n this.R2 = 2 * this.rc;\n if (!this.title) {\n this.title = \"Oblique Stereographic Alternative\";\n }\n};\n\nexports.forward = function(p) {\n var sinc, cosc, cosl, k;\n p.x = adjust_lon(p.x - this.long0);\n gauss.forward.apply(this, [p]);\n sinc = Math.sin(p.y);\n cosc = Math.cos(p.y);\n cosl = Math.cos(p.x);\n k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n p.x = k * cosc * Math.sin(p.x);\n p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n};\n\nexports.inverse = function(p) {\n var sinc, cosc, lon, lat, rho;\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {\n var c = 2 * Math.atan2(rho, this.R2);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n gauss.inverse.apply(this, [p]);\n p.x = adjust_lon(p.x + this.long0);\n return p;\n};\n\nexports.names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\"];\n","var e0fn = require('../common/e0fn');\nvar e1fn = require('../common/e1fn');\nvar e2fn = require('../common/e2fn');\nvar e3fn = require('../common/e3fn');\nvar mlfn = require('../common/mlfn');\nvar adjust_lon = require('../common/adjust_lon');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar sign = require('../common/sign');\nvar asinz = require('../common/asinz');\n\nexports.init = function() {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n};\n\n/**\n Transverse Mercator Forward - long/lat to x/y\n long/lat in radians\n */\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var con;\n var x, y;\n var sin_phi = Math.sin(lat);\n var cos_phi = Math.cos(lat);\n\n if (this.sphere) {\n var b = cos_phi * Math.sin(delta_lon);\n if ((Math.abs(Math.abs(b) - 1)) < 0.0000000001) {\n return (93);\n }\n else {\n x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b));\n con = Math.acos(cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - b * b));\n if (lat < 0) {\n con = -con;\n }\n y = this.a * this.k0 * (con - this.lat0);\n }\n }\n else {\n var al = cos_phi * delta_lon;\n var als = Math.pow(al, 2);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var tq = Math.tan(lat);\n var t = Math.pow(tq, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var n = this.a / Math.sqrt(con);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n\n x = this.k0 * n * al * (1 + als / 6 * (1 - t + c + als / 20 * (5 - 18 * t + Math.pow(t, 2) + 72 * c - 58 * this.ep2))) + this.x0;\n y = this.k0 * (ml - this.ml0 + n * tq * (als * (0.5 + als / 24 * (5 - t + 9 * c + 4 * Math.pow(c, 2) + als / 30 * (61 - 58 * t + Math.pow(t, 2) + 600 * c - 330 * this.ep2))))) + this.y0;\n\n }\n p.x = x;\n p.y = y;\n return p;\n};\n\n/**\n Transverse Mercator Inverse - x/y to long/lat\n */\nexports.inverse = function(p) {\n var con, phi;\n var delta_phi;\n var i;\n var max_iter = 6;\n var lat, lon;\n\n if (this.sphere) {\n var f = Math.exp(p.x / (this.a * this.k0));\n var g = 0.5 * (f - 1 / f);\n var temp = this.lat0 + p.y / (this.a * this.k0);\n var h = Math.cos(temp);\n con = Math.sqrt((1 - h * h) / (1 + g * g));\n lat = asinz(con);\n if (temp < 0) {\n lat = -lat;\n }\n if ((g === 0) && (h === 0)) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0);\n }\n }\n else { // ellipsoidal form\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n\n con = (this.ml0 + y / this.k0) / this.a;\n phi = con;\n for (i = 0; true; i++) {\n delta_phi = ((con + this.e1 * Math.sin(2 * phi) - this.e2 * Math.sin(4 * phi) + this.e3 * Math.sin(6 * phi)) / this.e0) - phi;\n phi += delta_phi;\n if (Math.abs(delta_phi) <= EPSLN) {\n break;\n }\n if (i >= max_iter) {\n return (95);\n }\n } // for()\n if (Math.abs(phi) < HALF_PI) {\n var sin_phi = Math.sin(phi);\n var cos_phi = Math.cos(phi);\n var tan_phi = Math.tan(phi);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var t = Math.pow(tan_phi, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var n = this.a / Math.sqrt(con);\n var r = n * (1 - this.es) / con;\n var d = x / (n * this.k0);\n var ds = Math.pow(d, 2);\n lat = phi - (n * tan_phi * ds / r) * (0.5 - ds / 24 * (5 + 3 * t + 10 * c - 4 * cs - 9 * this.ep2 - ds / 30 * (61 + 90 * t + 298 * c + 45 * ts - 252 * this.ep2 - 3 * cs)));\n lon = adjust_lon(this.long0 + (d * (1 - ds / 6 * (1 + 2 * t + c - ds / 20 * (5 - 2 * c + 28 * t - 3 * cs + 8 * this.ep2 + 24 * ts))) / cos_phi));\n }\n else {\n lat = HALF_PI * sign(y);\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n};\nexports.names = [\"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\n","var D2R = 0.01745329251994329577;\nvar tmerc = require('./tmerc');\nexports.dependsOn = 'tmerc';\nexports.init = function() {\n if (!this.zone) {\n return;\n }\n this.lat0 = 0;\n this.long0 = ((6 * Math.abs(this.zone)) - 183) * D2R;\n this.x0 = 500000;\n this.y0 = this.utmSouth ? 10000000 : 0;\n this.k0 = 0.9996;\n\n tmerc.init.apply(this);\n this.forward = tmerc.forward;\n this.inverse = tmerc.inverse;\n};\nexports.names = [\"Universal Transverse Mercator System\", \"utm\"];\n","var projs = [\n require('./projections/tmerc'),\n require('./projections/utm'),\n require('./projections/sterea'),\n require('./projections/stere'),\n require('./projections/somerc'),\n require('./projections/omerc'),\n require('./projections/lcc'),\n require('./projections/krovak'),\n require('./projections/cass'),\n require('./projections/laea'),\n require('./projections/aea'),\n require('./projections/gnom'),\n require('./projections/cea'),\n require('./projections/eqc'),\n require('./projections/poly'),\n require('./projections/nzmg'),\n require('./projections/mill'),\n require('./projections/sinu'),\n require('./projections/moll'),\n require('./projections/eqdc'),\n require('./projections/vandg'),\n require('./projections/aeqd')\n];\nmodule.exports = function(proj4){\n projs.forEach(function(proj){\n proj4.Proj.projections.add(proj);\n });\n};","{\n \"name\": \"proj4\",\n \"version\": \"2.3.14\",\n \"description\": \"Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.\",\n \"main\": \"lib/index.js\",\n \"directories\": {\n \"test\": \"test\",\n \"doc\": \"docs\"\n },\n \"scripts\": {\n \"test\": \"./node_modules/istanbul/lib/cli.js test ./node_modules/mocha/bin/_mocha test/test.js\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/proj4js/proj4js.git\"\n },\n \"author\": \"\",\n \"license\": \"MIT\",\n \"jam\": {\n \"main\": \"dist/proj4.js\",\n \"include\": [\n \"dist/proj4.js\",\n \"README.md\",\n \"AUTHORS\",\n \"LICENSE.md\"\n ]\n },\n \"devDependencies\": {\n \"grunt-cli\": \"~0.1.13\",\n \"grunt\": \"~0.4.2\",\n \"grunt-contrib-connect\": \"~0.6.0\",\n \"grunt-contrib-jshint\": \"~0.8.0\",\n \"chai\": \"~1.8.1\",\n \"mocha\": \"~1.17.1\",\n \"grunt-mocha-phantomjs\": \"~0.4.0\",\n \"browserify\": \"~12.0.1\",\n \"grunt-browserify\": \"~4.0.1\",\n \"grunt-contrib-uglify\": \"~0.11.1\",\n \"curl\": \"git://github.com/cujojs/curl.git\",\n \"istanbul\": \"~0.2.4\",\n \"tin\": \"~0.4.0\"\n },\n \"dependencies\": {\n \"mgrs\": \"~0.0.2\"\n },\n \"contributors\": [\n {\n \"name\": \"Mike Adair\",\n \"email\": \"madair@dmsolutions.ca\"\n },\n {\n \"name\": \"Richard Greenwood\",\n \"email\": \"rich@greenwoodmap.com\"\n },\n {\n \"name\": \"Calvin Metcalf\",\n \"email\": \"calvin.metcalf@gmail.com\"\n },\n {\n \"name\": \"Richard Marsden\",\n \"url\": \"http://www.winwaed.com\"\n },\n {\n \"name\": \"T. Mittan\"\n },\n {\n \"name\": \"D. Steinwand\"\n },\n {\n \"name\": \"S. Nelson\"\n }\n ],\n \"gitHead\": \"7619c8a63df1eae5bad0b9ad31ca1d87b0549243\",\n \"bugs\": {\n \"url\": \"https://github.com/proj4js/proj4js/issues\"\n },\n \"homepage\": \"https://github.com/proj4js/proj4js#readme\",\n \"_id\": \"proj4@2.3.14\",\n \"_shasum\": \"928906144388980c914c5a357fc493aba59a747a\",\n \"_from\": \"proj4@>=2.3.14 <3.0.0\",\n \"_npmVersion\": \"2.14.12\",\n \"_nodeVersion\": \"4.2.6\",\n \"_npmUser\": {\n \"name\": \"ahocevar\",\n \"email\": \"andreas.hocevar@gmail.com\"\n },\n \"dist\": {\n \"shasum\": \"928906144388980c914c5a357fc493aba59a747a\",\n \"tarball\": \"https://registry.npmjs.org/proj4/-/proj4-2.3.14.tgz\"\n },\n \"maintainers\": [\n {\n \"name\": \"cwmma\",\n \"email\": \"calvin.metcalf@gmail.com\"\n },\n {\n \"name\": \"ahocevar\",\n \"email\": \"andreas.hocevar@gmail.com\"\n }\n ],\n \"_npmOperationalInternal\": {\n \"host\": \"packages-13-west.internal.npmjs.com\",\n \"tmp\": \"tmp/proj4-2.3.14.tgz_1457689264880_0.9409773757215589\"\n },\n \"_resolved\": \"https://registry.npmjs.org/proj4/-/proj4-2.3.14.tgz\",\n \"readme\": \"ERROR: No README data found!\"\n}\n","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\n\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n * WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n * 100 m, 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 */\nexports.forward = function(ll, accuracy) {\n accuracy = accuracy || 5; // default accuracy 1m\n return encode(LLtoUTM({\n lat: ll[1],\n lon: ll[0]\n }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n * (longitude) and top (latitude) values in WGS84, representing the\n * bounding box for the provided MGRS reference.\n */\nexports.inverse = function(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n 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\nexports.toPoint = function(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","module.exports = function (array){\n var out = {\n x: array[0],\n y: array[1]\n };\n if (array.length>2) {\n out.z = array[2];\n }\n if (array.length>3) {\n out.m = array[3];\n }\n return out;\n};","var HALF_PI = Math.PI/2;\nvar PJD_3PARAM = 1;\nvar PJD_7PARAM = 2;\nvar PJD_GRIDSHIFT = 3;\nvar PJD_WGS84 = 4; // WGS84 or equivalent\nvar PJD_NODATUM = 5; // WGS84 or equivalent\nvar SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nvar AD_C = 1.0026000;\nvar COS_67P5 = 0.38268343236508977;\nvar datum = function(proj) {\n if (!(this instanceof datum)) {\n return new datum(proj);\n }\n this.datum_type = PJD_WGS84; //default setting\n if (!proj) {\n return;\n }\n if (proj.datumCode && proj.datumCode === 'none') {\n this.datum_type = PJD_NODATUM;\n }\n\n if (proj.datum_params) {\n this.datum_params = proj.datum_params.map(parseFloat);\n if (this.datum_params[0] !== 0 || this.datum_params[1] !== 0 || this.datum_params[2] !== 0) {\n this.datum_type = PJD_3PARAM;\n }\n if (this.datum_params.length > 3) {\n if (this.datum_params[3] !== 0 || this.datum_params[4] !== 0 || this.datum_params[5] !== 0 || this.datum_params[6] !== 0) {\n this.datum_type = PJD_7PARAM;\n this.datum_params[3] *= SEC_TO_RAD;\n this.datum_params[4] *= SEC_TO_RAD;\n this.datum_params[5] *= SEC_TO_RAD;\n this.datum_params[6] = (this.datum_params[6] / 1000000.0) + 1.0;\n }\n }\n }\n\n // DGR 2011-03-21 : nadgrids support\n this.datum_type = proj.grids ? PJD_GRIDSHIFT : this.datum_type;\n\n this.a = proj.a; //datum object also uses these values\n this.b = proj.b;\n this.es = proj.es;\n this.ep2 = proj.ep2;\n if (this.datum_type === PJD_GRIDSHIFT) {\n this.grids = proj.grids;\n }\n};\ndatum.prototype = {\n\n\n /****************************************************************/\n // cs_compare_datums()\n // Returns TRUE if the two datums match, otherwise FALSE.\n compare_datums: function(dest) {\n if (this.datum_type !== dest.datum_type) {\n return false; // false, datums are not equal\n }\n else if (this.a !== dest.a || Math.abs(this.es - dest.es) > 0.000000000050) {\n // the tolerence for es is to ensure that GRS80 and WGS84\n // are considered identical\n return false;\n }\n else if (this.datum_type === PJD_3PARAM) {\n return (this.datum_params[0] === dest.datum_params[0] && this.datum_params[1] === dest.datum_params[1] && this.datum_params[2] === dest.datum_params[2]);\n }\n else if (this.datum_type === PJD_7PARAM) {\n return (this.datum_params[0] === dest.datum_params[0] && this.datum_params[1] === dest.datum_params[1] && this.datum_params[2] === dest.datum_params[2] && this.datum_params[3] === dest.datum_params[3] && this.datum_params[4] === dest.datum_params[4] && this.datum_params[5] === dest.datum_params[5] && this.datum_params[6] === dest.datum_params[6]);\n }\n else if (this.datum_type === PJD_GRIDSHIFT || dest.datum_type === PJD_GRIDSHIFT) {\n //alert(\"ERROR: Grid shift transformations are not implemented.\");\n //return false\n //DGR 2012-07-29 lazy ...\n return this.nadgrids === dest.nadgrids;\n }\n else {\n return true; // datums are equal\n }\n }, // cs_compare_datums()\n\n /*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n * Latitude : Geodetic latitude in radians (input)\n * Longitude : Geodetic longitude in radians (input)\n * Height : Geodetic height, in meters (input)\n * X : Calculated Geocentric X coordinate, in meters (output)\n * Y : Calculated Geocentric Y coordinate, in meters (output)\n * Z : Calculated Geocentric Z coordinate, in meters (output)\n *\n */\n geodetic_to_geocentric: function(p) {\n var Longitude = p.x;\n var Latitude = p.y;\n var Height = p.z ? p.z : 0; //Z value not always supplied\n var X; // output\n var Y;\n var Z;\n\n var Error_Code = 0; // GEOCENT_NO_ERROR;\n var Rn; /* Earth radius at location */\n var Sin_Lat; /* Math.sin(Latitude) */\n var Sin2_Lat; /* Square of Math.sin(Latitude) */\n var Cos_Lat; /* Math.cos(Latitude) */\n\n /*\n ** Don't blow up if Latitude is just a little out of the value\n ** range as it may just be a rounding issue. Also removed longitude\n ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.\n */\n if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n Latitude = -HALF_PI;\n }\n else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n Latitude = HALF_PI;\n }\n else if ((Latitude < -HALF_PI) || (Latitude > HALF_PI)) {\n /* Latitude out of range */\n //..reportError('geocent:lat out of range:' + Latitude);\n return null;\n }\n\n if (Longitude > Math.PI) {\n Longitude -= (2 * Math.PI);\n }\n Sin_Lat = Math.sin(Latitude);\n Cos_Lat = Math.cos(Latitude);\n Sin2_Lat = Sin_Lat * Sin_Lat;\n Rn = this.a / (Math.sqrt(1.0e0 - this.es * Sin2_Lat));\n X = (Rn + Height) * Cos_Lat * Math.cos(Longitude);\n Y = (Rn + Height) * Cos_Lat * Math.sin(Longitude);\n Z = ((Rn * (1 - this.es)) + Height) * Sin_Lat;\n\n p.x = X;\n p.y = Y;\n p.z = Z;\n return Error_Code;\n }, // cs_geodetic_to_geocentric()\n\n\n geocentric_to_geodetic: function(p) {\n /* local defintions and variables */\n /* end-criterium of loop, accuracy of sin(Latitude) */\n var genau = 1e-12;\n var genau2 = (genau * genau);\n var maxiter = 30;\n\n var P; /* distance between semi-minor axis and location */\n var RR; /* distance between center and location */\n var CT; /* sin of geocentric latitude */\n var ST; /* cos of geocentric latitude */\n var RX;\n var RK;\n var RN; /* Earth radius at location */\n var CPHI0; /* cos of start or old geodetic latitude in iterations */\n var SPHI0; /* sin of start or old geodetic latitude in iterations */\n var CPHI; /* cos of searched geodetic latitude */\n var SPHI; /* sin of searched geodetic latitude */\n var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n var At_Pole; /* indicates location is in polar region */\n var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0.0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n At_Pole = false;\n P = Math.sqrt(X * X + Y * Y);\n RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n /* special cases for latitude and longitude */\n if (P / this.a < genau) {\n\n /* special case, if P=0. (X=0., Y=0.) */\n At_Pole = true;\n Longitude = 0.0;\n\n /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n * of ellipsoid (=center of mass), Latitude becomes PI/2 */\n if (RR / this.a < genau) {\n Latitude = HALF_PI;\n Height = -this.b;\n return;\n }\n }\n else {\n /* ellipsoidal (geodetic) longitude\n * interval: -PI < Longitude <= +PI */\n Longitude = Math.atan2(Y, X);\n }\n\n /* --------------------------------------------------------------\n * Following iterative algorithm was developped by\n * \"Institut for Erdmessung\", University of Hannover, July 1988.\n * Internet: www.ife.uni-hannover.de\n * Iterative computation of CPHI,SPHI and Height.\n * Iteration of CPHI and SPHI to 10**-12 radian resp.\n * 2*10**-7 arcsec.\n * --------------------------------------------------------------\n */\n CT = Z / RR;\n ST = P / RR;\n RX = 1.0 / Math.sqrt(1.0 - this.es * (2.0 - this.es) * ST * ST);\n CPHI0 = ST * (1.0 - this.es) * RX;\n SPHI0 = CT * RX;\n iter = 0;\n\n /* loop to find sin(Latitude) resp. Latitude\n * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n do {\n iter++;\n RN = this.a / Math.sqrt(1.0 - this.es * SPHI0 * SPHI0);\n\n /* ellipsoidal (geodetic) height */\n Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - this.es * SPHI0 * SPHI0);\n\n RK = this.es * RN / (RN + Height);\n RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n CPHI = ST * (1.0 - RK) * RX;\n SPHI = CT * RX;\n SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n CPHI0 = CPHI;\n SPHI0 = SPHI;\n }\n while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n /* ellipsoidal (geodetic) latitude */\n Latitude = Math.atan(SPHI / Math.abs(CPHI));\n\n p.x = Longitude;\n p.y = Latitude;\n p.z = Height;\n return p;\n }, // cs_geocentric_to_geodetic()\n\n /** Convert_Geocentric_To_Geodetic\n * The method used here is derived from 'An Improved Algorithm for\n * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996\n */\n geocentric_to_geodetic_noniter: function(p) {\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n var W; /* distance from Z axis */\n var W2; /* square of distance from Z axis */\n var T0; /* initial estimate of vertical component */\n var T1; /* corrected estimate of vertical component */\n var S0; /* initial estimate of horizontal component */\n var S1; /* corrected estimate of horizontal component */\n var Sin_B0; /* Math.sin(B0), B0 is estimate of Bowring aux variable */\n var Sin3_B0; /* cube of Math.sin(B0) */\n var Cos_B0; /* Math.cos(B0) */\n var Sin_p1; /* Math.sin(phi1), phi1 is estimated latitude */\n var Cos_p1; /* Math.cos(phi1) */\n var Rn; /* Earth radius at location */\n var Sum; /* numerator of Math.cos(phi1) */\n var At_Pole; /* indicates location is in polar region */\n\n X = parseFloat(X); // cast from string to float\n Y = parseFloat(Y);\n Z = parseFloat(Z);\n\n At_Pole = false;\n if (X !== 0.0) {\n Longitude = Math.atan2(Y, X);\n }\n else {\n if (Y > 0) {\n Longitude = HALF_PI;\n }\n else if (Y < 0) {\n Longitude = -HALF_PI;\n }\n else {\n At_Pole = true;\n Longitude = 0.0;\n if (Z > 0.0) { /* north pole */\n Latitude = HALF_PI;\n }\n else if (Z < 0.0) { /* south pole */\n Latitude = -HALF_PI;\n }\n else { /* center of earth */\n Latitude = HALF_PI;\n Height = -this.b;\n return;\n }\n }\n }\n W2 = X * X + Y * Y;\n W = Math.sqrt(W2);\n T0 = Z * AD_C;\n S0 = Math.sqrt(T0 * T0 + W2);\n Sin_B0 = T0 / S0;\n Cos_B0 = W / S0;\n Sin3_B0 = Sin_B0 * Sin_B0 * Sin_B0;\n T1 = Z + this.b * this.ep2 * Sin3_B0;\n Sum = W - this.a * this.es * Cos_B0 * Cos_B0 * Cos_B0;\n S1 = Math.sqrt(T1 * T1 + Sum * Sum);\n Sin_p1 = T1 / S1;\n Cos_p1 = Sum / S1;\n Rn = this.a / Math.sqrt(1.0 - this.es * Sin_p1 * Sin_p1);\n if (Cos_p1 >= COS_67P5) {\n Height = W / Cos_p1 - Rn;\n }\n else if (Cos_p1 <= -COS_67P5) {\n Height = W / -Cos_p1 - Rn;\n }\n else {\n Height = Z / Sin_p1 + Rn * (this.es - 1.0);\n }\n if (At_Pole === false) {\n Latitude = Math.atan(Sin_p1 / Cos_p1);\n }\n\n p.x = Longitude;\n p.y = Latitude;\n p.z = Height;\n return p;\n }, // geocentric_to_geodetic_noniter()\n\n /****************************************************************/\n // pj_geocentic_to_wgs84( p )\n // p = point to transform in geocentric coordinates (x,y,z)\n geocentric_to_wgs84: function(p) {\n\n if (this.datum_type === PJD_3PARAM) {\n // if( x[io] === HUGE_VAL )\n // continue;\n p.x += this.datum_params[0];\n p.y += this.datum_params[1];\n p.z += this.datum_params[2];\n\n }\n else if (this.datum_type === PJD_7PARAM) {\n var Dx_BF = this.datum_params[0];\n var Dy_BF = this.datum_params[1];\n var Dz_BF = this.datum_params[2];\n var Rx_BF = this.datum_params[3];\n var Ry_BF = this.datum_params[4];\n var Rz_BF = this.datum_params[5];\n var M_BF = this.datum_params[6];\n // if( x[io] === HUGE_VAL )\n // continue;\n var x_out = M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF;\n var y_out = M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF;\n var z_out = M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF;\n p.x = x_out;\n p.y = y_out;\n p.z = z_out;\n }\n }, // cs_geocentric_to_wgs84\n\n /****************************************************************/\n // pj_geocentic_from_wgs84()\n // coordinate system definition,\n // point to transform in geocentric coordinates (x,y,z)\n geocentric_from_wgs84: function(p) {\n\n if (this.datum_type === PJD_3PARAM) {\n //if( x[io] === HUGE_VAL )\n // continue;\n p.x -= this.datum_params[0];\n p.y -= this.datum_params[1];\n p.z -= this.datum_params[2];\n\n }\n else if (this.datum_type === PJD_7PARAM) {\n var Dx_BF = this.datum_params[0];\n var Dy_BF = this.datum_params[1];\n var Dz_BF = this.datum_params[2];\n var Rx_BF = this.datum_params[3];\n var Ry_BF = this.datum_params[4];\n var Rz_BF = this.datum_params[5];\n var M_BF = this.datum_params[6];\n var x_tmp = (p.x - Dx_BF) / M_BF;\n var y_tmp = (p.y - Dy_BF) / M_BF;\n var z_tmp = (p.z - Dz_BF) / M_BF;\n //if( x[io] === HUGE_VAL )\n // continue;\n\n p.x = x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp;\n p.y = -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp;\n p.z = Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp;\n } //cs_geocentric_from_wgs84()\n }\n};\n\n/** point object, nothing fancy, just allows values to be\n passed back and forth by reference rather than by value.\n Other point classes may be used as long as they have\n x and y properties, which will get modified in the transform method.\n*/\nmodule.exports = datum;\n","module.exports = function(destination, source) {\n destination = destination || {};\n var value, property;\n if (!source) {\n return destination;\n }\n for (property in source) {\n value = source[property];\n if (value !== undefined) {\n destination[property] = value;\n }\n }\n return destination;\n};\n","exports.MERIT = {\n a: 6378137.0,\n rf: 298.257,\n ellipseName: \"MERIT 1983\"\n};\nexports.SGS85 = {\n a: 6378136.0,\n rf: 298.257,\n ellipseName: \"Soviet Geodetic System 85\"\n};\nexports.GRS80 = {\n a: 6378137.0,\n rf: 298.257222101,\n ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\nexports.IAU76 = {\n a: 6378140.0,\n rf: 298.257,\n ellipseName: \"IAU 1976\"\n};\nexports.airy = {\n a: 6377563.396,\n b: 6356256.910,\n ellipseName: \"Airy 1830\"\n};\nexports.APL4 = {\n a: 6378137,\n rf: 298.25,\n ellipseName: \"Appl. Physics. 1965\"\n};\nexports.NWL9D = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"Naval Weapons Lab., 1965\"\n};\nexports.mod_airy = {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: \"Modified Airy\"\n};\nexports.andrae = {\n a: 6377104.43,\n rf: 300.0,\n ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\nexports.aust_SA = {\n a: 6378160.0,\n rf: 298.25,\n ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\nexports.GRS67 = {\n a: 6378160.0,\n rf: 298.2471674270,\n ellipseName: \"GRS 67(IUGG 1967)\"\n};\nexports.bessel = {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841\"\n};\nexports.bess_nam = {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841 (Namibia)\"\n};\nexports.clrk66 = {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: \"Clarke 1866\"\n};\nexports.clrk80 = {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: \"Clarke 1880 mod.\"\n};\nexports.clrk58 = {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: \"Clarke 1858\"\n};\nexports.CPM = {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\nexports.delmbr = {\n a: 6376428.0,\n rf: 311.5,\n ellipseName: \"Delambre 1810 (Belgium)\"\n};\nexports.engelis = {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: \"Engelis 1985\"\n};\nexports.evrst30 = {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: \"Everest 1830\"\n};\nexports.evrst48 = {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: \"Everest 1948\"\n};\nexports.evrst56 = {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: \"Everest 1956\"\n};\nexports.evrst69 = {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: \"Everest 1969\"\n};\nexports.evrstSS = {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: \"Everest (Sabah & Sarawak)\"\n};\nexports.fschr60 = {\n a: 6378166.0,\n rf: 298.3,\n ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\nexports.fschr60m = {\n a: 6378155.0,\n rf: 298.3,\n ellipseName: \"Fischer 1960\"\n};\nexports.fschr68 = {\n a: 6378150.0,\n rf: 298.3,\n ellipseName: \"Fischer 1968\"\n};\nexports.helmert = {\n a: 6378200.0,\n rf: 298.3,\n ellipseName: \"Helmert 1906\"\n};\nexports.hough = {\n a: 6378270.0,\n rf: 297.0,\n ellipseName: \"Hough\"\n};\nexports.intl = {\n a: 6378388.0,\n rf: 297.0,\n ellipseName: \"International 1909 (Hayford)\"\n};\nexports.kaula = {\n a: 6378163.0,\n rf: 298.24,\n ellipseName: \"Kaula 1961\"\n};\nexports.lerch = {\n a: 6378139.0,\n rf: 298.257,\n ellipseName: \"Lerch 1979\"\n};\nexports.mprts = {\n a: 6397300.0,\n rf: 191.0,\n ellipseName: \"Maupertius 1738\"\n};\nexports.new_intl = {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: \"New International 1967\"\n};\nexports.plessis = {\n a: 6376523.0,\n rf: 6355863.0,\n ellipseName: \"Plessis 1817 (France)\"\n};\nexports.krass = {\n a: 6378245.0,\n rf: 298.3,\n ellipseName: \"Krassovsky, 1942\"\n};\nexports.SEasia = {\n a: 6378155.0,\n b: 6356773.3205,\n ellipseName: \"Southeast Asia\"\n};\nexports.walbeck = {\n a: 6376896.0,\n b: 6355834.8467,\n ellipseName: \"Walbeck\"\n};\nexports.WGS60 = {\n a: 6378165.0,\n rf: 298.3,\n ellipseName: \"WGS 60\"\n};\nexports.WGS66 = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"WGS 66\"\n};\nexports.WGS7 = {\n a: 6378135.0,\n rf: 298.26,\n ellipseName: \"WGS 72\"\n};\nexports.WGS84 = {\n a: 6378137.0,\n rf: 298.257223563,\n ellipseName: \"WGS 84\"\n};\nexports.sphere = {\n a: 6370997.0,\n b: 6370997.0,\n ellipseName: \"Normal Sphere (r=6370997)\"\n};","exports.wgs84 = {\n towgs84: \"0,0,0\",\n ellipse: \"WGS84\",\n datumName: \"WGS84\"\n};\nexports.ch1903 = {\n towgs84: \"674.374,15.056,405.346\",\n ellipse: \"bessel\",\n datumName: \"swiss\"\n};\nexports.ggrs87 = {\n towgs84: \"-199.87,74.79,246.62\",\n ellipse: \"GRS80\",\n datumName: \"Greek_Geodetic_Reference_System_1987\"\n};\nexports.nad83 = {\n towgs84: \"0,0,0\",\n ellipse: \"GRS80\",\n datumName: \"North_American_Datum_1983\"\n};\nexports.nad27 = {\n nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n ellipse: \"clrk66\",\n datumName: \"North_American_Datum_1927\"\n};\nexports.potsdam = {\n towgs84: \"606.0,23.0,413.0\",\n ellipse: \"bessel\",\n datumName: \"Potsdam Rauenberg 1950 DHDN\"\n};\nexports.carthage = {\n towgs84: \"-263.0,6.0,431.0\",\n ellipse: \"clark80\",\n datumName: \"Carthage 1934 Tunisia\"\n};\nexports.hermannskogel = {\n towgs84: \"653.0,-212.0,449.0\",\n ellipse: \"bessel\",\n datumName: \"Hermannskogel\"\n};\nexports.ire65 = {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"mod_airy\",\n datumName: \"Ireland 1965\"\n};\nexports.rassadiran = {\n towgs84: \"-133.63,-157.5,-158.62\",\n ellipse: \"intl\",\n datumName: \"Rassadiran\"\n};\nexports.nzgd49 = {\n towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n ellipse: \"intl\",\n datumName: \"New Zealand Geodetic Datum 1949\"\n};\nexports.osgb36 = {\n towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n ellipse: \"airy\",\n datumName: \"Airy 1830\"\n};\nexports.s_jtsk = {\n towgs84: \"589,76,480\",\n ellipse: 'bessel',\n datumName: 'S-JTSK (Ferro)'\n};\nexports.beduaram = {\n towgs84: '-106,-87,188',\n ellipse: 'clrk80',\n datumName: 'Beduaram'\n};\nexports.gunung_segara = {\n towgs84: '-403,684,41',\n ellipse: 'bessel',\n datumName: 'Gunung Segara Jakarta'\n};\nexports.rnb72 = {\n towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n ellipse: \"intl\",\n datumName: \"Reseau National Belge 1972\"\n};","var Datum = require('./constants/Datum');\nvar Ellipsoid = require('./constants/Ellipsoid');\nvar extend = require('./extend');\nvar datum = require('./datum');\nvar EPSLN = 1.0e-10;\n// ellipoid pj_set_ell.c\nvar SIXTH = 0.1666666666666666667;\n/* 1/6 */\nvar RA4 = 0.04722222222222222222;\n/* 17/360 */\nvar RA6 = 0.02215608465608465608;\nmodule.exports = function(json) {\n // DGR 2011-03-20 : nagrids -> nadgrids\n if (json.datumCode && json.datumCode !== 'none') {\n var datumDef = Datum[json.datumCode];\n if (datumDef) {\n json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;\n json.ellps = datumDef.ellipse;\n json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n }\n }\n if (!json.a) { // do we have an ellipsoid?\n var ellipse = Ellipsoid[json.ellps] ? Ellipsoid[json.ellps] : Ellipsoid.WGS84;\n extend(json, ellipse);\n }\n if (json.rf && !json.b) {\n json.b = (1.0 - 1.0 / json.rf) * json.a;\n }\n if (json.rf === 0 || Math.abs(json.a - json.b) < EPSLN) {\n json.sphere = true;\n json.b = json.a;\n }\n json.a2 = json.a * json.a; // used in geocentric\n json.b2 = json.b * json.b; // used in geocentric\n json.es = (json.a2 - json.b2) / json.a2; // e ^ 2\n json.e = Math.sqrt(json.es); // eccentricity\n if (json.R_A) {\n json.a *= 1 - json.es * (SIXTH + json.es * (RA4 + json.es * RA6));\n json.a2 = json.a * json.a;\n json.b2 = json.b * json.b;\n json.es = 0;\n }\n json.ep2 = (json.a2 - json.b2) / json.b2; // used in geocentric\n if (!json.k0) {\n json.k0 = 1.0; //default value\n }\n //DGR 2010-11-12: axis\n if (!json.axis) {\n json.axis = \"enu\";\n }\n\n if (!json.datum) {\n json.datum = datum(json);\n }\n return json;\n};\n","exports.init = function() {\n //no-op for longlat\n};\n\nfunction identity(pt) {\n return pt;\n}\nexports.forward = identity;\nexports.inverse = identity;\nexports.names = [\"longlat\", \"identity\"];\n","var msfnz = require('../common/msfnz');\nvar HALF_PI = Math.PI/2;\nvar EPSLN = 1.0e-10;\nvar R2D = 57.29577951308232088;\nvar adjust_lon = require('../common/adjust_lon');\nvar FORTPI = Math.PI/4;\nvar tsfnz = require('../common/tsfnz');\nvar phi2z = require('../common/phi2z');\nexports.init = function() {\n var con = this.b / this.a;\n this.es = 1 - con * con;\n if(!('x0' in this)){\n this.x0 = 0;\n }\n if(!('y0' in this)){\n this.y0 = 0;\n }\n this.e = Math.sqrt(this.es);\n if (this.lat_ts) {\n if (this.sphere) {\n this.k0 = Math.cos(this.lat_ts);\n }\n else {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n }\n else {\n if (!this.k0) {\n if (this.k) {\n this.k0 = this.k;\n }\n else {\n this.k0 = 1;\n }\n }\n }\n};\n\n/* Mercator forward equations--mapping lat,long to x,y\n --------------------------------------------------*/\n\nexports.forward = function(p) {\n var lon = p.x;\n var lat = p.y;\n // convert to radians\n if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n return null;\n }\n\n var x, y;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n return null;\n }\n else {\n if (this.sphere) {\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n }\n else {\n var sinphi = Math.sin(lat);\n var ts = tsfnz(this.e, lat, sinphi);\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 - this.a * this.k0 * Math.log(ts);\n }\n p.x = x;\n p.y = y;\n return p;\n }\n};\n\n\n/* Mercator inverse equations--mapping x,y to lat/long\n --------------------------------------------------*/\nexports.inverse = function(p) {\n\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n }\n else {\n var ts = Math.exp(-y / (this.a * this.k0));\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n p.x = lon;\n p.y = lat;\n return p;\n};\n\nexports.names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\n","var projs = [\n require('./projections/merc'),\n require('./projections/longlat')\n];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n var len = projStore.length;\n if (!proj.names) {\n console.log(i);\n return true;\n }\n projStore[len] = proj;\n proj.names.forEach(function(n) {\n names[n.toLowerCase()] = len;\n });\n return this;\n}\n\nexports.add = add;\n\nexports.get = function(name) {\n if (!name) {\n return false;\n }\n var n = name.toLowerCase();\n if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n return projStore[names[n]];\n }\n};\nexports.start = function() {\n projs.forEach(add);\n};\n","exports.ft = {to_meter: 0.3048};\nexports['us-ft'] = {to_meter: 1200 / 3937};\n","exports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"","var D2R = 0.01745329251994329577;\nvar PrimeMeridian = require('./constants/PrimeMeridian');\nvar units = require('./constants/units');\n\nmodule.exports = function(defData) {\n var self = {};\n var paramObj = {};\n defData.split(\"+\").map(function(v) {\n return v.trim();\n }).filter(function(a) {\n return a;\n }).forEach(function(a) {\n var split = a.split(\"=\");\n split.push(true);\n paramObj[split[0].toLowerCase()] = split[1];\n });\n var paramName, paramVal, paramOutname;\n var params = {\n proj: 'projName',\n datum: 'datumCode',\n rf: function(v) {\n self.rf = parseFloat(v);\n },\n lat_0: function(v) {\n self.lat0 = v * D2R;\n },\n lat_1: function(v) {\n self.lat1 = v * D2R;\n },\n lat_2: function(v) {\n self.lat2 = v * D2R;\n },\n lat_ts: function(v) {\n self.lat_ts = v * D2R;\n },\n lon_0: function(v) {\n self.long0 = v * D2R;\n },\n lon_1: function(v) {\n self.long1 = v * D2R;\n },\n lon_2: function(v) {\n self.long2 = v * D2R;\n },\n alpha: function(v) {\n self.alpha = parseFloat(v) * D2R;\n },\n lonc: function(v) {\n self.longc = v * D2R;\n },\n x_0: function(v) {\n self.x0 = parseFloat(v);\n },\n y_0: function(v) {\n self.y0 = parseFloat(v);\n },\n k_0: function(v) {\n self.k0 = parseFloat(v);\n },\n k: function(v) {\n self.k0 = parseFloat(v);\n },\n a: function(v) {\n self.a = parseFloat(v);\n },\n b: function(v) {\n self.b = parseFloat(v);\n },\n r_a: function() {\n self.R_A = true;\n },\n zone: function(v) {\n self.zone = parseInt(v, 10);\n },\n south: function() {\n self.utmSouth = true;\n },\n towgs84: function(v) {\n self.datum_params = v.split(\",\").map(function(a) {\n return parseFloat(a);\n });\n },\n to_meter: function(v) {\n self.to_meter = parseFloat(v);\n },\n units: function(v) {\n self.units = v;\n if (units[v]) {\n self.to_meter = units[v].to_meter;\n }\n },\n from_greenwich: function(v) {\n self.from_greenwich = v * D2R;\n },\n pm: function(v) {\n self.from_greenwich = (PrimeMeridian[v] ? PrimeMeridian[v] : parseFloat(v)) * D2R;\n },\n nadgrids: function(v) {\n if (v === '@null') {\n self.datumCode = 'none';\n }\n else {\n self.nadgrids = v;\n }\n },\n axis: function(v) {\n var legalAxis = \"ewnsud\";\n if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n self.axis = v;\n }\n }\n };\n for (paramName in paramObj) {\n paramVal = paramObj[paramName];\n if (paramName in params) {\n paramOutname = params[paramName];\n if (typeof paramOutname === 'function') {\n paramOutname(paramVal);\n }\n else {\n self[paramOutname] = paramVal;\n }\n }\n else {\n self[paramName] = paramVal;\n }\n }\n if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n self.datumCode = self.datumCode.toLowerCase();\n }\n return self;\n};\n","var D2R = 0.01745329251994329577;\nvar extend = require('./extend');\n\nfunction mapit(obj, key, v) {\n obj[key] = v.map(function(aa) {\n var o = {};\n sExpr(aa, o);\n return o;\n }).reduce(function(a, b) {\n return extend(a, b);\n }, {});\n}\n\nfunction sExpr(v, obj) {\n var key;\n if (!Array.isArray(v)) {\n obj[v] = true;\n return;\n }\n else {\n key = v.shift();\n if (key === 'PARAMETER') {\n key = v.shift();\n }\n if (v.length === 1) {\n if (Array.isArray(v[0])) {\n obj[key] = {};\n sExpr(v[0], obj[key]);\n }\n else {\n obj[key] = v[0];\n }\n }\n else if (!v.length) {\n obj[key] = true;\n }\n else if (key === 'TOWGS84') {\n obj[key] = v;\n }\n else {\n obj[key] = {};\n if (['UNIT', 'PRIMEM', 'VERT_DATUM'].indexOf(key) > -1) {\n obj[key] = {\n name: v[0].toLowerCase(),\n convert: v[1]\n };\n if (v.length === 3) {\n obj[key].auth = v[2];\n }\n }\n else if (key === 'SPHEROID') {\n obj[key] = {\n name: v[0],\n a: v[1],\n rf: v[2]\n };\n if (v.length === 4) {\n obj[key].auth = v[3];\n }\n }\n else if (['GEOGCS', 'GEOCCS', 'DATUM', 'VERT_CS', 'COMPD_CS', 'LOCAL_CS', 'FITTED_CS', 'LOCAL_DATUM'].indexOf(key) > -1) {\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n }\n else if (v.every(function(aa) {\n return Array.isArray(aa);\n })) {\n mapit(obj, key, v);\n }\n else {\n sExpr(v, obj[key]);\n }\n }\n }\n}\n\nfunction rename(obj, params) {\n var outName = params[0];\n var inName = params[1];\n if (!(outName in obj) && (inName in obj)) {\n obj[outName] = obj[inName];\n if (params.length === 3) {\n obj[outName] = params[2](obj[outName]);\n }\n }\n}\n\nfunction d2r(input) {\n return input * D2R;\n}\n\nfunction cleanWKT(wkt) {\n if (wkt.type === 'GEOGCS') {\n wkt.projName = 'longlat';\n }\n else if (wkt.type === 'LOCAL_CS') {\n wkt.projName = 'identity';\n wkt.local = true;\n }\n else {\n if (typeof wkt.PROJECTION === \"object\") {\n wkt.projName = Object.keys(wkt.PROJECTION)[0];\n }\n else {\n wkt.projName = wkt.PROJECTION;\n }\n }\n if (wkt.UNIT) {\n wkt.units = wkt.UNIT.name.toLowerCase();\n if (wkt.units === 'metre') {\n wkt.units = 'meter';\n }\n if (wkt.UNIT.convert) {\n if (wkt.type === 'GEOGCS') {\n if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n wkt.to_meter = parseFloat(wkt.UNIT.convert, 10)*wkt.DATUM.SPHEROID.a;\n }\n } else {\n wkt.to_meter = parseFloat(wkt.UNIT.convert, 10);\n }\n }\n }\n\n if (wkt.GEOGCS) {\n //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n //}\n if (wkt.GEOGCS.DATUM) {\n wkt.datumCode = wkt.GEOGCS.DATUM.name.toLowerCase();\n }\n else {\n wkt.datumCode = wkt.GEOGCS.name.toLowerCase();\n }\n if (wkt.datumCode.slice(0, 2) === 'd_') {\n wkt.datumCode = wkt.datumCode.slice(2);\n }\n if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n wkt.datumCode = 'nzgd49';\n }\n if (wkt.datumCode === \"wgs_1984\") {\n if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n wkt.sphere = true;\n }\n wkt.datumCode = 'wgs84';\n }\n if (wkt.datumCode.slice(-6) === '_ferro') {\n wkt.datumCode = wkt.datumCode.slice(0, - 6);\n }\n if (wkt.datumCode.slice(-8) === '_jakarta') {\n wkt.datumCode = wkt.datumCode.slice(0, - 8);\n }\n if (~wkt.datumCode.indexOf('belge')) {\n wkt.datumCode = \"rnb72\";\n }\n if (wkt.GEOGCS.DATUM && wkt.GEOGCS.DATUM.SPHEROID) {\n wkt.ellps = wkt.GEOGCS.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n if (wkt.ellps.toLowerCase().slice(0, 13) === \"international\") {\n wkt.ellps = 'intl';\n }\n\n wkt.a = wkt.GEOGCS.DATUM.SPHEROID.a;\n wkt.rf = parseFloat(wkt.GEOGCS.DATUM.SPHEROID.rf, 10);\n }\n if (~wkt.datumCode.indexOf('osgb_1936')) {\n wkt.datumCode = \"osgb36\";\n }\n }\n if (wkt.b && !isFinite(wkt.b)) {\n wkt.b = wkt.a;\n }\n\n function toMeter(input) {\n var ratio = wkt.to_meter || 1;\n return parseFloat(input, 10) * ratio;\n }\n var renamer = function(a) {\n return rename(wkt, a);\n };\n var list = [\n ['standard_parallel_1', 'Standard_Parallel_1'],\n ['standard_parallel_2', 'Standard_Parallel_2'],\n ['false_easting', 'False_Easting'],\n ['false_northing', 'False_Northing'],\n ['central_meridian', 'Central_Meridian'],\n ['latitude_of_origin', 'Latitude_Of_Origin'],\n ['latitude_of_origin', 'Central_Parallel'],\n ['scale_factor', 'Scale_Factor'],\n ['k0', 'scale_factor'],\n ['latitude_of_center', 'Latitude_of_center'],\n ['lat0', 'latitude_of_center', d2r],\n ['longitude_of_center', 'Longitude_Of_Center'],\n ['longc', 'longitude_of_center', d2r],\n ['x0', 'false_easting', toMeter],\n ['y0', 'false_northing', toMeter],\n ['long0', 'central_meridian', d2r],\n ['lat0', 'latitude_of_origin', d2r],\n ['lat0', 'standard_parallel_1', d2r],\n ['lat1', 'standard_parallel_1', d2r],\n ['lat2', 'standard_parallel_2', d2r],\n ['alpha', 'azimuth', d2r],\n ['srsCode', 'name']\n ];\n list.forEach(renamer);\n if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === \"Lambert_Azimuthal_Equal_Area\")) {\n wkt.long0 = wkt.longc;\n }\n if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {\n wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n wkt.lat_ts = wkt.lat1;\n }\n}\nmodule.exports = function(wkt, self) {\n var lisp = JSON.parse((\",\" + wkt).replace(/\\s*\\,\\s*([A-Z_0-9]+?)(\\[)/g, ',[\"$1\",').slice(1).replace(/\\s*\\,\\s*([A-Z_0-9]+?)\\]/g, ',\"$1\"]').replace(/,\\[\"VERTCS\".+/,''));\n var type = lisp.shift();\n var name = lisp.shift();\n lisp.unshift(['name', name]);\n lisp.unshift(['type', type]);\n lisp.unshift('output');\n var obj = {};\n sExpr(lisp, obj);\n cleanWKT(obj.output);\n return extend(self, obj.output);\n};\n","module.exports = function(defs) {\n defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n\n defs.WGS84 = defs['EPSG:4326'];\n defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n defs.GOOGLE = defs['EPSG:3857'];\n defs['EPSG:900913'] = defs['EPSG:3857'];\n defs['EPSG:102113'] = defs['EPSG:3857'];\n};\n","var globals = require('./global');\nvar parseProj = require('./projString');\nvar wkt = require('./wkt');\n\nfunction defs(name) {\n /*global console*/\n var that = this;\n if (arguments.length === 2) {\n var def = arguments[1];\n if (typeof def === 'string') {\n if (def.charAt(0) === '+') {\n defs[name] = parseProj(arguments[1]);\n }\n else {\n defs[name] = wkt(arguments[1]);\n }\n } else {\n defs[name] = def;\n }\n }\n else if (arguments.length === 1) {\n if (Array.isArray(name)) {\n return name.map(function(v) {\n if (Array.isArray(v)) {\n defs.apply(that, v);\n }\n else {\n defs(v);\n }\n });\n }\n else if (typeof name === 'string') {\n if (name in defs) {\n return defs[name];\n }\n }\n else if ('EPSG' in name) {\n defs['EPSG:' + name.EPSG] = name;\n }\n else if ('ESRI' in name) {\n defs['ESRI:' + name.ESRI] = name;\n }\n else if ('IAU2000' in name) {\n defs['IAU2000:' + name.IAU2000] = name;\n }\n else {\n console.log(name);\n }\n return;\n }\n\n\n}\nglobals(defs);\nmodule.exports = defs;\n","var defs = require('./defs');\nvar wkt = require('./wkt');\nvar projStr = require('./projString');\nfunction testObj(code){\n return typeof code === 'string';\n}\nfunction testDef(code){\n return code in defs;\n}\nfunction testWKT(code){\n var codeWords = ['GEOGCS','GEOCCS','PROJCS','LOCAL_CS'];\n return codeWords.reduce(function(a,b){\n return a+1+code.indexOf(b);\n },0);\n}\nfunction testProj(code){\n return code[0] === '+';\n}\nfunction parse(code){\n if (testObj(code)) {\n //check to see if this is a WKT string\n if (testDef(code)) {\n return defs[code];\n }\n else if (testWKT(code)) {\n return wkt(code);\n }\n else if (testProj(code)) {\n return projStr(code);\n }\n }else{\n return code;\n }\n}\n\nmodule.exports = parse;","var parseCode = require(\"./parseCode\");\nvar extend = require('./extend');\nvar projections = require('./projections');\nvar deriveConstants = require('./deriveConstants');\n\nfunction Projection(srsCode,callback) {\n if (!(this instanceof Projection)) {\n return new Projection(srsCode);\n }\n callback = callback || function(error){\n if(error){\n throw error;\n }\n };\n var json = parseCode(srsCode);\n if(typeof json !== 'object'){\n callback(srsCode);\n return;\n }\n var modifiedJSON = deriveConstants(json);\n var ourProj = Projection.projections.get(modifiedJSON.projName);\n if(ourProj){\n extend(this, modifiedJSON);\n extend(this, ourProj);\n this.init();\n callback(null, this);\n }else{\n callback(srsCode);\n }\n}\nProjection.projections = projections;\nProjection.projections.start();\nmodule.exports = Projection;\n","module.exports = function(crs, denorm, point) {\n var xin = point.x,\n yin = point.y,\n zin = point.z || 0.0;\n var v, t, i;\n for (i = 0; i < 3; i++) {\n if (denorm && i === 2 && point.z === undefined) {\n continue;\n }\n if (i === 0) {\n v = xin;\n t = 'x';\n }\n else if (i === 1) {\n v = yin;\n t = 'y';\n }\n else {\n v = zin;\n t = 'z';\n }\n switch (crs.axis[i]) {\n case 'e':\n point[t] = v;\n break;\n case 'w':\n point[t] = -v;\n break;\n case 'n':\n point[t] = v;\n break;\n case 's':\n point[t] = -v;\n break;\n case 'u':\n if (point[t] !== undefined) {\n point.z = v;\n }\n break;\n case 'd':\n if (point[t] !== undefined) {\n point.z = -v;\n }\n break;\n default:\n //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n return null;\n }\n }\n return point;\n};\n","var PJD_3PARAM = 1;\nvar PJD_7PARAM = 2;\nvar PJD_GRIDSHIFT = 3;\nvar PJD_NODATUM = 5; // WGS84 or equivalent\nvar SRS_WGS84_SEMIMAJOR = 6378137; // only used in grid shift transforms\nvar SRS_WGS84_ESQUARED = 0.006694379990141316; //DGR: 2012-07-29\nmodule.exports = function(source, dest, point) {\n var wp, i, l;\n\n function checkParams(fallback) {\n return (fallback === PJD_3PARAM || fallback === PJD_7PARAM);\n }\n // Short cut if the datums are identical.\n if (source.compare_datums(dest)) {\n return point; // in this case, zero is sucess,\n // whereas cs_compare_datums returns 1 to indicate TRUE\n // confusing, should fix this\n }\n\n // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n return point;\n }\n\n //DGR: 2012-07-29 : add nadgrids support (begin)\n var src_a = source.a;\n var src_es = source.es;\n\n var dst_a = dest.a;\n var dst_es = dest.es;\n\n var fallback = source.datum_type;\n // If this datum requires grid shifts, then apply it to geodetic coordinates.\n if (fallback === PJD_GRIDSHIFT) {\n if (this.apply_gridshift(source, 0, point) === 0) {\n source.a = SRS_WGS84_SEMIMAJOR;\n source.es = SRS_WGS84_ESQUARED;\n }\n else {\n // try 3 or 7 params transformation or nothing ?\n if (!source.datum_params) {\n source.a = src_a;\n source.es = source.es;\n return point;\n }\n wp = 1;\n for (i = 0, l = source.datum_params.length; i < l; i++) {\n wp *= source.datum_params[i];\n }\n if (wp === 0) {\n source.a = src_a;\n source.es = source.es;\n return point;\n }\n if (source.datum_params.length > 3) {\n fallback = PJD_7PARAM;\n }\n else {\n fallback = PJD_3PARAM;\n }\n }\n }\n if (dest.datum_type === PJD_GRIDSHIFT) {\n dest.a = SRS_WGS84_SEMIMAJOR;\n dest.es = SRS_WGS84_ESQUARED;\n }\n // Do we need to go through geocentric coordinates?\n if (source.es !== dest.es || source.a !== dest.a || checkParams(fallback) || checkParams(dest.datum_type)) {\n //DGR: 2012-07-29 : add nadgrids support (end)\n // Convert to geocentric coordinates.\n source.geodetic_to_geocentric(point);\n // CHECK_RETURN;\n // Convert between datums\n if (checkParams(source.datum_type)) {\n source.geocentric_to_wgs84(point);\n // CHECK_RETURN;\n }\n if (checkParams(dest.datum_type)) {\n dest.geocentric_from_wgs84(point);\n // CHECK_RETURN;\n }\n // Convert back to geodetic coordinates\n dest.geocentric_to_geodetic(point);\n // CHECK_RETURN;\n }\n // Apply grid shift to destination if required\n if (dest.datum_type === PJD_GRIDSHIFT) {\n this.apply_gridshift(dest, 1, point);\n // CHECK_RETURN;\n }\n\n source.a = src_a;\n source.es = src_es;\n dest.a = dst_a;\n dest.es = dst_es;\n\n return point;\n};\n\n","var D2R = 0.01745329251994329577;\nvar R2D = 57.29577951308232088;\nvar PJD_3PARAM = 1;\nvar PJD_7PARAM = 2;\nvar datum_transform = require('./datum_transform');\nvar adjust_axis = require('./adjust_axis');\nvar proj = require('./Proj');\nvar toPoint = require('./common/toPoint');\nmodule.exports = function transform(source, dest, point) {\n var wgs84;\n if (Array.isArray(point)) {\n point = toPoint(point);\n }\n function checkNotWGS(source, dest) {\n return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== \"WGS84\");\n }\n\n // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n if (source.datum && dest.datum && (checkNotWGS(source, dest) || checkNotWGS(dest, source))) {\n wgs84 = new proj('WGS84');\n transform(source, wgs84, point);\n source = wgs84;\n }\n // DGR, 2010/11/12\n if (source.axis !== \"enu\") {\n adjust_axis(source, false, point);\n }\n // Transform source points to long/lat, if they aren't already.\n if (source.projName === \"longlat\") {\n point.x *= D2R; // convert degrees to radians\n point.y *= D2R;\n }\n else {\n if (source.to_meter) {\n point.x *= source.to_meter;\n point.y *= source.to_meter;\n }\n source.inverse(point); // Convert Cartesian to longlat\n }\n // Adjust for the prime meridian if necessary\n if (source.from_greenwich) {\n point.x += source.from_greenwich;\n }\n\n // Convert datums if needed, and if possible.\n point = datum_transform(source.datum, dest.datum, point);\n\n // Adjust for the prime meridian if necessary\n if (dest.from_greenwich) {\n point.x -= dest.from_greenwich;\n }\n\n if (dest.projName === \"longlat\") {\n // convert radians to decimal degrees\n point.x *= R2D;\n point.y *= R2D;\n }\n else { // else project\n dest.forward(point);\n if (dest.to_meter) {\n point.x /= dest.to_meter;\n point.y /= dest.to_meter;\n }\n }\n\n // DGR, 2010/11/12\n if (dest.axis !== \"enu\") {\n adjust_axis(dest, true, point);\n }\n\n return point;\n};","var mgrs = require('mgrs');\n\nfunction Point(x, y, z) {\n if (!(this instanceof Point)) {\n return new Point(x, y, z);\n }\n if (Array.isArray(x)) {\n this.x = x[0];\n this.y = x[1];\n this.z = x[2] || 0.0;\n } else if(typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z || 0.0;\n } else if (typeof x === 'string' && typeof y === 'undefined') {\n var coords = x.split(',');\n this.x = parseFloat(coords[0], 10);\n this.y = parseFloat(coords[1], 10);\n this.z = parseFloat(coords[2], 10) || 0.0;\n } else {\n this.x = x;\n this.y = y;\n this.z = z || 0.0;\n }\n console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n return new Point(mgrs.toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n return mgrs.forward([this.x, this.y], accuracy);\n};\nmodule.exports = Point;\n","var proj = require('./Proj');\nvar transform = require('./transform');\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords) {\n var transformedArray;\n if (Array.isArray(coords)) {\n transformedArray = transform(from, to, coords);\n if (coords.length === 3) {\n return [transformedArray.x, transformedArray.y, transformedArray.z];\n }\n else {\n return [transformedArray.x, transformedArray.y];\n }\n }\n else {\n return transform(from, to, coords);\n }\n}\n\nfunction checkProj(item) {\n if (item instanceof proj) {\n return item;\n }\n if (item.oProj) {\n return item.oProj;\n }\n return proj(item);\n}\nfunction proj4(fromProj, toProj, coord) {\n fromProj = checkProj(fromProj);\n var single = false;\n var obj;\n if (typeof toProj === 'undefined') {\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n coord = toProj;\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n toProj = checkProj(toProj);\n if (coord) {\n return transformer(fromProj, toProj, coord);\n }\n else {\n obj = {\n forward: function(coords) {\n return transformer(fromProj, toProj, coords);\n },\n inverse: function(coords) {\n return transformer(toProj, fromProj, coords);\n }\n };\n if (single) {\n obj.oProj = toProj;\n }\n return obj;\n }\n}\nmodule.exports = proj4;","var proj4 = require('./core');\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = require('./Proj');\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = require('./Point');\nproj4.toPoint = require(\"./common/toPoint\");\nproj4.defs = require('./defs');\nproj4.transform = require('./transform');\nproj4.mgrs = require('mgrs');\nproj4.version = require('../package.json').version;\nrequire('./includedProjections')(proj4);\nmodule.exports = proj4;","(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob()\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n reader.readAsText(blob)\n return fileReaderReady(reader)\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (!body) {\n this._bodyText = ''\n } else if (support.arrayBuffer && ArrayBuffer.prototype.isPrototypeOf(body)) {\n // Only support ArrayBuffers for POST method.\n // Receiving ArrayBuffers happens via Blobs, instead.\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = (xhr.getAllResponseHeaders() || '').trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.get = get;\nexports.load = load;\nexports.set = set;\n\nrequire('whatwg-fetch');\n\nvar _proj = require('proj4');\n\nvar _proj2 = _interopRequireDefault(_proj);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar ROOT_PREFIX = 'http://www.opengis.net/def/crs/';\nvar OGC_PREFIX = ROOT_PREFIX + 'OGC/';\nvar EPSG_PREFIX = ROOT_PREFIX + 'EPSG/0/';\n\n/**\r\n * @typedef {Object} Projection\r\n * @property {function(lonlat: Array<number>): Array<number>} forward\r\n * Transforms a geographic WGS84 [longitude, latitude] coordinate to an [x, y] projection coordinate.\r\n * @property {function(xy: Array<number>): Array<number>} inverse\r\n * Transforms an [x, y] projection coordinate to a geographic WGS84 [longitude, latitude] coordinate.\r\n */\n\n// a cache of URI string -> Projection object mappings\nvar projCache = {};\n\n// work-arounds for incorrect epsg.io / proj4 behaviour\nvar needsAxesReordering = _defineProperty({}, EPSG_PREFIX + 4326, true);\n\n// store some built-in projections which are not available on epsg.io\nvar LONLAT = (0, _proj2.default)('+proj=longlat +datum=WGS84 +no_defs');\nset(OGC_PREFIX + '1.3/CRS84', LONLAT);\nset(EPSG_PREFIX + 4979, reverseAxes(LONLAT));\n\n/**\r\n * Returns a stored {@link Projection} for a given URI, or {@link undefined} if no {@link Projection} is stored for that URI.\r\n * \r\n * @param {string} crsUri The CRS URI for which to return a {@link Projection}.\r\n * @return {Projection|undefined} A {@link Projection} object, or {@link undefined} if not stored by {@link load} or {@link set}.\r\n * \r\n * @example\r\n * // has to be stored previously via load() or set()\r\n * var proj = uriproj.get('http://www.opengis.net/def/crs/EPSG/0/27700')\r\n * var [longitude, latitude] = [-1.54, 55.5]\r\n * var [easting,northing] = proj.forward([longitude, latitude])\r\n */\nfunction get(crsUri) {\n return projCache[crsUri];\n}\n\n/**\r\n * Returns a {@link Promise} that succeeds with an already stored {@link Projection} or, if not stored,\r\n * that remotely loads the {@link Projection} (currently using https://epsg.io), stores it, and then succeeds with it.\r\n * \r\n * @param {string} crsUri The CRS URI for which to return a projection.\r\n * @return {Promise<Projection,Error>} A {@link Promise} object succeeding with a {@link Projection} object,\r\n * and failing with an {@link Error} object in case of network or PROJ.4 parsing problems.\r\n * \r\n * @example <caption>Loading a single projection</caption>\r\n * uriproj.load('http://www.opengis.net/def/crs/EPSG/0/27700').then(proj => {\r\n * var [longitude, latitude] = [-1.54, 55.5]\r\n * var [easting,northing] = proj.forward([longitude, latitude])\r\n * })\r\n * \r\n * @example <caption>Loading multiple projections</caption>\r\n * var uris = [\r\n * 'http://www.opengis.net/def/crs/EPSG/0/27700',\r\n * 'http://www.opengis.net/def/crs/EPSG/0/7376',\r\n * 'http://www.opengis.net/def/crs/EPSG/0/7375']\r\n * Promise.all(uris.map(uriproj.load)).then(projs => {\r\n * // all projections are loaded and stored now\r\n * \r\n * // get the first projection\r\n * var proj1 = projs[0]\r\n * // or:\r\n * var proj1 = uriproj.get(uris[0])\r\n * })\r\n * \r\n */\nfunction load(crsUri) {\n if (crsUri in projCache) {\n return Promise.resolve(projCache[crsUri]);\n }\n\n var epsg = crsUriToEPSG(crsUri);\n var url = 'https://epsg.io/' + epsg + '.proj4';\n\n return fetch(url).then(function (response) {\n if (!response.ok) {\n throw new Error('HTTP response code: ' + response.status);\n }\n return response.text();\n }).then(function (proj4string) {\n return set(crsUri, proj4string, { reverseAxes: crsUri in needsAxesReordering });\n });\n}\n\n/**\r\n * Stores a given projection for a given URI that can then be accessed via {@link get} and {@link load}.\r\n * \r\n * @param {string} crsUri The CRS URI for which to store the projection.\r\n * @param {string|Projection} proj A proj4 string or a {@link Projection} object.\r\n * @param {Object} [options] Options object.\r\n * @param {boolean} [options.reverseAxes=false] If proj is a proj4 string, whether to reverse the projection axes.\r\n * @return {Projection} The newly stored projection.\r\n * @throws {Error} If crsUri or proj is missing, or if a PROJ.4 string cannot be parsed by proj4js. \r\n * \r\n * @example <caption>Storing a projection using a PROJ.4 string</caption>\r\n * var uri = 'http://www.opengis.net/def/crs/EPSG/0/27700'\r\n * var proj4 = '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 ' +\r\n * '+ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs'\r\n * uriproj.set(uri, proj4)\r\n * \r\n * @example <caption>Storing a projection using a Projection object</caption>\r\n * var uri = 'http://www.opengis.net/def/crs/EPSG/0/27700'\r\n * var proj = {\r\n * forward: ([lon,lat]) => [..., ...],\r\n * inverse: ([x,y]) => [..., ...]\r\n * }\r\n * uriproj.set(uri, proj)\r\n */\nfunction set(crsUri, proj) {\n var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n if (!crsUri || !proj) {\n throw new Error('crsUri and proj cannot be empty');\n }\n var projobj = void 0;\n if (typeof proj === 'string') {\n projobj = (0, _proj2.default)(proj);\n if (!projobj) {\n throw new Error('Unsupported proj4 string: ' + proj);\n }\n if (options.reverseAxes) {\n projobj = reverseAxes(projobj);\n }\n } else {\n projobj = proj;\n }\n projCache[crsUri] = projobj;\n return projobj;\n}\n\n/**\r\n * Return the EPSG code of an OGC CRS URI of the form\r\n * http://www.opengis.net/def/crs/EPSG/0/1234 (would return 1234).\r\n * \r\n * @param {string} crsUri The CRS URI for which to return the EPSG code.\r\n * @return {string} The EPSG code.\r\n */\nfunction crsUriToEPSG(uri) {\n var epsg = void 0;\n if (uri.indexOf(EPSG_PREFIX) === 0) {\n epsg = uri.substr(EPSG_PREFIX.length);\n } else {\n throw new Error('Unsupported CRS URI: ' + uri);\n }\n\n return epsg;\n}\n\n/**\r\n * Reverses projection axis order.\r\n * \r\n * For example, a projection with lon, lat axis order is turned into one with lat, lon order.\r\n * This is necessary since geographic projections in proj4 can only be defined with\r\n * lon,lat order, however some CRSs have lat,lon order (like EPSG4326).\r\n * Incorrectly, epsg.io returns a proj4 string (with lon,lat order) even if the CRS\r\n * has lat,lon order. This function manually flips the axis order of a given projection.\r\n * See also `needsAxesReordering` above.\r\n * \r\n * @param {Projection} proj The projection whose axis order to revert.\r\n * @return {Projection} The projection with reversed axis order.\r\n */\nfunction reverseAxes(proj) {\n return {\n forward: function forward(pos) {\n return proj.forward(pos).reverse();\n },\n inverse: function inverse(pos) {\n return proj.inverse([pos[1], pos[0]]);\n }\n };\n}","import * as uriproj from 'uriproj'\r\nimport { COVJSON_DATATYPE_TUPLE, COVJSON_DATATYPE_POLYGON } from '../constants.js'\r\n\r\nconst OPENGIS_CRS_PREFIX = 'http://www.opengis.net/def/crs/'\r\n\r\n/** 3D WGS84 in lat-lon-height order */\r\nconst EPSG4979 = OPENGIS_CRS_PREFIX + 'EPSG/0/4979'\r\n\r\n/** 2D WGS84 in lat-lon order */\r\nconst EPSG4326 = OPENGIS_CRS_PREFIX + 'EPSG/0/4326'\r\n\r\n/** 2D WGS84 in lon-lat order */\r\nconst CRS84 = OPENGIS_CRS_PREFIX + 'OGC/1.3/CRS84'\r\n\r\n/** CRSs in which position is specified by geodetic latitude and longitude */\r\nconst GeographicCRSs = [EPSG4979, EPSG4326, CRS84]\r\n\r\n/** Position of longitude axis */\r\nconst LongitudeAxisIndex = {\r\n [EPSG4979]: 1,\r\n [EPSG4326]: 1,\r\n [CRS84]: 0\r\n}\r\n\r\n/**\r\n * Return the reference system connection object for the given domain coordinate ID,\r\n * or undefined if none exists.\r\n */\r\nexport function getReferenceObject (domain, coordinateId) {\r\n let ref = domain.referencing.find(ref => ref.coordinates.indexOf(coordinateId) !== -1)\r\n return ref\r\n}\r\n\r\n/**\r\n * Return the reference system connection object of the horizontal CRS of the domain,\r\n * or ``undefined`` if none found.\r\n * A horizontal CRS is either geodetic (typically ellipsoidal, meaning lat/lon)\r\n * or projected, and may be 2D or 3D (including height).\r\n */\r\nexport function getHorizontalCRSReferenceObject (domain) {\r\n let isHorizontal = ref =>\r\n ['GeodeticCRS', 'GeographicCRS', 'GeocentricCRS', 'ProjectedCRS'].indexOf(ref.system.type) !== -1\r\n let ref = domain.referencing.find(isHorizontal)\r\n return ref\r\n}\r\n\r\n/**\r\n * Return whether the reference system is a CRS in which\r\n * horizontal position is specified by geodetic latitude and longitude.\r\n */\r\nexport function isEllipsoidalCRS (rs) {\r\n return rs.type === 'GeographicCRS' || GeographicCRSs.indexOf(rs.id) !== -1\r\n}\r\n\r\n/**\r\n * Return a projection object based on the CRS found in the coverage domain.\r\n * If no CRS is found or it is unsupported, then ``undefined`` is returned.\r\n * For non-built-in projections, this function returns already-cached projections\r\n * that were loaded via {@link loadProjection}.\r\n *\r\n * A projection converts between geodetic lat/lon and projected x/y values.\r\n *\r\n * For lat/lon CRSs the projection is defined such that an input lat/lon\r\n * position gets projected/wrapped to the longitude range used in the domain, for example\r\n * [0,360]. The purpose of this is to make intercomparison between different coverages easier.\r\n *\r\n * The following limitations currently apply:\r\n * - only primitive axes and Tuple/Polygon composite axes are supported for lat/lon CRSs\r\n *\r\n * @param {Domain} domain A coverage domain object.\r\n * @return {IProjection} A stripped-down Leaflet IProjection object.\r\n */\r\nexport function getProjection (domain) {\r\n let isEllipsoidal = domain.referencing.some(ref => isEllipsoidalCRS(ref.system))\r\n if (isEllipsoidal) {\r\n return getLonLatProjection(domain)\r\n }\r\n\r\n // try to get projection via uriproj library\r\n let ref = getHorizontalCRSReferenceObject(domain)\r\n if (!ref) {\r\n throw new Error('No horizontal CRS found in coverage domain')\r\n }\r\n\r\n let uri = ref.system.id\r\n let proj = uriproj.get(uri)\r\n if (!proj) {\r\n throw new Error('Projection ' + uri + ' not cached in uriproj, use loadProjection() instead')\r\n }\r\n return wrapProj4(proj)\r\n}\r\n\r\n/**\r\n * Like {@link getProjection} but will also try to remotely load a projection definition via the uriproj library.\r\n * On success, the loaded projection is automatically cached for later use and can be directly requested\r\n * with {@link getProjection}.\r\n *\r\n * @param {Domain} domain A coverage domain object.\r\n * @return {Promise<IProjection>} A Promise succeeding with a stripped-down Leaflet IProjection object.\r\n */\r\nexport function loadProjection (domain) {\r\n try {\r\n // we try the local one first so that we get our special lon/lat projection (which doesn't exist in uriproj)\r\n return getProjection(domain)\r\n } catch (e) {}\r\n\r\n // try to load projection remotely via uriproj library\r\n let ref = getHorizontalCRSReferenceObject(domain)\r\n if (!ref) {\r\n throw new Error('No horizontal CRS found in coverage domain')\r\n }\r\n\r\n let uri = ref.system.id\r\n return uriproj.load(uri).then(proj => wrapProj4(proj))\r\n}\r\n\r\n/**\r\n * Return the coordinate IDs of the horizontal CRS of the domain.\r\n *\r\n * @deprecated use getHorizontalCRSCoordinateIDs\r\n * @example\r\n * var [xComp,yComp] = getHorizontalCRSComponents(domain)\r\n */\r\nexport function getHorizontalCRSComponents (domain) {\r\n return getHorizontalCRSCoordinateIDs(domain)\r\n}\r\n\r\n/**\r\n * Return the coordinate IDs of the horizontal CRS of the domain.\r\n *\r\n * @example\r\n * var [xComp,yComp] = getHorizontalCRSCoordinateIDs(domain)\r\n */\r\nexport function getHorizontalCRSCoordinateIDs (domain) {\r\n let ref = getHorizontalCRSReferenceObject(domain)\r\n return ref.coordinates\r\n}\r\n\r\n/**\r\n * Wraps a proj4 Projection object into an IProjection object.\r\n */\r\nfunction wrapProj4 (proj) {\r\n return {\r\n project: ({lon, lat}) => {\r\n let [x, y] = proj.forward([lon, lat])\r\n return {x, y}\r\n },\r\n unproject: ({x, y}) => {\r\n let [lon, lat] = proj.inverse([x, y])\r\n return {lon, lat}\r\n }\r\n }\r\n}\r\n\r\nfunction getLonLatProjection (domain) {\r\n let ref = domain.referencing.find(ref => isEllipsoidalCRS(ref.system))\r\n let lonIdx = LongitudeAxisIndex[ref.system.id]\r\n if (lonIdx > 1) {\r\n // this should never happen as longitude is always the first or second axis\r\n throw new Error()\r\n }\r\n\r\n let lonComponent = ref.coordinates[lonIdx]\r\n\r\n // we find the min and max longitude occuring in the domain by inspecting the axis values\r\n // Note: this is inefficient for big composite axes.\r\n // In that case, something like a domain extent might help which has the min/max values for each component.\r\n // TODO handle bounds\r\n let lonMin, lonMax\r\n if (domain.axes.has(lonComponent)) {\r\n // longitude is a grid axis\r\n let lonAxisName = lonComponent\r\n let lonAxisVals = domain.axes.get(lonAxisName).values\r\n lonMin = lonAxisVals[0]\r\n lonMax = lonAxisVals[lonAxisVals.length - 1]\r\n if (lonMin > lonMax) {\r\n [lonMin, lonMax] = [lonMax, lonMin]\r\n }\r\n } else {\r\n // TODO there should be no dependency to CovJSON\r\n\r\n // longitude is not a primitive grid axis but a component of a composite axis\r\n\r\n // find the composite axis containing the longitude component\r\n let axes = [...domain.axes.values()]\r\n let axis = axes.find(axis => axis.coordinates.indexOf(lonComponent) !== -1)\r\n let lonCompIdx = axis.coordinates.indexOf(lonComponent)\r\n\r\n // scan the composite axis for min/max longitude values\r\n lonMin = Infinity\r\n lonMax = -Infinity\r\n if (axis.dataType === COVJSON_DATATYPE_TUPLE) {\r\n for (let tuple of axis.values) {\r\n let lon = tuple[lonCompIdx]\r\n lonMin = Math.min(lon, lonMin)\r\n lonMax = Math.max(lon, lonMax)\r\n }\r\n } else if (axis.dataType === COVJSON_DATATYPE_POLYGON) {\r\n for (let poly of axis.values) {\r\n for (let ring of poly) {\r\n for (let point of ring) {\r\n let lon = point[lonCompIdx]\r\n lonMin = Math.min(lon, lonMin)\r\n lonMax = Math.max(lon, lonMax)\r\n }\r\n }\r\n }\r\n } else {\r\n throw new Error('Unsupported data type: ' + axis.dataType)\r\n }\r\n }\r\n\r\n let lonMid = (lonMax + lonMin) / 2\r\n let lonMinExtended = lonMid - 180\r\n let lonMaxExtended = lonMid + 180\r\n\r\n return {\r\n project: ({lon, lat}) => {\r\n let lonProjected\r\n if (lonMinExtended <= lon && lon <= lonMaxExtended) {\r\n // use unchanged to avoid introducing rounding errors\r\n lonProjected = lon\r\n } else {\r\n lonProjected = ((lon - lonMinExtended) % 360 + 360) % 360 + lonMinExtended\r\n }\r\n\r\n let [x, y] = lonIdx === 0 ? [lonProjected, lat] : [lat, lonProjected]\r\n return {x, y}\r\n },\r\n unproject: ({x, y}) => {\r\n let [lon, lat] = lonIdx === 0 ? [x, y] : [y, x]\r\n return {lon, lat}\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Reprojects coordinates from one projection to another.\r\n */\r\nexport function reprojectCoords (pos, fromProjection, toProjection) {\r\n return toProjection.project(fromProjection.unproject(pos))\r\n}\r\n\r\n/**\r\n * Returns a function which converts an arbitrary longitude to the\r\n * longitude extent used in the coverage domain.\r\n * This only supports primitive axes since this is what subsetByValue supports.\r\n * The longitude extent is extended to 360 degrees if the actual extent is smaller.\r\n * The extension is done equally on both sides of the extent.\r\n *\r\n * For example, the domain may have longitudes within [0,360].\r\n * An input longitude of -70 is converted to 290.\r\n * All longitudes within [0,360] are returned unchanged.\r\n *\r\n * If the domain has longitudes within [10,50] then the\r\n * extended longitude range is [-150,210] (-+180 from the middle point).\r\n * An input longitude of -170 is converted to 190.\r\n * All longitudes within [-150,210] are returned unchanged.\r\n *\r\n * @ignore\r\n */\r\nexport function getLongitudeWrapper (domain, axisName) {\r\n // TODO deprecate this in favour of getProjection, check leaflet-coverage\r\n\r\n // for primitive axes, the axis identifier = component identifier\r\n if (!isLongitudeAxis(domain, axisName)) {\r\n throw new Error(`'${axisName}' is not a longitude axis`)\r\n }\r\n\r\n let vals = domain.axes.get(axisName).values\r\n let lon_min = vals[0]\r\n let lon_max = vals[vals.length - 1]\r\n if (lon_min > lon_max) {\r\n [lon_min, lon_max] = [lon_max, lon_min]\r\n }\r\n\r\n let x_mid = (lon_max + lon_min) / 2\r\n let x_min = x_mid - 180\r\n let x_max = x_mid + 180\r\n\r\n return lon => {\r\n if (x_min <= lon && lon <= x_max) {\r\n // directly return to avoid introducing rounding errors\r\n return lon\r\n } else {\r\n return ((lon - x_min) % 360 + 360) % 360 + x_min\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Return whether the given domain axis represents longitudes.\r\n *\r\n * @ignore\r\n */\r\nexport function isLongitudeAxis (domain, axisName) {\r\n let ref = getReferenceObject(domain, axisName)\r\n if (!ref) {\r\n return false\r\n }\r\n\r\n let crsId = ref.system.id\r\n // TODO should support unknown CRSs with embedded axis information\r\n if (GeographicCRSs.indexOf(crsId) === -1) {\r\n // this also covers the case when there is no ID property\r\n return false\r\n }\r\n\r\n let compIdx = ref.coordinates.indexOf(axisName)\r\n let isLongitude = LongitudeAxisIndex[crsId] === compIdx\r\n return isLongitude\r\n}\r\n\r\n/**\r\n * Returns true if the given axis has ISO8601 date strings\r\n * as axis values.\r\n */\r\nexport function isISODateAxis (domain, axisName) {\r\n let val = domain.axes.get(axisName).values[0]\r\n if (typeof val !== 'string') {\r\n return false\r\n }\r\n return !isNaN(new Date(val).getTime())\r\n}\r\n\r\nexport function asTime (inp) {\r\n let res\r\n let err = false\r\n if (typeof inp === 'string') {\r\n res = new Date(inp).getTime()\r\n } else if (inp instanceof Date) {\r\n res = inp.getTime()\r\n } else {\r\n err = true\r\n }\r\n if (isNaN(res)) {\r\n err = true\r\n }\r\n if (err) {\r\n throw new Error('Invalid date: ' + inp)\r\n }\r\n return res\r\n}\r\n","import { DOMAIN } from '../constants.js'\r\n\r\n/**\r\n * After normalization, all constraints are start,stop,step objects.\r\n * It holds that stop > start, step > 0, start >= 0, stop >= 1.\r\n * For each axis, a constraint exists.\r\n */\r\nexport function normalizeIndexSubsetConstraints (domain, constraints) {\r\n // check and normalize constraints to simplify code\r\n let normalizedConstraints = {}\r\n for (let axisName in constraints) {\r\n if (!domain.axes.has(axisName)) {\r\n // TODO clarify cov behaviour in the JS API spec\r\n continue\r\n }\r\n if (constraints[axisName] === undefined || constraints[axisName] === null) {\r\n continue\r\n }\r\n if (typeof constraints[axisName] === 'number') {\r\n let constraint = constraints[axisName]\r\n normalizedConstraints[axisName] = {start: constraint, stop: constraint + 1}\r\n } else {\r\n normalizedConstraints[axisName] = constraints[axisName]\r\n }\r\n\r\n let { start = 0, stop = domain.axes.get(axisName).values.length, step = 1 } = normalizedConstraints[axisName]\r\n if (step <= 0) {\r\n throw new Error(`Invalid constraint for ${axisName}: step=${step} must be > 0`)\r\n }\r\n if (start >= stop || start < 0) {\r\n throw new Error(`Invalid constraint for ${axisName}: stop=${stop} must be > start=${start} and both >= 0`)\r\n }\r\n normalizedConstraints[axisName] = {start, stop, step}\r\n }\r\n for (let axisName of domain.axes.keys()) {\r\n if (!(axisName in normalizedConstraints)) {\r\n let len = domain.axes.get(axisName).values.length\r\n normalizedConstraints[axisName] = {start: 0, stop: len, step: 1}\r\n }\r\n }\r\n return normalizedConstraints\r\n}\r\n\r\nexport function subsetDomainByIndex (domain, constraints) {\r\n constraints = normalizeIndexSubsetConstraints(domain, constraints)\r\n\r\n // subset the axis arrays of the domain (immediately + cached)\r\n let newdomain = {\r\n type: DOMAIN,\r\n domainType: domain.domainType,\r\n axes: new Map(domain.axes),\r\n referencing: domain.referencing\r\n }\r\n\r\n for (let axisName of Object.keys(constraints)) {\r\n let axis = domain.axes.get(axisName)\r\n let coords = axis.values\r\n let bounds = axis.bounds\r\n let constraint = constraints[axisName]\r\n let newcoords\r\n let newbounds\r\n\r\n let {start, stop, step} = constraint\r\n if (start === 0 && stop === coords.length && step === 1) {\r\n newcoords = coords\r\n newbounds = bounds\r\n } else if (step === 1) {\r\n // TypedArray has subarray which creates a view, while Array has slice which makes a copy\r\n if (coords.subarray) {\r\n newcoords = coords.subarray(start, stop)\r\n } else {\r\n newcoords = coords.slice(start, stop)\r\n }\r\n if (bounds) {\r\n newbounds = {\r\n get: i => bounds.get(start + i)\r\n }\r\n }\r\n } else {\r\n let q = Math.trunc((stop - start) / step)\r\n let r = (stop - start) % step\r\n let len = q + r\r\n newcoords = new coords.constructor(len) // array or typed array\r\n for (let i = start, j = 0; i < stop; i += step, j++) {\r\n newcoords[j] = coords[i]\r\n }\r\n if (bounds) {\r\n newbounds = {\r\n get: i => bounds.get(start + i * step)\r\n }\r\n }\r\n }\r\n\r\n let newaxis = {\r\n dataType: axis.dataType,\r\n coordinates: axis.coordinates,\r\n values: newcoords,\r\n bounds: newbounds\r\n }\r\n newdomain.axes.set(axisName, newaxis)\r\n }\r\n\r\n return newdomain\r\n}\r\n","import { isISODateAxis, isLongitudeAxis, getLongitudeWrapper, asTime } from '../domain/referencing.js'\r\nimport { normalizeIndexSubsetConstraints, subsetDomainByIndex } from '../domain/subset.js'\r\nimport { indexOfNearest, indicesOfNearest } from '../array.js'\r\nimport { COVERAGE } from '../constants.js'\r\n\r\n/**\r\n * Returns a copy of the grid coverage subsetted to the given bounding box.\r\n *\r\n * Any grid cell is included which intersects with the bounding box.\r\n *\r\n * @param {Coverage} cov A Coverage object with domain Grid.\r\n * @param {array} bbox [xmin,ymin,xmax,ymax] in native CRS coordinates.\r\n * @param {array} [axes=['x','y']] Axis names [x,y].\r\n * @returns {Promise<Coverage>} A promise with a Coverage object as result.\r\n */\r\nexport function subsetByBbox (cov, bbox, axes = ['x', 'y']) {\r\n let [xmin, ymin, xmax, ymax] = bbox\r\n return cov.subsetByValue({[axes[0]]: {start: xmin, stop: xmax}, [axes[1]]: {start: ymin, stop: ymax}})\r\n}\r\n\r\n/**\r\n * Generic subsetByIndex function that can be used when building new Coverage objects.\r\n *\r\n * @example\r\n * var cov = {\r\n * type: 'Coverage',\r\n * ...\r\n * subsetByIndex: constraints => CovUtils.subsetByIndex(cov, constraints)\r\n * }\r\n */\r\nexport function subsetByIndex (cov, constraints) {\r\n return cov.loadDomain().then(domain => {\r\n constraints = normalizeIndexSubsetConstraints(domain, constraints)\r\n let newdomain = subsetDomainByIndex(domain, constraints)\r\n\r\n // subset ranges (on request)\r\n let rangeWrapper = range => {\r\n let newrange = {\r\n dataType: range.dataType,\r\n get: obj => {\r\n // translate subsetted to original indices\r\n let newobj = {}\r\n for (let axisName of Object.keys(obj)) {\r\n let {start, step} = constraints[axisName]\r\n newobj[axisName] = start + obj[axisName] * step\r\n }\r\n return range.get(newobj)\r\n }\r\n }\r\n newrange.shape = new Map()\r\n for (let axisName of domain.axes.keys()) {\r\n let size = newdomain.axes.get(axisName).values.length\r\n newrange.shape.set(axisName, size)\r\n }\r\n return newrange\r\n }\r\n\r\n let loadRange = key => cov.loadRange(key).then(rangeWrapper)\r\n\r\n let loadRanges = keys => cov.loadRanges(keys).then(ranges => new Map([...ranges].map(([key, range]) => [key, rangeWrapper(range)]))\r\n )\r\n\r\n // assemble everything to a new coverage\r\n let newcov = {\r\n type: COVERAGE,\r\n domainType: cov.domainType,\r\n parameters: cov.parameters,\r\n loadDomain: () => Promise.resolve(newdomain),\r\n loadRange,\r\n loadRanges\r\n }\r\n newcov.subsetByIndex = subsetByIndex.bind(null, newcov)\r\n newcov.subsetByValue = subsetByValue.bind(null, newcov)\r\n return newcov\r\n })\r\n}\r\n\r\n/**\r\n * Generic subsetByValue function that can be used when building new Coverage objects.\r\n * Requires cov.subsetByIndex function.\r\n *\r\n * @example\r\n * var cov = {\r\n * type: 'Coverage',\r\n * ...\r\n * subsetByValue: constraints => CovUtils.subsetByValue(cov, constraints)\r\n * }\r\n */\r\nexport function subsetByValue (cov, constraints) {\r\n return cov.loadDomain().then(domain => {\r\n // calculate indices and use subsetByIndex\r\n let indexConstraints = {}\r\n\r\n for (let axisName of Object.keys(constraints)) {\r\n let spec = constraints[axisName]\r\n if (spec === undefined || spec === null || !domain.axes.has(axisName)) {\r\n continue\r\n }\r\n let axis = domain.axes.get(axisName)\r\n let vals = axis.values\r\n\r\n // special-case handling\r\n let isISODate = isISODateAxis(domain, axisName)\r\n let isLongitude = isLongitudeAxis(domain, axisName)\r\n\r\n // wrap input longitudes into longitude range of domain axis\r\n let lonWrapper = isLongitude ? getLongitudeWrapper(domain, axisName) : undefined\r\n\r\n if (typeof spec === 'number' || typeof spec === 'string' || spec instanceof Date) {\r\n let match = spec\r\n if (isISODate) {\r\n // convert times to numbers before searching\r\n match = asTime(match)\r\n vals = vals.map(v => new Date(v).getTime())\r\n } else if (isLongitude) {\r\n match = lonWrapper(match)\r\n }\r\n let i\r\n // older browsers don't have TypedArray.prototype.indexOf\r\n if (vals.indexOf) {\r\n i = vals.indexOf(match)\r\n } else {\r\n i = Array.prototype.indexOf.call(vals, match)\r\n }\r\n if (i === -1) {\r\n throw new Error('Domain value not found: ' + spec)\r\n }\r\n indexConstraints[axisName] = i\r\n } else if ('target' in spec) {\r\n // find index of value closest to target\r\n let target = spec.target\r\n if (isISODate) {\r\n // convert times to numbers before searching\r\n target = asTime(target)\r\n vals = vals.map(v => new Date(v).getTime())\r\n } else if (isLongitude) {\r\n target = lonWrapper(target)\r\n } else if (typeof vals[0] !== 'number' || typeof target !== 'number') {\r\n throw new Error('Invalid axis or constraint value type')\r\n }\r\n let i = indexOfNearest(vals, target)\r\n indexConstraints[axisName] = i\r\n } else if ('start' in spec && 'stop' in spec) {\r\n // TODO what about bounds?\r\n\r\n let {start, stop} = spec\r\n if (isISODate) {\r\n // convert times to numbers before searching\r\n [start, stop] = [asTime(start), asTime(stop)]\r\n vals = vals.map(v => new Date(v).getTime())\r\n } else if (isLongitude) {\r\n [start, stop] = [lonWrapper(start), lonWrapper(stop)]\r\n } else if (typeof vals[0] !== 'number' || typeof start !== 'number') {\r\n throw new Error('Invalid axis or constraint value type')\r\n }\r\n\r\n let [lo1, hi1] = indicesOfNearest(vals, start)\r\n let [lo2, hi2] = indicesOfNearest(vals, stop)\r\n\r\n // cov is a bit arbitrary and may include one or two indices too much\r\n // (but since we don't handle bounds it doesn't matter that much)\r\n let imin = Math.min(lo1, hi1, lo2, hi2)\r\n let imax = Math.max(lo1, hi1, lo2, hi2) + 1 // subsetByIndex is exclusive\r\n\r\n indexConstraints[axisName] = {start: imin, stop: imax}\r\n } else {\r\n throw new Error('Invalid subset constraints')\r\n }\r\n }\r\n\r\n return cov.subsetByIndex(indexConstraints)\r\n })\r\n}\r\n","import { COVERAGE, DOMAIN } from '../constants.js'\r\nimport { checkDomain, checkCoverage } from '../validate.js'\r\nimport { subsetByIndex, subsetByValue } from './subset.js'\r\n\r\n/**\r\n * Wraps a Domain into a Coverage object by adding dummy parameter and range data.\r\n *\r\n * @param {Domain} domain the Domain object\r\n * @param {array} [options.gridAxes] The horizontal grid axis names, used for checkerboard pattern.\r\n * @return {Coverage}\r\n */\r\nexport function fromDomain (domain, options = {}) {\r\n checkDomain(domain)\r\n\r\n let {gridAxes: [x, y] = ['x', 'y']} = options\r\n\r\n let dummyKey = 'domain'\r\n let dummyLabel = 'Domain'\r\n\r\n let assumeGrid = domain.axes.has(x) && domain.axes.has(y) &&\r\n (domain.axes.get(x).values.length > 1 || domain.axes.get(y).values.length > 1)\r\n let categories\r\n let categoryEncoding\r\n const a = 'a'\r\n const av = 0\r\n const b = 'b'\r\n const bv = 1\r\n if (assumeGrid) {\r\n categories = [{\r\n id: a,\r\n label: {en: 'A'}\r\n }, {\r\n id: b,\r\n label: {en: 'B'}\r\n }]\r\n categoryEncoding = new Map([[a, [av]], [b, [bv]]])\r\n } else {\r\n categories = [{\r\n id: a,\r\n label: {en: 'X'}\r\n }]\r\n categoryEncoding = new Map([[a, [av]]])\r\n }\r\n\r\n let parameters = new Map()\r\n parameters.set(dummyKey, {\r\n key: dummyKey,\r\n observedProperty: {\r\n label: {en: dummyLabel},\r\n categories\r\n },\r\n categoryEncoding\r\n })\r\n\r\n let shape = new Map([...domain.axes].map(([name, axis]) => [name, axis.values.length]))\r\n\r\n let get\r\n if (assumeGrid) {\r\n // checkerboard pattern to see grid cells\r\n let isOdd = n => n % 2\r\n get = ({ x = 0, y = 0 }) => isOdd(x + y) ? av : bv\r\n } else {\r\n get = () => av\r\n }\r\n\r\n let loadRange = () => Promise.resolve({\r\n shape,\r\n dataType: 'integer',\r\n get\r\n })\r\n\r\n let cov = {\r\n type: COVERAGE,\r\n domainType: domain.domainType,\r\n parameters,\r\n loadDomain: () => Promise.resolve(domain),\r\n loadRange\r\n }\r\n addLoadRangesFunction(cov)\r\n addSubsetFunctions(cov)\r\n return cov\r\n}\r\n\r\n/**\r\n * Creates a Coverage with a single parameter from an xndarray object.\r\n *\r\n * @example\r\n * var arr = xndarray(new Float64Array(\r\n * [ 1,2,3,\r\n * 4,5,6 ]), {\r\n * shape: [2,3],\r\n * names: ['y','x'],\r\n * coords: {\r\n * y: [10,12,14],\r\n * x: [100,101,102],\r\n * t: [new Date('2001-01-01')]\r\n * }\r\n * })\r\n * var cov = CovUtils.fromXndarray(arr, {\r\n * parameter: {\r\n * key: 'temperature',\r\n * observedProperty: {\r\n * label: {en: 'Air temperature'}\r\n * },\r\n * unit: { symbol: '°C' }\r\n * }\r\n * })\r\n * let param = cov.parameters.get('temperature')\r\n * let unit = param.unit.symbol // °C\r\n * cov.loadRange('temperature').then(temps => {\r\n * let val = temps.get({x:0, y:1}) // val == 4\r\n * })\r\n *\r\n * @param {xndarray} xndarr - Coordinates must be primitive, not tuples etc.\r\n * @param {object} [options] Options object.\r\n * @param {Parameter} [options.parameter] Specifies the parameter, default parameter has a key of 'p1'.\r\n * @param {string} [options.domainType] A domain type URI.\r\n * @param {Array<object>} [options.referencing] Optional referencing system info,\r\n * defaults to longitude/latitude in WGS84 for x/y axes and ISO8601 time strings for t axis.\r\n * @return {Coverage}\r\n */\r\nexport function fromXndarray (xndarr, options = {}) {\r\n let { parameter = {\r\n key: 'p1',\r\n observedProperty: {\r\n label: {en: 'Parameter 1'}\r\n }\r\n }, referencing, domainType} = options\r\n\r\n let parameters = new Map()\r\n parameters.set(parameter.key, parameter)\r\n\r\n // assume lon/lat/ISO time for x/y/t by default, for convenience\r\n if (!referencing) {\r\n referencing = []\r\n if (xndarr.coords.has('x') && xndarr.coords.has('y')) {\r\n referencing.push({\r\n coordinates: ['x', 'y'],\r\n system: {\r\n type: 'GeographicCRS',\r\n id: 'http://www.opengis.net/def/crs/OGC/1.3/CRS84'\r\n }\r\n })\r\n }\r\n if (xndarr.coords.has('t')) {\r\n referencing.push({\r\n coordinates: ['t'],\r\n system: {\r\n type: 'TemporalRS',\r\n calendar: 'Gregorian'\r\n }\r\n })\r\n }\r\n }\r\n\r\n let axes = new Map()\r\n for (let [axisName, vals1Dnd] of xndarr.coords) {\r\n let values = new Array(vals1Dnd.size)\r\n for (let i = 0; i < vals1Dnd.size; i++) {\r\n values[i] = vals1Dnd.get(i)\r\n }\r\n axes.set(axisName, {\r\n key: axisName,\r\n coordinates: [axisName],\r\n values\r\n })\r\n }\r\n\r\n let domain = {\r\n type: DOMAIN,\r\n domainType,\r\n referencing,\r\n axes\r\n }\r\n\r\n let shape = new Map([...domain.axes].map(([name, axis]) => [name, axis.values.length]))\r\n let dataType = xndarr.dtype.indexOf('int') !== -1 ? 'integer' : 'float'\r\n\r\n let loadRange = () => Promise.resolve({\r\n shape,\r\n dataType,\r\n get: xndarr.xget.bind(xndarr)\r\n })\r\n\r\n let cov = {\r\n type: COVERAGE,\r\n domainType,\r\n parameters,\r\n loadDomain: () => Promise.resolve(domain),\r\n loadRange\r\n }\r\n addLoadRangesFunction(cov)\r\n addSubsetFunctions(cov)\r\n return cov\r\n}\r\n\r\nexport function addSubsetFunctions (cov) {\r\n checkCoverage(cov)\r\n cov.subsetByIndex = subsetByIndex.bind(null, cov)\r\n cov.subsetByValue = subsetByValue.bind(null, cov)\r\n}\r\n\r\nexport function addLoadRangesFunction (cov) {\r\n checkCoverage(cov)\r\n function loadRanges (keys) {\r\n if (!keys) {\r\n keys = cov.parameters.keys()\r\n }\r\n return Promise.all([...keys].map(cov.loadRange)).then(ranges => new Map(keys.map((key, i) => [key, ranges[i]]))\r\n )\r\n }\r\n cov.loadRanges = loadRanges\r\n}\r\n","/**\r\n * Shallow clone a given object.\r\n *\r\n * Note: This does *not* handle all kinds of objects!\r\n *\r\n * @ignore\r\n */\r\nexport function shallowcopy (obj) {\r\n let copy\r\n if (obj instanceof Map) {\r\n copy = new Map(obj)\r\n } else {\r\n copy = Object.create(Object.getPrototypeOf(obj))\r\n for (let prop in obj) {\r\n copy[prop] = obj[prop]\r\n }\r\n }\r\n return copy\r\n}\r\n","import { shallowcopy } from '../util.js'\r\nimport { COVJSON_DATATYPE_TUPLE, COVERAGE, DOMAIN } from '../constants.js'\r\nimport { getHorizontalCRSReferenceObject, getProjection } from '../domain/referencing.js'\r\n\r\n/**\r\n * Reproject a coverage.\r\n *\r\n * Reprojecting means returning a new coverage where the horizontal CRS is replaced\r\n * and the horizontal domain coordinates are reprojected.\r\n *\r\n * Current limitations:\r\n * - only point-type coverage domains are supported (Tuple only)\r\n * - only horizontal CRSs (2-dimensional) are supported\r\n * - non-lat/lon CRSs have to be pre-cached with loadProjection()\r\n *\r\n * @param {Coverage} cov The Coverage object to reproject.\r\n * @param {Domain} refDomain The reference domain from which the horizontal CRS is used.\r\n * @returns {Promise<Coverage>} A promise with the reprojected Coverage object as result.\r\n */\r\nexport function reproject (cov, refDomain) {\r\n return cov.loadDomain().then(sourceDomain => {\r\n let sourceRef = getHorizontalCRSReferenceObject(sourceDomain)\r\n if (sourceRef.coordinates.length > 2) {\r\n throw new Error('Reprojection not supported for >2D CRSs')\r\n }\r\n // check that the CRS coordinate IDs don't refer to grid axes\r\n if (sourceRef.coordinates.some(sourceDomain.axes.has)) {\r\n throw new Error('Grid reprojection not supported yet')\r\n }\r\n let [xComp, yComp] = sourceRef.coordinates\r\n\r\n // TODO reproject bounds\r\n\r\n // find the composite axis that contains the horizontal coordinates\r\n let axes = [...sourceDomain.axes.values()]\r\n let axis = axes.find(axis => sourceRef.coordinates.every(comp => axis.coordinates.indexOf(comp) !== -1))\r\n let [xCompIdx, yCompIdx] = [axis.coordinates.indexOf(xComp), axis.coordinates.indexOf(yComp)]\r\n\r\n // find the target CRS and get the projection\r\n let sourceProjection = getProjection(sourceDomain)\r\n let targetProjection = getProjection(refDomain)\r\n\r\n // reproject the x/y part of every axis value\r\n // this is done by unprojecting to lon/lat, followed by projecting to the target x/y\r\n let values\r\n if (axis.dataType === COVJSON_DATATYPE_TUPLE) {\r\n // make a deep copy of the axis values and replace x,y values by the reprojected ones\r\n values = axis.values.map(tuple => tuple.slice())\r\n for (let tuple of values) {\r\n let [sourceX, sourceY] = [tuple[xCompIdx], tuple[yCompIdx]]\r\n let latlon = sourceProjection.unproject({x: sourceX, y: sourceY})\r\n let {x, y} = targetProjection.project(latlon)\r\n tuple[xCompIdx] = x\r\n tuple[yCompIdx] = y\r\n }\r\n } else {\r\n throw new Error('Unsupported data type: ' + axis.dataType)\r\n }\r\n\r\n // assemble reprojected coverage\r\n let newAxes = new Map(sourceDomain.axes)\r\n let newAxis = shallowcopy(axis)\r\n delete newAxis.bounds\r\n newAxis.values = values\r\n newAxes.set(axis.key, newAxis)\r\n\r\n let targetRef = getHorizontalCRSReferenceObject(refDomain)\r\n if (targetRef.coordinates.length > 2) {\r\n throw new Error('Reprojection not supported for >2D CRSs')\r\n }\r\n let newReferencing = sourceDomain.referencing.map(ref => {\r\n if (ref === sourceRef) {\r\n return {\r\n coordinates: sourceRef.coordinates,\r\n system: targetRef.system\r\n }\r\n } else {\r\n return ref\r\n }\r\n })\r\n\r\n let newDomain = {\r\n type: DOMAIN,\r\n domainType: sourceDomain.domainType,\r\n axes: newAxes,\r\n referencing: newReferencing\r\n }\r\n\r\n let newCoverage = {\r\n type: COVERAGE,\r\n domainType: cov.domainType,\r\n parameters: cov.parameters,\r\n loadDomain: () => Promise.resolve(newDomain),\r\n loadRange: paramKey => cov.loadRange(paramKey),\r\n loadRanges: paramKeys => cov.loadRanges(paramKeys),\r\n subsetByIndex: constraints => cov.subsetByIndex(constraints).then(sub => reproject(sub, refDomain)),\r\n subsetByValue: constraints => cov.subsetByValue(constraints).then(sub => reproject(sub, refDomain))\r\n }\r\n return newCoverage\r\n })\r\n}\r\n","import { COVERAGE, DOMAIN } from '../constants.js'\r\nimport { checkCoverage } from '../validate.js'\r\nimport { shallowcopy } from '../util.js'\r\nimport { addLoadRangesFunction } from './create.js'\r\n\r\n/**\r\n * Returns a copy of the given Coverage object with the parameters\r\n * replaced by the supplied ones.\r\n *\r\n * Note that this is a low-level function and no checks are done on the supplied parameters.\r\n */\r\nexport function withParameters (cov, params) {\r\n let newcov = {\r\n type: COVERAGE,\r\n domainType: cov.domainType,\r\n parameters: params,\r\n loadDomain: () => cov.loadDomain(),\r\n loadRange: key => cov.loadRange(key),\r\n loadRanges: keys => cov.loadRanges(keys),\r\n subsetByIndex: constraints => cov.subsetByIndex(constraints).then(sub => withParameters(sub, params)),\r\n subsetByValue: constraints => cov.subsetByValue(constraints).then(sub => withParameters(sub, params))\r\n }\r\n return newcov\r\n}\r\n\r\n/**\r\n * Returns a copy of the given Coverage object with the categories\r\n * of a given parameter replaced by the supplied ones and the encoding\r\n * adapted to the given mapping from old to new.\r\n *\r\n * @param {Coverage} cov The Coverage object.\r\n * @param {String} key The key of the parameter to work with.\r\n * @param {object} observedProperty The new observed property including the new array of category objects\r\n * that will be part of the returned coverage.\r\n * @param {Map<String,String>} mapping A mapping from source category id to destination category id.\r\n * @returns {Coverage}\r\n */\r\nexport function withCategories (cov, key, observedProperty, mapping) {\r\n /* check breaks with Babel, see https://github.com/jspm/jspm-cli/issues/1348\r\n if (!(mapping instanceof Map)) {\r\n throw new Error('mapping parameter must be a Map from/to category ID')\r\n }\r\n */\r\n checkCoverage(cov)\r\n if (observedProperty.categories.some(c => !c.id)) {\r\n throw new Error('At least one category object is missing the \"id\" property')\r\n }\r\n let newparams = shallowcopy(cov.parameters)\r\n let newparam = shallowcopy(newparams.get(key))\r\n newparams.set(key, newparam)\r\n newparams.get(key).observedProperty = observedProperty\r\n\r\n let fromCatEnc = cov.parameters.get(key).categoryEncoding\r\n let catEncoding = new Map()\r\n let categories = observedProperty.categories\r\n for (let category of categories) {\r\n let vals = []\r\n for (let [fromCatId, toCatId] of mapping) {\r\n if (toCatId === category.id && fromCatEnc.has(fromCatId)) {\r\n vals.push(...fromCatEnc.get(fromCatId))\r\n }\r\n }\r\n if (vals.length > 0) {\r\n catEncoding.set(category.id, vals)\r\n }\r\n }\r\n newparams.get(key).categoryEncoding = catEncoding\r\n\r\n let newcov = withParameters(cov, newparams)\r\n return newcov\r\n}\r\n\r\n/**\r\n * Returns a new coverage where the domainType field of the coverage and the domain\r\n * is set to the given one.\r\n *\r\n * @param {Coverage} cov The Coverage object.\r\n * @param {String} domainType The new domain type.\r\n * @returns {Coverage}\r\n */\r\nexport function withDomainType (cov, domainType) {\r\n checkCoverage(cov)\r\n\r\n let domainWrapper = domain => {\r\n let newdomain = {\r\n type: DOMAIN,\r\n domainType,\r\n axes: domain.axes,\r\n referencing: domain.referencing\r\n }\r\n return newdomain\r\n }\r\n\r\n let newcov = {\r\n type: COVERAGE,\r\n domainType,\r\n parameters: cov.parameters,\r\n loadDomain: () => cov.loadDomain().then(domainWrapper),\r\n loadRange: key => cov.loadRange(key),\r\n loadRanges: keys => cov.loadRanges(keys),\r\n subsetByIndex: constraints => cov.subsetByIndex(constraints).then(sub => withDomainType(sub, domainType)),\r\n subsetByValue: constraints => cov.subsetByValue(constraints).then(sub => withDomainType(sub, domainType))\r\n }\r\n return newcov\r\n}\r\n\r\n/**\r\n * Tries to transform the given Coverage object into a new one that\r\n * conforms to one of the CovJSON domain types.\r\n * If multiple domain types match, then the \"smaller\" one is preferred,\r\n * for example, Point instead of Grid.\r\n *\r\n * The transformation consists of:\r\n * - Setting domainType in coverage and domain object\r\n * - Renaming domain axes\r\n *\r\n * @see https://github.com/Reading-eScience-Centre/coveragejson/blob/master/domain-types.md\r\n *\r\n * @param {Coverage} cov The Coverage object.\r\n * @returns {Promise<Coverage>}\r\n * A Promise succeeding with the transformed coverage,\r\n * or failing if no CovJSON domain type matched the input coverage.\r\n */\r\nexport function asCovJSONDomainType (cov) {\r\n return cov.loadDomain().then(domain => {\r\n\r\n // TODO implement me\r\n\r\n })\r\n}\r\n\r\n/**\r\n * @example\r\n * var cov = ...\r\n * var mapping = new Map()\r\n * mapping.set('lat', 'y').set('lon', 'x')\r\n * var newcov = CovUtils.renameAxes(cov, mapping)\r\n *\r\n * @param {Coverage} cov The coverage.\r\n * @param {Map<String,String>} mapping\r\n * @returns {Coverage}\r\n */\r\nexport function renameAxes (cov, mapping) {\r\n checkCoverage(cov)\r\n mapping = new Map(mapping)\r\n for (let axisName of cov.axes.keys()) {\r\n if (!mapping.has(axisName)) {\r\n mapping.set(axisName, axisName)\r\n }\r\n }\r\n\r\n let domainWrapper = domain => {\r\n let newaxes = new Map()\r\n for (let [from, to] of mapping) {\r\n let {dataType, coordinates, values, bounds} = domain.axes.get(from)\r\n let newaxis = {\r\n key: to,\r\n dataType,\r\n coordinates: coordinates.map(c => mapping.has(c) ? mapping.get(c) : c),\r\n values,\r\n bounds\r\n }\r\n newaxes.set(to, newaxis)\r\n }\r\n\r\n let newreferencing = domain.referencing.map(({coordinates, system}) => ({\r\n coordinates: coordinates.map(c => mapping.has(c) ? mapping.get(c) : c),\r\n system\r\n }))\r\n\r\n let newdomain = {\r\n type: DOMAIN,\r\n domainType: domain.domainType,\r\n axes: newaxes,\r\n referencing: newreferencing\r\n }\r\n return newdomain\r\n }\r\n\r\n // pre-compile for efficiency\r\n // get({['lat']: obj['y'], ['lon']: obj['x']})\r\n let getObjStr = [...mapping].map(([from, to]) => `['${from}']:obj['${to}']`).join(',')\r\n\r\n let rangeWrapper = range => {\r\n let get = new Function('range', 'return function get (obj){return range.get({' + getObjStr + '})}')(range) // eslint-disable-line\r\n let newrange = {\r\n shape: new Map([...range.shape].map(([name, len]) => [mapping.get(name), len])),\r\n dataType: range.dataType,\r\n get\r\n }\r\n return newrange\r\n }\r\n\r\n let loadRange = paramKey => cov.loadRange(paramKey).then(rangeWrapper)\r\n\r\n let loadRanges = paramKeys => cov.loadRanges(paramKeys)\r\n .then(ranges => new Map([...ranges].map(([paramKey, range]) => [paramKey, rangeWrapper(range)])))\r\n\r\n let newcov = {\r\n type: COVERAGE,\r\n domainType: cov.domainType,\r\n parameters: cov.parameters,\r\n loadDomain: () => cov.loadDomain().then(domainWrapper),\r\n loadRange,\r\n loadRanges,\r\n subsetByIndex: constraints => cov.subsetByIndex(constraints).then(sub => renameAxes(sub, mapping)),\r\n subsetByValue: constraints => cov.subsetByValue(constraints).then(sub => renameAxes(sub, mapping))\r\n }\r\n\r\n return newcov\r\n}\r\n\r\n/**\r\n * @param {Coverage} cov The coverage.\r\n * @param {String} key The key of the parameter for which the mapping should be applied.\r\n * @param {Function} fn A function getting called as fn(obj, range) where obj is the axis indices object\r\n * and range is the original range object.\r\n * @param {String} [dataType] The new data type to use for the range. If omitted, the original type is used.\r\n * @returns {Coverage}\r\n */\r\nexport function mapRange (cov, key, fn, dataType) {\r\n checkCoverage(cov)\r\n\r\n let rangeWrapper = range => {\r\n let newrange = {\r\n shape: range.shape,\r\n dataType: dataType || range.dataType,\r\n get: obj => fn(obj, range)\r\n }\r\n return newrange\r\n }\r\n\r\n let loadRange = paramKey => key === paramKey ? cov.loadRange(paramKey).then(rangeWrapper) : cov.loadRange(paramKey)\r\n\r\n let loadRanges = paramKeys => cov.loadRanges(paramKeys)\r\n .then(ranges => new Map([...ranges].map(([paramKey, range]) => [paramKey, key === paramKey ? rangeWrapper(range) : range])))\r\n\r\n let newcov = {\r\n type: COVERAGE,\r\n domainType: cov.domainType,\r\n parameters: cov.parameters,\r\n loadDomain: () => cov.loadDomain(),\r\n loadRange,\r\n loadRanges,\r\n subsetByIndex: constraints => cov.subsetByIndex(constraints).then(sub => mapRange(sub, key, fn, dataType)),\r\n subsetByValue: constraints => cov.subsetByValue(constraints).then(sub => mapRange(sub, key, fn, dataType))\r\n }\r\n\r\n return newcov\r\n}\r\n\r\n/**\r\n *\r\n * @example\r\n * var cov = ... // has parameters 'NIR', 'red', 'green', 'blue'\r\n * var newcov = CovUtils.withDerivedParameter(cov, {\r\n * parameter: {\r\n * key: 'NDVI',\r\n * observedProperty: {\r\n * label: { en: 'Normalized Differenced Vegetation Index' }\r\n * }\r\n * },\r\n * inputParameters: ['NIR','red'],\r\n * dataType: 'float',\r\n * fn: function (obj, nirRange, redRange) {\r\n * var nir = nirRange.get(obj)\r\n * var red = redRange.get(obj)\r\n * if (nir === null || red === null) return null\r\n * return (nir - red) / (nir + red)\r\n * }\r\n * })\r\n */\r\nexport function withDerivedParameter (cov, options) {\r\n checkCoverage(cov)\r\n let {parameter, inputParameters, dataType = 'float', fn} = options\r\n\r\n let parameters = new Map(cov.parameters)\r\n parameters.set(parameter.key, parameter)\r\n\r\n let loadDerivedRange = () => cov.loadRanges(inputParameters).then(inputRanges => {\r\n let inputRangesArr = inputParameters.map(key => inputRanges.get(key))\r\n let shape = inputRangesArr[0].shape\r\n let range = {\r\n shape,\r\n dataType,\r\n get: obj => fn(obj, ...inputRangesArr)\r\n }\r\n return range\r\n })\r\n\r\n let loadRange = paramKey => parameter.key === paramKey ? loadDerivedRange() : cov.loadRange(paramKey)\r\n\r\n let newcov = {\r\n type: COVERAGE,\r\n domainType: cov.domainType,\r\n parameters,\r\n loadDomain: () => cov.loadDomain(),\r\n loadRange,\r\n subsetByIndex: constraints => cov.subsetByIndex(constraints).then(sub => withDerivedParameter(sub, options)),\r\n subsetByValue: constraints => cov.subsetByValue(constraints).then(sub => withDerivedParameter(sub, options))\r\n }\r\n addLoadRangesFunction(newcov)\r\n\r\n return newcov\r\n}\r\n\r\n/**\r\n *\r\n * @example\r\n * var cov = ... // has parameters 'NIR', 'red', 'green', 'blue'\r\n * var newcov = CovUtils.withSimpleDerivedParameter(cov, {\r\n * parameter: {\r\n * key: 'NDVI',\r\n * observedProperty: {\r\n * label: { en: 'Normalized Differenced Vegetation Index' }\r\n * }\r\n * },\r\n * inputParameters: ['NIR','red'],\r\n * dataType: 'float',\r\n * fn: function (nir, red) {\r\n * return (nir - red) / (nir + red)\r\n * }\r\n * })\r\n */\r\nexport function withSimpleDerivedParameter (cov, options) {\r\n let {parameter, inputParameters, dataType, fn} = options\r\n let options_ = {\r\n parameter,\r\n inputParameters,\r\n dataType,\r\n // TODO pre-compile if too slow\r\n fn: (obj, ...ranges) => {\r\n let vals = inputParameters.map((_, i) => ranges[i].get(obj))\r\n if (vals.some(val => val === null)) {\r\n return null\r\n }\r\n return fn(...vals)\r\n }\r\n }\r\n return withDerivedParameter(cov, options_)\r\n}\r\n","import { COVERAGECOLLECTION } from '../constants.js'\r\nimport { asTime, isISODateAxis, isLongitudeAxis, getLongitudeWrapper } from '../domain/referencing.js'\r\n\r\n/**\r\n * Adds a basic query() function to the coverage collection object.\r\n * Note that this does not support paging.\r\n */\r\nexport function addCollectionQueryFunction (collection) {\r\n if (collection.paging) {\r\n throw new Error('Paged collections not supported')\r\n }\r\n collection.query = () => new CollectionQuery(collection)\r\n}\r\n\r\nexport class CollectionQuery {\r\n /**\r\n * @param {CoverageCollection} collection\r\n */\r\n constructor (collection) {\r\n this._collection = collection\r\n this._filter = {}\r\n this._subset = {}\r\n }\r\n\r\n /**\r\n * Matching mode: intersect\r\n *\r\n * Supports ISO8601 date string axes.\r\n * All other string-type axes are compared alphabetically.\r\n *\r\n * @example\r\n * collection.query().filter({\r\n * 't': {start: '2015-01-01T01:00:00', stop: '2015-01-01T02:00:00'}\r\n * }).execute().then(filteredCollection => {\r\n * console.log(filteredCollection.coverages.length)\r\n * })\r\n * @param {Object} spec\r\n * @return {CollectionQuery}\r\n */\r\n filter (spec) {\r\n mergeInto(spec, this._filter)\r\n return this\r\n }\r\n\r\n /**\r\n * Subset coverages by domain values.\r\n *\r\n * Equivalent to calling {@link Coverage.subsetByValue}(spec) on each\r\n * coverage in the collection.\r\n *\r\n * @param {Object} spec\r\n * @return {CollectionQuery}\r\n */\r\n subset (spec) {\r\n mergeInto(spec, this._subset)\r\n return this\r\n }\r\n\r\n /**\r\n * Applies the query operators and returns\r\n * a Promise that succeeds with a new CoverageCollection.\r\n *\r\n * @return {Promise<CoverageCollection>}\r\n */\r\n execute () {\r\n let coll = this._collection\r\n let newcoll = {\r\n type: COVERAGECOLLECTION,\r\n coverages: [],\r\n parameters: coll.parameters,\r\n domainType: coll.domainType\r\n }\r\n\r\n let promises = []\r\n for (let cov of coll.coverages) {\r\n promises.push(cov.loadDomain().then(domain => {\r\n if (!matchesFilter(domain, this._filter)) {\r\n return\r\n }\r\n\r\n if (Object.keys(this._subset).length === 0) {\r\n newcoll.coverages.push(cov)\r\n } else {\r\n return cov.subsetByValue(this._subset).then(subsetted => {\r\n newcoll.coverages.push(subsetted)\r\n })\r\n }\r\n }))\r\n }\r\n return Promise.all(promises).then(() => {\r\n newcoll.query = () => new CollectionQuery(newcoll)\r\n return newcoll\r\n })\r\n }\r\n}\r\n\r\nfunction matchesFilter (domain, filter) {\r\n for (let axisName of Object.keys(filter)) {\r\n let condition = filter[axisName]\r\n if (!domain.axes.has(axisName)) {\r\n throw new Error('Axis \"' + axisName + '\" does not exist')\r\n }\r\n let axis = domain.axes.get(axisName)\r\n let vals = axis.values\r\n\r\n let [min, max] = [vals[0], vals[vals.length - 1]]\r\n if (typeof min !== 'number' && typeof min !== 'string') {\r\n throw new Error('Can only filter primitive axis values')\r\n }\r\n let {start, stop} = condition\r\n\r\n // special handling\r\n if (isISODateAxis(domain, axisName)) {\r\n [min, max] = [asTime(min), asTime(max)]\r\n ;[start, stop] = [asTime(start), asTime(stop)]\r\n } else if (isLongitudeAxis(domain, axisName)) {\r\n let lonWrapper = getLongitudeWrapper(domain, axisName)\r\n ;[start, stop] = [lonWrapper(start), lonWrapper(stop)]\r\n }\r\n\r\n if (min > max) {\r\n [min, max] = [max, min]\r\n }\r\n if (max < start || stop < min) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n}\r\n\r\nfunction mergeInto (inputObj, targetObj) {\r\n for (let k of Object.keys(inputObj)) {\r\n targetObj[k] = inputObj[k]\r\n }\r\n}\r\n"],"names":["require$$0","require$$8","require$$7","require$$6","require$$5","require$$4","require$$3","require$$2","require$$1","require$$21","uriproj.get","uriproj.load"],"mappings":"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"}
\No newline at end of file