{"version":3,"file":"openseadragon-wmts.umd.cjs","sources":["../node_modules/ol/xml.js","../node_modules/ol/format/XML.js","../node_modules/ol/format/xlink.js","../node_modules/ol/format/xsd.js","../node_modules/ol/format/OWS.js","../node_modules/ol/extent.js","../node_modules/ol/format/WMTSCapabilities.js","../src/WMTS.js","../node_modules/proj4/lib/global.js","../node_modules/proj4/lib/constants/values.js","../node_modules/proj4/lib/constants/PrimeMeridian.js","../node_modules/proj4/lib/constants/units.js","../node_modules/proj4/lib/match.js","../node_modules/proj4/lib/projString.js","../node_modules/wkt-parser/parser.js","../node_modules/wkt-parser/process.js","../node_modules/wkt-parser/index.js","../node_modules/proj4/lib/defs.js","../node_modules/proj4/lib/parseCode.js","../node_modules/proj4/lib/extend.js","../node_modules/proj4/lib/common/msfnz.js","../node_modules/proj4/lib/common/sign.js","../node_modules/proj4/lib/common/adjust_lon.js","../node_modules/proj4/lib/common/tsfnz.js","../node_modules/proj4/lib/common/phi2z.js","../node_modules/proj4/lib/projections/merc.js","../node_modules/proj4/lib/projections/longlat.js","../node_modules/proj4/lib/projections.js","../node_modules/proj4/lib/constants/Ellipsoid.js","../node_modules/proj4/lib/deriveConstants.js","../node_modules/proj4/lib/constants/Datum.js","../node_modules/proj4/lib/datum.js","../node_modules/proj4/lib/nadgrid.js","../node_modules/proj4/lib/Proj.js","../node_modules/proj4/lib/datumUtils.js","../node_modules/proj4/lib/datum_transform.js","../node_modules/proj4/lib/adjust_axis.js","../node_modules/proj4/lib/common/toPoint.js","../node_modules/proj4/lib/checkSanity.js","../node_modules/proj4/lib/transform.js","../node_modules/proj4/lib/core.js","../node_modules/mgrs/mgrs.js","../node_modules/proj4/lib/Point.js","../node_modules/proj4/lib/common/pj_enfn.js","../node_modules/proj4/lib/common/pj_mlfn.js","../node_modules/proj4/lib/common/pj_inv_mlfn.js","../node_modules/proj4/lib/projections/tmerc.js","../node_modules/proj4/lib/common/sinh.js","../node_modules/proj4/lib/common/hypot.js","../node_modules/proj4/lib/common/log1py.js","../node_modules/proj4/lib/common/asinhy.js","../node_modules/proj4/lib/common/gatg.js","../node_modules/proj4/lib/common/clens.js","../node_modules/proj4/lib/common/cosh.js","../node_modules/proj4/lib/common/clens_cmplx.js","../node_modules/proj4/lib/projections/etmerc.js","../node_modules/proj4/lib/common/adjust_zone.js","../node_modules/proj4/lib/projections/utm.js","../node_modules/proj4/lib/common/srat.js","../node_modules/proj4/lib/projections/gauss.js","../node_modules/proj4/lib/projections/sterea.js","../node_modules/proj4/lib/projections/stere.js","../node_modules/proj4/lib/projections/somerc.js","../node_modules/proj4/lib/projections/omerc.js","../node_modules/proj4/lib/projections/lcc.js","../node_modules/proj4/lib/projections/krovak.js","../node_modules/proj4/lib/common/mlfn.js","../node_modules/proj4/lib/common/e0fn.js","../node_modules/proj4/lib/common/e1fn.js","../node_modules/proj4/lib/common/e2fn.js","../node_modules/proj4/lib/common/e3fn.js","../node_modules/proj4/lib/common/gN.js","../node_modules/proj4/lib/common/adjust_lat.js","../node_modules/proj4/lib/common/imlfn.js","../node_modules/proj4/lib/projections/cass.js","../node_modules/proj4/lib/common/qsfnz.js","../node_modules/proj4/lib/projections/laea.js","../node_modules/proj4/lib/common/asinz.js","../node_modules/proj4/lib/projections/aea.js","../node_modules/proj4/lib/projections/gnom.js","../node_modules/proj4/lib/common/iqsfnz.js","../node_modules/proj4/lib/projections/cea.js","../node_modules/proj4/lib/projections/eqc.js","../node_modules/proj4/lib/projections/poly.js","../node_modules/proj4/lib/projections/nzmg.js","../node_modules/proj4/lib/projections/mill.js","../node_modules/proj4/lib/projections/sinu.js","../node_modules/proj4/lib/projections/moll.js","../node_modules/proj4/lib/projections/eqdc.js","../node_modules/proj4/lib/projections/vandg.js","../node_modules/proj4/lib/projections/aeqd.js","../node_modules/proj4/lib/projections/ortho.js","../node_modules/proj4/lib/projections/qsc.js","../node_modules/proj4/lib/projections/robin.js","../node_modules/proj4/lib/projections/geocent.js","../node_modules/proj4/lib/projections/tpers.js","../node_modules/proj4/projs.js","../node_modules/proj4/lib/index.js","../src/Transform.js","../src/index.js"],"sourcesContent":["/**\n * @module ol/xml\n */\nimport { extend } from './array.js';\n/**\n * When using {@link module:ol/xml.makeChildAppender} or\n * {@link module:ol/xml.makeSimpleNodeFactory}, the top `objectStack` item needs\n * to have this structure.\n * @typedef {Object} NodeStackItem\n * @property {Node} node Node.\n */\n/**\n * @typedef {function(Element, Array<*>): void} Parser\n */\n/**\n * @typedef {function(Element, *, Array<*>): void} Serializer\n */\n/**\n * @type {string}\n */\nexport var XML_SCHEMA_INSTANCE_URI = 'http://www.w3.org/2001/XMLSchema-instance';\n/**\n * @param {string} namespaceURI Namespace URI.\n * @param {string} qualifiedName Qualified name.\n * @return {Element} Node.\n */\nexport function createElementNS(namespaceURI, qualifiedName) {\n    return getDocument().createElementNS(namespaceURI, qualifiedName);\n}\n/**\n * Recursively grab all text content of child nodes into a single string.\n * @param {Node} node Node.\n * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line\n * breaks.\n * @return {string} All text content.\n * @api\n */\nexport function getAllTextContent(node, normalizeWhitespace) {\n    return getAllTextContent_(node, normalizeWhitespace, []).join('');\n}\n/**\n * Recursively grab all text content of child nodes into a single string.\n * @param {Node} node Node.\n * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line\n * breaks.\n * @param {Array<string>} accumulator Accumulator.\n * @private\n * @return {Array<string>} Accumulator.\n */\nexport function getAllTextContent_(node, normalizeWhitespace, accumulator) {\n    if (node.nodeType == Node.CDATA_SECTION_NODE ||\n        node.nodeType == Node.TEXT_NODE) {\n        if (normalizeWhitespace) {\n            accumulator.push(String(node.nodeValue).replace(/(\\r\\n|\\r|\\n)/g, ''));\n        }\n        else {\n            accumulator.push(node.nodeValue);\n        }\n    }\n    else {\n        var n = void 0;\n        for (n = node.firstChild; n; n = n.nextSibling) {\n            getAllTextContent_(n, normalizeWhitespace, accumulator);\n        }\n    }\n    return accumulator;\n}\n/**\n * @param {Object} object Object.\n * @return {boolean} Is a document.\n */\nexport function isDocument(object) {\n    return 'documentElement' in object;\n}\n/**\n * @param {Element} node Node.\n * @param {?string} namespaceURI Namespace URI.\n * @param {string} name Attribute name.\n * @return {string} Value\n */\nexport function getAttributeNS(node, namespaceURI, name) {\n    return node.getAttributeNS(namespaceURI, name) || '';\n}\n/**\n * Parse an XML string to an XML Document.\n * @param {string} xml XML.\n * @return {Document} Document.\n * @api\n */\nexport function parse(xml) {\n    return new DOMParser().parseFromString(xml, 'application/xml');\n}\n/**\n * Make an array extender function for extending the array at the top of the\n * object stack.\n * @param {function(this: T, Node, Array<*>): (Array<*>|undefined)} valueReader Value reader.\n * @param {T} [opt_this] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeArrayExtender(valueReader, opt_this) {\n    return (\n    /**\n     * @param {Node} node Node.\n     * @param {Array<*>} objectStack Object stack.\n     */\n    function (node, objectStack) {\n        var value = valueReader.call(opt_this !== undefined ? opt_this : this, node, objectStack);\n        if (value !== undefined) {\n            var array = /** @type {Array<*>} */ (objectStack[objectStack.length - 1]);\n            extend(array, value);\n        }\n    });\n}\n/**\n * Make an array pusher function for pushing to the array at the top of the\n * object stack.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {T} [opt_this] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeArrayPusher(valueReader, opt_this) {\n    return (\n    /**\n     * @param {Element} node Node.\n     * @param {Array<*>} objectStack Object stack.\n     */\n    function (node, objectStack) {\n        var value = valueReader.call(opt_this !== undefined ? opt_this : this, node, objectStack);\n        if (value !== undefined) {\n            var array = /** @type {Array<*>} */ (objectStack[objectStack.length - 1]);\n            array.push(value);\n        }\n    });\n}\n/**\n * Make an object stack replacer function for replacing the object at the\n * top of the stack.\n * @param {function(this: T, Node, Array<*>): *} valueReader Value reader.\n * @param {T} [opt_this] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeReplacer(valueReader, opt_this) {\n    return (\n    /**\n     * @param {Node} node Node.\n     * @param {Array<*>} objectStack Object stack.\n     */\n    function (node, objectStack) {\n        var value = valueReader.call(opt_this !== undefined ? opt_this : this, node, objectStack);\n        if (value !== undefined) {\n            objectStack[objectStack.length - 1] = value;\n        }\n    });\n}\n/**\n * Make an object property pusher function for adding a property to the\n * object at the top of the stack.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {string} [opt_property] Property.\n * @param {T} [opt_this] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeObjectPropertyPusher(valueReader, opt_property, opt_this) {\n    return (\n    /**\n     * @param {Element} node Node.\n     * @param {Array<*>} objectStack Object stack.\n     */\n    function (node, objectStack) {\n        var value = valueReader.call(opt_this !== undefined ? opt_this : this, node, objectStack);\n        if (value !== undefined) {\n            var object = /** @type {!Object} */ (objectStack[objectStack.length - 1]);\n            var property = opt_property !== undefined ? opt_property : node.localName;\n            var array = void 0;\n            if (property in object) {\n                array = object[property];\n            }\n            else {\n                array = [];\n                object[property] = array;\n            }\n            array.push(value);\n        }\n    });\n}\n/**\n * Make an object property setter function.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {string} [opt_property] Property.\n * @param {T} [opt_this] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeObjectPropertySetter(valueReader, opt_property, opt_this) {\n    return (\n    /**\n     * @param {Element} node Node.\n     * @param {Array<*>} objectStack Object stack.\n     */\n    function (node, objectStack) {\n        var value = valueReader.call(opt_this !== undefined ? opt_this : this, node, objectStack);\n        if (value !== undefined) {\n            var object = /** @type {!Object} */ (objectStack[objectStack.length - 1]);\n            var property = opt_property !== undefined ? opt_property : node.localName;\n            object[property] = value;\n        }\n    });\n}\n/**\n * Create a serializer that appends nodes written by its `nodeWriter` to its\n * designated parent. The parent is the `node` of the\n * {@link module:ol/xml~NodeStackItem} at the top of the `objectStack`.\n * @param {function(this: T, Node, V, Array<*>): void} nodeWriter Node writer.\n * @param {T} [opt_this] The object to use as `this` in `nodeWriter`.\n * @return {Serializer} Serializer.\n * @template T, V\n */\nexport function makeChildAppender(nodeWriter, opt_this) {\n    return function (node, value, objectStack) {\n        nodeWriter.call(opt_this !== undefined ? opt_this : this, node, value, objectStack);\n        var parent = /** @type {NodeStackItem} */ (objectStack[objectStack.length - 1]);\n        var parentNode = parent.node;\n        parentNode.appendChild(node);\n    };\n}\n/**\n * Create a serializer that calls the provided `nodeWriter` from\n * {@link module:ol/xml.serialize}. This can be used by the parent writer to have the\n * 'nodeWriter' called with an array of values when the `nodeWriter` was\n * designed to serialize a single item. An example would be a LineString\n * geometry writer, which could be reused for writing MultiLineString\n * geometries.\n * @param {function(this: T, Element, V, Array<*>): void} nodeWriter Node writer.\n * @param {T} [opt_this] The object to use as `this` in `nodeWriter`.\n * @return {Serializer} Serializer.\n * @template T, V\n */\nexport function makeArraySerializer(nodeWriter, opt_this) {\n    var serializersNS, nodeFactory;\n    return function (node, value, objectStack) {\n        if (serializersNS === undefined) {\n            serializersNS = {};\n            var serializers = {};\n            serializers[node.localName] = nodeWriter;\n            serializersNS[node.namespaceURI] = serializers;\n            nodeFactory = makeSimpleNodeFactory(node.localName);\n        }\n        serialize(serializersNS, nodeFactory, value, objectStack);\n    };\n}\n/**\n * Create a node factory which can use the `opt_keys` passed to\n * {@link module:ol/xml.serialize} or {@link module:ol/xml.pushSerializeAndPop} as node names,\n * or a fixed node name. The namespace of the created nodes can either be fixed,\n * or the parent namespace will be used.\n * @param {string} [opt_nodeName] Fixed node name which will be used for all\n *     created nodes. If not provided, the 3rd argument to the resulting node\n *     factory needs to be provided and will be the nodeName.\n * @param {string} [opt_namespaceURI] Fixed namespace URI which will be used for\n *     all created nodes. If not provided, the namespace of the parent node will\n *     be used.\n * @return {function(*, Array<*>, string=): (Node|undefined)} Node factory.\n */\nexport function makeSimpleNodeFactory(opt_nodeName, opt_namespaceURI) {\n    var fixedNodeName = opt_nodeName;\n    return (\n    /**\n     * @param {*} value Value.\n     * @param {Array<*>} objectStack Object stack.\n     * @param {string} [opt_nodeName] Node name.\n     * @return {Node} Node.\n     */\n    function (value, objectStack, opt_nodeName) {\n        var context = /** @type {NodeStackItem} */ (objectStack[objectStack.length - 1]);\n        var node = context.node;\n        var nodeName = fixedNodeName;\n        if (nodeName === undefined) {\n            nodeName = opt_nodeName;\n        }\n        var namespaceURI = opt_namespaceURI !== undefined ? opt_namespaceURI : node.namespaceURI;\n        return createElementNS(namespaceURI, /** @type {string} */ (nodeName));\n    });\n}\n/**\n * A node factory that creates a node using the parent's `namespaceURI` and the\n * `nodeName` passed by {@link module:ol/xml.serialize} or\n * {@link module:ol/xml.pushSerializeAndPop} to the node factory.\n * @const\n * @type {function(*, Array<*>, string=): (Node|undefined)}\n */\nexport var OBJECT_PROPERTY_NODE_FACTORY = makeSimpleNodeFactory();\n/**\n * Create an array of `values` to be used with {@link module:ol/xml.serialize} or\n * {@link module:ol/xml.pushSerializeAndPop}, where `orderedKeys` has to be provided as\n * `opt_key` argument.\n * @param {Object<string, *>} object Key-value pairs for the sequence. Keys can\n *     be a subset of the `orderedKeys`.\n * @param {Array<string>} orderedKeys Keys in the order of the sequence.\n * @return {Array<*>} Values in the order of the sequence. The resulting array\n *     has the same length as the `orderedKeys` array. Values that are not\n *     present in `object` will be `undefined` in the resulting array.\n */\nexport function makeSequence(object, orderedKeys) {\n    var length = orderedKeys.length;\n    var sequence = new Array(length);\n    for (var i = 0; i < length; ++i) {\n        sequence[i] = object[orderedKeys[i]];\n    }\n    return sequence;\n}\n/**\n * Create a namespaced structure, using the same values for each namespace.\n * This can be used as a starting point for versioned parsers, when only a few\n * values are version specific.\n * @param {Array<string>} namespaceURIs Namespace URIs.\n * @param {T} structure Structure.\n * @param {Object<string, T>} [opt_structureNS] Namespaced structure to add to.\n * @return {Object<string, T>} Namespaced structure.\n * @template T\n */\nexport function makeStructureNS(namespaceURIs, structure, opt_structureNS) {\n    /**\n     * @type {Object<string, T>}\n     */\n    var structureNS = opt_structureNS !== undefined ? opt_structureNS : {};\n    var i, ii;\n    for (i = 0, ii = namespaceURIs.length; i < ii; ++i) {\n        structureNS[namespaceURIs[i]] = structure;\n    }\n    return structureNS;\n}\n/**\n * Parse a node using the parsers and object stack.\n * @param {Object<string, Object<string, Parser>>} parsersNS\n *     Parsers by namespace.\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @param {*} [opt_this] The object to use as `this`.\n */\nexport function parseNode(parsersNS, node, objectStack, opt_this) {\n    var n;\n    for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n        var parsers = parsersNS[n.namespaceURI];\n        if (parsers !== undefined) {\n            var parser = parsers[n.localName];\n            if (parser !== undefined) {\n                parser.call(opt_this, n, objectStack);\n            }\n        }\n    }\n}\n/**\n * Push an object on top of the stack, parse and return the popped object.\n * @param {T} object Object.\n * @param {Object<string, Object<string, Parser>>} parsersNS\n *     Parsers by namespace.\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @param {*} [opt_this] The object to use as `this`.\n * @return {T} Object.\n * @template T\n */\nexport function pushParseAndPop(object, parsersNS, node, objectStack, opt_this) {\n    objectStack.push(object);\n    parseNode(parsersNS, node, objectStack, opt_this);\n    return /** @type {T} */ (objectStack.pop());\n}\n/**\n * Walk through an array of `values` and call a serializer for each value.\n * @param {Object<string, Object<string, Serializer>>} serializersNS\n *     Namespaced serializers.\n * @param {function(this: T, *, Array<*>, (string|undefined)): (Node|undefined)} nodeFactory\n *     Node factory. The `nodeFactory` creates the node whose namespace and name\n *     will be used to choose a node writer from `serializersNS`. This\n *     separation allows us to decide what kind of node to create, depending on\n *     the value we want to serialize. An example for this would be different\n *     geometry writers based on the geometry type.\n * @param {Array<*>} values Values to serialize. An example would be an array\n *     of {@link module:ol/Feature~Feature} instances.\n * @param {Array<*>} objectStack Node stack.\n * @param {Array<string>} [opt_keys] Keys of the `values`. Will be passed to the\n *     `nodeFactory`. This is used for serializing object literals where the\n *     node name relates to the property key. The array length of `opt_keys` has\n *     to match the length of `values`. For serializing a sequence, `opt_keys`\n *     determines the order of the sequence.\n * @param {T} [opt_this] The object to use as `this` for the node factory and\n *     serializers.\n * @template T\n */\nexport function serialize(serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) {\n    var length = (opt_keys !== undefined ? opt_keys : values).length;\n    var value, node;\n    for (var i = 0; i < length; ++i) {\n        value = values[i];\n        if (value !== undefined) {\n            node = nodeFactory.call(opt_this !== undefined ? opt_this : this, value, objectStack, opt_keys !== undefined ? opt_keys[i] : undefined);\n            if (node !== undefined) {\n                serializersNS[node.namespaceURI][node.localName].call(opt_this, node, value, objectStack);\n            }\n        }\n    }\n}\n/**\n * @param {O} object Object.\n * @param {Object<string, Object<string, Serializer>>} serializersNS\n *     Namespaced serializers.\n * @param {function(this: T, *, Array<*>, (string|undefined)): (Node|undefined)} nodeFactory\n *     Node factory. The `nodeFactory` creates the node whose namespace and name\n *     will be used to choose a node writer from `serializersNS`. This\n *     separation allows us to decide what kind of node to create, depending on\n *     the value we want to serialize. An example for this would be different\n *     geometry writers based on the geometry type.\n * @param {Array<*>} values Values to serialize. An example would be an array\n *     of {@link module:ol/Feature~Feature} instances.\n * @param {Array<*>} objectStack Node stack.\n * @param {Array<string>} [opt_keys] Keys of the `values`. Will be passed to the\n *     `nodeFactory`. This is used for serializing object literals where the\n *     node name relates to the property key. The array length of `opt_keys` has\n *     to match the length of `values`. For serializing a sequence, `opt_keys`\n *     determines the order of the sequence.\n * @param {T} [opt_this] The object to use as `this` for the node factory and\n *     serializers.\n * @return {O|undefined} Object.\n * @template O, T\n */\nexport function pushSerializeAndPop(object, serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) {\n    objectStack.push(object);\n    serialize(serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this);\n    return /** @type {O|undefined} */ (objectStack.pop());\n}\nvar xmlSerializer_ = undefined;\n/**\n * Register a XMLSerializer. Can be used  to inject a XMLSerializer\n * where there is no globally available implementation.\n *\n * @param {XMLSerializer} xmlSerializer A XMLSerializer.\n * @api\n */\nexport function registerXMLSerializer(xmlSerializer) {\n    xmlSerializer_ = xmlSerializer;\n}\n/**\n * @return {XMLSerializer} The XMLSerializer.\n */\nexport function getXMLSerializer() {\n    if (xmlSerializer_ === undefined && typeof XMLSerializer !== 'undefined') {\n        xmlSerializer_ = new XMLSerializer();\n    }\n    return xmlSerializer_;\n}\nvar document_ = undefined;\n/**\n * Register a Document to use when creating nodes for XML serializations. Can be used\n * to inject a Document where there is no globally available implementation.\n *\n * @param {Document} document A Document.\n * @api\n */\nexport function registerDocument(document) {\n    document_ = document;\n}\n/**\n * Get a document that should be used when creating nodes for XML serializations.\n * @return {Document} The document.\n */\nexport function getDocument() {\n    if (document_ === undefined && typeof document !== 'undefined') {\n        document_ = document.implementation.createDocument('', '', null);\n    }\n    return document_;\n}\n//# sourceMappingURL=xml.js.map","/**\n * @module ol/format/XML\n */\nimport { isDocument, parse } from '../xml.js';\n/**\n * @classdesc\n * Generic format for reading non-feature XML data\n *\n * @abstract\n */\nvar XML = /** @class */ (function () {\n    function XML() {\n    }\n    /**\n     * Read the source document.\n     *\n     * @param {Document|Element|string} source The XML source.\n     * @return {Object} An object representing the source.\n     * @api\n     */\n    XML.prototype.read = function (source) {\n        if (!source) {\n            return null;\n        }\n        else if (typeof source === 'string') {\n            var doc = parse(source);\n            return this.readFromDocument(doc);\n        }\n        else if (isDocument(source)) {\n            return this.readFromDocument(/** @type {Document} */ (source));\n        }\n        else {\n            return this.readFromNode(/** @type {Element} */ (source));\n        }\n    };\n    /**\n     * @param {Document} doc Document.\n     * @return {Object} Object\n     */\n    XML.prototype.readFromDocument = function (doc) {\n        for (var n = doc.firstChild; n; n = n.nextSibling) {\n            if (n.nodeType == Node.ELEMENT_NODE) {\n                return this.readFromNode(/** @type {Element} */ (n));\n            }\n        }\n        return null;\n    };\n    /**\n     * @abstract\n     * @param {Element} node Node.\n     * @return {Object} Object\n     */\n    XML.prototype.readFromNode = function (node) { };\n    return XML;\n}());\nexport default XML;\n//# sourceMappingURL=XML.js.map","/**\n * @module ol/format/xlink\n */\n/**\n * @const\n * @type {string}\n */\nvar NAMESPACE_URI = 'http://www.w3.org/1999/xlink';\n/**\n * @param {Element} node Node.\n * @return {string|undefined} href.\n */\nexport function readHref(node) {\n    return node.getAttributeNS(NAMESPACE_URI, 'href');\n}\n//# sourceMappingURL=xlink.js.map","/**\n * @module ol/format/xsd\n */\nimport { getAllTextContent, getDocument } from '../xml.js';\nimport { padNumber } from '../string.js';\n/**\n * @param {Node} node Node.\n * @return {boolean|undefined} Boolean.\n */\nexport function readBoolean(node) {\n    var s = getAllTextContent(node, false);\n    return readBooleanString(s);\n}\n/**\n * @param {string} string String.\n * @return {boolean|undefined} Boolean.\n */\nexport function readBooleanString(string) {\n    var m = /^\\s*(true|1)|(false|0)\\s*$/.exec(string);\n    if (m) {\n        return m[1] !== undefined || false;\n    }\n    else {\n        return undefined;\n    }\n}\n/**\n * @param {Node} node Node.\n * @return {number|undefined} DateTime in seconds.\n */\nexport function readDateTime(node) {\n    var s = getAllTextContent(node, false);\n    var dateTime = Date.parse(s);\n    return isNaN(dateTime) ? undefined : dateTime / 1000;\n}\n/**\n * @param {Node} node Node.\n * @return {number|undefined} Decimal.\n */\nexport function readDecimal(node) {\n    var s = getAllTextContent(node, false);\n    return readDecimalString(s);\n}\n/**\n * @param {string} string String.\n * @return {number|undefined} Decimal.\n */\nexport function readDecimalString(string) {\n    // FIXME check spec\n    var m = /^\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?)\\s*$/i.exec(string);\n    if (m) {\n        return parseFloat(m[1]);\n    }\n    else {\n        return undefined;\n    }\n}\n/**\n * @param {Node} node Node.\n * @return {number|undefined} Non negative integer.\n */\nexport function readPositiveInteger(node) {\n    var s = getAllTextContent(node, false);\n    return readNonNegativeIntegerString(s);\n}\n/**\n * @param {string} string String.\n * @return {number|undefined} Non negative integer.\n */\nexport function readNonNegativeIntegerString(string) {\n    var m = /^\\s*(\\d+)\\s*$/.exec(string);\n    if (m) {\n        return parseInt(m[1], 10);\n    }\n    else {\n        return undefined;\n    }\n}\n/**\n * @param {Node} node Node.\n * @return {string|undefined} String.\n */\nexport function readString(node) {\n    return getAllTextContent(node, false).trim();\n}\n/**\n * @param {Node} node Node to append a TextNode with the boolean to.\n * @param {boolean} bool Boolean.\n */\nexport function writeBooleanTextNode(node, bool) {\n    writeStringTextNode(node, bool ? '1' : '0');\n}\n/**\n * @param {Node} node Node to append a CDATA Section with the string to.\n * @param {string} string String.\n */\nexport function writeCDATASection(node, string) {\n    node.appendChild(getDocument().createCDATASection(string));\n}\n/**\n * @param {Node} node Node to append a TextNode with the dateTime to.\n * @param {number} dateTime DateTime in seconds.\n */\nexport function writeDateTimeTextNode(node, dateTime) {\n    var date = new Date(dateTime * 1000);\n    var string = date.getUTCFullYear() +\n        '-' +\n        padNumber(date.getUTCMonth() + 1, 2) +\n        '-' +\n        padNumber(date.getUTCDate(), 2) +\n        'T' +\n        padNumber(date.getUTCHours(), 2) +\n        ':' +\n        padNumber(date.getUTCMinutes(), 2) +\n        ':' +\n        padNumber(date.getUTCSeconds(), 2) +\n        'Z';\n    node.appendChild(getDocument().createTextNode(string));\n}\n/**\n * @param {Node} node Node to append a TextNode with the decimal to.\n * @param {number} decimal Decimal.\n */\nexport function writeDecimalTextNode(node, decimal) {\n    var string = decimal.toPrecision();\n    node.appendChild(getDocument().createTextNode(string));\n}\n/**\n * @param {Node} node Node to append a TextNode with the decimal to.\n * @param {number} nonNegativeInteger Non negative integer.\n */\nexport function writeNonNegativeIntegerTextNode(node, nonNegativeInteger) {\n    var string = nonNegativeInteger.toString();\n    node.appendChild(getDocument().createTextNode(string));\n}\n/**\n * @param {Node} node Node to append a TextNode with the string to.\n * @param {string} string String.\n */\nexport function writeStringTextNode(node, string) {\n    node.appendChild(getDocument().createTextNode(string));\n}\n//# sourceMappingURL=xsd.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/format/OWS\n */\nimport XML from './XML.js';\nimport { makeObjectPropertyPusher, makeObjectPropertySetter, makeStructureNS, pushParseAndPop, } from '../xml.js';\nimport { readHref } from './xlink.js';\nimport { readString } from './xsd.js';\n/**\n * @const\n * @type {Array<null|string>}\n */\nvar NAMESPACE_URIS = [null, 'http://www.opengis.net/ows/1.1'];\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'ServiceIdentification': makeObjectPropertySetter(readServiceIdentification),\n    'ServiceProvider': makeObjectPropertySetter(readServiceProvider),\n    'OperationsMetadata': makeObjectPropertySetter(readOperationsMetadata),\n});\nvar OWS = /** @class */ (function (_super) {\n    __extends(OWS, _super);\n    function OWS() {\n        return _super.call(this) || this;\n    }\n    /**\n     * @param {Element} node Node.\n     * @return {Object} Object\n     */\n    OWS.prototype.readFromNode = function (node) {\n        var owsObject = pushParseAndPop({}, PARSERS, node, []);\n        return owsObject ? owsObject : null;\n    };\n    return OWS;\n}(XML));\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar ADDRESS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'DeliveryPoint': makeObjectPropertySetter(readString),\n    'City': makeObjectPropertySetter(readString),\n    'AdministrativeArea': makeObjectPropertySetter(readString),\n    'PostalCode': makeObjectPropertySetter(readString),\n    'Country': makeObjectPropertySetter(readString),\n    'ElectronicMailAddress': makeObjectPropertySetter(readString),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar ALLOWED_VALUES_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'Value': makeObjectPropertyPusher(readValue),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar CONSTRAINT_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'AllowedValues': makeObjectPropertySetter(readAllowedValues),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar CONTACT_INFO_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'Phone': makeObjectPropertySetter(readPhone),\n    'Address': makeObjectPropertySetter(readAddress),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar DCP_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'HTTP': makeObjectPropertySetter(readHttp),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar HTTP_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'Get': makeObjectPropertyPusher(readGet),\n    'Post': undefined, // TODO\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar OPERATION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'DCP': makeObjectPropertySetter(readDcp),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar OPERATIONS_METADATA_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'Operation': readOperation,\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar PHONE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'Voice': makeObjectPropertySetter(readString),\n    'Facsimile': makeObjectPropertySetter(readString),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar REQUEST_METHOD_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'Constraint': makeObjectPropertyPusher(readConstraint),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar SERVICE_CONTACT_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'IndividualName': makeObjectPropertySetter(readString),\n    'PositionName': makeObjectPropertySetter(readString),\n    'ContactInfo': makeObjectPropertySetter(readContactInfo),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar SERVICE_IDENTIFICATION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'Abstract': makeObjectPropertySetter(readString),\n    'AccessConstraints': makeObjectPropertySetter(readString),\n    'Fees': makeObjectPropertySetter(readString),\n    'Title': makeObjectPropertySetter(readString),\n    'ServiceTypeVersion': makeObjectPropertySetter(readString),\n    'ServiceType': makeObjectPropertySetter(readString),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar SERVICE_PROVIDER_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'ProviderName': makeObjectPropertySetter(readString),\n    'ProviderSite': makeObjectPropertySetter(readHref),\n    'ServiceContact': makeObjectPropertySetter(readServiceContact),\n});\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The address.\n */\nfunction readAddress(node, objectStack) {\n    return pushParseAndPop({}, ADDRESS_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The values.\n */\nfunction readAllowedValues(node, objectStack) {\n    return pushParseAndPop({}, ALLOWED_VALUES_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The constraint.\n */\nfunction readConstraint(node, objectStack) {\n    var name = node.getAttribute('name');\n    if (!name) {\n        return undefined;\n    }\n    return pushParseAndPop({ 'name': name }, CONSTRAINT_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The contact info.\n */\nfunction readContactInfo(node, objectStack) {\n    return pushParseAndPop({}, CONTACT_INFO_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The DCP.\n */\nfunction readDcp(node, objectStack) {\n    return pushParseAndPop({}, DCP_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The GET object.\n */\nfunction readGet(node, objectStack) {\n    var href = readHref(node);\n    if (!href) {\n        return undefined;\n    }\n    return pushParseAndPop({ 'href': href }, REQUEST_METHOD_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The HTTP object.\n */\nfunction readHttp(node, objectStack) {\n    return pushParseAndPop({}, HTTP_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The operation.\n */\nfunction readOperation(node, objectStack) {\n    var name = node.getAttribute('name');\n    var value = pushParseAndPop({}, OPERATION_PARSERS, node, objectStack);\n    if (!value) {\n        return undefined;\n    }\n    var object = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n    object[name] = value;\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The operations metadata.\n */\nfunction readOperationsMetadata(node, objectStack) {\n    return pushParseAndPop({}, OPERATIONS_METADATA_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The phone.\n */\nfunction readPhone(node, objectStack) {\n    return pushParseAndPop({}, PHONE_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The service identification.\n */\nfunction readServiceIdentification(node, objectStack) {\n    return pushParseAndPop({}, SERVICE_IDENTIFICATION_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The service contact.\n */\nfunction readServiceContact(node, objectStack) {\n    return pushParseAndPop({}, SERVICE_CONTACT_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The service provider.\n */\nfunction readServiceProvider(node, objectStack) {\n    return pushParseAndPop({}, SERVICE_PROVIDER_PARSERS, node, objectStack);\n}\n/**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {string|undefined} The value.\n */\nfunction readValue(node, objectStack) {\n    return readString(node);\n}\nexport default OWS;\n//# sourceMappingURL=OWS.js.map","/**\n * @module ol/extent\n */\nimport Corner from './extent/Corner.js';\nimport Relationship from './extent/Relationship.js';\nimport { assert } from './asserts.js';\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array<number>} Extent\n * @api\n */\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n    var extent = createEmpty();\n    for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n        extendCoordinate(extent, coordinates[i]);\n    }\n    return extent;\n}\n/**\n * @param {Array<number>} xs Xs.\n * @param {Array<number>} ys Ys.\n * @param {Extent} [opt_extent] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, opt_extent) {\n    var minX = Math.min.apply(null, xs);\n    var minY = Math.min.apply(null, ys);\n    var maxX = Math.max.apply(null, xs);\n    var maxY = Math.max.apply(null, ys);\n    return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n}\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, opt_extent) {\n    if (opt_extent) {\n        opt_extent[0] = extent[0] - value;\n        opt_extent[1] = extent[1] - value;\n        opt_extent[2] = extent[2] + value;\n        opt_extent[3] = extent[3] + value;\n        return opt_extent;\n    }\n    else {\n        return [\n            extent[0] - value,\n            extent[1] - value,\n            extent[2] + value,\n            extent[3] + value,\n        ];\n    }\n}\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, opt_extent) {\n    if (opt_extent) {\n        opt_extent[0] = extent[0];\n        opt_extent[1] = extent[1];\n        opt_extent[2] = extent[2];\n        opt_extent[3] = extent[3];\n        return opt_extent;\n    }\n    else {\n        return extent.slice();\n    }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n    var dx, dy;\n    if (x < extent[0]) {\n        dx = extent[0] - x;\n    }\n    else if (extent[2] < x) {\n        dx = x - extent[2];\n    }\n    else {\n        dx = 0;\n    }\n    if (y < extent[1]) {\n        dy = extent[1] - y;\n    }\n    else if (extent[3] < y) {\n        dy = y - extent[3];\n    }\n    else {\n        dy = 0;\n    }\n    return dx * dx + dy * dy;\n}\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n    return containsXY(extent, coordinate[0], coordinate[1]);\n}\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n *     first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n    return (extent1[0] <= extent2[0] &&\n        extent2[2] <= extent1[2] &&\n        extent1[1] <= extent2[1] &&\n        extent2[3] <= extent1[3]);\n}\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n    return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n *     import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n    var minX = extent[0];\n    var minY = extent[1];\n    var maxX = extent[2];\n    var maxY = extent[3];\n    var x = coordinate[0];\n    var y = coordinate[1];\n    var relationship = Relationship.UNKNOWN;\n    if (x < minX) {\n        relationship = relationship | Relationship.LEFT;\n    }\n    else if (x > maxX) {\n        relationship = relationship | Relationship.RIGHT;\n    }\n    if (y < minY) {\n        relationship = relationship | Relationship.BELOW;\n    }\n    else if (y > maxY) {\n        relationship = relationship | Relationship.ABOVE;\n    }\n    if (relationship === Relationship.UNKNOWN) {\n        relationship = Relationship.INTERSECTING;\n    }\n    return relationship;\n}\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n    return [Infinity, Infinity, -Infinity, -Infinity];\n}\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [opt_extent] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, opt_extent) {\n    if (opt_extent) {\n        opt_extent[0] = minX;\n        opt_extent[1] = minY;\n        opt_extent[2] = maxX;\n        opt_extent[3] = maxY;\n        return opt_extent;\n    }\n    else {\n        return [minX, minY, maxX, maxY];\n    }\n}\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(opt_extent) {\n    return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, opt_extent);\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, opt_extent) {\n    var x = coordinate[0];\n    var y = coordinate[1];\n    return createOrUpdate(x, y, x, y, opt_extent);\n}\n/**\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, opt_extent) {\n    var extent = createOrUpdateEmpty(opt_extent);\n    return extendCoordinates(extent, coordinates);\n}\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(flatCoordinates, offset, end, stride, opt_extent) {\n    var extent = createOrUpdateEmpty(opt_extent);\n    return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n/**\n * @param {Array<Array<import(\"./coordinate.js\").Coordinate>>} rings Rings.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, opt_extent) {\n    var extent = createOrUpdateEmpty(opt_extent);\n    return extendRings(extent, rings);\n}\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n    return (extent1[0] == extent2[0] &&\n        extent1[2] == extent2[2] &&\n        extent1[1] == extent2[1] &&\n        extent1[3] == extent2[3]);\n}\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n    return (Math.abs(extent1[0] - extent2[0]) < tolerance &&\n        Math.abs(extent1[2] - extent2[2]) < tolerance &&\n        Math.abs(extent1[1] - extent2[1]) < tolerance &&\n        Math.abs(extent1[3] - extent2[3]) < tolerance);\n}\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n    if (extent2[0] < extent1[0]) {\n        extent1[0] = extent2[0];\n    }\n    if (extent2[2] > extent1[2]) {\n        extent1[2] = extent2[2];\n    }\n    if (extent2[1] < extent1[1]) {\n        extent1[1] = extent2[1];\n    }\n    if (extent2[3] > extent1[3]) {\n        extent1[3] = extent2[3];\n    }\n    return extent1;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n    if (coordinate[0] < extent[0]) {\n        extent[0] = coordinate[0];\n    }\n    if (coordinate[0] > extent[2]) {\n        extent[2] = coordinate[0];\n    }\n    if (coordinate[1] < extent[1]) {\n        extent[1] = coordinate[1];\n    }\n    if (coordinate[1] > extent[3]) {\n        extent[3] = coordinate[1];\n    }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n    for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n        extendCoordinate(extent, coordinates[i]);\n    }\n    return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(extent, flatCoordinates, offset, end, stride) {\n    for (; offset < end; offset += stride) {\n        extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n    }\n    return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array<Array<import(\"./coordinate.js\").Coordinate>>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n    for (var i = 0, ii = rings.length; i < ii; ++i) {\n        extendCoordinates(extent, rings[i]);\n    }\n    return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n    extent[0] = Math.min(extent[0], x);\n    extent[1] = Math.min(extent[1], y);\n    extent[2] = Math.max(extent[2], x);\n    extent[3] = Math.max(extent[3], y);\n}\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n    var val;\n    val = callback(getBottomLeft(extent));\n    if (val) {\n        return val;\n    }\n    val = callback(getBottomRight(extent));\n    if (val) {\n        return val;\n    }\n    val = callback(getTopRight(extent));\n    if (val) {\n        return val;\n    }\n    val = callback(getTopLeft(extent));\n    if (val) {\n        return val;\n    }\n    return false;\n}\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n    var area = 0;\n    if (!isEmpty(extent)) {\n        area = getWidth(extent) * getHeight(extent);\n    }\n    return area;\n}\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n    return [extent[0], extent[1]];\n}\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n    return [extent[2], extent[1]];\n}\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n    return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./extent/Corner.js\").default} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n    var coordinate;\n    if (corner === Corner.BOTTOM_LEFT) {\n        coordinate = getBottomLeft(extent);\n    }\n    else if (corner === Corner.BOTTOM_RIGHT) {\n        coordinate = getBottomRight(extent);\n    }\n    else if (corner === Corner.TOP_LEFT) {\n        coordinate = getTopLeft(extent);\n    }\n    else if (corner === Corner.TOP_RIGHT) {\n        coordinate = getTopRight(extent);\n    }\n    else {\n        assert(false, 13); // Invalid corner\n    }\n    return coordinate;\n}\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n    var minX = Math.min(extent1[0], extent2[0]);\n    var minY = Math.min(extent1[1], extent2[1]);\n    var maxX = Math.max(extent1[2], extent2[2]);\n    var maxY = Math.max(extent1[3], extent2[3]);\n    return (maxX - minX) * (maxY - minY);\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [opt_extent] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, opt_extent) {\n    var dx = (resolution * size[0]) / 2;\n    var dy = (resolution * size[1]) / 2;\n    var cosRotation = Math.cos(rotation);\n    var sinRotation = Math.sin(rotation);\n    var xCos = dx * cosRotation;\n    var xSin = dx * sinRotation;\n    var yCos = dy * cosRotation;\n    var ySin = dy * sinRotation;\n    var x = center[0];\n    var y = center[1];\n    var x0 = x - xCos + ySin;\n    var x1 = x - xCos - ySin;\n    var x2 = x + xCos - ySin;\n    var x3 = x + xCos + ySin;\n    var y0 = y - xSin - yCos;\n    var y1 = y - xSin + yCos;\n    var y2 = y + xSin + yCos;\n    var y3 = y + xSin - yCos;\n    return createOrUpdate(Math.min(x0, x1, x2, x3), Math.min(y0, y1, y2, y3), Math.max(x0, x1, x2, x3), Math.max(y0, y1, y2, y3), opt_extent);\n}\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n    return extent[3] - extent[1];\n}\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n    var intersection = getIntersection(extent1, extent2);\n    return getArea(intersection);\n}\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [opt_extent] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, opt_extent) {\n    var intersection = opt_extent ? opt_extent : createEmpty();\n    if (intersects(extent1, extent2)) {\n        if (extent1[0] > extent2[0]) {\n            intersection[0] = extent1[0];\n        }\n        else {\n            intersection[0] = extent2[0];\n        }\n        if (extent1[1] > extent2[1]) {\n            intersection[1] = extent1[1];\n        }\n        else {\n            intersection[1] = extent2[1];\n        }\n        if (extent1[2] < extent2[2]) {\n            intersection[2] = extent1[2];\n        }\n        else {\n            intersection[2] = extent2[2];\n        }\n        if (extent1[3] < extent2[3]) {\n            intersection[3] = extent1[3];\n        }\n        else {\n            intersection[3] = extent2[3];\n        }\n    }\n    else {\n        createOrUpdateEmpty(intersection);\n    }\n    return intersection;\n}\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n    return getWidth(extent) + getHeight(extent);\n}\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n    return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n    return [extent[0], extent[3]];\n}\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n    return [extent[2], extent[3]];\n}\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n    return extent[2] - extent[0];\n}\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n    return (extent1[0] <= extent2[2] &&\n        extent1[2] >= extent2[0] &&\n        extent1[1] <= extent2[3] &&\n        extent1[3] >= extent2[1]);\n}\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n    return extent[2] < extent[0] || extent[3] < extent[1];\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, opt_extent) {\n    if (opt_extent) {\n        opt_extent[0] = extent[0];\n        opt_extent[1] = extent[1];\n        opt_extent[2] = extent[2];\n        opt_extent[3] = extent[3];\n        return opt_extent;\n    }\n    else {\n        return extent;\n    }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n    var deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n    var deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n    extent[0] -= deltaX;\n    extent[2] += deltaX;\n    extent[1] -= deltaY;\n    extent[3] += deltaY;\n}\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n    var intersects = false;\n    var startRel = coordinateRelationship(extent, start);\n    var endRel = coordinateRelationship(extent, end);\n    if (startRel === Relationship.INTERSECTING ||\n        endRel === Relationship.INTERSECTING) {\n        intersects = true;\n    }\n    else {\n        var minX = extent[0];\n        var minY = extent[1];\n        var maxX = extent[2];\n        var maxY = extent[3];\n        var startX = start[0];\n        var startY = start[1];\n        var endX = end[0];\n        var endY = end[1];\n        var slope = (endY - startY) / (endX - startX);\n        var x = void 0, y = void 0;\n        if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n            // potentially intersects top\n            x = endX - (endY - maxY) / slope;\n            intersects = x >= minX && x <= maxX;\n        }\n        if (!intersects &&\n            !!(endRel & Relationship.RIGHT) &&\n            !(startRel & Relationship.RIGHT)) {\n            // potentially intersects right\n            y = endY - (endX - maxX) * slope;\n            intersects = y >= minY && y <= maxY;\n        }\n        if (!intersects &&\n            !!(endRel & Relationship.BELOW) &&\n            !(startRel & Relationship.BELOW)) {\n            // potentially intersects bottom\n            x = endX - (endY - minY) / slope;\n            intersects = x >= minX && x <= maxX;\n        }\n        if (!intersects &&\n            !!(endRel & Relationship.LEFT) &&\n            !(startRel & Relationship.LEFT)) {\n            // potentially intersects left\n            y = endY - (endX - minX) * slope;\n            intersects = y >= minY && y <= maxY;\n        }\n    }\n    return intersects;\n}\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [opt_extent] Destination extent.\n * @param {number} [opt_stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, opt_extent, opt_stops) {\n    var coordinates = [];\n    if (opt_stops > 1) {\n        var width = extent[2] - extent[0];\n        var height = extent[3] - extent[1];\n        for (var i = 0; i < opt_stops; ++i) {\n            coordinates.push(extent[0] + (width * i) / opt_stops, extent[1], extent[2], extent[1] + (height * i) / opt_stops, extent[2] - (width * i) / opt_stops, extent[3], extent[0], extent[3] - (height * i) / opt_stops);\n        }\n    }\n    else {\n        coordinates = [\n            extent[0],\n            extent[1],\n            extent[2],\n            extent[1],\n            extent[2],\n            extent[3],\n            extent[0],\n            extent[3],\n        ];\n    }\n    transformFn(coordinates, coordinates, 2);\n    var xs = [];\n    var ys = [];\n    for (var i = 0, l = coordinates.length; i < l; i += 2) {\n        xs.push(coordinates[i]);\n        ys.push(coordinates[i + 1]);\n    }\n    return _boundingExtentXYs(xs, ys, opt_extent);\n}\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n    var projectionExtent = projection.getExtent();\n    var center = getCenter(extent);\n    if (projection.canWrapX() &&\n        (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])) {\n        var worldWidth = getWidth(projectionExtent);\n        var worldsAway = Math.floor((center[0] - projectionExtent[0]) / worldWidth);\n        var offset = worldsAway * worldWidth;\n        extent[0] -= offset;\n        extent[2] -= offset;\n    }\n    return extent;\n}\n//# sourceMappingURL=extent.js.map","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * @module ol/format/WMTSCapabilities\n */\nimport OWS from './OWS.js';\nimport XML from './XML.js';\nimport { boundingExtent } from '../extent.js';\nimport { makeArrayPusher, makeObjectPropertyPusher, makeObjectPropertySetter, makeStructureNS, pushParseAndPop, } from '../xml.js';\nimport { readDecimal, readPositiveInteger, readString } from './xsd.js';\nimport { readHref } from './xlink.js';\n/**\n * @const\n * @type {Array<null|string>}\n */\nvar NAMESPACE_URIS = [null, 'http://www.opengis.net/wmts/1.0'];\n/**\n * @const\n * @type {Array<null|string>}\n */\nvar OWS_NAMESPACE_URIS = [null, 'http://www.opengis.net/ows/1.1'];\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'Contents': makeObjectPropertySetter(readContents),\n});\n/**\n * @classdesc\n * Format for reading WMTS capabilities data.\n *\n * @api\n */\nvar WMTSCapabilities = /** @class */ (function (_super) {\n    __extends(WMTSCapabilities, _super);\n    function WMTSCapabilities() {\n        var _this = _super.call(this) || this;\n        /**\n         * @type {OWS}\n         * @private\n         */\n        _this.owsParser_ = new OWS();\n        return _this;\n    }\n    /**\n     * @param {Element} node Node.\n     * @return {Object} Object\n     */\n    WMTSCapabilities.prototype.readFromNode = function (node) {\n        var version = node.getAttribute('version');\n        if (version) {\n            version = version.trim();\n        }\n        var WMTSCapabilityObject = this.owsParser_.readFromNode(node);\n        if (!WMTSCapabilityObject) {\n            return null;\n        }\n        WMTSCapabilityObject['version'] = version;\n        WMTSCapabilityObject = pushParseAndPop(WMTSCapabilityObject, PARSERS, node, []);\n        return WMTSCapabilityObject ? WMTSCapabilityObject : null;\n    };\n    return WMTSCapabilities;\n}(XML));\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar CONTENTS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'Layer': makeObjectPropertyPusher(readLayer),\n    'TileMatrixSet': makeObjectPropertyPusher(readTileMatrixSet),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar LAYER_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'Style': makeObjectPropertyPusher(readStyle),\n    'Format': makeObjectPropertyPusher(readString),\n    'TileMatrixSetLink': makeObjectPropertyPusher(readTileMatrixSetLink),\n    'Dimension': makeObjectPropertyPusher(readDimensions),\n    'ResourceURL': makeObjectPropertyPusher(readResourceUrl),\n}, makeStructureNS(OWS_NAMESPACE_URIS, {\n    'Title': makeObjectPropertySetter(readString),\n    'Abstract': makeObjectPropertySetter(readString),\n    'WGS84BoundingBox': makeObjectPropertySetter(readBoundingBox),\n    'Identifier': makeObjectPropertySetter(readString),\n}));\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar STYLE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'LegendURL': makeObjectPropertyPusher(readLegendUrl),\n}, makeStructureNS(OWS_NAMESPACE_URIS, {\n    'Title': makeObjectPropertySetter(readString),\n    'Identifier': makeObjectPropertySetter(readString),\n}));\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar TMS_LINKS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'TileMatrixSet': makeObjectPropertySetter(readString),\n    'TileMatrixSetLimits': makeObjectPropertySetter(readTileMatrixLimitsList),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar TMS_LIMITS_LIST_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'TileMatrixLimits': makeArrayPusher(readTileMatrixLimits),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar TMS_LIMITS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'TileMatrix': makeObjectPropertySetter(readString),\n    'MinTileRow': makeObjectPropertySetter(readPositiveInteger),\n    'MaxTileRow': makeObjectPropertySetter(readPositiveInteger),\n    'MinTileCol': makeObjectPropertySetter(readPositiveInteger),\n    'MaxTileCol': makeObjectPropertySetter(readPositiveInteger),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar DIMENSION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'Default': makeObjectPropertySetter(readString),\n    'Value': makeObjectPropertyPusher(readString),\n}, makeStructureNS(OWS_NAMESPACE_URIS, {\n    'Identifier': makeObjectPropertySetter(readString),\n}));\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar WGS84_BBOX_READERS = makeStructureNS(OWS_NAMESPACE_URIS, {\n    'LowerCorner': makeArrayPusher(readCoordinates),\n    'UpperCorner': makeArrayPusher(readCoordinates),\n});\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar TMS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'WellKnownScaleSet': makeObjectPropertySetter(readString),\n    'TileMatrix': makeObjectPropertyPusher(readTileMatrix),\n}, makeStructureNS(OWS_NAMESPACE_URIS, {\n    'SupportedCRS': makeObjectPropertySetter(readString),\n    'Identifier': makeObjectPropertySetter(readString),\n    'BoundingBox': makeObjectPropertySetter(readBoundingBox),\n}));\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nvar TM_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n    'TopLeftCorner': makeObjectPropertySetter(readCoordinates),\n    'ScaleDenominator': makeObjectPropertySetter(readDecimal),\n    'TileWidth': makeObjectPropertySetter(readPositiveInteger),\n    'TileHeight': makeObjectPropertySetter(readPositiveInteger),\n    'MatrixWidth': makeObjectPropertySetter(readPositiveInteger),\n    'MatrixHeight': makeObjectPropertySetter(readPositiveInteger),\n}, makeStructureNS(OWS_NAMESPACE_URIS, {\n    'Identifier': makeObjectPropertySetter(readString),\n}));\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Attribution object.\n */\nfunction readContents(node, objectStack) {\n    return pushParseAndPop({}, CONTENTS_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Layers object.\n */\nfunction readLayer(node, objectStack) {\n    return pushParseAndPop({}, LAYER_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Tile Matrix Set object.\n */\nfunction readTileMatrixSet(node, objectStack) {\n    return pushParseAndPop({}, TMS_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Style object.\n */\nfunction readStyle(node, objectStack) {\n    var style = pushParseAndPop({}, STYLE_PARSERS, node, objectStack);\n    if (!style) {\n        return undefined;\n    }\n    var isDefault = node.getAttribute('isDefault') === 'true';\n    style['isDefault'] = isDefault;\n    return style;\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Tile Matrix Set Link object.\n */\nfunction readTileMatrixSetLink(node, objectStack) {\n    return pushParseAndPop({}, TMS_LINKS_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Dimension object.\n */\nfunction readDimensions(node, objectStack) {\n    return pushParseAndPop({}, DIMENSION_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Resource URL object.\n */\nfunction readResourceUrl(node, objectStack) {\n    var format = node.getAttribute('format');\n    var template = node.getAttribute('template');\n    var resourceType = node.getAttribute('resourceType');\n    var resource = {};\n    if (format) {\n        resource['format'] = format;\n    }\n    if (template) {\n        resource['template'] = template;\n    }\n    if (resourceType) {\n        resource['resourceType'] = resourceType;\n    }\n    return resource;\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} BBox object.\n */\nfunction readBoundingBox(node, objectStack) {\n    var coordinates = pushParseAndPop([], WGS84_BBOX_READERS, node, objectStack);\n    if (coordinates.length != 2) {\n        return undefined;\n    }\n    return boundingExtent(coordinates);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Legend object.\n */\nfunction readLegendUrl(node, objectStack) {\n    var legend = {};\n    legend['format'] = node.getAttribute('format');\n    legend['href'] = readHref(node);\n    return legend;\n}\n/**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Coordinates object.\n */\nfunction readCoordinates(node, objectStack) {\n    var coordinates = readString(node).split(/\\s+/);\n    if (!coordinates || coordinates.length != 2) {\n        return undefined;\n    }\n    var x = +coordinates[0];\n    var y = +coordinates[1];\n    if (isNaN(x) || isNaN(y)) {\n        return undefined;\n    }\n    return [x, y];\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrix object.\n */\nfunction readTileMatrix(node, objectStack) {\n    return pushParseAndPop({}, TM_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrixSetLimits Object.\n */\nfunction readTileMatrixLimitsList(node, objectStack) {\n    return pushParseAndPop([], TMS_LIMITS_LIST_PARSERS, node, objectStack);\n}\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrixLimits Array.\n */\nfunction readTileMatrixLimits(node, objectStack) {\n    return pushParseAndPop({}, TMS_LIMITS_PARSERS, node, objectStack);\n}\nexport default WMTSCapabilities;\n//# sourceMappingURL=WMTSCapabilities.js.map","import WMTSCapabilities from 'ol/format/WMTSCapabilities';\n\nexport const parseCapabilities = (response, args) => {\n\n  const parser = new WMTSCapabilities();\n\n  const capabilities = parser.read(response);\n  \n  // Pick layer by name or (default) take first in list\n  const Layer = args?.layer ? \n    capabilities.Contents.Layer.find(l => l.Title === args.layer) :\n    capabilities.Contents.Layer[0];\n\n  const Style = args?.style || \n    Layer.Style.find(s => s.isDefault).Identifier;\n\n  const TileUrlTemplate = \n    Layer.ResourceURL[0].template;\n\n  const TileMatrixSetLink = \n    Layer.TileMatrixSetLink[0].TileMatrixSet;\n\n  const TileMatrixSet =\n    capabilities.Contents.TileMatrixSet.find(s => s.Identifier === TileMatrixSetLink);\n\n  const { TileMatrix } = TileMatrixSet;\n\n  const { \n    TileWidth, \n    TileHeight, \n    MatrixWidth, \n    MatrixHeight,\n    TopLeftCorner \n  } = TileMatrix[ Math.min(20, TileMatrix.length - 1) ];\n\n  return {\n    tileSource: {\n      width: MatrixWidth * TileWidth,\n      height: MatrixHeight * TileHeight,\n      tileWidth: TileWidth,\n      tileHeight: TileHeight,\n      minLevel: 8,\n\n      getTileUrl: (level, x, y) => TileUrlTemplate\n        .replace('{Style}', Style)\n        .replace('{TileMatrixSet}', TileMatrixSetLink)\n        .replace('{TileMatrix}', level - 8)\n        .replace('{TileCol}', x)\n        .replace('{TileRow}', y)\n    },\n\n    // Should be [ minLon, minLat, maxLon, maxLat ]\n    mapBounds: Layer.WGS84BoundingBox,\n\n    projection: {\n      code: TileMatrixSet.SupportedCRS,\n      extent: [ 2 * Math.abs(TopLeftCorner[0]), 2 * Math.abs(TopLeftCorner[1]) ]\n    }\n    \n  }\n\n}","export default function(defs) {\n  defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n  defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n  defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n\n  defs.WGS84 = defs['EPSG:4326'];\n  defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n  defs.GOOGLE = defs['EPSG:3857'];\n  defs['EPSG:900913'] = defs['EPSG:3857'];\n  defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_GRIDSHIFT = 3;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SRS_WGS84_SEMIMAJOR = 6378137.0;  // only used in grid shift transforms\nexport var SRS_WGS84_SEMIMINOR = 6356752.314;  // only used in grid shift transforms\nexport var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI/2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI/4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var exports = {};\nexport {exports as default};\n\nexports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n","export default {\n  ft: {to_meter: 0.3048},\n  'us-ft': {to_meter: 1200 / 3937}\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n  if (obj[key]) {\n    return obj[key];\n  }\n  var keys = Object.keys(obj);\n  var lkey = key.toLowerCase().replace(ignoredChar, '');\n  var i = -1;\n  var testkey, processedKey;\n  while (++i < keys.length) {\n    testkey = keys[i];\n    processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n    if (processedKey === lkey) {\n      return obj[testkey];\n    }\n  }\n}\n","import {D2R} from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\nexport default function(defData) {\n  var self = {};\n  var paramObj = defData.split('+').map(function(v) {\n    return v.trim();\n  }).filter(function(a) {\n    return a;\n  }).reduce(function(p, a) {\n    var split = a.split('=');\n    split.push(true);\n    p[split[0].toLowerCase()] = split[1];\n    return p;\n  }, {});\n  var paramName, paramVal, paramOutname;\n  var params = {\n    proj: 'projName',\n    datum: 'datumCode',\n    rf: function(v) {\n      self.rf = parseFloat(v);\n    },\n    lat_0: function(v) {\n      self.lat0 = v * D2R;\n    },\n    lat_1: function(v) {\n      self.lat1 = v * D2R;\n    },\n    lat_2: function(v) {\n      self.lat2 = v * D2R;\n    },\n    lat_ts: function(v) {\n      self.lat_ts = v * D2R;\n    },\n    lon_0: function(v) {\n      self.long0 = v * D2R;\n    },\n    lon_1: function(v) {\n      self.long1 = v * D2R;\n    },\n    lon_2: function(v) {\n      self.long2 = v * D2R;\n    },\n    alpha: function(v) {\n      self.alpha = parseFloat(v) * D2R;\n    },\n    gamma: function(v) {\n      self.rectified_grid_angle = parseFloat(v);\n    },\n    lonc: function(v) {\n      self.longc = v * D2R;\n    },\n    x_0: function(v) {\n      self.x0 = parseFloat(v);\n    },\n    y_0: function(v) {\n      self.y0 = parseFloat(v);\n    },\n    k_0: function(v) {\n      self.k0 = parseFloat(v);\n    },\n    k: function(v) {\n      self.k0 = parseFloat(v);\n    },\n    a: function(v) {\n      self.a = parseFloat(v);\n    },\n    b: function(v) {\n      self.b = parseFloat(v);\n    },\n    r_a: function() {\n      self.R_A = true;\n    },\n    zone: function(v) {\n      self.zone = parseInt(v, 10);\n    },\n    south: function() {\n      self.utmSouth = true;\n    },\n    towgs84: function(v) {\n      self.datum_params = v.split(\",\").map(function(a) {\n        return parseFloat(a);\n      });\n    },\n    to_meter: function(v) {\n      self.to_meter = parseFloat(v);\n    },\n    units: function(v) {\n      self.units = v;\n      var unit = match(units, v);\n      if (unit) {\n        self.to_meter = unit.to_meter;\n      }\n    },\n    from_greenwich: function(v) {\n      self.from_greenwich = v * D2R;\n    },\n    pm: function(v) {\n      var pm = match(PrimeMeridian, v);\n      self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n    },\n    nadgrids: function(v) {\n      if (v === '@null') {\n        self.datumCode = 'none';\n      }\n      else {\n        self.nadgrids = v;\n      }\n    },\n    axis: function(v) {\n      var legalAxis = \"ewnsud\";\n      if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n        self.axis = v;\n      }\n    },\n    approx: function() {\n      self.approx = true;\n    }\n  };\n  for (paramName in paramObj) {\n    paramVal = paramObj[paramName];\n    if (paramName in params) {\n      paramOutname = params[paramName];\n      if (typeof paramOutname === 'function') {\n        paramOutname(paramVal);\n      }\n      else {\n        self[paramOutname] = paramVal;\n      }\n    }\n    else {\n      self[paramName] = paramVal;\n    }\n  }\n  if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n    self.datumCode = self.datumCode.toLowerCase();\n  }\n  return self;\n}\n","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n  if (typeof text !== 'string') {\n    throw new Error('not a string');\n  }\n  this.text = text.trim();\n  this.level = 0;\n  this.place = 0;\n  this.root = null;\n  this.stack = [];\n  this.currentObject = null;\n  this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n  var char = this.text[this.place++];\n  if (this.state !== QUOTED) {\n    while (whitespace.test(char)) {\n      if (this.place >= this.text.length) {\n        return;\n      }\n      char = this.text[this.place++];\n    }\n  }\n  switch (this.state) {\n    case NEUTRAL:\n      return this.neutral(char);\n    case KEYWORD:\n      return this.keyword(char)\n    case QUOTED:\n      return this.quoted(char);\n    case AFTERQUOTE:\n      return this.afterquote(char);\n    case NUMBER:\n      return this.number(char);\n    case ENDED:\n      return;\n  }\n};\nParser.prototype.afterquote = function(char) {\n  if (char === '\"') {\n    this.word += '\"';\n    this.state = QUOTED;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.word = this.word.trim();\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n  if (char === ',') {\n    if (this.word !== null) {\n      this.currentObject.push(this.word);\n    }\n    this.word = null;\n    this.state = NEUTRAL;\n    return;\n  }\n  if (char === ']') {\n    this.level--;\n    if (this.word !== null) {\n      this.currentObject.push(this.word);\n      this.word = null;\n    }\n    this.state = NEUTRAL;\n    this.currentObject = this.stack.pop();\n    if (!this.currentObject) {\n      this.state = ENDED;\n    }\n\n    return;\n  }\n};\nParser.prototype.number = function(char) {\n  if (digets.test(char)) {\n    this.word += char;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.word = parseFloat(this.word);\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n  if (char === '\"') {\n    this.state = AFTERQUOTE;\n    return;\n  }\n  this.word += char;\n  return;\n};\nParser.prototype.keyword = function(char) {\n  if (keyword.test(char)) {\n    this.word += char;\n    return;\n  }\n  if (char === '[') {\n    var newObjects = [];\n    newObjects.push(this.word);\n    this.level++;\n    if (this.root === null) {\n      this.root = newObjects;\n    } else {\n      this.currentObject.push(newObjects);\n    }\n    this.stack.push(this.currentObject);\n    this.currentObject = newObjects;\n    this.state = NEUTRAL;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n  if (latin.test(char)) {\n    this.word = char;\n    this.state = KEYWORD;\n    return;\n  }\n  if (char === '\"') {\n    this.word = '';\n    this.state = QUOTED;\n    return;\n  }\n  if (digets.test(char)) {\n    this.word = char;\n    this.state = NUMBER;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n  while (this.place < this.text.length) {\n    this.readCharicter();\n  }\n  if (this.state === ENDED) {\n    return this.root;\n  }\n  throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n  var parser = new Parser(txt);\n  return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n  if (Array.isArray(key)) {\n    value.unshift(key);\n    key = null;\n  }\n  var thing = key ? {} : obj;\n\n  var out = value.reduce(function(newObj, item) {\n    sExpr(item, newObj);\n    return newObj\n  }, thing);\n  if (key) {\n    obj[key] = out;\n  }\n}\n\nexport function sExpr(v, obj) {\n  if (!Array.isArray(v)) {\n    obj[v] = true;\n    return;\n  }\n  var key = v.shift();\n  if (key === 'PARAMETER') {\n    key = v.shift();\n  }\n  if (v.length === 1) {\n    if (Array.isArray(v[0])) {\n      obj[key] = {};\n      sExpr(v[0], obj[key]);\n      return;\n    }\n    obj[key] = v[0];\n    return;\n  }\n  if (!v.length) {\n    obj[key] = true;\n    return;\n  }\n  if (key === 'TOWGS84') {\n    obj[key] = v;\n    return;\n  }\n  if (key === 'AXIS') {\n    if (!(key in obj)) {\n      obj[key] = [];\n    }\n    obj[key].push(v);\n    return;\n  }\n  if (!Array.isArray(key)) {\n    obj[key] = {};\n  }\n\n  var i;\n  switch (key) {\n    case 'UNIT':\n    case 'PRIMEM':\n    case 'VERT_DATUM':\n      obj[key] = {\n        name: v[0].toLowerCase(),\n        convert: v[1]\n      };\n      if (v.length === 3) {\n        sExpr(v[2], obj[key]);\n      }\n      return;\n    case 'SPHEROID':\n    case 'ELLIPSOID':\n      obj[key] = {\n        name: v[0],\n        a: v[1],\n        rf: v[2]\n      };\n      if (v.length === 4) {\n        sExpr(v[3], obj[key]);\n      }\n      return;\n    case 'PROJECTEDCRS':\n    case 'PROJCRS':\n    case 'GEOGCS':\n    case 'GEOCCS':\n    case 'PROJCS':\n    case 'LOCAL_CS':\n    case 'GEODCRS':\n    case 'GEODETICCRS':\n    case 'GEODETICDATUM':\n    case 'EDATUM':\n    case 'ENGINEERINGDATUM':\n    case 'VERT_CS':\n    case 'VERTCRS':\n    case 'VERTICALCRS':\n    case 'COMPD_CS':\n    case 'COMPOUNDCRS':\n    case 'ENGINEERINGCRS':\n    case 'ENGCRS':\n    case 'FITTED_CS':\n    case 'LOCAL_DATUM':\n    case 'DATUM':\n      v[0] = ['name', v[0]];\n      mapit(obj, key, v);\n      return;\n    default:\n      i = -1;\n      while (++i < v.length) {\n        if (!Array.isArray(v[i])) {\n          return sExpr(v, obj[key]);\n        }\n      }\n      return mapit(obj, key, v);\n  }\n}\n","var D2R = 0.01745329251994329577;\nimport parser from './parser';\nimport {sExpr} from './process';\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  } else if (wkt.type === 'LOCAL_CS') {\n    wkt.projName = 'identity';\n    wkt.local = true;\n  } else {\n    if (typeof wkt.PROJECTION === 'object') {\n      wkt.projName = Object.keys(wkt.PROJECTION)[0];\n    } else {\n      wkt.projName = wkt.PROJECTION;\n    }\n  }\n  if (wkt.AXIS) {\n    var axisOrder = '';\n    for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {\n      var axis = [wkt.AXIS[i][0].toLowerCase(), wkt.AXIS[i][1].toLowerCase()];\n      if (axis[0].indexOf('north') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'north')) {\n        axisOrder += 'n';\n      } else if (axis[0].indexOf('south') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'south')) {\n        axisOrder += 's';\n      } else if (axis[0].indexOf('east') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'east')) {\n        axisOrder += 'e';\n      } else if (axis[0].indexOf('west') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'west')) {\n        axisOrder += 'w';\n      }\n    }\n    if (axisOrder.length === 2) {\n      axisOrder += 'u';\n    }\n    if (axisOrder.length === 3) {\n      wkt.axis = axisOrder;\n    }\n  }\n  if (wkt.UNIT) {\n    wkt.units = wkt.UNIT.name.toLowerCase();\n    if (wkt.units === 'metre') {\n      wkt.units = 'meter';\n    }\n    if (wkt.UNIT.convert) {\n      if (wkt.type === 'GEOGCS') {\n        if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n          wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n        }\n      } else {\n        wkt.to_meter = wkt.UNIT.convert;\n      }\n    }\n  }\n  var geogcs = wkt.GEOGCS;\n  if (wkt.type === 'GEOGCS') {\n    geogcs = wkt;\n  }\n  if (geogcs) {\n    //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n    //  wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n    //}\n    if (geogcs.DATUM) {\n      wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n    } else {\n      wkt.datumCode = geogcs.name.toLowerCase();\n    }\n    if (wkt.datumCode.slice(0, 2) === 'd_') {\n      wkt.datumCode = wkt.datumCode.slice(2);\n    }\n    if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n      wkt.datumCode = 'nzgd49';\n    }\n    if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {\n      if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n        wkt.sphere = true;\n      }\n      wkt.datumCode = 'wgs84';\n    }\n    if (wkt.datumCode.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 (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n      wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n      if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n        wkt.ellps = 'intl';\n      }\n\n      wkt.a = geogcs.DATUM.SPHEROID.a;\n      wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);\n    }\n\n    if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {\n      wkt.datum_params = geogcs.DATUM.TOWGS84;\n    }\n    if (~wkt.datumCode.indexOf('osgb_1936')) {\n      wkt.datumCode = 'osgb36';\n    }\n    if (~wkt.datumCode.indexOf('osni_1952')) {\n      wkt.datumCode = 'osni52';\n    }\n    if (~wkt.datumCode.indexOf('tm65')\n      || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {\n      wkt.datumCode = 'ire65';\n    }\n    if (wkt.datumCode === 'ch1903+') {\n      wkt.datumCode = 'ch1903';\n    }\n    if (~wkt.datumCode.indexOf('israel')) {\n      wkt.datumCode = 'isr93';\n    }\n  }\n  if (wkt.b && !isFinite(wkt.b)) {\n    wkt.b = wkt.a;\n  }\n\n  function toMeter(input) {\n    var ratio = wkt.to_meter || 1;\n    return input * ratio;\n  }\n  var renamer = function(a) {\n    return rename(wkt, a);\n  };\n  var list = [\n    ['standard_parallel_1', 'Standard_Parallel_1'],\n    ['standard_parallel_1', 'Latitude of 1st standard parallel'],\n    ['standard_parallel_2', 'Standard_Parallel_2'],\n    ['standard_parallel_2', 'Latitude of 2nd standard parallel'],\n    ['false_easting', 'False_Easting'],\n    ['false_easting', 'False easting'],\n    ['false-easting', 'Easting at false origin'],\n    ['false_northing', 'False_Northing'],\n    ['false_northing', 'False northing'],\n    ['false_northing', 'Northing at false origin'],\n    ['central_meridian', 'Central_Meridian'],\n    ['central_meridian', 'Longitude of natural origin'],\n    ['central_meridian', 'Longitude of false origin'],\n    ['latitude_of_origin', 'Latitude_Of_Origin'],\n    ['latitude_of_origin', 'Central_Parallel'],\n    ['latitude_of_origin', 'Latitude of natural origin'],\n    ['latitude_of_origin', 'Latitude of false origin'],\n    ['scale_factor', 'Scale_Factor'],\n    ['k0', 'scale_factor'],\n    ['latitude_of_center', 'Latitude_Of_Center'],\n    ['latitude_of_center', 'Latitude_of_center'],\n    ['lat0', 'latitude_of_center', d2r],\n    ['longitude_of_center', 'Longitude_Of_Center'],\n    ['longitude_of_center', 'Longitude_of_center'],\n    ['longc', 'longitude_of_center', d2r],\n    ['x0', 'false_easting', toMeter],\n    ['y0', 'false_northing', toMeter],\n    ['long0', 'central_meridian', d2r],\n    ['lat0', 'latitude_of_origin', d2r],\n    ['lat0', 'standard_parallel_1', d2r],\n    ['lat1', 'standard_parallel_1', d2r],\n    ['lat2', 'standard_parallel_2', d2r],\n    ['azimuth', 'Azimuth'],\n    ['alpha', 'azimuth', d2r],\n    ['srsCode', 'name']\n  ];\n  list.forEach(renamer);\n  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}\nexport default function(wkt) {\n  var lisp = parser(wkt);\n  var type = lisp.shift();\n  var name = lisp.shift();\n  lisp.unshift(['name', name]);\n  lisp.unshift(['type', type]);\n  var obj = {};\n  sExpr(lisp, obj);\n  cleanWKT(obj);\n  return obj;\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\nfunction defs(name) {\n  /*global console*/\n  var that = this;\n  if (arguments.length === 2) {\n    var def = arguments[1];\n    if (typeof def === 'string') {\n      if (def.charAt(0) === '+') {\n        defs[name] = parseProj(arguments[1]);\n      }\n      else {\n        defs[name] = wkt(arguments[1]);\n      }\n    } else {\n      defs[name] = def;\n    }\n  }\n  else if (arguments.length === 1) {\n    if (Array.isArray(name)) {\n      return name.map(function(v) {\n        if (Array.isArray(v)) {\n          defs.apply(that, v);\n        }\n        else {\n          defs(v);\n        }\n      });\n    }\n    else if (typeof name === 'string') {\n      if (name in defs) {\n        return defs[name];\n      }\n    }\n    else if ('EPSG' in name) {\n      defs['EPSG:' + name.EPSG] = name;\n    }\n    else if ('ESRI' in name) {\n      defs['ESRI:' + name.ESRI] = name;\n    }\n    else if ('IAU2000' in name) {\n      defs['IAU2000:' + name.IAU2000] = name;\n    }\n    else {\n      console.log(name);\n    }\n    return;\n  }\n\n\n}\nglobals(defs);\nexport default defs;\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code){\n  return typeof code === 'string';\n}\nfunction testDef(code){\n  return code in defs;\n}\nvar codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\nfunction testWKT(code){\n  return codeWords.some(function (word) {\n    return code.indexOf(word) > -1;\n  });\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n  var auth = match(item, 'authority');\n  if (!auth) {\n    return;\n  }\n  var code = match(auth, 'epsg');\n  return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n  var ext = match(item, 'extension');\n  if (!ext) {\n    return;\n  }\n  return match(ext, 'proj4');\n}\nfunction testProj(code){\n  return code[0] === '+';\n}\nfunction parse(code){\n  if (testObj(code)) {\n    //check to see if this is a WKT string\n    if (testDef(code)) {\n      return defs[code];\n    }\n    if (testWKT(code)) {\n      var out = wkt(code);\n      // test of spetial case, due to this being a very common and often malformed\n      if (checkMercator(out)) {\n        return defs['EPSG:3857'];\n      }\n      var maybeProjStr = checkProjStr(out);\n      if (maybeProjStr) {\n        return projStr(maybeProjStr);\n      }\n      return out;\n    }\n    if (testProj(code)) {\n      return projStr(code);\n    }\n  }else{\n    return code;\n  }\n}\n\nexport default parse;\n","export default function(destination, source) {\n  destination = destination || {};\n  var value, property;\n  if (!source) {\n    return destination;\n  }\n  for (property in source) {\n    value = source[property];\n    if (value !== undefined) {\n      destination[property] = value;\n    }\n  }\n  return destination;\n}\n","export default function(eccent, sinphi, cosphi) {\n  var con = eccent * sinphi;\n  return cosphi / (Math.sqrt(1 - con * con));\n}","export default function(x) {\n  return x<0 ? -1 : 1;\n}","\nimport {TWO_PI, SPI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n  return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, phi, sinphi) {\n  var con = eccent * sinphi;\n  var com = 0.5 * eccent;\n  con = Math.pow(((1 - con) / (1 + con)), com);\n  return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, ts) {\n  var eccnth = 0.5 * eccent;\n  var con, dphi;\n  var phi = HALF_PI - 2 * Math.atan(ts);\n  for (var i = 0; i <= 15; i++) {\n    con = eccent * Math.sin(phi);\n    dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n  //console.log(\"phi2z has NoConvergence\");\n  return -9999;\n}\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport {FORTPI, R2D, EPSLN, HALF_PI} from '../constants/values';\nexport function init() {\n  var con = this.b / this.a;\n  this.es = 1 - con * con;\n  if(!('x0' in this)){\n    this.x0 = 0;\n  }\n  if(!('y0' in this)){\n    this.y0 = 0;\n  }\n  this.e = Math.sqrt(this.es);\n  if (this.lat_ts) {\n    if (this.sphere) {\n      this.k0 = Math.cos(this.lat_ts);\n    }\n    else {\n      this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n    }\n  }\n  else {\n    if (!this.k0) {\n      if (this.k) {\n        this.k0 = this.k;\n      }\n      else {\n        this.k0 = 1;\n      }\n    }\n  }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n  --------------------------------------------------*/\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  // convert to radians\n  if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n    return null;\n  }\n\n  var x, y;\n  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n    return null;\n  }\n  else {\n    if (this.sphere) {\n      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n      y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n    }\n    else {\n      var sinphi = Math.sin(lat);\n      var ts = tsfnz(this.e, lat, sinphi);\n      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n      y = this.y0 - this.a * this.k0 * Math.log(ts);\n    }\n    p.x = x;\n    p.y = y;\n    return p;\n  }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n  --------------------------------------------------*/\nexport function inverse(p) {\n\n  var x = p.x - this.x0;\n  var y = p.y - this.y0;\n  var lon, lat;\n\n  if (this.sphere) {\n    lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n  }\n  else {\n    var ts = Math.exp(-y / (this.a * this.k0));\n    lat = phi2z(this.e, ts);\n    if (lat === -9999) {\n      return null;\n    }\n  }\n  lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export function init() {\n  //no-op for longlat\n}\n\nfunction identity(pt) {\n  return pt;\n}\nexport {identity as forward};\nexport {identity as inverse};\nexport var names = [\"longlat\", \"identity\"];\nexport default {\n  init: init,\n  forward: identity,\n  inverse: identity,\n  names: names\n};\n","import merc from \"./projections/merc\";\nimport longlat from \"./projections/longlat\";\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n  var len = projStore.length;\n  if (!proj.names) {\n    console.log(i);\n    return true;\n  }\n  projStore[len] = proj;\n  proj.names.forEach(function(n) {\n    names[n.toLowerCase()] = len;\n  });\n  return this;\n}\n\nexport {add};\n\nexport function get(name) {\n  if (!name) {\n    return false;\n  }\n  var n = name.toLowerCase();\n  if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n    return projStore[names[n]];\n  }\n}\n\nexport function start() {\n  projs.forEach(add);\n}\nexport default {\n  start: start,\n  add: add,\n  get: get\n};\n","var exports = {};\nexport {exports as default};\nexports.MERIT = {\n  a: 6378137.0,\n  rf: 298.257,\n  ellipseName: \"MERIT 1983\"\n};\n\nexports.SGS85 = {\n  a: 6378136.0,\n  rf: 298.257,\n  ellipseName: \"Soviet Geodetic System 85\"\n};\n\nexports.GRS80 = {\n  a: 6378137.0,\n  rf: 298.257222101,\n  ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\n\nexports.IAU76 = {\n  a: 6378140.0,\n  rf: 298.257,\n  ellipseName: \"IAU 1976\"\n};\n\nexports.airy = {\n  a: 6377563.396,\n  b: 6356256.910,\n  ellipseName: \"Airy 1830\"\n};\n\nexports.APL4 = {\n  a: 6378137,\n  rf: 298.25,\n  ellipseName: \"Appl. Physics. 1965\"\n};\n\nexports.NWL9D = {\n  a: 6378145.0,\n  rf: 298.25,\n  ellipseName: \"Naval Weapons Lab., 1965\"\n};\n\nexports.mod_airy = {\n  a: 6377340.189,\n  b: 6356034.446,\n  ellipseName: \"Modified Airy\"\n};\n\nexports.andrae = {\n  a: 6377104.43,\n  rf: 300.0,\n  ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\n\nexports.aust_SA = {\n  a: 6378160.0,\n  rf: 298.25,\n  ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\n\nexports.GRS67 = {\n  a: 6378160.0,\n  rf: 298.2471674270,\n  ellipseName: \"GRS 67(IUGG 1967)\"\n};\n\nexports.bessel = {\n  a: 6377397.155,\n  rf: 299.1528128,\n  ellipseName: \"Bessel 1841\"\n};\n\nexports.bess_nam = {\n  a: 6377483.865,\n  rf: 299.1528128,\n  ellipseName: \"Bessel 1841 (Namibia)\"\n};\n\nexports.clrk66 = {\n  a: 6378206.4,\n  b: 6356583.8,\n  ellipseName: \"Clarke 1866\"\n};\n\nexports.clrk80 = {\n  a: 6378249.145,\n  rf: 293.4663,\n  ellipseName: \"Clarke 1880 mod.\"\n};\n\nexports.clrk58 = {\n  a: 6378293.645208759,\n  rf: 294.2606763692654,\n  ellipseName: \"Clarke 1858\"\n};\n\nexports.CPM = {\n  a: 6375738.7,\n  rf: 334.29,\n  ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\n\nexports.delmbr = {\n  a: 6376428.0,\n  rf: 311.5,\n  ellipseName: \"Delambre 1810 (Belgium)\"\n};\n\nexports.engelis = {\n  a: 6378136.05,\n  rf: 298.2566,\n  ellipseName: \"Engelis 1985\"\n};\n\nexports.evrst30 = {\n  a: 6377276.345,\n  rf: 300.8017,\n  ellipseName: \"Everest 1830\"\n};\n\nexports.evrst48 = {\n  a: 6377304.063,\n  rf: 300.8017,\n  ellipseName: \"Everest 1948\"\n};\n\nexports.evrst56 = {\n  a: 6377301.243,\n  rf: 300.8017,\n  ellipseName: \"Everest 1956\"\n};\n\nexports.evrst69 = {\n  a: 6377295.664,\n  rf: 300.8017,\n  ellipseName: \"Everest 1969\"\n};\n\nexports.evrstSS = {\n  a: 6377298.556,\n  rf: 300.8017,\n  ellipseName: \"Everest (Sabah & Sarawak)\"\n};\n\nexports.fschr60 = {\n  a: 6378166.0,\n  rf: 298.3,\n  ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\n\nexports.fschr60m = {\n  a: 6378155.0,\n  rf: 298.3,\n  ellipseName: \"Fischer 1960\"\n};\n\nexports.fschr68 = {\n  a: 6378150.0,\n  rf: 298.3,\n  ellipseName: \"Fischer 1968\"\n};\n\nexports.helmert = {\n  a: 6378200.0,\n  rf: 298.3,\n  ellipseName: \"Helmert 1906\"\n};\n\nexports.hough = {\n  a: 6378270.0,\n  rf: 297.0,\n  ellipseName: \"Hough\"\n};\n\nexports.intl = {\n  a: 6378388.0,\n  rf: 297.0,\n  ellipseName: \"International 1909 (Hayford)\"\n};\n\nexports.kaula = {\n  a: 6378163.0,\n  rf: 298.24,\n  ellipseName: \"Kaula 1961\"\n};\n\nexports.lerch = {\n  a: 6378139.0,\n  rf: 298.257,\n  ellipseName: \"Lerch 1979\"\n};\n\nexports.mprts = {\n  a: 6397300.0,\n  rf: 191.0,\n  ellipseName: \"Maupertius 1738\"\n};\n\nexports.new_intl = {\n  a: 6378157.5,\n  b: 6356772.2,\n  ellipseName: \"New International 1967\"\n};\n\nexports.plessis = {\n  a: 6376523.0,\n  rf: 6355863.0,\n  ellipseName: \"Plessis 1817 (France)\"\n};\n\nexports.krass = {\n  a: 6378245.0,\n  rf: 298.3,\n  ellipseName: \"Krassovsky, 1942\"\n};\n\nexports.SEasia = {\n  a: 6378155.0,\n  b: 6356773.3205,\n  ellipseName: \"Southeast Asia\"\n};\n\nexports.walbeck = {\n  a: 6376896.0,\n  b: 6355834.8467,\n  ellipseName: \"Walbeck\"\n};\n\nexports.WGS60 = {\n  a: 6378165.0,\n  rf: 298.3,\n  ellipseName: \"WGS 60\"\n};\n\nexports.WGS66 = {\n  a: 6378145.0,\n  rf: 298.25,\n  ellipseName: \"WGS 66\"\n};\n\nexports.WGS7 = {\n  a: 6378135.0,\n  rf: 298.26,\n  ellipseName: \"WGS 72\"\n};\n\nexport var WGS84 = exports.WGS84 = {\n  a: 6378137.0,\n  rf: 298.257223563,\n  ellipseName: \"WGS 84\"\n};\n\nexports.sphere = {\n  a: 6370997.0,\n  b: 6370997.0,\n  ellipseName: \"Normal Sphere (r=6370997)\"\n};\n","import {SIXTH, RA4, RA6, EPSLN} from './constants/values';\nimport {default as Ellipsoid, WGS84} from './constants/Ellipsoid';\nimport match from './match';\n\nexport function eccentricity(a, b, rf, R_A) {\n  var a2 = a * a; // used in geocentric\n  var b2 = b * b; // used in geocentric\n  var es = (a2 - b2) / a2; // e ^ 2\n  var e = 0;\n  if (R_A) {\n    a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n    a2 = a * a;\n    es = 0;\n  } else {\n    e = Math.sqrt(es); // eccentricity\n  }\n  var ep2 = (a2 - b2) / b2; // used in geocentric\n  return {\n    es: es,\n    e: e,\n    ep2: ep2\n  };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n  if (!a) { // do we have an ellipsoid?\n    var ellipse = match(Ellipsoid, ellps);\n    if (!ellipse) {\n      ellipse = WGS84;\n    }\n    a = ellipse.a;\n    b = ellipse.b;\n    rf = ellipse.rf;\n  }\n\n  if (rf && !b) {\n    b = (1.0 - 1.0 / rf) * a;\n  }\n  if (rf === 0 || Math.abs(a - b) < EPSLN) {\n    sphere = true;\n    b = a;\n  }\n  return {\n    a: a,\n    b: b,\n    rf: rf,\n    sphere: sphere\n  };\n}\n","var exports = {};\nexport {exports as default};\nexports.wgs84 = {\n  towgs84: \"0,0,0\",\n  ellipse: \"WGS84\",\n  datumName: \"WGS84\"\n};\n\nexports.ch1903 = {\n  towgs84: \"674.374,15.056,405.346\",\n  ellipse: \"bessel\",\n  datumName: \"swiss\"\n};\n\nexports.ggrs87 = {\n  towgs84: \"-199.87,74.79,246.62\",\n  ellipse: \"GRS80\",\n  datumName: \"Greek_Geodetic_Reference_System_1987\"\n};\n\nexports.nad83 = {\n  towgs84: \"0,0,0\",\n  ellipse: \"GRS80\",\n  datumName: \"North_American_Datum_1983\"\n};\n\nexports.nad27 = {\n  nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n  ellipse: \"clrk66\",\n  datumName: \"North_American_Datum_1927\"\n};\n\nexports.potsdam = {\n  towgs84: \"598.1,73.7,418.2,0.202,0.045,-2.455,6.7\",\n  ellipse: \"bessel\",\n  datumName: \"Potsdam Rauenberg 1950 DHDN\"\n};\n\nexports.carthage = {\n  towgs84: \"-263.0,6.0,431.0\",\n  ellipse: \"clark80\",\n  datumName: \"Carthage 1934 Tunisia\"\n};\n\nexports.hermannskogel = {\n  towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n  ellipse: \"bessel\",\n  datumName: \"Hermannskogel\"\n};\n\nexports.osni52 = {\n  towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n  ellipse: \"airy\",\n  datumName: \"Irish National\"\n};\n\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};\n\nexports.rassadiran = {\n  towgs84: \"-133.63,-157.5,-158.62\",\n  ellipse: \"intl\",\n  datumName: \"Rassadiran\"\n};\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};\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};\n\nexports.s_jtsk = {\n  towgs84: \"589,76,480\",\n  ellipse: 'bessel',\n  datumName: 'S-JTSK (Ferro)'\n};\n\nexports.beduaram = {\n  towgs84: '-106,-87,188',\n  ellipse: 'clrk80',\n  datumName: 'Beduaram'\n};\n\nexports.gunung_segara = {\n  towgs84: '-403,684,41',\n  ellipse: 'bessel',\n  datumName: 'Gunung Segara Jakarta'\n};\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};\n","import {PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD} from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {\n  var out = {};\n\n  if (datumCode === undefined || datumCode === 'none') {\n    out.datum_type = PJD_NODATUM;\n  } else {\n    out.datum_type = PJD_WGS84;\n  }\n\n  if (datum_params) {\n    out.datum_params = datum_params.map(parseFloat);\n    if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n      out.datum_type = PJD_3PARAM;\n    }\n    if (out.datum_params.length > 3) {\n      if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n        out.datum_type = PJD_7PARAM;\n        out.datum_params[3] *= SEC_TO_RAD;\n        out.datum_params[4] *= SEC_TO_RAD;\n        out.datum_params[5] *= SEC_TO_RAD;\n        out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n      }\n    }\n  }\n\n  if (nadgrids) {\n    out.datum_type = PJD_GRIDSHIFT;\n    out.grids = nadgrids;\n  }\n  out.a = a; //datum object also uses these values\n  out.b = b;\n  out.es = es;\n  out.ep2 = ep2;\n  return out;\n}\n\nexport default datum;\n","/**\n * Resources for details of NTv2 file formats:\n * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf\n * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm\n */\n\nvar loadedNadgrids = {};\n\n/**\n * Load a binary NTv2 file (.gsb) to a key that can be used in a proj string like +nadgrids=<key>. Pass the NTv2 file\n * as an ArrayBuffer.\n */\nexport default function nadgrid(key, data) {\n  var view = new DataView(data);\n  var isLittleEndian = detectLittleEndian(view);\n  var header = readHeader(view, isLittleEndian);\n  if (header.nSubgrids > 1) {\n    console.log('Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored');\n  }\n  var subgrids = readSubgrids(view, header, isLittleEndian);\n  var nadgrid = {header: header, subgrids: subgrids};\n  loadedNadgrids[key] = nadgrid;\n  return nadgrid;\n}\n\n/**\n * Given a proj4 value for nadgrids, return an array of loaded grids\n */\nexport function getNadgrids(nadgrids) {\n  // Format details: http://proj.maptools.org/gen_parms.html\n  if (nadgrids === undefined) { return null; }\n  var grids = nadgrids.split(',');\n  return grids.map(parseNadgridString);\n}\n\nfunction parseNadgridString(value) {\n  if (value.length === 0) {\n    return null;\n  }\n  var optional = value[0] === '@';\n  if (optional) {\n    value = value.slice(1);\n  }\n  if (value === 'null') {\n    return {name: 'null', mandatory: !optional, grid: null, isNull: true};\n  }\n  return {\n    name: value,\n    mandatory: !optional,\n    grid: loadedNadgrids[value] || null,\n    isNull: false\n  };\n}\n\nfunction secondsToRadians(seconds) {\n  return (seconds / 3600) * Math.PI / 180;\n}\n\nfunction detectLittleEndian(view) {\n  var nFields = view.getInt32(8, false);\n  if (nFields === 11) {\n    return false;\n  }\n  nFields = view.getInt32(8, true);\n  if (nFields !== 11) {\n    console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');\n  }\n  return true;\n}\n\nfunction readHeader(view, isLittleEndian) {\n  return {\n    nFields: view.getInt32(8, isLittleEndian),\n    nSubgridFields: view.getInt32(24, isLittleEndian),\n    nSubgrids: view.getInt32(40, isLittleEndian),\n    shiftType: decodeString(view, 56, 56 + 8).trim(),\n    fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),\n    fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),\n    toSemiMajorAxis: view.getFloat64(152, isLittleEndian),\n    toSemiMinorAxis: view.getFloat64(168, isLittleEndian),\n  };\n}\n\nfunction decodeString(view, start, end) {\n  return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));\n}\n\nfunction readSubgrids(view, header, isLittleEndian) {\n  var gridOffset = 176;\n  var grids = [];\n  for (var i = 0; i < header.nSubgrids; i++) {\n    var subHeader = readGridHeader(view, gridOffset, isLittleEndian);\n    var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian);\n    var lngColumnCount = Math.round(\n      1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);\n    var latColumnCount = Math.round(\n      1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);\n    // Proj4 operates on radians whereas the coordinates are in seconds in the grid\n    grids.push({\n      ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],\n      del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],\n      lim: [lngColumnCount, latColumnCount],\n      count: subHeader.gridNodeCount,\n      cvs: mapNodes(nodes)\n    });\n  }\n  return grids;\n}\n\nfunction mapNodes(nodes) {\n  return nodes.map(function (r) {return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];});\n}\n\nfunction readGridHeader(view, offset, isLittleEndian) {\n  return {\n    name: decodeString(view, offset + 8, offset + 16).trim(),\n    parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),\n    lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),\n    upperLatitude: view.getFloat64(offset + 88, isLittleEndian),\n    lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),\n    upperLongitude: view.getFloat64(offset + 120, isLittleEndian),\n    latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),\n    longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),\n    gridNodeCount: view.getInt32(offset + 168, isLittleEndian)\n  };\n}\n\nfunction readGridNodes(view, offset, gridHeader, isLittleEndian) {\n  var nodesOffset = offset + 176;\n  var gridRecordLength = 16;\n  var gridShiftRecords = [];\n  for (var i = 0; i < gridHeader.gridNodeCount; i++) {\n    var record = {\n      latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),\n      longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian),\n      latitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian),\n      longitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian),\n    };\n    gridShiftRecords.push(record);\n  }\n  return gridShiftRecords;\n}\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\nimport {getNadgrids} from \"./nadgrid\";\n\nfunction Projection(srsCode,callback) {\n  if (!(this instanceof Projection)) {\n    return new Projection(srsCode);\n  }\n  callback = callback || function(error){\n    if(error){\n      throw error;\n    }\n  };\n  var json = parseCode(srsCode);\n  if(typeof json !== 'object'){\n    callback(srsCode);\n    return;\n  }\n  var ourProj = Projection.projections.get(json.projName);\n  if(!ourProj){\n    callback(srsCode);\n    return;\n  }\n  if (json.datumCode && json.datumCode !== 'none') {\n    var datumDef = match(Datum, json.datumCode);\n    if (datumDef) {\n      json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null);\n      json.ellps = datumDef.ellipse;\n      json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n    }\n  }\n  json.k0 = json.k0 || 1.0;\n  json.axis = json.axis || 'enu';\n  json.ellps = json.ellps || 'wgs84';\n  json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this\n\n  var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n  var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n  var nadgrids = getNadgrids(json.nadgrids);\n  var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,\n    nadgrids);\n\n  extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n  extend(this, ourProj); // transfer all the methods from the projection\n\n  // copy the 4 things over we calulated in deriveConstants.sphere\n  this.a = sphere_.a;\n  this.b = sphere_.b;\n  this.rf = sphere_.rf;\n  this.sphere = sphere_.sphere;\n\n  // copy the 3 things we calculated in deriveConstants.eccentricity\n  this.es = ecc.es;\n  this.e = ecc.e;\n  this.ep2 = ecc.ep2;\n\n  // add in the datum object\n  this.datum = datumObj;\n\n  // init the projection\n  this.init();\n\n  // legecy callback from back in the day when it went to spatialreference.org\n  callback(null, this);\n\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","'use strict';\nimport {PJD_3PARAM, PJD_7PARAM, HALF_PI} from './constants/values';\nexport function compareDatums(source, dest) {\n  if (source.datum_type !== dest.datum_type) {\n    return false; // false, datums are not equal\n  } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n    // the tolerance for es is to ensure that GRS80 and WGS84\n    // are considered identical\n    return false;\n  } else if (source.datum_type === PJD_3PARAM) {\n    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n  } else if (source.datum_type === PJD_7PARAM) {\n    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n  } else {\n    return true; // datums are equal\n  }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n *    Latitude  : Geodetic latitude in radians                     (input)\n *    Longitude : Geodetic longitude in radians                    (input)\n *    Height    : Geodetic height, in meters                       (input)\n *    X         : Calculated Geocentric X coordinate, in meters    (output)\n *    Y         : Calculated Geocentric Y coordinate, in meters    (output)\n *    Z         : Calculated Geocentric Z coordinate, in meters    (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n  var Longitude = p.x;\n  var Latitude = p.y;\n  var Height = p.z ? p.z : 0; //Z value not always supplied\n\n  var Rn; /*  Earth radius at location  */\n  var Sin_Lat; /*  Math.sin(Latitude)  */\n  var Sin2_Lat; /*  Square of Math.sin(Latitude)  */\n  var Cos_Lat; /*  Math.cos(Latitude)  */\n\n  /*\n   ** Don't blow up if Latitude is just a little out of the value\n   ** range as it may just be a rounding issue.  Also removed longitude\n   ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.\n   */\n  if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n    Latitude = -HALF_PI;\n  } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n    Latitude = HALF_PI;\n  } else if (Latitude < -HALF_PI) {\n    /* Latitude out of range */\n    //..reportError('geocent:lat out of range:' + Latitude);\n    return { x: -Infinity, y: -Infinity, z: p.z };\n  } else if (Latitude > HALF_PI) {\n    /* Latitude out of range */\n    return { x: Infinity, y: Infinity, z: p.z };\n  }\n\n  if (Longitude > Math.PI) {\n    Longitude -= (2 * Math.PI);\n  }\n  Sin_Lat = Math.sin(Latitude);\n  Cos_Lat = Math.cos(Latitude);\n  Sin2_Lat = Sin_Lat * Sin_Lat;\n  Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n  return {\n    x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n    y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n    z: ((Rn * (1 - es)) + Height) * Sin_Lat\n  };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n  /* local defintions and variables */\n  /* end-criterium of loop, accuracy of sin(Latitude) */\n  var genau = 1e-12;\n  var genau2 = (genau * genau);\n  var maxiter = 30;\n\n  var P; /* distance between semi-minor axis and location */\n  var RR; /* distance between center and location */\n  var CT; /* sin of geocentric latitude */\n  var ST; /* cos of geocentric latitude */\n  var RX;\n  var RK;\n  var RN; /* Earth radius at location */\n  var CPHI0; /* cos of start or old geodetic latitude in iterations */\n  var SPHI0; /* sin of start or old geodetic latitude in iterations */\n  var CPHI; /* cos of searched geodetic latitude */\n  var SPHI; /* sin of searched geodetic latitude */\n  var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n  var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n  var X = p.x;\n  var Y = p.y;\n  var Z = p.z ? p.z : 0.0; //Z value not always supplied\n  var Longitude;\n  var Latitude;\n  var Height;\n\n  P = Math.sqrt(X * X + Y * Y);\n  RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n  /*      special cases for latitude and longitude */\n  if (P / a < genau) {\n\n    /*  special case, if P=0. (X=0., Y=0.) */\n    Longitude = 0.0;\n\n    /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n     *  of ellipsoid (=center of mass), Latitude becomes PI/2 */\n    if (RR / a < genau) {\n      Latitude = HALF_PI;\n      Height = -b;\n      return {\n        x: p.x,\n        y: p.y,\n        z: p.z\n      };\n    }\n  } else {\n    /*  ellipsoidal (geodetic) longitude\n     *  interval: -PI < Longitude <= +PI */\n    Longitude = Math.atan2(Y, X);\n  }\n\n  /* --------------------------------------------------------------\n   * Following iterative algorithm was developped by\n   * \"Institut for Erdmessung\", University of Hannover, July 1988.\n   * Internet: www.ife.uni-hannover.de\n   * Iterative computation of CPHI,SPHI and Height.\n   * Iteration of CPHI and SPHI to 10**-12 radian resp.\n   * 2*10**-7 arcsec.\n   * --------------------------------------------------------------\n   */\n  CT = Z / RR;\n  ST = P / RR;\n  RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n  CPHI0 = ST * (1.0 - es) * RX;\n  SPHI0 = CT * RX;\n  iter = 0;\n\n  /* loop to find sin(Latitude) resp. Latitude\n   * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n  do {\n    iter++;\n    RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n    /*  ellipsoidal (geodetic) height */\n    Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n    RK = es * RN / (RN + Height);\n    RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n    CPHI = ST * (1.0 - RK) * RX;\n    SPHI = CT * RX;\n    SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n    CPHI0 = CPHI;\n    SPHI0 = SPHI;\n  }\n  while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n  /*      ellipsoidal (geodetic) latitude */\n  Latitude = Math.atan(SPHI / Math.abs(CPHI));\n  return {\n    x: Longitude,\n    y: Latitude,\n    z: Height\n  };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n//  p = point to transform in geocentric coordinates (x,y,z)\n\n\n/** point object, nothing fancy, just allows values to be\n    passed back and forth by reference rather than by value.\n    Other point classes may be used as long as they have\n    x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n\n  if (datum_type === PJD_3PARAM) {\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: p.x + datum_params[0],\n      y: p.y + datum_params[1],\n      z: p.z + datum_params[2],\n    };\n  } else if (datum_type === PJD_7PARAM) {\n    var Dx_BF = datum_params[0];\n    var Dy_BF = datum_params[1];\n    var Dz_BF = datum_params[2];\n    var Rx_BF = datum_params[3];\n    var Ry_BF = datum_params[4];\n    var Rz_BF = datum_params[5];\n    var M_BF = datum_params[6];\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n      y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n      z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n    };\n  }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n//  coordinate system definition,\n//  point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n\n  if (datum_type === PJD_3PARAM) {\n    //if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: p.x - datum_params[0],\n      y: p.y - datum_params[1],\n      z: p.z - datum_params[2],\n    };\n\n  } else if (datum_type === PJD_7PARAM) {\n    var Dx_BF = datum_params[0];\n    var Dy_BF = datum_params[1];\n    var Dz_BF = datum_params[2];\n    var Rx_BF = datum_params[3];\n    var Ry_BF = datum_params[4];\n    var Rz_BF = datum_params[5];\n    var M_BF = datum_params[6];\n    var x_tmp = (p.x - Dx_BF) / M_BF;\n    var y_tmp = (p.y - Dy_BF) / M_BF;\n    var z_tmp = (p.z - Dz_BF) / M_BF;\n    //if( x[io] === HUGE_VAL )\n    //    continue;\n\n    return {\n      x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n      y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n      z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n    };\n  } //cs_geocentric_from_wgs84()\n}\n","import {\n  PJD_3PARAM,\n  PJD_7PARAM,\n  PJD_GRIDSHIFT,\n  PJD_NODATUM,\n  R2D,\n  SRS_WGS84_ESQUARED,\n  SRS_WGS84_SEMIMAJOR, SRS_WGS84_SEMIMINOR\n} from './constants/values';\n\nimport {geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums} from './datumUtils';\nimport adjust_lon from \"./common/adjust_lon\";\nfunction checkParams(type) {\n  return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function(source, dest, point) {\n  // Short cut if the datums are identical.\n  if (compareDatums(source, dest)) {\n    return point; // in this case, zero is sucess,\n    // whereas cs_compare_datums returns 1 to indicate TRUE\n    // confusing, should fix this\n  }\n\n  // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n  if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n    return point;\n  }\n\n  // If this datum requires grid shifts, then apply it to geodetic coordinates.\n  var source_a = source.a;\n  var source_es = source.es;\n  if (source.datum_type === PJD_GRIDSHIFT) {\n    var gridShiftCode = applyGridShift(source, false, point);\n    if (gridShiftCode !== 0) {\n      return undefined;\n    }\n    source_a = SRS_WGS84_SEMIMAJOR;\n    source_es = SRS_WGS84_ESQUARED;\n  }\n\n  var dest_a = dest.a;\n  var dest_b = dest.b;\n  var dest_es = dest.es;\n  if (dest.datum_type === PJD_GRIDSHIFT) {\n    dest_a = SRS_WGS84_SEMIMAJOR;\n    dest_b = SRS_WGS84_SEMIMINOR;\n    dest_es = SRS_WGS84_ESQUARED;\n  }\n\n  // Do we need to go through geocentric coordinates?\n  if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) &&  !checkParams(dest.datum_type)) {\n    return point;\n  }\n\n  // Convert to geocentric coordinates.\n  point = geodeticToGeocentric(point, source_es, source_a);\n  // Convert between datums\n  if (checkParams(source.datum_type)) {\n    point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n  }\n  if (checkParams(dest.datum_type)) {\n    point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n  }\n  point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);\n\n  if (dest.datum_type === PJD_GRIDSHIFT) {\n    var destGridShiftResult = applyGridShift(dest, true, point);\n    if (destGridShiftResult !== 0) {\n      return undefined;\n    }\n  }\n\n  return point;\n}\n\nexport function applyGridShift(source, inverse, point) {\n  if (source.grids === null || source.grids.length === 0) {\n    console.log('Grid shift grids not found');\n    return -1;\n  }\n  var input = {x: -point.x, y: point.y};\n  var output = {x: Number.NaN, y: Number.NaN};\n  var onlyMandatoryGrids = false;\n  var attemptedGrids = [];\n  for (var i = 0; i < source.grids.length; i++) {\n    var grid = source.grids[i];\n    attemptedGrids.push(grid.name);\n    if (grid.isNull) {\n      output = input;\n      break;\n    }\n    onlyMandatoryGrids = grid.mandatory;\n    if (grid.grid === null) {\n      if (grid.mandatory) {\n        console.log(\"Unable to find mandatory grid '\" + grid.name + \"'\");\n        return -1;\n      }\n      continue;\n    }\n    var subgrid = grid.grid.subgrids[0];\n    // skip tables that don't match our point at all\n    var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;\n    var minX = subgrid.ll[0] - epsilon;\n    var minY = subgrid.ll[1] - epsilon;\n    var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;\n    var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;\n    if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x ) {\n      continue;\n    }\n    output = applySubgridShift(input, inverse, subgrid);\n    if (!isNaN(output.x)) {\n      break;\n    }\n  }\n  if (isNaN(output.x)) {\n    console.log(\"Failed to find a grid shift table for location '\"+\n      -input.x * R2D + \" \" + input.y * R2D + \" tried: '\" + attemptedGrids + \"'\");\n    return -1;\n  }\n  point.x = -output.x;\n  point.y = output.y;\n  return 0;\n}\n\nfunction applySubgridShift(pin, inverse, ct) {\n  var val = {x: Number.NaN, y: Number.NaN};\n  if (isNaN(pin.x)) { return val; }\n  var tb = {x: pin.x, y: pin.y};\n  tb.x -= ct.ll[0];\n  tb.y -= ct.ll[1];\n  tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;\n  var t = nadInterpolate(tb, ct);\n  if (inverse) {\n    if (isNaN(t.x)) {\n      return val;\n    }\n    t.x = tb.x - t.x;\n    t.y = tb.y - t.y;\n    var i = 9, tol = 1e-12;\n    var dif, del;\n    do {\n      del = nadInterpolate(t, ct);\n      if (isNaN(del.x)) {\n        console.log(\"Inverse grid shift iteration failed, presumably at grid edge.  Using first approximation.\");\n        break;\n      }\n      dif = {x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y)};\n      t.x += dif.x;\n      t.y += dif.y;\n    } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);\n    if (i < 0) {\n      console.log(\"Inverse grid shift iterator failed to converge.\");\n      return val;\n    }\n    val.x = adjust_lon(t.x + ct.ll[0]);\n    val.y = t.y + ct.ll[1];\n  } else {\n    if (!isNaN(t.x)) {\n      val.x = pin.x + t.x;\n      val.y = pin.y + t.y;\n    }\n  }\n  return val;\n}\n\nfunction nadInterpolate(pin, ct) {\n  var t = {x: pin.x / ct.del[0], y: pin.y / ct.del[1]};\n  var indx = {x: Math.floor(t.x), y: Math.floor(t.y)};\n  var frct = {x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y};\n  var val= {x: Number.NaN, y: Number.NaN};\n  var inx;\n  if (indx.x < 0 || indx.x >= ct.lim[0]) {\n    return val;\n  }\n  if (indx.y < 0 || indx.y >= ct.lim[1]) {\n    return val;\n  }\n  inx = (indx.y * ct.lim[0]) + indx.x;\n  var f00 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n  inx++;\n  var f10= {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n  inx += ct.lim[0];\n  var f11 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n  inx--;\n  var f01 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n  var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),\n    m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;\n  val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);\n  val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);\n  return val;\n}\n","export default function(crs, denorm, point) {\n  var xin = point.x,\n    yin = point.y,\n    zin = point.z || 0.0;\n  var v, t, i;\n  var out = {};\n  for (i = 0; i < 3; i++) {\n    if (denorm && i === 2 && point.z === undefined) {\n      continue;\n    }\n    if (i === 0) {\n      v = xin;\n      if (\"ew\".indexOf(crs.axis[i]) !== -1) {\n        t = 'x';\n      } else {\n        t = 'y';\n      }\n\n    }\n    else if (i === 1) {\n      v = yin;\n      if (\"ns\".indexOf(crs.axis[i]) !== -1) {\n        t = 'y';\n      } else {\n        t = 'x';\n      }\n    }\n    else {\n      v = zin;\n      t = 'z';\n    }\n    switch (crs.axis[i]) {\n    case 'e':\n      out[t] = v;\n      break;\n    case 'w':\n      out[t] = -v;\n      break;\n    case 'n':\n      out[t] = v;\n      break;\n    case 's':\n      out[t] = -v;\n      break;\n    case 'u':\n      if (point[t] !== undefined) {\n        out.z = v;\n      }\n      break;\n    case 'd':\n      if (point[t] !== undefined) {\n        out.z = -v;\n      }\n      break;\n    default:\n      //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n      return null;\n    }\n  }\n  return out;\n}\n","export default function (array){\n  var out = {\n    x: array[0],\n    y: array[1]\n  };\n  if (array.length>2) {\n    out.z = array[2];\n  }\n  if (array.length>3) {\n    out.m = array[3];\n  }\n  return out;\n}","export default function (point) {\n  checkCoord(point.x);\n  checkCoord(point.y);\n}\nfunction checkCoord(num) {\n  if (typeof Number.isFinite === 'function') {\n    if (Number.isFinite(num)) {\n      return;\n    }\n    throw new TypeError('coordinates must be finite numbers');\n  }\n  if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n    throw new TypeError('coordinates must be finite numbers');\n  }\n}\n","import {D2R, R2D, PJD_3PARAM, PJD_7PARAM} from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n  return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');\n}\n\nexport default function transform(source, dest, point, enforceAxis) {\n  var wgs84;\n  if (Array.isArray(point)) {\n    point = toPoint(point);\n  }\n  checkSanity(point);\n  // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n  if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n    wgs84 = new proj('WGS84');\n    point = transform(source, wgs84, point, enforceAxis);\n    source = wgs84;\n  }\n  // DGR, 2010/11/12\n  if (enforceAxis && source.axis !== 'enu') {\n    point = adjust_axis(source, false, point);\n  }\n  // Transform source points to long/lat, if they aren't already.\n  if (source.projName === 'longlat') {\n    point = {\n      x: point.x * D2R,\n      y: point.y * D2R,\n      z: point.z || 0\n    };\n  } else {\n    if (source.to_meter) {\n      point = {\n        x: point.x * source.to_meter,\n        y: point.y * source.to_meter,\n        z: point.z || 0\n      };\n    }\n    point = source.inverse(point); // Convert Cartesian to longlat\n    if (!point) {\n      return;\n    }\n  }\n  // Adjust for the prime meridian if necessary\n  if (source.from_greenwich) {\n    point.x += source.from_greenwich;\n  }\n\n  // Convert datums if needed, and if possible.\n  point = datum_transform(source.datum, dest.datum, point);\n  if (!point) {\n    return;\n  }\n\n  // Adjust for the prime meridian if necessary\n  if (dest.from_greenwich) {\n    point = {\n      x: point.x - dest.from_greenwich,\n      y: point.y,\n      z: point.z || 0\n    };\n  }\n\n  if (dest.projName === 'longlat') {\n    // convert radians to decimal degrees\n    point = {\n      x: point.x * R2D,\n      y: point.y * R2D,\n      z: point.z || 0\n    };\n  } else { // else project\n    point = dest.forward(point);\n    if (dest.to_meter) {\n      point = {\n        x: point.x / dest.to_meter,\n        y: point.y / dest.to_meter,\n        z: point.z || 0\n      };\n    }\n  }\n\n  // DGR, 2010/11/12\n  if (enforceAxis && dest.axis !== 'enu') {\n    return adjust_axis(dest, true, point);\n  }\n\n  return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords, enforceAxis) {\n  var transformedArray, out, keys;\n  if (Array.isArray(coords)) {\n    transformedArray = transform(from, to, coords, enforceAxis) || {x: NaN, y: NaN};\n    if (coords.length > 2) {\n      if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n        if (typeof transformedArray.z === 'number') {\n          return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.splice(3));\n        } else {\n          return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.splice(3));\n        }\n      } else {\n        return [transformedArray.x, transformedArray.y].concat(coords.splice(2));\n      }\n    } else {\n      return [transformedArray.x, transformedArray.y];\n    }\n  } else {\n    out = transform(from, to, coords, enforceAxis);\n    keys = Object.keys(coords);\n    if (keys.length === 2) {\n      return out;\n    }\n    keys.forEach(function (key) {\n      if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n        if (key === 'x' || key === 'y' || key === 'z') {\n          return;\n        }\n      } else {\n        if (key === 'x' || key === 'y') {\n          return;\n        }\n      }\n      out[key] = coords[key];\n    });\n    return out;\n  }\n}\n\nfunction checkProj(item) {\n  if (item instanceof proj) {\n    return item;\n  }\n  if (item.oProj) {\n    return item.oProj;\n  }\n  return proj(item);\n}\n\nfunction proj4(fromProj, toProj, coord) {\n  fromProj = checkProj(fromProj);\n  var single = false;\n  var obj;\n  if (typeof toProj === 'undefined') {\n    toProj = fromProj;\n    fromProj = wgs84;\n    single = true;\n  } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n    coord = toProj;\n    toProj = fromProj;\n    fromProj = wgs84;\n    single = true;\n  }\n  toProj = checkProj(toProj);\n  if (coord) {\n    return transformer(fromProj, toProj, coord);\n  } else {\n    obj = {\n      forward: function (coords, enforceAxis) {\n        return transformer(fromProj, toProj, coords, enforceAxis);\n      },\n      inverse: function (coords, enforceAxis) {\n        return transformer(toProj, fromProj, coords, enforceAxis);\n      }\n    };\n    if (single) {\n      obj.oProj = toProj;\n    }\n    return obj;\n  }\n}\nexport default proj4;","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n  forward: forward,\n  inverse: inverse,\n  toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n *     WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n *      100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n  accuracy = accuracy || 5; // default accuracy 1m\n  return encode(LLtoUTM({\n    lat: ll[1],\n    lon: ll[0]\n  }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n *     (longitude) and top (latitude) values in WGS84, representing the\n *     bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n  if (bbox.lat && bbox.lon) {\n    return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n  }\n  return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n  if (bbox.lat && bbox.lon) {\n    return [bbox.lon, bbox.lat];\n  }\n  return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n  return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n  return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n *     representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n *     northing, zoneNumber and zoneLetter properties, and an optional\n *     accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n  var Lat = ll.lat;\n  var Long = ll.lon;\n  var a = 6378137.0; //ellip.radius;\n  var eccSquared = 0.00669438; //ellip.eccsq;\n  var k0 = 0.9996;\n  var LongOrigin;\n  var eccPrimeSquared;\n  var N, T, C, A, M;\n  var LatRad = degToRad(Lat);\n  var LongRad = degToRad(Long);\n  var LongOriginRad;\n  var ZoneNumber;\n  // (int)\n  ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n  //Make sure the longitude 180.00 is in Zone 60\n  if (Long === 180) {\n    ZoneNumber = 60;\n  }\n\n  // Special zone for Norway\n  if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n    ZoneNumber = 32;\n  }\n\n  // Special zones for Svalbard\n  if (Lat >= 72.0 && Lat < 84.0) {\n    if (Long >= 0.0 && Long < 9.0) {\n      ZoneNumber = 31;\n    }\n    else if (Long >= 9.0 && Long < 21.0) {\n      ZoneNumber = 33;\n    }\n    else if (Long >= 21.0 && Long < 33.0) {\n      ZoneNumber = 35;\n    }\n    else if (Long >= 33.0 && Long < 42.0) {\n      ZoneNumber = 37;\n    }\n  }\n\n  LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n  // in middle of\n  // zone\n  LongOriginRad = degToRad(LongOrigin);\n\n  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n  N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n  T = Math.tan(LatRad) * Math.tan(LatRad);\n  C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n  A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n  M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n  var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n  var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n  if (Lat < 0.0) {\n    UTMNorthing += 10000000.0; //10000000 meter offset for\n    // southern hemisphere\n  }\n\n  return {\n    northing: Math.round(UTMNorthing),\n    easting: Math.round(UTMEasting),\n    zoneNumber: ZoneNumber,\n    zoneLetter: getLetterDesignator(Lat)\n  };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n *     and zoneLetter properties. If an optional accuracy property is\n *     provided (in meters), a bounding box will be returned instead of\n *     latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n *     (if no accuracy was provided), or top, right, bottom and left values\n *     for the bounding box calculated according to the provided accuracy.\n *     Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n  var UTMNorthing = utm.northing;\n  var UTMEasting = utm.easting;\n  var zoneLetter = utm.zoneLetter;\n  var zoneNumber = utm.zoneNumber;\n  // check the ZoneNummber is valid\n  if (zoneNumber < 0 || zoneNumber > 60) {\n    return null;\n  }\n\n  var k0 = 0.9996;\n  var a = 6378137.0; //ellip.radius;\n  var eccSquared = 0.00669438; //ellip.eccsq;\n  var eccPrimeSquared;\n  var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n  var N1, T1, C1, R1, D, M;\n  var LongOrigin;\n  var mu, phi1Rad;\n\n  // remove 500,000 meter offset for longitude\n  var x = UTMEasting - 500000.0;\n  var y = UTMNorthing;\n\n  // We must know somehow if we are in the Northern or Southern\n  // hemisphere, this is the only time we use the letter So even\n  // if the Zone letter isn't exactly correct it should indicate\n  // the hemisphere correctly\n  if (zoneLetter < 'N') {\n    y -= 10000000.0; // remove 10,000,000 meter offset used\n    // for southern hemisphere\n  }\n\n  // There are 60 zones with zone 1 being at West -180 to -174\n  LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n  // in middle of\n  // zone\n\n  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n  M = y / k0;\n  mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n  phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n  // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n  N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n  T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n  C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n  R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n  D = x / (N1 * k0);\n\n  var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n  lat = radToDeg(lat);\n\n  var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n  lon = LongOrigin + radToDeg(lon);\n\n  var result;\n  if (utm.accuracy) {\n    var topRight = UTMtoLL({\n      northing: utm.northing + utm.accuracy,\n      easting: utm.easting + utm.accuracy,\n      zoneLetter: utm.zoneLetter,\n      zoneNumber: utm.zoneNumber\n    });\n    result = {\n      top: topRight.lat,\n      right: topRight.lon,\n      bottom: lat,\n      left: lon\n    };\n  }\n  else {\n    result = {\n      lat: lat,\n      lon: lon\n    };\n  }\n  return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n *     for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n  //This is here as an error flag to show that the Latitude is\n  //outside MGRS limits\n  var LetterDesignator = 'Z';\n\n  if ((84 >= lat) && (lat >= 72)) {\n    LetterDesignator = 'X';\n  }\n  else if ((72 > lat) && (lat >= 64)) {\n    LetterDesignator = 'W';\n  }\n  else if ((64 > lat) && (lat >= 56)) {\n    LetterDesignator = 'V';\n  }\n  else if ((56 > lat) && (lat >= 48)) {\n    LetterDesignator = 'U';\n  }\n  else if ((48 > lat) && (lat >= 40)) {\n    LetterDesignator = 'T';\n  }\n  else if ((40 > lat) && (lat >= 32)) {\n    LetterDesignator = 'S';\n  }\n  else if ((32 > lat) && (lat >= 24)) {\n    LetterDesignator = 'R';\n  }\n  else if ((24 > lat) && (lat >= 16)) {\n    LetterDesignator = 'Q';\n  }\n  else if ((16 > lat) && (lat >= 8)) {\n    LetterDesignator = 'P';\n  }\n  else if ((8 > lat) && (lat >= 0)) {\n    LetterDesignator = 'N';\n  }\n  else if ((0 > lat) && (lat >= -8)) {\n    LetterDesignator = 'M';\n  }\n  else if ((-8 > lat) && (lat >= -16)) {\n    LetterDesignator = 'L';\n  }\n  else if ((-16 > lat) && (lat >= -24)) {\n    LetterDesignator = 'K';\n  }\n  else if ((-24 > lat) && (lat >= -32)) {\n    LetterDesignator = 'J';\n  }\n  else if ((-32 > lat) && (lat >= -40)) {\n    LetterDesignator = 'H';\n  }\n  else if ((-40 > lat) && (lat >= -48)) {\n    LetterDesignator = 'G';\n  }\n  else if ((-48 > lat) && (lat >= -56)) {\n    LetterDesignator = 'F';\n  }\n  else if ((-56 > lat) && (lat >= -64)) {\n    LetterDesignator = 'E';\n  }\n  else if ((-64 > lat) && (lat >= -72)) {\n    LetterDesignator = 'D';\n  }\n  else if ((-72 > lat) && (lat >= -80)) {\n    LetterDesignator = 'C';\n  }\n  return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n *     zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n  // prepend with leading zeroes\n  var seasting = \"00000\" + utm.easting,\n    snorthing = \"00000\" + utm.northing;\n\n  return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n  var setParm = get100kSetForZone(zoneNumber);\n  var setColumn = Math.floor(easting / 100000);\n  var setRow = Math.floor(northing / 100000) % 20;\n  return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n  var setParm = i % NUM_100K_SETS;\n  if (setParm === 0) {\n    setParm = NUM_100K_SETS;\n  }\n\n  return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n *        100k set spreadsheet, created from the UTM easting.\n *        Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n *        spreadsheet, created from the UTM northing value. Values\n *        are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n *        spreadsheet, created from the UTM zone. Values are from\n *        1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n  // colOrigin and rowOrigin are the letters at the origin of the set\n  var index = parm - 1;\n  var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n  var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n  // colInt and rowInt are the letters to build to return\n  var colInt = colOrigin + column - 1;\n  var rowInt = rowOrigin + row;\n  var rollover = false;\n\n  if (colInt > Z) {\n    colInt = colInt - Z + A - 1;\n    rollover = true;\n  }\n\n  if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n    colInt++;\n  }\n\n  if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n    colInt++;\n\n    if (colInt === I) {\n      colInt++;\n    }\n  }\n\n  if (colInt > Z) {\n    colInt = colInt - Z + A - 1;\n  }\n\n  if (rowInt > V) {\n    rowInt = rowInt - V + A - 1;\n    rollover = true;\n  }\n  else {\n    rollover = false;\n  }\n\n  if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n    rowInt++;\n  }\n\n  if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n    rowInt++;\n\n    if (rowInt === I) {\n      rowInt++;\n    }\n  }\n\n  if (rowInt > V) {\n    rowInt = rowInt - V + A - 1;\n  }\n\n  var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n  return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n *     zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n  if (mgrsString && mgrsString.length === 0) {\n    throw (\"MGRSPoint coverting from nothing\");\n  }\n\n  var length = mgrsString.length;\n\n  var hunK = null;\n  var sb = \"\";\n  var testChar;\n  var i = 0;\n\n  // get Zone number\n  while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n    if (i >= 2) {\n      throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n    }\n    sb += testChar;\n    i++;\n  }\n\n  var zoneNumber = parseInt(sb, 10);\n\n  if (i === 0 || i + 3 > length) {\n    // A good MGRS string has to be 4-5 digits long,\n    // ##AAA/#AAA at least.\n    throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n  }\n\n  var zoneLetter = mgrsString.charAt(i++);\n\n  // Should we check the zone letter here? Why not.\n  if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n    throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n  }\n\n  hunK = mgrsString.substring(i, i += 2);\n\n  var set = get100kSetForZone(zoneNumber);\n\n  var east100k = getEastingFromChar(hunK.charAt(0), set);\n  var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n  // We have a bug where the northing may be 2000000 too low.\n  // How\n  // do we know when to roll over?\n\n  while (north100k < getMinNorthing(zoneLetter)) {\n    north100k += 2000000;\n  }\n\n  // calculate the char index for easting/northing separator\n  var remainder = length - i;\n\n  if (remainder % 2 !== 0) {\n    throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n  }\n\n  var sep = remainder / 2;\n\n  var sepEasting = 0.0;\n  var sepNorthing = 0.0;\n  var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n  if (sep > 0) {\n    accuracyBonus = 100000.0 / Math.pow(10, sep);\n    sepEastingString = mgrsString.substring(i, i + sep);\n    sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n    sepNorthingString = mgrsString.substring(i + sep);\n    sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n  }\n\n  easting = sepEasting + east100k;\n  northing = sepNorthing + north100k;\n\n  return {\n    easting: easting,\n    northing: northing,\n    zoneLetter: zoneLetter,\n    zoneNumber: zoneNumber,\n    accuracy: accuracyBonus\n  };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n  // colOrigin is the letter at the origin of the set for the\n  // column\n  var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n  var eastingValue = 100000.0;\n  var rewindMarker = false;\n\n  while (curCol !== e.charCodeAt(0)) {\n    curCol++;\n    if (curCol === I) {\n      curCol++;\n    }\n    if (curCol === O) {\n      curCol++;\n    }\n    if (curCol > Z) {\n      if (rewindMarker) {\n        throw (\"Bad character: \" + e);\n      }\n      curCol = A;\n      rewindMarker = true;\n    }\n    eastingValue += 100000.0;\n  }\n\n  return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n *     UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n  if (n > 'V') {\n    throw (\"MGRSPoint given invalid Northing \" + n);\n  }\n\n  // rowOrigin is the letter at the origin of the set for the\n  // column\n  var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n  var northingValue = 0.0;\n  var rewindMarker = false;\n\n  while (curRow !== n.charCodeAt(0)) {\n    curRow++;\n    if (curRow === I) {\n      curRow++;\n    }\n    if (curRow === O) {\n      curRow++;\n    }\n    // fixing a bug making whole application hang in this loop\n    // when 'n' is a wrong character\n    if (curRow > V) {\n      if (rewindMarker) { // making sure that this loop ends\n        throw (\"Bad character: \" + n);\n      }\n      curRow = A;\n      rewindMarker = true;\n    }\n    northingValue += 100000.0;\n  }\n\n  return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n  var northing;\n  switch (zoneLetter) {\n  case 'C':\n    northing = 1100000.0;\n    break;\n  case 'D':\n    northing = 2000000.0;\n    break;\n  case 'E':\n    northing = 2800000.0;\n    break;\n  case 'F':\n    northing = 3700000.0;\n    break;\n  case 'G':\n    northing = 4600000.0;\n    break;\n  case 'H':\n    northing = 5500000.0;\n    break;\n  case 'J':\n    northing = 6400000.0;\n    break;\n  case 'K':\n    northing = 7300000.0;\n    break;\n  case 'L':\n    northing = 8200000.0;\n    break;\n  case 'M':\n    northing = 9100000.0;\n    break;\n  case 'N':\n    northing = 0.0;\n    break;\n  case 'P':\n    northing = 800000.0;\n    break;\n  case 'Q':\n    northing = 1700000.0;\n    break;\n  case 'R':\n    northing = 2600000.0;\n    break;\n  case 'S':\n    northing = 3500000.0;\n    break;\n  case 'T':\n    northing = 4400000.0;\n    break;\n  case 'U':\n    northing = 5300000.0;\n    break;\n  case 'V':\n    northing = 6200000.0;\n    break;\n  case 'W':\n    northing = 7000000.0;\n    break;\n  case 'X':\n    northing = 7900000.0;\n    break;\n  default:\n    northing = -1.0;\n  }\n  if (northing >= 0.0) {\n    return northing;\n  }\n  else {\n    throw (\"Invalid zone letter: \" + zoneLetter);\n  }\n\n}\n","import {toPoint, forward} from 'mgrs';\n\nfunction Point(x, y, z) {\n  if (!(this instanceof Point)) {\n    return new Point(x, y, z);\n  }\n  if (Array.isArray(x)) {\n    this.x = x[0];\n    this.y = x[1];\n    this.z = x[2] || 0.0;\n  } else if(typeof x === 'object') {\n    this.x = x.x;\n    this.y = x.y;\n    this.z = x.z || 0.0;\n  } else if (typeof x === 'string' && typeof y === 'undefined') {\n    var coords = x.split(',');\n    this.x = parseFloat(coords[0], 10);\n    this.y = parseFloat(coords[1], 10);\n    this.z = parseFloat(coords[2], 10) || 0.0;\n  } else {\n    this.x = x;\n    this.y = y;\n    this.z = z || 0.0;\n  }\n  console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n  return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n  return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function(es) {\n  var en = [];\n  en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n  en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n  var t = es * es;\n  en[2] = t * (C44 - es * (C46 + es * C48));\n  t *= es;\n  en[3] = t * (C66 - es * C68);\n  en[4] = t * es * C88;\n  return en;\n}","export default function(phi, sphi, cphi, en) {\n  cphi *= sphi;\n  sphi *= sphi;\n  return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}","import pj_mlfn from \"./pj_mlfn\";\nimport {EPSLN} from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function(arg, es, en) {\n  var k = 1 / (1 - es);\n  var phi = arg;\n  for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n    var s = Math.sin(phi);\n    var t = 1 - es * s * s;\n    //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n    //phi -= t * (t * Math.sqrt(t)) * k;\n    t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n    phi -= t;\n    if (Math.abs(t) < EPSLN) {\n      return phi;\n    }\n  }\n  //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n  return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport {EPSLN, HALF_PI} from '../constants/values';\nimport sign from '../common/sign';\n\nexport function init() {\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n  if (this.es) {\n    this.en = pj_enfn(this.es);\n    this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n  }\n}\n\n/**\n    Transverse Mercator Forward  - long/lat to x/y\n    long/lat in radians\n  */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lon = adjust_lon(lon - this.long0);\n  var con;\n  var x, y;\n  var sin_phi = Math.sin(lat);\n  var cos_phi = Math.cos(lat);\n\n  if (!this.es) {\n    var b = cos_phi * Math.sin(delta_lon);\n\n    if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n      return (93);\n    }\n    else {\n      x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n      y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n      b = Math.abs(y);\n\n      if (b >= 1) {\n        if ((b - 1) > EPSLN) {\n          return (93);\n        }\n        else {\n          y = 0;\n        }\n      }\n      else {\n        y = Math.acos(y);\n      }\n\n      if (lat < 0) {\n        y = -y;\n      }\n\n      y = this.a * this.k0 * (y - this.lat0) + this.y0;\n    }\n  }\n  else {\n    var al = cos_phi * delta_lon;\n    var als = Math.pow(al, 2);\n    var c = this.ep2 * Math.pow(cos_phi, 2);\n    var cs = Math.pow(c, 2);\n    var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n    var t = Math.pow(tq, 2);\n    var ts = Math.pow(t, 2);\n    con = 1 - this.es * Math.pow(sin_phi, 2);\n    al = al / Math.sqrt(con);\n    var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n    x = this.a * (this.k0 * al * (1 +\n      als / 6 * (1 - t + c +\n      als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n      als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n      this.x0;\n\n    y = this.a * (this.k0 * (ml - this.ml0 +\n      sin_phi * delta_lon * al / 2 * (1 +\n      als / 12 * (5 - t + 9 * c + 4 * cs +\n      als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n      als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n      this.y0;\n  }\n\n  p.x = x;\n  p.y = y;\n\n  return p;\n}\n\n/**\n    Transverse Mercator Inverse  -  x/y to long/lat\n  */\nexport function inverse(p) {\n  var con, phi;\n  var lat, lon;\n  var x = (p.x - this.x0) * (1 / this.a);\n  var y = (p.y - this.y0) * (1 / this.a);\n\n  if (!this.es) {\n    var f = Math.exp(x / this.k0);\n    var g = 0.5 * (f - 1 / f);\n    var temp = this.lat0 + y / this.k0;\n    var h = Math.cos(temp);\n    con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n    lat = Math.asin(con);\n\n    if (y < 0) {\n      lat = -lat;\n    }\n\n    if ((g === 0) && (h === 0)) {\n      lon = 0;\n    }\n    else {\n      lon = adjust_lon(Math.atan2(g, h) + this.long0);\n    }\n  }\n  else { // ellipsoidal form\n    con = this.ml0 + y / this.k0;\n    phi = pj_inv_mlfn(con, this.es, this.en);\n\n    if (Math.abs(phi) < HALF_PI) {\n      var sin_phi = Math.sin(phi);\n      var cos_phi = Math.cos(phi);\n      var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n      var c = this.ep2 * Math.pow(cos_phi, 2);\n      var cs = Math.pow(c, 2);\n      var t = Math.pow(tan_phi, 2);\n      var ts = Math.pow(t, 2);\n      con = 1 - this.es * Math.pow(sin_phi, 2);\n      var d = x * Math.sqrt(con) / this.k0;\n      var ds = Math.pow(d, 2);\n      con = con * tan_phi;\n\n      lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n        ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n        ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n        ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n      lon = adjust_lon(this.long0 + (d * (1 -\n        ds / 6 * (1 + 2 * t + c -\n        ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n        ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n    }\n    else {\n      lat = HALF_PI * sign(y);\n      lon = 0;\n    }\n  }\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = [\"Fast_Transverse_Mercator\", \"Fast Transverse Mercator\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function(x) {\n  var r = Math.exp(x);\n  r = (r - 1 / r) / 2;\n  return r;\n}","export default function(x, y) {\n  x = Math.abs(x);\n  y = Math.abs(y);\n  var a = Math.max(x, y);\n  var b = Math.min(x, y) / (a ? a : 1);\n\n  return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","export default function(x) {\n  var y = 1 + x;\n  var z = y - 1;\n\n  return z === 0 ? x : x * Math.log(y) / z;\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function(x) {\n  var y = Math.abs(x);\n  y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n  return x < 0 ? -y : y;\n}\n","export default function(pp, B) {\n  var cos_2B = 2 * Math.cos(2 * B);\n  var i = pp.length - 1;\n  var h1 = pp[i];\n  var h2 = 0;\n  var h;\n\n  while (--i >= 0) {\n    h = -h2 + cos_2B * h1 + pp[i];\n    h2 = h1;\n    h1 = h;\n  }\n\n  return (B + h * Math.sin(2 * B));\n}\n","export default function(pp, arg_r) {\n  var r = 2 * Math.cos(arg_r);\n  var i = pp.length - 1;\n  var hr1 = pp[i];\n  var hr2 = 0;\n  var hr;\n\n  while (--i >= 0) {\n    hr = -hr2 + r * hr1 + pp[i];\n    hr2 = hr1;\n    hr1 = hr;\n  }\n\n  return Math.sin(arg_r) * hr;\n}\n","export default function(x) {\n  var r = Math.exp(x);\n  r = (r + 1 / r) / 2;\n  return r;\n}","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function(pp, arg_r, arg_i) {\n  var sin_arg_r = Math.sin(arg_r);\n  var cos_arg_r = Math.cos(arg_r);\n  var sinh_arg_i = sinh(arg_i);\n  var cosh_arg_i = cosh(arg_i);\n  var r = 2 * cos_arg_r * cosh_arg_i;\n  var i = -2 * sin_arg_r * sinh_arg_i;\n  var j = pp.length - 1;\n  var hr = pp[j];\n  var hi1 = 0;\n  var hr1 = 0;\n  var hi = 0;\n  var hr2;\n  var hi2;\n\n  while (--j >= 0) {\n    hr2 = hr1;\n    hi2 = hi1;\n    hr1 = hr;\n    hi1 = hi;\n    hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n    hi = -hi2 + i * hr1 + r * hi1;\n  }\n\n  r = sin_arg_r * cosh_arg_i;\n  i = cos_arg_r * sinh_arg_i;\n\n  return [r * hr - i * hi, r * hi + i * hr];\n}\n","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport tmerc from '../projections/tmerc';\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n  if (!this.approx && (isNaN(this.es) || this.es <= 0)) {\n    throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION[\"Fast_Transverse_Mercator\"] in the WKT.');\n  }\n  if (this.approx) {\n    // When '+approx' is set, use tmerc instead\n    tmerc.init.apply(this);\n    this.forward = tmerc.forward;\n    this.inverse = tmerc.inverse;\n  }\n\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n  this.cgb = [];\n  this.cbg = [];\n  this.utg = [];\n  this.gtu = [];\n\n  var f = this.es / (1 + Math.sqrt(1 - this.es));\n  var n = f / (2 - f);\n  var np = n;\n\n  this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n  this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n  np = np * n;\n  this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n  this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n  np = np * n;\n  this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n  this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n  np = np * n;\n  this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n  this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n  np = np * n;\n  this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n  this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n  np = np * n;\n  this.cgb[5] = np * (601676 / 22275);\n  this.cbg[5] = np * (444337 / 155925);\n\n  np = Math.pow(n, 2);\n  this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n  this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n  this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n  this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n  this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n  np = np * n;\n  this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n  this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n  np = np * n;\n  this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n  this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n  np = np * n;\n  this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n  this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n  np = np * n;\n  this.utg[5] = np * (-20648693 / 638668800);\n  this.gtu[5] = np * (212378941 / 319334400);\n\n  var Z = gatg(this.cbg, this.lat0);\n  this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n  var Ce = adjust_lon(p.x - this.long0);\n  var Cn = p.y;\n\n  Cn = gatg(this.cbg, Cn);\n  var sin_Cn = Math.sin(Cn);\n  var cos_Cn = Math.cos(Cn);\n  var sin_Ce = Math.sin(Ce);\n  var cos_Ce = Math.cos(Ce);\n\n  Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n  Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n  Ce = asinhy(Math.tan(Ce));\n\n  var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n  Cn = Cn + tmp[0];\n  Ce = Ce + tmp[1];\n\n  var x;\n  var y;\n\n  if (Math.abs(Ce) <= 2.623395162778) {\n    x = this.a * (this.Qn * Ce) + this.x0;\n    y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n  }\n  else {\n    x = Infinity;\n    y = Infinity;\n  }\n\n  p.x = x;\n  p.y = y;\n\n  return p;\n}\n\nexport function inverse(p) {\n  var Ce = (p.x - this.x0) * (1 / this.a);\n  var Cn = (p.y - this.y0) * (1 / this.a);\n\n  Cn = (Cn - this.Zb) / this.Qn;\n  Ce = Ce / this.Qn;\n\n  var lon;\n  var lat;\n\n  if (Math.abs(Ce) <= 2.623395162778) {\n    var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n    Cn = Cn + tmp[0];\n    Ce = Ce + tmp[1];\n    Ce = Math.atan(sinh(Ce));\n\n    var sin_Cn = Math.sin(Cn);\n    var cos_Cn = Math.cos(Cn);\n    var sin_Ce = Math.sin(Ce);\n    var cos_Ce = Math.cos(Ce);\n\n    Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n    Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n    lon = adjust_lon(Ce + this.long0);\n    lat = gatg(this.cgb, Cn);\n  }\n  else {\n    lon = Infinity;\n    lat = Infinity;\n  }\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\", \"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function(zone, lon) {\n  if (zone === undefined) {\n    zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n    if (zone < 0) {\n      return 0;\n    } else if (zone > 60) {\n      return 60;\n    }\n  }\n  return zone;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport {D2R} from '../constants/values';\n\n\nexport function init() {\n  var zone = adjust_zone(this.zone, this.long0);\n  if (zone === undefined) {\n    throw new Error('unknown utm zone');\n  }\n  this.lat0 = 0;\n  this.long0 =  ((6 * Math.abs(zone)) - 183) * D2R;\n  this.x0 = 500000;\n  this.y0 = this.utmSouth ? 10000000 : 0;\n  this.k0 = 0.9996;\n\n  etmerc.init.apply(this);\n  this.forward = etmerc.forward;\n  this.inverse = etmerc.inverse;\n}\n\nexport var names = [\"Universal Transverse Mercator System\", \"utm\"];\nexport default {\n  init: init,\n  names: names,\n  dependsOn: dependsOn\n};\n","export default function(esinp, exp) {\n  return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport {HALF_PI, FORTPI} from '../constants/values';\n\nexport function init() {\n  var sphi = Math.sin(this.lat0);\n  var cphi = Math.cos(this.lat0);\n  cphi *= cphi;\n  this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n  this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n  this.phic0 = Math.asin(sphi / this.C);\n  this.ratexp = 0.5 * this.C * this.e;\n  this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n  p.x = this.C * lon;\n  return p;\n}\n\nexport function inverse(p) {\n  var DEL_TOL = 1e-14;\n  var lon = p.x / this.C;\n  var lat = p.y;\n  var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n  for (var i = MAX_ITER; i > 0; --i) {\n    lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n    if (Math.abs(lat - p.y) < DEL_TOL) {\n      break;\n    }\n    p.y = lat;\n  }\n  /* convergence failed */\n  if (!i) {\n    return null;\n  }\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"gauss\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n  gauss.init.apply(this);\n  if (!this.rc) {\n    return;\n  }\n  this.sinc0 = Math.sin(this.phic0);\n  this.cosc0 = Math.cos(this.phic0);\n  this.R2 = 2 * this.rc;\n  if (!this.title) {\n    this.title = \"Oblique Stereographic Alternative\";\n  }\n}\n\nexport function forward(p) {\n  var sinc, cosc, cosl, k;\n  p.x = adjust_lon(p.x - this.long0);\n  gauss.forward.apply(this, [p]);\n  sinc = Math.sin(p.y);\n  cosc = Math.cos(p.y);\n  cosl = Math.cos(p.x);\n  k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n  p.x = k * cosc * Math.sin(p.x);\n  p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n  p.x = this.a * p.x + this.x0;\n  p.y = this.a * p.y + this.y0;\n  return p;\n}\n\nexport function inverse(p) {\n  var sinc, cosc, lon, lat, rho;\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  p.x /= this.k0;\n  p.y /= this.k0;\n  if ((rho = 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\nexport var names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import {EPSLN, HALF_PI} from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function ssfn_(phit, sinphi, eccen) {\n  sinphi *= eccen;\n  return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\nexport function init() {\n  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\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var sinlat = Math.sin(lat);\n  var coslat = Math.cos(lat);\n  var A, X, sinX, cosX, ts, rh;\n  var dlon = adjust_lon(lon - this.long0);\n\n  if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n    //case of the origine point\n    //trace('stere:this is the origin point');\n    p.x = NaN;\n    p.y = NaN;\n    return p;\n  }\n  if (this.sphere) {\n    //trace('stere:sphere case');\n    A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n    p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n    p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n    return p;\n  }\n  else {\n    X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n    cosX = Math.cos(X);\n    sinX = Math.sin(X);\n    if (Math.abs(this.coslat0) <= EPSLN) {\n      ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n      rh = 2 * this.a * this.k0 * ts / this.cons;\n      p.x = this.x0 + rh * Math.sin(lon - this.long0);\n      p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n      //trace(p.toString());\n      return p;\n    }\n    else if (Math.abs(this.sinlat0) < EPSLN) {\n      //Eq\n      //trace('stere:equateur');\n      A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n      p.y = A * sinX;\n    }\n    else {\n      //other case\n      //trace('stere:normal case');\n      A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n      p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n    }\n    p.x = A * cosX * Math.sin(dlon) + this.x0;\n  }\n  //trace(p.toString());\n  return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var lon, lat, ts, ce, Chi;\n  var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n  if (this.sphere) {\n    var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n    lon = this.long0;\n    lat = this.lat0;\n    if (rh <= EPSLN) {\n      p.x = lon;\n      p.y = lat;\n      return p;\n    }\n    lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n    if (Math.abs(this.coslat0) < EPSLN) {\n      if (this.lat0 > 0) {\n        lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n      }\n      else {\n        lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n      }\n    }\n    else {\n      lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n    }\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  else {\n    if (Math.abs(this.coslat0) <= EPSLN) {\n      if (rh <= EPSLN) {\n        lat = this.lat0;\n        lon = this.long0;\n        p.x = lon;\n        p.y = lat;\n        //trace(p.toString());\n        return p;\n      }\n      p.x *= this.con;\n      p.y *= this.con;\n      ts = rh * this.cons / (2 * this.a * this.k0);\n      lat = this.con * phi2z(this.e, ts);\n      lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n    }\n    else {\n      ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n      lon = this.long0;\n      if (rh <= EPSLN) {\n        Chi = this.X0;\n      }\n      else {\n        Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n        lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n      }\n      lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n    }\n  }\n  p.x = lon;\n  p.y = lat;\n\n  //trace(p.toString());\n  return p;\n\n}\n\nexport var names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  ssfn_: ssfn_\n};\n","/*\n  references:\n    Formules et constantes pour le Calcul pour la\n    projection cylindrique conforme à axe oblique et pour la transformation entre\n    des systèmes de référence.\n    http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n  */\n\nexport function init() {\n  var phy0 = this.lat0;\n  this.lambda0 = this.long0;\n  var sinPhy0 = Math.sin(phy0);\n  var semiMajorAxis = this.a;\n  var invF = this.rf;\n  var flattening = 1 / invF;\n  var e2 = 2 * flattening - Math.pow(flattening, 2);\n  var e = this.e = Math.sqrt(e2);\n  this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n  this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n  this.b0 = Math.asin(sinPhy0 / this.alpha);\n  var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n  var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n  var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n  this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n  var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n  var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n  var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n  // spheric latitude\n  var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n  // spheric longitude\n  var I = this.alpha * (p.x - this.lambda0);\n\n  // psoeudo equatorial rotation\n  var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n  var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n  p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n  p.x = this.R * rotI + this.x0;\n  return p;\n}\n\nexport function inverse(p) {\n  var Y = p.x - this.x0;\n  var X = p.y - this.y0;\n\n  var rotI = Y / this.R;\n  var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n  var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n  var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n  var lambda = this.lambda0 + I / this.alpha;\n\n  var S = 0;\n  var phy = b;\n  var prevPhy = -1000;\n  var iteration = 0;\n  while (Math.abs(phy - prevPhy) > 0.0000001) {\n    if (++iteration > 20) {\n      //...reportError(\"omercFwdInfinity\");\n      return;\n    }\n    //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n    S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n    prevPhy = phy;\n    phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n  }\n\n  p.x = lambda;\n  p.y = phy;\n  return p;\n}\n\nexport var names = [\"somerc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { D2R, EPSLN, HALF_PI, TWO_PI, FORTPI } from '../constants/values';\n\nvar TOL = 1e-7;\n\nfunction isTypeA(P) {\n  var typeAProjections = ['Hotine_Oblique_Mercator','Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];\n  var projectionName = typeof P.PROJECTION === \"object\" ? Object.keys(P.PROJECTION)[0] : P.PROJECTION;\n  \n  return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1;\n}\n\n\n/* Initialize the Oblique Mercator  projection\n    ------------------------------------------*/\nexport function init() {  \n  var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0,\n    gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0, AB;\n  \n  // only Type A uses the no_off or no_uoff property\n  // https://github.com/OSGeo/proj.4/issues/104\n  this.no_off = isTypeA(this);\n  this.no_rot = 'no_rot' in this;\n  \n  var alp = false;\n  if (\"alpha\" in this) {\n    alp = true;\n  }\n\n  var gam = false;\n  if (\"rectified_grid_angle\" in this) {\n    gam = true;\n  }\n\n  if (alp) {\n    alpha_c = this.alpha;\n  }\n  \n  if (gam) {\n    gamma = (this.rectified_grid_angle * D2R);\n  }\n  \n  if (alp || gam) {\n    lamc = this.longc;\n  } else {\n    lam1 = this.long1;\n    phi1 = this.lat1;\n    lam2 = this.long2;\n    phi2 = this.lat2;\n    \n    if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL ||\n        Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL ||\n        Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) {\n      throw new Error();\n    }\n  }\n  \n  var one_es = 1.0 - this.es;\n  com = Math.sqrt(one_es);\n  \n  if (Math.abs(this.lat0) > EPSLN) {\n    sinph0 = Math.sin(this.lat0);\n    cosph0 = Math.cos(this.lat0);\n    con = 1 - this.es * sinph0 * sinph0;\n    this.B = cosph0 * cosph0;\n    this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es);\n    this.A = this.B * this.k0 * com / con;\n    D = this.B * com / (cosph0 * Math.sqrt(con));\n    F = D * D -1;\n    \n    if (F <= 0) {\n      F = 0;\n    } else {\n      F = Math.sqrt(F);\n      if (this.lat0 < 0) {\n        F = -F;\n      }\n    }\n    \n    this.E = F += D;\n    this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B);\n  } else {\n    this.B = 1 / com;\n    this.A = this.k0;\n    this.E = D = F = 1;\n  }\n  \n  if (alp || gam) {\n    if (alp) {\n      gamma0 = Math.asin(Math.sin(alpha_c) / D);\n      if (!gam) {\n        gamma = alpha_c;\n      }\n    } else {\n      gamma0 = gamma;\n      alpha_c = Math.asin(D * Math.sin(gamma0));\n    }\n    this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B;\n  } else {\n    H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B);\n    L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B);\n    F = this.E / H;\n    p = (L - H) / (L + H);\n    J = this.E * this.E;\n    J = (J - L * H) / (J + L * H);\n    con = lam1 - lam2;\n    \n    if (con < -Math.pi) {\n      lam2 -=TWO_PI;\n    } else if (con > Math.pi) {\n      lam2 += TWO_PI;\n    }\n    \n    this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B);\n    gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0)) / (F - 1 / F));\n    gamma = alpha_c = Math.asin(D * Math.sin(gamma0));\n  }\n  \n  this.singam = Math.sin(gamma0);\n  this.cosgam = Math.cos(gamma0);\n  this.sinrot = Math.sin(gamma);\n  this.cosrot = Math.cos(gamma);\n  \n  this.rB = 1 / this.B;\n  this.ArB = this.A * this.rB;\n  this.BrA = 1 / this.ArB;\n  AB = this.A * this.B;\n  \n  if (this.no_off) {\n    this.u_0 = 0;\n  } else {\n    this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c)));\n    \n    if (this.lat0 < 0) {\n      this.u_0 = - this.u_0;\n    }  \n  }\n    \n  F = 0.5 * gamma0;\n  this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F));\n  this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F));\n}\n\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n    ----------------------------------------------------------*/\nexport function forward(p) {\n  var coords = {};\n  var S, T, U, V, W, temp, u, v;\n  p.x = p.x - this.lam0;\n  \n  if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) {\n    W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B);\n    \n    temp = 1 / W;\n    S = 0.5 * (W - temp);\n    T = 0.5 * (W + temp);\n    V = Math.sin(this.B * p.x);\n    U = (S * this.singam - V * this.cosgam) / T;\n        \n    if (Math.abs(Math.abs(U) - 1.0) < EPSLN) {\n      throw new Error();\n    }\n    \n    v = 0.5 * this.ArB * Math.log((1 - U)/(1 + U));\n    temp = Math.cos(this.B * p.x);\n    \n    if (Math.abs(temp) < TOL) {\n      u = this.A * p.x;\n    } else {\n      u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp);\n    }    \n  } else {\n    v = p.y > 0 ? this.v_pole_n : this.v_pole_s;\n    u = this.ArB * p.y;\n  }\n     \n  if (this.no_rot) {\n    coords.x = u;\n    coords.y = v;\n  } else {\n    u -= this.u_0;\n    coords.x = v * this.cosrot + u * this.sinrot;\n    coords.y = u * this.cosrot - v * this.sinrot;\n  }\n  \n  coords.x = (this.a * coords.x + this.x0);\n  coords.y = (this.a * coords.y + this.y0);\n  \n  return coords;\n}\n\nexport function inverse(p) {\n  var u, v, Qp, Sp, Tp, Vp, Up;\n  var coords = {};\n  \n  p.x = (p.x - this.x0) * (1.0 / this.a);\n  p.y = (p.y - this.y0) * (1.0 / this.a);\n\n  if (this.no_rot) {\n    v = p.y;\n    u = p.x;\n  } else {\n    v = p.x * this.cosrot - p.y * this.sinrot;\n    u = p.y * this.cosrot + p.x * this.sinrot + this.u_0;\n  }\n  \n  Qp = Math.exp(-this.BrA * v);\n  Sp = 0.5 * (Qp - 1 / Qp);\n  Tp = 0.5 * (Qp + 1 / Qp);\n  Vp = Math.sin(this.BrA * u);\n  Up = (Vp * this.cosgam + Sp * this.singam) / Tp;\n  \n  if (Math.abs(Math.abs(Up) - 1) < EPSLN) {\n    coords.x = 0;\n    coords.y = Up < 0 ? -HALF_PI : HALF_PI;\n  } else {\n    coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up));\n    coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B));\n    \n    if (coords.y === Infinity) {\n      throw new Error();\n    }\n        \n    coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u));\n  }\n  \n  coords.x += this.lam0;\n  \n  return coords;\n}\n\nexport var names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Two_Point_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"Oblique_Mercator\", \"omerc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {HALF_PI, EPSLN} from '../constants/values';\nexport function init() {\n  \n  //double lat0;                    /* the reference latitude               */\n  //double long0;                   /* the reference longitude              */\n  //double lat1;                    /* first standard parallel              */\n  //double lat2;                    /* second standard parallel             */\n  //double r_maj;                   /* major axis                           */\n  //double r_min;                   /* minor axis                           */\n  //double false_east;              /* x offset in meters                   */\n  //double false_north;             /* y offset in meters                   */\n  \n  //the above value can be set with proj4.defs\n  //example: proj4.defs(\"EPSG:2154\",\"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\n\n  if (!this.lat2) {\n    this.lat2 = this.lat1;\n  } //if lat2 is not defined\n  if (!this.k0) {\n    this.k0 = 1;\n  }\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  // Standard Parallels cannot be equal and on opposite sides of the equator\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n\n  var temp = this.b / this.a;\n  this.e = Math.sqrt(1 - temp * temp);\n\n  var sin1 = Math.sin(this.lat1);\n  var cos1 = Math.cos(this.lat1);\n  var ms1 = msfnz(this.e, sin1, cos1);\n  var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n  var sin2 = Math.sin(this.lat2);\n  var cos2 = Math.cos(this.lat2);\n  var ms2 = msfnz(this.e, sin2, cos2);\n  var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n  var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n    this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n  }\n  else {\n    this.ns = sin1;\n  }\n  if (isNaN(this.ns)) {\n    this.ns = sin1;\n  }\n  this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n  this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n  if (!this.title) {\n    this.title = \"Lambert Conformal Conic\";\n  }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n  var lon = p.x;\n  var lat = p.y;\n\n  // singular cases :\n  if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n    lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n  }\n\n  var con = Math.abs(Math.abs(lat) - HALF_PI);\n  var ts, rh1;\n  if (con > EPSLN) {\n    ts = tsfnz(this.e, lat, Math.sin(lat));\n    rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n  }\n  else {\n    con = lat * this.ns;\n    if (con <= 0) {\n      return null;\n    }\n    rh1 = 0;\n  }\n  var theta = this.ns * adjust_lon(lon - this.long0);\n  p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n  p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n  return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n  var rh1, con, ts;\n  var lat, lon;\n  var x = (p.x - this.x0) / this.k0;\n  var y = (this.rh - (p.y - this.y0) / this.k0);\n  if (this.ns > 0) {\n    rh1 = Math.sqrt(x * x + y * y);\n    con = 1;\n  }\n  else {\n    rh1 = -Math.sqrt(x * x + y * y);\n    con = -1;\n  }\n  var theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2((con * x), (con * y));\n  }\n  if ((rh1 !== 0) || (this.ns > 0)) {\n    con = 1 / this.ns;\n    ts = Math.pow((rh1 / (this.a * this.f0)), con);\n    lat = phi2z(this.e, ts);\n    if (lat === -9999) {\n      return null;\n    }\n  }\n  else {\n    lat = -HALF_PI;\n  }\n  lon = adjust_lon(theta / this.ns + this.long0);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\n  \"Lambert Tangential Conformal Conic Projection\",\n  \"Lambert_Conformal_Conic\",\n  \"Lambert_Conformal_Conic_1SP\",\n  \"Lambert_Conformal_Conic_2SP\",\n  \"lcc\"\n];\n\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n  this.a = 6377397.155;\n  this.es = 0.006674372230614;\n  this.e = Math.sqrt(this.es);\n  if (!this.lat0) {\n    this.lat0 = 0.863937979737193;\n  }\n  if (!this.long0) {\n    this.long0 = 0.7417649320975901 - 0.308341501185665;\n  }\n  /* if scale not set default to 0.9999 */\n  if (!this.k0) {\n    this.k0 = 0.9999;\n  }\n  this.s45 = 0.785398163397448; /* 45 */\n  this.s90 = 2 * this.s45;\n  this.fi0 = this.lat0;\n  this.e2 = this.es;\n  this.e = Math.sqrt(this.e2);\n  this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n  this.uq = 1.04216856380474;\n  this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n  this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n  this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n  this.k1 = this.k0;\n  this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n  this.s0 = 1.37008346281555;\n  this.n = Math.sin(this.s0);\n  this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n  this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n  var gfi, u, deltav, s, d, eps, ro;\n  var lon = p.x;\n  var lat = p.y;\n  var delta_lon = adjust_lon(lon - this.long0);\n  /* Transformation */\n  gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n  u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n  deltav = -delta_lon * this.alfa;\n  s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n  d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n  eps = this.n * d;\n  ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n  p.y = ro * Math.cos(eps) / 1;\n  p.x = ro * Math.sin(eps) / 1;\n\n  if (!this.czech) {\n    p.y *= -1;\n    p.x *= -1;\n  }\n  return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n  var u, deltav, s, d, eps, ro, fi1;\n  var ok;\n\n  /* Transformation */\n  /* revert y, x*/\n  var tmp = p.x;\n  p.x = p.y;\n  p.y = tmp;\n  if (!this.czech) {\n    p.y *= -1;\n    p.x *= -1;\n  }\n  ro = Math.sqrt(p.x * p.x + p.y * p.y);\n  eps = Math.atan2(p.y, p.x);\n  d = eps / Math.sin(this.s0);\n  s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n  u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n  deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n  p.x = this.long0 - deltav / this.alfa;\n  fi1 = u;\n  ok = 0;\n  var iter = 0;\n  do {\n    p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n    if (Math.abs(fi1 - p.y) < 0.0000000001) {\n      ok = 1;\n    }\n    fi1 = p.y;\n    iter += 1;\n  } while (ok === 0 && iter < 15);\n  if (iter >= 15) {\n    return null;\n  }\n\n  return (p);\n}\n\nexport var names = [\"Krovak\", \"krovak\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function(e0, e1, e2, e3, phi) {\n  return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}","export default function(x) {\n  return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}","export default function(x) {\n  return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}","export default function(x) {\n  return (0.05859375 * x * x * (1 + 0.75 * x));\n}","export default function(x) {\n  return (x * x * x * (35 / 3072));\n}","export default function(a, e, sinphi) {\n  var temp = e * sinphi;\n  return a / Math.sqrt(1 - temp * temp);\n}","import {HALF_PI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n  return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function(ml, e0, e1, e2, e3) {\n  var phi;\n  var dphi;\n\n  phi = ml / e0;\n  for (var i = 0; i < 15; i++) {\n    dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n\n  //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n  return NaN;\n}","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nexport function init() {\n  if (!this.sphere) {\n    this.e0 = e0fn(this.es);\n    this.e1 = e1fn(this.es);\n    this.e2 = e2fn(this.es);\n    this.e3 = e3fn(this.es);\n    this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n  }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n  -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n  /* Forward equations\n      -----------------*/\n  var x, y;\n  var lam = p.x;\n  var phi = p.y;\n  lam = adjust_lon(lam - this.long0);\n\n  if (this.sphere) {\n    x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n    y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n  }\n  else {\n    //ellipsoid\n    var sinphi = Math.sin(phi);\n    var cosphi = Math.cos(phi);\n    var nl = gN(this.a, this.e, sinphi);\n    var tl = Math.tan(phi) * Math.tan(phi);\n    var al = lam * Math.cos(phi);\n    var asq = al * al;\n    var cl = this.es * cosphi * cosphi / (1 - this.es);\n    var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n    x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n    y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n  }\n\n  p.x = x + this.x0;\n  p.y = y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  -----------------*/\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var x = p.x / this.a;\n  var y = p.y / this.a;\n  var phi, lam;\n\n  if (this.sphere) {\n    var dd = y + this.lat0;\n    phi = Math.asin(Math.sin(dd) * Math.cos(x));\n    lam = Math.atan2(Math.tan(x), Math.cos(dd));\n  }\n  else {\n    /* ellipsoid */\n    var ml1 = this.ml0 / this.a + y;\n    var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n    if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n      p.x = this.long0;\n      p.y = HALF_PI;\n      if (y < 0) {\n        p.y *= -1;\n      }\n      return p;\n    }\n    var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n    var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n    var tl1 = Math.pow(Math.tan(phi1), 2);\n    var dl = x * this.a / nl1;\n    var dsq = dl * dl;\n    phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n    lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n  }\n\n  p.x = adjust_lon(lam + this.long0);\n  p.y = adjust_lat(phi);\n  return p;\n\n}\n\nexport var names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function(eccent, sinphi) {\n  var con;\n  if (eccent > 1.0e-7) {\n    con = eccent * sinphi;\n    return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n  }\n  else {\n    return (2 * sinphi);\n  }\n}","\nimport {HALF_PI, EPSLN, FORTPI} from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/*\n  reference\n    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n  */\n\nexport var S_POLE = 1;\n\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n  ------------------------------------------------------*/\nexport function init() {\n  var t = Math.abs(this.lat0);\n  if (Math.abs(t - HALF_PI) < EPSLN) {\n    this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n  }\n  else if (Math.abs(t) < EPSLN) {\n    this.mode = this.EQUIT;\n  }\n  else {\n    this.mode = this.OBLIQ;\n  }\n  if (this.es > 0) {\n    var sinphi;\n\n    this.qp = qsfnz(this.e, 1);\n    this.mmf = 0.5 / (1 - this.es);\n    this.apa = authset(this.es);\n    switch (this.mode) {\n    case this.N_POLE:\n      this.dd = 1;\n      break;\n    case this.S_POLE:\n      this.dd = 1;\n      break;\n    case this.EQUIT:\n      this.rq = Math.sqrt(0.5 * this.qp);\n      this.dd = 1 / this.rq;\n      this.xmf = 1;\n      this.ymf = 0.5 * this.qp;\n      break;\n    case this.OBLIQ:\n      this.rq = Math.sqrt(0.5 * this.qp);\n      sinphi = Math.sin(this.lat0);\n      this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n      this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n      this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n      this.ymf = (this.xmf = this.rq) / this.dd;\n      this.xmf *= this.dd;\n      break;\n    }\n  }\n  else {\n    if (this.mode === this.OBLIQ) {\n      this.sinph0 = Math.sin(this.lat0);\n      this.cosph0 = Math.cos(this.lat0);\n    }\n  }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n  -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n  /* Forward equations\n      -----------------*/\n  var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n  var lam = p.x;\n  var phi = p.y;\n\n  lam = adjust_lon(lam - this.long0);\n  if (this.sphere) {\n    sinphi = Math.sin(phi);\n    cosphi = Math.cos(phi);\n    coslam = Math.cos(lam);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n      if (y <= EPSLN) {\n        return null;\n      }\n      y = Math.sqrt(2 / y);\n      x = y * cosphi * Math.sin(lam);\n      y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n    }\n    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n      if (this.mode === this.N_POLE) {\n        coslam = -coslam;\n      }\n      if (Math.abs(phi + this.lat0) < EPSLN) {\n        return null;\n      }\n      y = FORTPI - phi * 0.5;\n      y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n      x = y * Math.sin(lam);\n      y *= coslam;\n    }\n  }\n  else {\n    sinb = 0;\n    cosb = 0;\n    b = 0;\n    coslam = Math.cos(lam);\n    sinlam = Math.sin(lam);\n    sinphi = Math.sin(phi);\n    q = qsfnz(this.e, sinphi);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      sinb = q / this.qp;\n      cosb = Math.sqrt(1 - sinb * sinb);\n    }\n    switch (this.mode) {\n    case this.OBLIQ:\n      b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n      break;\n    case this.EQUIT:\n      b = 1 + cosb * coslam;\n      break;\n    case this.N_POLE:\n      b = HALF_PI + phi;\n      q = this.qp - q;\n      break;\n    case this.S_POLE:\n      b = phi - HALF_PI;\n      q = this.qp + q;\n      break;\n    }\n    if (Math.abs(b) < EPSLN) {\n      return null;\n    }\n    switch (this.mode) {\n    case this.OBLIQ:\n    case this.EQUIT:\n      b = Math.sqrt(2 / b);\n      if (this.mode === this.OBLIQ) {\n        y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n      }\n      else {\n        y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n      }\n      x = this.xmf * b * cosb * sinlam;\n      break;\n    case this.N_POLE:\n    case this.S_POLE:\n      if (q >= 0) {\n        x = (b = Math.sqrt(q)) * sinlam;\n        y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n      }\n      else {\n        x = y = 0;\n      }\n      break;\n    }\n  }\n\n  p.x = this.a * x + this.x0;\n  p.y = this.a * y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  -----------------*/\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var x = p.x / this.a;\n  var y = p.y / this.a;\n  var lam, phi, cCe, sCe, q, rho, ab;\n  if (this.sphere) {\n    var cosz = 0,\n      rh, sinz = 0;\n\n    rh = Math.sqrt(x * x + y * y);\n    phi = rh * 0.5;\n    if (phi > 1) {\n      return null;\n    }\n    phi = 2 * Math.asin(phi);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      sinz = Math.sin(phi);\n      cosz = Math.cos(phi);\n    }\n    switch (this.mode) {\n    case this.EQUIT:\n      phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n      x *= sinz;\n      y = cosz * rh;\n      break;\n    case this.OBLIQ:\n      phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n      x *= sinz * this.cosph0;\n      y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n      break;\n    case this.N_POLE:\n      y = -y;\n      phi = HALF_PI - phi;\n      break;\n    case this.S_POLE:\n      phi -= HALF_PI;\n      break;\n    }\n    lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n  }\n  else {\n    ab = 0;\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      x /= this.dd;\n      y *= this.dd;\n      rho = Math.sqrt(x * x + y * y);\n      if (rho < EPSLN) {\n        p.x = this.long0;\n        p.y = this.lat0;\n        return p;\n      }\n      sCe = 2 * Math.asin(0.5 * rho / this.rq);\n      cCe = Math.cos(sCe);\n      x *= (sCe = Math.sin(sCe));\n      if (this.mode === this.OBLIQ) {\n        ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n        q = this.qp * ab;\n        y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n      }\n      else {\n        ab = y * sCe / rho;\n        q = this.qp * ab;\n        y = rho * cCe;\n      }\n    }\n    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n      if (this.mode === this.N_POLE) {\n        y = -y;\n      }\n      q = (x * x + y * y);\n      if (!q) {\n        p.x = this.long0;\n        p.y = this.lat0;\n        return p;\n      }\n      ab = 1 - q / this.qp;\n      if (this.mode === this.S_POLE) {\n        ab = -ab;\n      }\n    }\n    lam = Math.atan2(x, y);\n    phi = authlat(Math.asin(ab), this.apa);\n  }\n\n  p.x = adjust_lon(this.long0 + lam);\n  p.y = phi;\n  return p;\n}\n\n/* determine latitude from authalic latitude */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n  var t;\n  var APA = [];\n  APA[0] = es * P00;\n  t = es * es;\n  APA[0] += t * P01;\n  APA[1] = t * P10;\n  t *= es;\n  APA[0] += t * P02;\n  APA[1] += t * P11;\n  APA[2] = t * P20;\n  return APA;\n}\n\nfunction authlat(beta, APA) {\n  var t = beta + beta;\n  return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n\nexport var names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  S_POLE: S_POLE,\n  N_POLE: N_POLE,\n  EQUIT: EQUIT,\n  OBLIQ: OBLIQ\n};\n","export default function(x) {\n  if (Math.abs(x) > 1) {\n    x = (x > 1) ? 1 : -1;\n  }\n  return Math.asin(x);\n}","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2);\n  this.e3 = Math.sqrt(this.es);\n\n  this.sin_po = Math.sin(this.lat1);\n  this.cos_po = Math.cos(this.lat1);\n  this.t1 = this.sin_po;\n  this.con = this.sin_po;\n  this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n  this.qs1 = qsfnz(this.e3, this.sin_po, 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  -------------------------------------------------------------------*/\nexport function forward(p) {\n\n  var lon = p.x;\n  var lat = p.y;\n\n  this.sin_phi = Math.sin(lat);\n  this.cos_phi = Math.cos(lat);\n\n  var qs = qsfnz(this.e3, this.sin_phi, 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\nexport function inverse(p) {\n  var rh1, qs, con, theta, lon, lat;\n\n  p.x -= this.x0;\n  p.y = this.rh - p.y + this.y0;\n  if (this.ns0 >= 0) {\n    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n    con = 1;\n  }\n  else {\n    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n    con = -1;\n  }\n  theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2(con * p.x, con * p.y);\n  }\n  con = rh1 * this.ns0 / this.a;\n  if (this.sphere) {\n    lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n  }\n  else {\n    qs = (this.c - con * con) / this.ns0;\n    lat = this.phi1z(this.e3, qs);\n  }\n\n  lon = adjust_lon(theta / this.ns0 + this.long0);\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n   Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexport function phi1z(eccent, qs) {\n  var sinphi, cosphi, con, com, dphi;\n  var phi = asinz(0.5 * qs);\n  if (eccent < EPSLN) {\n    return phi;\n  }\n\n  var eccnts = eccent * eccent;\n  for (var i = 1; i <= 25; i++) {\n    sinphi = Math.sin(phi);\n    cosphi = Math.cos(phi);\n    con = eccent * sinphi;\n    com = 1 - con * con;\n    dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n    phi = phi + dphi;\n    if (Math.abs(dphi) <= 1e-7) {\n      return phi;\n    }\n  }\n  return null;\n}\n\nexport var names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\n/*\n  reference:\n    Wolfram Mathworld \"Gnomonic Projection\"\n    http://mathworld.wolfram.com/GnomonicProjection.html\n    Accessed: 12th November 2009\n  */\nexport function init() {\n\n  /* Place parameters in static storage for common use\n      -------------------------------------------------*/\n  this.sin_p14 = Math.sin(this.lat0);\n  this.cos_p14 = Math.cos(this.lat0);\n  // Approximation for projecting points to the horizon (infinity)\n  this.infinity_dist = 1000 * this.a;\n  this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n    ---------------------------------------------------*/\nexport function forward(p) {\n  var sinphi, cosphi; /* sin and cos value        */\n  var dlon; /* delta longitude value      */\n  var coslon; /* cos of longitude        */\n  var ksp; /* scale factor          */\n  var g;\n  var x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      -----------------*/\n  dlon = adjust_lon(lon - this.long0);\n\n  sinphi = Math.sin(lat);\n  cosphi = Math.cos(lat);\n\n  coslon = Math.cos(dlon);\n  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n  ksp = 1;\n  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n    x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n  }\n  else {\n\n    // Point is in the opposing hemisphere and is unprojectable\n    // We still need to return a reasonable point, so we project\n    // to infinity, on a bearing\n    // equivalent to the northern hemisphere equivalent\n    // This is a reasonable approximation for short shapes and lines that\n    // straddle the horizon.\n\n    x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n    y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var rh; /* Rho */\n  var sinc, cosc;\n  var c;\n  var lon, lat;\n\n  /* Inverse equations\n      -----------------*/\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  p.x /= this.k0;\n  p.y /= this.k0;\n\n  if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n    c = Math.atan2(rh, this.rc);\n    sinc = Math.sin(c);\n    cosc = Math.cos(c);\n\n    lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n    lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n    lon = adjust_lon(this.long0 + lon);\n  }\n  else {\n    lat = this.phic0;\n    lon = 0;\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"gnom\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, q) {\n  var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n  if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n    if (q < 0) {\n      return (-1 * HALF_PI);\n    }\n    else {\n      return HALF_PI;\n    }\n  }\n  //var phi = 0.5* q/(1-eccent*eccent);\n  var phi = Math.asin(0.5 * q);\n  var dphi;\n  var sin_phi;\n  var cos_phi;\n  var con;\n  for (var i = 0; i < 30; i++) {\n    sin_phi = Math.sin(phi);\n    cos_phi = Math.cos(phi);\n    con = eccent * sin_phi;\n    dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n\n  //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n  return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/*\n  reference:\n    \"Cartographic Projection Procedures for the UNIX Environment-\n    A User's Manual\" by Gerald I. Evenden,\n    USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexport function init() {\n  //no-op\n  if (!this.sphere) {\n    this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n  }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n    ------------------------------------------------------------*/\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var x, y;\n  /* Forward equations\n      -----------------*/\n  var dlon = adjust_lon(lon - this.long0);\n  if (this.sphere) {\n    x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n    y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n  }\n  else {\n    var qs = qsfnz(this.e, Math.sin(lat));\n    x = this.x0 + this.a * this.k0 * dlon;\n    y = this.y0 + this.a * qs * 0.5 / this.k0;\n  }\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n    ------------------------------------------------------------*/\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var lon, lat;\n\n  if (this.sphere) {\n    lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n    lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n  }\n  else {\n    lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n    lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"cea\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.lat0 = this.lat0 || 0;\n  this.long0 = this.long0 || 0;\n  this.lat_ts = this.lat_ts || 0;\n  this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n  this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n  var lon = p.x;\n  var lat = p.y;\n\n  var dlon = adjust_lon(lon - this.long0);\n  var dlat = adjust_lat(lat - this.lat0);\n  p.x = this.x0 + (this.a * dlon * this.rc);\n  p.y = this.y0 + (this.a * dlat);\n  return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n  var x = p.x;\n  var y = p.y;\n\n  p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n  p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n  return p;\n}\n\nexport var names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport {EPSLN} from '../constants/values';\n\nimport gN from '../common/gN';\nvar MAX_ITER = 20;\n\nexport function init() {\n  /* Place parameters in static storage for common use\n      -------------------------------------------------*/\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n  this.e = Math.sqrt(this.es);\n  this.e0 = e0fn(this.es);\n  this.e1 = e1fn(this.es);\n  this.e2 = e2fn(this.es);\n  this.e3 = e3fn(this.es);\n  this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n    ---------------------------------------------------*/\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var x, y, el;\n  var dlon = adjust_lon(lon - this.long0);\n  el = dlon * Math.sin(lat);\n  if (this.sphere) {\n    if (Math.abs(lat) <= EPSLN) {\n      x = this.a * dlon;\n      y = -1 * this.a * this.lat0;\n    }\n    else {\n      x = this.a * Math.sin(el) / Math.tan(lat);\n      y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n    }\n  }\n  else {\n    if (Math.abs(lat) <= EPSLN) {\n      x = this.a * dlon;\n      y = -1 * this.ml0;\n    }\n    else {\n      var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n      x = nl * Math.sin(el);\n      y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n    }\n\n  }\n  p.x = x + this.x0;\n  p.y = y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  -----------------*/\nexport function inverse(p) {\n  var lon, lat, x, y, i;\n  var al, bl;\n  var phi, dphi;\n  x = p.x - this.x0;\n  y = p.y - this.y0;\n\n  if (this.sphere) {\n    if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n      lon = adjust_lon(x / this.a + this.long0);\n      lat = 0;\n    }\n    else {\n      al = this.lat0 + y / this.a;\n      bl = x * x / this.a / this.a + al * al;\n      phi = al;\n      var tanphi;\n      for (i = MAX_ITER; i; --i) {\n        tanphi = Math.tan(phi);\n        dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n        phi += dphi;\n        if (Math.abs(dphi) <= EPSLN) {\n          lat = phi;\n          break;\n        }\n      }\n      lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n    }\n  }\n  else {\n    if (Math.abs(y + this.ml0) <= EPSLN) {\n      lat = 0;\n      lon = adjust_lon(this.long0 + x / this.a);\n    }\n    else {\n\n      al = (this.ml0 + y) / this.a;\n      bl = x * x / this.a / this.a + al * al;\n      phi = al;\n      var cl, mln, mlnp, ma;\n      var con;\n      for (i = MAX_ITER; i; --i) {\n        con = this.e * Math.sin(phi);\n        cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n        mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n        mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n        ma = mln / this.a;\n        dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n        phi -= dphi;\n        if (Math.abs(dphi) <= EPSLN) {\n          lat = phi;\n          break;\n        }\n      }\n\n      //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n      cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n      lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n    }\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Polyconic\", \"poly\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import {SEC_TO_RAD} from '../constants/values';\n\n/*\n  reference\n    Department of Land and Survey Technical Circular 1973/32\n      http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n    OSG Technical Report 4.1\n      http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n  */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n *     0 -> km accuracy\n *     1 -> m accuracy -- suitable for most mapping applications\n *     2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n  this.A = [];\n  this.A[1] = 0.6399175073;\n  this.A[2] = -0.1358797613;\n  this.A[3] = 0.063294409;\n  this.A[4] = -0.02526853;\n  this.A[5] = 0.0117879;\n  this.A[6] = -0.0055161;\n  this.A[7] = 0.0026906;\n  this.A[8] = -0.001333;\n  this.A[9] = 0.00067;\n  this.A[10] = -0.00034;\n\n  this.B_re = [];\n  this.B_im = [];\n  this.B_re[1] = 0.7557853228;\n  this.B_im[1] = 0;\n  this.B_re[2] = 0.249204646;\n  this.B_im[2] = 0.003371507;\n  this.B_re[3] = -0.001541739;\n  this.B_im[3] = 0.041058560;\n  this.B_re[4] = -0.10162907;\n  this.B_im[4] = 0.01727609;\n  this.B_re[5] = -0.26623489;\n  this.B_im[5] = -0.36249218;\n  this.B_re[6] = -0.6870983;\n  this.B_im[6] = -1.1651967;\n\n  this.C_re = [];\n  this.C_im = [];\n  this.C_re[1] = 1.3231270439;\n  this.C_im[1] = 0;\n  this.C_re[2] = -0.577245789;\n  this.C_im[2] = -0.007809598;\n  this.C_re[3] = 0.508307513;\n  this.C_im[3] = -0.112208952;\n  this.C_re[4] = -0.15094762;\n  this.C_im[4] = 0.18200602;\n  this.C_re[5] = 1.01418179;\n  this.C_im[5] = 1.64497696;\n  this.C_re[6] = 1.9660549;\n  this.C_im[6] = 2.5127645;\n\n  this.D = [];\n  this.D[1] = 1.5627014243;\n  this.D[2] = 0.5185406398;\n  this.D[3] = -0.03333098;\n  this.D[4] = -0.1052906;\n  this.D[5] = -0.0368594;\n  this.D[6] = 0.007317;\n  this.D[7] = 0.01220;\n  this.D[8] = 0.00394;\n  this.D[9] = -0.0013;\n}\n\n/**\n    New Zealand Map Grid Forward  - long/lat to x/y\n    long/lat in radians\n  */\nexport function forward(p) {\n  var n;\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lat = lat - this.lat0;\n  var delta_lon = lon - this.long0;\n\n  // 1. Calculate d_phi and d_psi    ...                          // and d_lambda\n  // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n  var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n  var d_lambda = delta_lon;\n  var d_phi_n = 1; // d_phi^0\n\n  var d_psi = 0;\n  for (n = 1; n <= 10; n++) {\n    d_phi_n = d_phi_n * d_phi;\n    d_psi = d_psi + this.A[n] * d_phi_n;\n  }\n\n  // 2. Calculate theta\n  var th_re = d_psi;\n  var th_im = d_lambda;\n\n  // 3. Calculate z\n  var th_n_re = 1;\n  var th_n_im = 0; // theta^0\n  var th_n_re1;\n  var th_n_im1;\n\n  var z_re = 0;\n  var z_im = 0;\n  for (n = 1; n <= 6; n++) {\n    th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n    th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n    th_n_re = th_n_re1;\n    th_n_im = th_n_im1;\n    z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n    z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n  }\n\n  // 4. Calculate easting and northing\n  p.x = (z_im * this.a) + this.x0;\n  p.y = (z_re * this.a) + this.y0;\n\n  return p;\n}\n\n/**\n    New Zealand Map Grid Inverse  -  x/y to long/lat\n  */\nexport function inverse(p) {\n  var n;\n  var x = p.x;\n  var y = p.y;\n\n  var delta_x = x - this.x0;\n  var delta_y = y - this.y0;\n\n  // 1. Calculate z\n  var z_re = delta_y / this.a;\n  var z_im = delta_x / this.a;\n\n  // 2a. Calculate theta - first approximation gives km accuracy\n  var z_n_re = 1;\n  var z_n_im = 0; // z^0\n  var z_n_re1;\n  var z_n_im1;\n\n  var th_re = 0;\n  var th_im = 0;\n  for (n = 1; n <= 6; n++) {\n    z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n    z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n    z_n_re = z_n_re1;\n    z_n_im = z_n_im1;\n    th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n    th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n  }\n\n  // 2b. Iterate to refine the accuracy of the calculation\n  //        0 iterations gives km accuracy\n  //        1 iteration gives m accuracy -- good enough for most mapping applications\n  //        2 iterations bives mm accuracy\n  for (var i = 0; i < this.iterations; i++) {\n    var th_n_re = th_re;\n    var th_n_im = th_im;\n    var th_n_re1;\n    var th_n_im1;\n\n    var num_re = z_re;\n    var num_im = z_im;\n    for (n = 2; n <= 6; n++) {\n      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n      th_n_re = th_n_re1;\n      th_n_im = th_n_im1;\n      num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n      num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n    }\n\n    th_n_re = 1;\n    th_n_im = 0;\n    var den_re = this.B_re[1];\n    var den_im = this.B_im[1];\n    for (n = 2; n <= 6; n++) {\n      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n      th_n_re = th_n_re1;\n      th_n_im = th_n_im1;\n      den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n      den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n    }\n\n    // Complex division\n    var den2 = den_re * den_re + den_im * den_im;\n    th_re = (num_re * den_re + num_im * den_im) / den2;\n    th_im = (num_im * den_re - num_re * den_im) / den2;\n  }\n\n  // 3. Calculate d_phi              ...                                    // and d_lambda\n  var d_psi = th_re;\n  var d_lambda = th_im;\n  var d_psi_n = 1; // d_psi^0\n\n  var d_phi = 0;\n  for (n = 1; n <= 9; n++) {\n    d_psi_n = d_psi_n * d_psi;\n    d_phi = d_phi + this.D[n] * d_psi_n;\n  }\n\n  // 4. Calculate latitude and longitude\n  // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n  var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n  var lon = this.long0 + d_lambda;\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = [\"New_Zealand_Map_Grid\", \"nzmg\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n  reference\n    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n  */\n\n\n/* Initialize the Miller Cylindrical projection\n  -------------------------------------------*/\nexport function init() {\n  //no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n    ------------------------------------------------------------*/\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      -----------------*/\n  var dlon = adjust_lon(lon - this.long0);\n  var x = this.x0 + this.a * dlon;\n  var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n    ------------------------------------------------------------*/\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n\n  var lon = adjust_lon(this.long0 + p.x / this.a);\n  var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Miller_Cylindrical\", \"mill\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n\nexport function init() {\n  /* Place parameters in static storage for common use\n    -------------------------------------------------*/\n\n\n  if (!this.sphere) {\n    this.en = pj_enfn(this.es);\n  }\n  else {\n    this.n = 1;\n    this.m = 0;\n    this.es = 0;\n    this.C_y = Math.sqrt((this.m + 1) / this.n);\n    this.C_x = this.C_y / (this.m + 1);\n  }\n\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n  -----------------------------------------------------*/\nexport function forward(p) {\n  var x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n    -----------------*/\n  lon = adjust_lon(lon - this.long0);\n\n  if (this.sphere) {\n    if (!this.m) {\n      lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n    }\n    else {\n      var k = this.n * Math.sin(lat);\n      for (var i = MAX_ITER; i; --i) {\n        var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n        lat -= V;\n        if (Math.abs(V) < EPSLN) {\n          break;\n        }\n      }\n    }\n    x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n    y = this.a * this.C_y * lat;\n\n  }\n  else {\n\n    var s = Math.sin(lat);\n    var c = Math.cos(lat);\n    y = this.a * pj_mlfn(lat, s, c, this.en);\n    x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n  }\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var lat, temp, lon, s;\n\n  p.x -= this.x0;\n  lon = p.x / this.a;\n  p.y -= this.y0;\n  lat = p.y / this.a;\n\n  if (this.sphere) {\n    lat /= this.C_y;\n    lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n    if (this.m) {\n      lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n    }\n    else if (this.n !== 1) {\n      lat = asinz(Math.sin(lat) / this.n);\n    }\n    lon = adjust_lon(lon + this.long0);\n    lat = adjust_lat(lat);\n  }\n  else {\n    lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n    s = Math.abs(lat);\n    if (s < HALF_PI) {\n      s = Math.sin(lat);\n      temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n      //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n      lon = adjust_lon(temp);\n    }\n    else if ((s - EPSLN) < HALF_PI) {\n      lon = this.long0;\n    }\n  }\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Sinusoidal\", \"sinu\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nexport function init() {}\nimport {EPSLN} from '../constants/values';\n/* Mollweide forward equations--mapping lat,long to x,y\n    ----------------------------------------------------*/\nexport function forward(p) {\n\n  /* Forward equations\n      -----------------*/\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lon = adjust_lon(lon - this.long0);\n  var theta = lat;\n  var con = Math.PI * Math.sin(lat);\n\n  /* Iterate using the Newton-Raphson method to find theta\n      -----------------------------------------------------*/\n  while (true) {\n    var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n    theta += delta_theta;\n    if (Math.abs(delta_theta) < EPSLN) {\n      break;\n    }\n  }\n  theta /= 2;\n\n  /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n       this is done here because of precision problems with \"cos(theta)\"\n       --------------------------------------------------------------------------*/\n  if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n    delta_lon = 0;\n  }\n  var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n  var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var theta;\n  var arg;\n\n  /* Inverse equations\n      -----------------*/\n  p.x -= this.x0;\n  p.y -= this.y0;\n  arg = p.y / (1.4142135623731 * this.a);\n\n  /* Because of division by zero problems, 'arg' can not be 1.  Therefore\n       a number very close to one is used instead.\n       -------------------------------------------------------------------*/\n  if (Math.abs(arg) > 0.999999999999) {\n    arg = 0.999999999999;\n  }\n  theta = Math.asin(arg);\n  var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n  if (lon < (-Math.PI)) {\n    lon = -Math.PI;\n  }\n  if (lon > Math.PI) {\n    lon = Math.PI;\n  }\n  arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n  if (Math.abs(arg) > 1) {\n    arg = 1;\n  }\n  var lat = Math.asin(arg);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Mollweide\", \"moll\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n  /* Place parameters in static storage for common use\n      -------------------------------------------------*/\n  // Standard Parallels cannot be equal and on opposite sides of the equator\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n  this.lat2 = this.lat2 || this.lat1;\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2);\n  this.e = Math.sqrt(this.es);\n  this.e0 = e0fn(this.es);\n  this.e1 = e1fn(this.es);\n  this.e2 = e2fn(this.es);\n  this.e3 = e3fn(this.es);\n\n  this.sinphi = Math.sin(this.lat1);\n  this.cosphi = Math.cos(this.lat1);\n\n  this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n  this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n  if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n    this.ns = this.sinphi;\n  }\n  else {\n    this.sinphi = Math.sin(this.lat2);\n    this.cosphi = Math.cos(this.lat2);\n    this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n    this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n    this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n  }\n  this.g = this.ml1 + this.ms1 / this.ns;\n  this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n  this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n  -----------------------------------------------------------*/\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var rh1;\n\n  /* Forward equations\n      -----------------*/\n  if (this.sphere) {\n    rh1 = this.a * (this.g - lat);\n  }\n  else {\n    var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n    rh1 = this.a * (this.g - ml);\n  }\n  var theta = this.ns * adjust_lon(lon - this.long0);\n  var x = this.x0 + rh1 * Math.sin(theta);\n  var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Inverse equations\n  -----------------*/\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y = this.rh - p.y + this.y0;\n  var con, rh1, lat, lon;\n  if (this.ns >= 0) {\n    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n    con = 1;\n  }\n  else {\n    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n    con = -1;\n  }\n  var theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2(con * p.x, con * p.y);\n  }\n\n  if (this.sphere) {\n    lon = adjust_lon(this.long0 + theta / this.ns);\n    lat = adjust_lat(this.g - rh1 / this.a);\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  else {\n    var ml = this.g - rh1 / this.a;\n    lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n    lon = adjust_lon(this.long0 + theta / this.ns);\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n\n}\n\nexport var names = [\"Equidistant_Conic\", \"eqdc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/* Initialize the Van Der Grinten projection\n  ----------------------------------------*/\nexport function init() {\n  //this.R = 6370997; //Radius of earth\n  this.R = this.a;\n}\n\nexport function forward(p) {\n\n  var lon = p.x;\n  var lat = p.y;\n\n  /* Forward equations\n    -----------------*/\n  var dlon = adjust_lon(lon - this.long0);\n  var x, y;\n\n  if (Math.abs(lat) <= EPSLN) {\n    x = this.x0 + this.R * dlon;\n    y = this.y0;\n  }\n  var theta = asinz(2 * Math.abs(lat / Math.PI));\n  if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n    x = this.x0;\n    if (lat >= 0) {\n      y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n    }\n    else {\n      y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n    }\n    //  return(OK);\n  }\n  var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n  var asq = al * al;\n  var sinth = Math.sin(theta);\n  var costh = Math.cos(theta);\n\n  var g = costh / (sinth + costh - 1);\n  var gsq = g * g;\n  var m = g * (2 / sinth - 1);\n  var msq = m * m;\n  var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n  if (dlon < 0) {\n    con = -con;\n  }\n  x = this.x0 + con;\n  //con = Math.abs(con / (Math.PI * this.R));\n  var q = asq + g;\n  con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n  if (lat >= 0) {\n    //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n    y = this.y0 + con;\n  }\n  else {\n    //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n    y = this.y0 - con;\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n  ---------------------------------------------------------*/\nexport function inverse(p) {\n  var lon, lat;\n  var xx, yy, xys, c1, c2, c3;\n  var a1;\n  var m1;\n  var con;\n  var th1;\n  var d;\n\n  /* inverse equations\n    -----------------*/\n  p.x -= this.x0;\n  p.y -= this.y0;\n  con = Math.PI * this.R;\n  xx = p.x / con;\n  yy = p.y / con;\n  xys = xx * xx + yy * yy;\n  c1 = -Math.abs(yy) * (1 + xys);\n  c2 = c1 - 2 * yy * yy + xx * xx;\n  c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n  d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n  a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n  m1 = 2 * Math.sqrt(-a1 / 3);\n  con = ((3 * d) / a1) / m1;\n  if (Math.abs(con) > 1) {\n    if (con >= 0) {\n      con = 1;\n    }\n    else {\n      con = -1;\n    }\n  }\n  th1 = Math.acos(con) / 3;\n  if (p.y >= 0) {\n    lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n  }\n  else {\n    lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n  }\n\n  if (Math.abs(xx) < EPSLN) {\n    lon = this.long0;\n  }\n  else {\n    lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\n\n\n\nexport function init() {\n  this.sin_p12 = Math.sin(this.lat0);\n  this.cos_p12 = Math.cos(this.lat0);\n}\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var sinphi = Math.sin(p.y);\n  var cosphi = Math.cos(p.y);\n  var dlon = adjust_lon(lon - this.long0);\n  var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n  if (this.sphere) {\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      //North Pole case\n      p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n      p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n      return p;\n    }\n    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      //South Pole case\n      p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n      p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n      return p;\n    }\n    else {\n      //default case\n      cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n      c = Math.acos(cos_c);\n      kp = c ? c / Math.sin(c) : 1;\n      p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n      p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n      return p;\n    }\n  }\n  else {\n    e0 = e0fn(this.es);\n    e1 = e1fn(this.es);\n    e2 = e2fn(this.es);\n    e3 = e3fn(this.es);\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      //North Pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n      p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n      p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n      return p;\n    }\n    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      //South Pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n      p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n      p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n      return p;\n    }\n    else {\n      //Default case\n      tanphi = sinphi / cosphi;\n      Nl1 = gN(this.a, this.e, this.sin_p12);\n      Nl = gN(this.a, this.e, sinphi);\n      psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n      Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n      if (Az === 0) {\n        s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n      }\n      else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n        s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n      }\n      else {\n        s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n      }\n      G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n      H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n      GH = G * H;\n      Hs = H * H;\n      s2 = s * s;\n      s3 = s2 * s;\n      s4 = s3 * s;\n      s5 = s4 * s;\n      c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n      p.x = this.x0 + c * Math.sin(Az);\n      p.y = this.y0 + c * Math.cos(Az);\n      return p;\n    }\n  }\n\n\n}\n\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;\n  if (this.sphere) {\n    rh = Math.sqrt(p.x * p.x + p.y * p.y);\n    if (rh > (2 * HALF_PI * this.a)) {\n      return;\n    }\n    z = rh / this.a;\n\n    sinz = Math.sin(z);\n    cosz = Math.cos(z);\n\n    lon = this.long0;\n    if (Math.abs(rh) <= EPSLN) {\n      lat = this.lat0;\n    }\n    else {\n      lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n      con = Math.abs(this.lat0) - HALF_PI;\n      if (Math.abs(con) <= EPSLN) {\n        if (this.lat0 >= 0) {\n          lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n        }\n        else {\n          lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n        }\n      }\n      else {\n        /*con = cosz - this.sin_p12 * Math.sin(lat);\n        if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n          //no-op, just keep the lon value as is\n        } else {\n          var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n          lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n        }*/\n        lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n      }\n    }\n\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  else {\n    e0 = e0fn(this.es);\n    e1 = e1fn(this.es);\n    e2 = e2fn(this.es);\n    e3 = e3fn(this.es);\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      //North pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n      M = Mlp - rh;\n      lat = imlfn(M / this.a, e0, e1, e2, e3);\n      lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n      p.x = lon;\n      p.y = lat;\n      return p;\n    }\n    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      //South pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n      M = rh - Mlp;\n\n      lat = imlfn(M / this.a, e0, e1, e2, e3);\n      lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n      p.x = lon;\n      p.y = lat;\n      return p;\n    }\n    else {\n      //default case\n      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n      Az = Math.atan2(p.x, p.y);\n      N1 = gN(this.a, this.e, this.sin_p12);\n      cosAz = Math.cos(Az);\n      tmp = this.e * this.cos_p12 * cosAz;\n      A = -tmp * tmp / (1 - this.es);\n      B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n      D = rh / N1;\n      Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n      F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n      psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n      lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n      sinpsi = Math.sin(psi);\n      lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));\n      p.x = lon;\n      p.y = lat;\n      return p;\n    }\n  }\n\n}\n\nexport var names = [\"Azimuthal_Equidistant\", \"aeqd\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nexport function init() {\n  //double temp;      /* temporary variable    */\n\n  /* Place parameters in static storage for common use\n      -------------------------------------------------*/\n  this.sin_p14 = Math.sin(this.lat0);\n  this.cos_p14 = Math.cos(this.lat0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n    ---------------------------------------------------*/\nexport function forward(p) {\n  var sinphi, cosphi; /* sin and cos value        */\n  var dlon; /* delta longitude value      */\n  var coslon; /* cos of longitude        */\n  var ksp; /* scale factor          */\n  var g, x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      -----------------*/\n  dlon = adjust_lon(lon - this.long0);\n\n  sinphi = Math.sin(lat);\n  cosphi = Math.cos(lat);\n\n  coslon = Math.cos(dlon);\n  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n  ksp = 1;\n  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n    x = this.a * ksp * cosphi * Math.sin(dlon);\n    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var rh; /* height above ellipsoid      */\n  var z; /* angle          */\n  var sinz, cosz; /* sin of z and cos of z      */\n  var con;\n  var lon, lat;\n  /* Inverse equations\n      -----------------*/\n  p.x -= this.x0;\n  p.y -= this.y0;\n  rh = Math.sqrt(p.x * p.x + p.y * p.y);\n  z = asinz(rh / this.a);\n\n  sinz = Math.sin(z);\n  cosz = Math.cos(z);\n\n  lon = this.long0;\n  if (Math.abs(rh) <= EPSLN) {\n    lat = this.lat0;\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n  con = Math.abs(this.lat0) - HALF_PI;\n  if (Math.abs(con) <= EPSLN) {\n    if (this.lat0 >= 0) {\n      lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n    }\n    else {\n      lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n    }\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\"ortho\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport {EPSLN, TWO_PI, SPI, HALF_PI, FORTPI} from '../constants/values';\n\n/* constants */\nvar FACE_ENUM = {\n    FRONT: 1,\n    RIGHT: 2,\n    BACK: 3,\n    LEFT: 4,\n    TOP: 5,\n    BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n    AREA_0: 1,\n    AREA_1: 2,\n    AREA_2: 3,\n    AREA_3: 4\n};\n\nexport function init() {\n\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.lat0 = this.lat0 || 0;\n  this.long0 = this.long0 || 0;\n  this.lat_ts = this.lat_ts || 0;\n  this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n  /* Determine the cube face from the center of projection. */\n  if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n    this.face = FACE_ENUM.TOP;\n  } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n    this.face = FACE_ENUM.BOTTOM;\n  } else if (Math.abs(this.long0) <= FORTPI) {\n    this.face = FACE_ENUM.FRONT;\n  } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n    this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n  } else {\n    this.face = FACE_ENUM.BACK;\n  }\n\n  /* Fill in useful values for the ellipsoid <-> sphere shift\n   * described in [LK12]. */\n  if (this.es !== 0) {\n    this.one_minus_f = 1 - (this.a - this.b) / this.a;\n    this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n  }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n  var xy = {x: 0, y: 0};\n  var lat, lon;\n  var theta, phi;\n  var t, mu;\n  /* nu; */\n  var area = {value: 0};\n\n  // move lon according to projection's lon\n  p.x -= this.long0;\n\n  /* Convert the geodetic latitude to a geocentric latitude.\n   * This corresponds to the shift from the ellipsoid to the sphere\n   * described in [LK12]. */\n  if (this.es !== 0) {//if (P->es != 0) {\n    lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n  } else {\n    lat = p.y;\n  }\n\n  /* Convert the input lat, lon into theta, phi as used by QSC.\n   * This depends on the cube face and the area on it.\n   * For the top and bottom face, we can compute theta and phi\n   * directly from phi, lam. For the other faces, we must use\n   * unit sphere cartesian coordinates as an intermediate step. */\n  lon = p.x; //lon = lp.lam;\n  if (this.face === FACE_ENUM.TOP) {\n    phi = HALF_PI - lat;\n    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n      theta = lon - HALF_PI;\n    } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_1;\n      theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n    } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = lon + HALF_PI;\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta = lon;\n    }\n  } else if (this.face === FACE_ENUM.BOTTOM) {\n    phi = HALF_PI + lat;\n    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n      theta = -lon + HALF_PI;\n    } else if (lon < FORTPI && lon >= -FORTPI) {\n      area.value = AREA_ENUM.AREA_1;\n      theta = -lon;\n    } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = -lon - HALF_PI;\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n    }\n  } else {\n    var q, r, s;\n    var sinlat, coslat;\n    var sinlon, coslon;\n\n    if (this.face === FACE_ENUM.RIGHT) {\n      lon = qsc_shift_lon_origin(lon, +HALF_PI);\n    } else if (this.face === FACE_ENUM.BACK) {\n      lon = qsc_shift_lon_origin(lon, +SPI);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      lon = qsc_shift_lon_origin(lon, -HALF_PI);\n    }\n    sinlat = Math.sin(lat);\n    coslat = Math.cos(lat);\n    sinlon = Math.sin(lon);\n    coslon = Math.cos(lon);\n    q = coslat * coslon;\n    r = coslat * sinlon;\n    s = sinlat;\n\n    if (this.face === FACE_ENUM.FRONT) {\n      phi = Math.acos(q);\n      theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n    } else if (this.face === FACE_ENUM.RIGHT) {\n      phi = Math.acos(r);\n      theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n    } else if (this.face === FACE_ENUM.BACK) {\n      phi = Math.acos(-q);\n      theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      phi = Math.acos(-r);\n      theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n    } else {\n      /* Impossible */\n      phi = theta = 0;\n      area.value = AREA_ENUM.AREA_0;\n    }\n  }\n\n  /* Compute mu and nu for the area of definition.\n   * For mu, see Eq. (3-21) in [OL76], but note the typos:\n   * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n  mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n  t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n  /* Apply the result to the real area. */\n  if (area.value === AREA_ENUM.AREA_1) {\n    mu += HALF_PI;\n  } else if (area.value === AREA_ENUM.AREA_2) {\n    mu += SPI;\n  } else if (area.value === AREA_ENUM.AREA_3) {\n    mu += 1.5 * SPI;\n  }\n\n  /* Now compute x, y from mu and nu */\n  xy.x = t * Math.cos(mu);\n  xy.y = t * Math.sin(mu);\n  xy.x = xy.x * this.a + this.x0;\n  xy.y = xy.y * this.a + this.y0;\n\n  p.x = xy.x;\n  p.y = xy.y;\n  return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n  var lp = {lam: 0, phi: 0};\n  var mu, nu, cosmu, tannu;\n  var tantheta, theta, cosphi, phi;\n  var t;\n  var area = {value: 0};\n\n  /* de-offset */\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  /* Convert the input x, y to the mu and nu angles as used by QSC.\n   * This depends on the area of the cube face. */\n  nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n  mu = Math.atan2(p.y, p.x);\n  if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n    area.value = AREA_ENUM.AREA_0;\n  } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n    area.value = AREA_ENUM.AREA_1;\n    mu -= HALF_PI;\n  } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n    area.value = AREA_ENUM.AREA_2;\n    mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n  } else {\n    area.value = AREA_ENUM.AREA_3;\n    mu += HALF_PI;\n  }\n\n  /* Compute phi and theta for the area of definition.\n   * The inverse projection is not described in the original paper, but some\n   * good hints can be found here (as of 2011-12-14):\n   * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n   * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n  t = (SPI / 12) * Math.tan(mu);\n  tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n  theta = Math.atan(tantheta);\n  cosmu = Math.cos(mu);\n  tannu = Math.tan(nu);\n  cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n  if (cosphi < -1) {\n    cosphi = -1;\n  } else if (cosphi > +1) {\n    cosphi = +1;\n  }\n\n  /* Apply the result to the real area on the cube face.\n   * For the top and bottom face, we can compute phi and lam directly.\n   * For the other faces, we must use unit sphere cartesian coordinates\n   * as an intermediate step. */\n  if (this.face === FACE_ENUM.TOP) {\n    phi = Math.acos(cosphi);\n    lp.phi = HALF_PI - phi;\n    if (area.value === AREA_ENUM.AREA_0) {\n      lp.lam = theta + HALF_PI;\n    } else if (area.value === AREA_ENUM.AREA_1) {\n      lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      lp.lam = theta - HALF_PI;\n    } else /* area.value == AREA_ENUM.AREA_3 */ {\n      lp.lam = theta;\n    }\n  } else if (this.face === FACE_ENUM.BOTTOM) {\n    phi = Math.acos(cosphi);\n    lp.phi = phi - HALF_PI;\n    if (area.value === AREA_ENUM.AREA_0) {\n      lp.lam = -theta + HALF_PI;\n    } else if (area.value === AREA_ENUM.AREA_1) {\n      lp.lam = -theta;\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      lp.lam = -theta - HALF_PI;\n    } else /* area.value == AREA_ENUM.AREA_3 */ {\n      lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n    }\n  } else {\n    /* Compute phi and lam via cartesian unit sphere coordinates. */\n    var q, r, s;\n    q = cosphi;\n    t = q * q;\n    if (t >= 1) {\n      s = 0;\n    } else {\n      s = Math.sqrt(1 - t) * Math.sin(theta);\n    }\n    t += s * s;\n    if (t >= 1) {\n      r = 0;\n    } else {\n      r = Math.sqrt(1 - t);\n    }\n    /* Rotate q,r,s into the correct area. */\n    if (area.value === AREA_ENUM.AREA_1) {\n      t = r;\n      r = -s;\n      s = t;\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      r = -r;\n      s = -s;\n    } else if (area.value === AREA_ENUM.AREA_3) {\n      t = r;\n      r = s;\n      s = -t;\n    }\n    /* Rotate q,r,s into the correct cube face. */\n    if (this.face === FACE_ENUM.RIGHT) {\n      t = q;\n      q = -r;\n      r = t;\n    } else if (this.face === FACE_ENUM.BACK) {\n      q = -q;\n      r = -r;\n    } else if (this.face === FACE_ENUM.LEFT) {\n      t = q;\n      q = r;\n      r = -t;\n    }\n    /* Now compute phi and lam from the unit sphere coordinates. */\n    lp.phi = Math.acos(-s) - HALF_PI;\n    lp.lam = Math.atan2(r, q);\n    if (this.face === FACE_ENUM.RIGHT) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n    } else if (this.face === FACE_ENUM.BACK) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n    }\n  }\n\n  /* Apply the shift from the sphere to the ellipsoid as described\n   * in [LK12]. */\n  if (this.es !== 0) {\n    var invert_sign;\n    var tanphi, xa;\n    invert_sign = (lp.phi < 0 ? 1 : 0);\n    tanphi = Math.tan(lp.phi);\n    xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n    lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n    if (invert_sign) {\n      lp.phi = -lp.phi;\n    }\n  }\n\n  lp.lam += this.long0;\n  p.x = lp.lam;\n  p.y = lp.phi;\n  return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n  var theta;\n  if (phi < EPSLN) {\n    area.value = AREA_ENUM.AREA_0;\n    theta = 0.0;\n  } else {\n    theta = Math.atan2(y, x);\n    if (Math.abs(theta) <= FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n    } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_1;\n      theta -= HALF_PI;\n    } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta += HALF_PI;\n    }\n  }\n  return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n  var slon = lon + offset;\n  if (slon < -SPI) {\n    slon += TWO_PI;\n  } else if (slon > +SPI) {\n    slon -= TWO_PI;\n  }\n  return slon;\n}\n\nexport var names = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport {HALF_PI, D2R, R2D, EPSLN} from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n    [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n    [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n    [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n    [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n    [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n    [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n    [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n    [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n    [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n    [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n    [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n    [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n    [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n    [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n    [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n    [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n    [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n    [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n    [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n    [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n    [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n    [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n    [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n    [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n    [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n    [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n    [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n    [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n    [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n    [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n    [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n    [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n    [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n    [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n    [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n    [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n    [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n    [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D/5; // rad to 5-degree interval\nvar RC1 = 1/C1;\nvar NODES = 18;\n\nvar poly3_val = function(coefs, x) {\n    return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function(coefs, x) {\n    return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n    var x = start;\n    for (; iters; --iters) {\n        var upd = f_df(x);\n        x -= upd;\n        if (Math.abs(upd) < max_err) {\n            break;\n        }\n    }\n    return x;\n}\n\nexport function init() {\n    this.x0 = this.x0 || 0;\n    this.y0 = this.y0 || 0;\n    this.long0 = this.long0 || 0;\n    this.es = 0;\n    this.title = this.title || \"Robinson\";\n}\n\nexport function forward(ll) {\n    var lon = adjust_lon(ll.x - this.long0);\n\n    var dphi = Math.abs(ll.y);\n    var i = Math.floor(dphi * C1);\n    if (i < 0) {\n        i = 0;\n    } else if (i >= NODES) {\n        i = NODES - 1;\n    }\n    dphi = R2D * (dphi - RC1 * i);\n    var xy = {\n        x: poly3_val(COEFS_X[i], dphi) * lon,\n        y: poly3_val(COEFS_Y[i], dphi)\n    };\n    if (ll.y < 0) {\n        xy.y = -xy.y;\n    }\n\n    xy.x = xy.x * this.a * FXC + this.x0;\n    xy.y = xy.y * this.a * FYC + this.y0;\n    return xy;\n}\n\nexport function inverse(xy) {\n    var ll = {\n        x: (xy.x - this.x0) / (this.a * FXC),\n        y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n    };\n\n    if (ll.y >= 1) { // pathologic case\n        ll.x /= COEFS_X[NODES][0];\n        ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n    } else {\n        // find table interval\n        var i = Math.floor(ll.y * NODES);\n        if (i < 0) {\n            i = 0;\n        } else if (i >= NODES) {\n            i = NODES - 1;\n        }\n        for (;;) {\n            if (COEFS_Y[i][0] > ll.y) {\n                --i;\n            } else if (COEFS_Y[i+1][0] <= ll.y) {\n                ++i;\n            } else {\n                break;\n            }\n        }\n        // linear interpolation in 5 degree interval\n        var coefs = COEFS_Y[i];\n        var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n        // find t so that poly3_val(coefs, t) = ll.y\n        t = newton_rapshon(function(x) {\n            return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n        }, t, EPSLN, 100);\n\n        ll.x /= poly3_val(COEFS_X[i], t);\n        ll.y = (5 * i + t) * D2R;\n        if (xy.y < 0) {\n            ll.y = -ll.y;\n        }\n    }\n\n    ll.x = adjust_lon(ll.x + this.long0);\n    return ll;\n}\n\nexport var names = [\"Robinson\", \"robin\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import {\n    geodeticToGeocentric,\n    geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n    this.name = 'geocent';\n\n}\n\nexport function forward(p) {\n    var point = geodeticToGeocentric(p, this.es, this.a);\n    return point;\n}\n\nexport function inverse(p) {\n    var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n    return point;\n}\n\nexport var names = [\"Geocentric\", 'geocentric', \"geocent\", \"Geocent\"];\nexport default {\n    init: init,\n    forward: forward,\n    inverse: inverse,\n    names: names\n};","\nvar mode = {\n  N_POLE: 0,\n  S_POLE: 1,\n  EQUIT: 2,\n  OBLIQ: 3\n};\n\nimport { D2R, HALF_PI, EPSLN } from \"../constants/values\";\nimport hypot from \"../common/hypot\";\n\nvar params = {\n  h:     { def: 100000, num: true },           // default is Karman line, no default in PROJ.7\n  azi:   { def: 0, num: true, degrees: true }, // default is North\n  tilt:  { def: 0, num: true, degrees: true }, // default is Nadir\n  long0: { def: 0, num: true },                // default is Greenwich, conversion to rad is automatic\n  lat0:  { def: 0, num: true }                 // default is Equator, conversion to rad is automatic\n};\n\nexport function init() {\n  Object.keys(params).forEach(function (p) {\n    if (typeof this[p] === \"undefined\") {\n      this[p] = params[p].def;\n    } else if (params[p].num && isNaN(this[p])) {\n      throw new Error(\"Invalid parameter value, must be numeric \" + p + \" = \" + this[p]);\n    } else if (params[p].num) {\n      this[p] = parseFloat(this[p]);\n    }\n    if (params[p].degrees) {\n      this[p] = this[p] * D2R;\n    }\n  }.bind(this));\n\n  if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {\n    this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;\n  } else if (Math.abs(this.lat0) < EPSLN) {\n    this.mode = mode.EQUIT;\n  } else {\n    this.mode = mode.OBLIQ;\n    this.sinph0 = Math.sin(this.lat0);\n    this.cosph0 = Math.cos(this.lat0);\n  }\n\n  this.pn1 = this.h / this.a;  // Normalize relative to the Earth's radius\n\n  if (this.pn1 <= 0 || this.pn1 > 1e10) {\n    throw new Error(\"Invalid height\");\n  }\n  \n  this.p = 1 + this.pn1;\n  this.rp = 1 / this.p;\n  this.h1 = 1 / this.pn1;\n  this.pfact = (this.p + 1) * this.h1;\n  this.es = 0;\n\n  var omega = this.tilt;\n  var gamma = this.azi;\n  this.cg = Math.cos(gamma);\n  this.sg = Math.sin(gamma);\n  this.cw = Math.cos(omega);\n  this.sw = Math.sin(omega);\n}\n\nexport function forward(p) {\n  p.x -= this.long0;\n  var sinphi = Math.sin(p.y);\n  var cosphi = Math.cos(p.y);\n  var coslam = Math.cos(p.x);\n  var x, y;\n  switch (this.mode) {\n    case mode.OBLIQ:\n      y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n      break;\n    case mode.EQUIT:\n      y = cosphi * coslam;\n      break;\n    case mode.S_POLE:\n      y = -sinphi;\n      break;\n    case mode.N_POLE:\n      y = sinphi;\n      break;\n  }\n  y = this.pn1 / (this.p - y);\n  x = y * cosphi * Math.sin(p.x);\n\n  switch (this.mode) {\n    case mode.OBLIQ:\n      y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n      break;\n    case mode.EQUIT:\n      y *= sinphi;\n      break;\n    case mode.N_POLE:\n      y *= -(cosphi * coslam);\n      break;\n    case mode.S_POLE:\n      y *= cosphi * coslam;\n      break;\n  }\n\n  // Tilt \n  var yt, ba;\n  yt = y * this.cg + x * this.sg;\n  ba = 1 / (yt * this.sw * this.h1 + this.cw);\n  x = (x * this.cg - y * this.sg) * this.cw * ba;\n  y = yt * ba;\n\n  p.x = x * this.a;\n  p.y = y * this.a;\n  return p;\n}\n\nexport function inverse(p) {\n  p.x /= this.a;\n  p.y /= this.a;\n  var r = { x: p.x, y: p.y };\n\n  // Un-Tilt\n  var bm, bq, yt;\n  yt = 1 / (this.pn1 - p.y * this.sw);\n  bm = this.pn1 * p.x * yt;\n  bq = this.pn1 * p.y * this.cw * yt;\n  p.x = bm * this.cg + bq * this.sg;\n  p.y = bq * this.cg - bm * this.sg;\n\n  var rh = hypot(p.x, p.y);\n  if (Math.abs(rh) < EPSLN) {\n    r.x = 0;\n    r.y = p.y;\n  } else {\n    var cosz, sinz;\n    sinz = 1 - rh * rh * this.pfact;\n    sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);\n    cosz = Math.sqrt(1 - sinz * sinz);\n    switch (this.mode) {\n      case mode.OBLIQ:\n        r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);\n        p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;\n        p.x *= sinz * this.cosph0;\n        break;\n      case mode.EQUIT:\n        r.y = Math.asin(p.y * sinz / rh);\n        p.y = cosz * rh;\n        p.x *= sinz;\n        break;\n      case mode.N_POLE:\n        r.y = Math.asin(cosz);\n        p.y = -p.y;\n        break;\n      case mode.S_POLE:\n        r.y = -Math.asin(cosz);\n        break;\n    }\n    r.x = Math.atan2(p.x, p.y);\n  }\n\n  p.x = r.x + this.long0;\n  p.y = r.y;\n  return p;\n}\n\nexport var names = [\"Tilted_Perspective\", \"tpers\"];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nimport tpers from './lib/projections/tpers';\nexport default function(proj4){\n  proj4.Proj.projections.add(tmerc);\n  proj4.Proj.projections.add(etmerc);\n  proj4.Proj.projections.add(utm);\n  proj4.Proj.projections.add(sterea);\n  proj4.Proj.projections.add(stere);\n  proj4.Proj.projections.add(somerc);\n  proj4.Proj.projections.add(omerc);\n  proj4.Proj.projections.add(lcc);\n  proj4.Proj.projections.add(krovak);\n  proj4.Proj.projections.add(cass);\n  proj4.Proj.projections.add(laea);\n  proj4.Proj.projections.add(aea);\n  proj4.Proj.projections.add(gnom);\n  proj4.Proj.projections.add(cea);\n  proj4.Proj.projections.add(eqc);\n  proj4.Proj.projections.add(poly);\n  proj4.Proj.projections.add(nzmg);\n  proj4.Proj.projections.add(mill);\n  proj4.Proj.projections.add(sinu);\n  proj4.Proj.projections.add(moll);\n  proj4.Proj.projections.add(eqdc);\n  proj4.Proj.projections.add(vandg);\n  proj4.Proj.projections.add(aeqd);\n  proj4.Proj.projections.add(ortho);\n  proj4.Proj.projections.add(qsc);\n  proj4.Proj.projections.add(robin);\n  proj4.Proj.projections.add(geocent);\n  proj4.Proj.projections.add(tpers);\n}","import proj4 from './core';\nimport Proj from \"./Proj\";\nimport Point from \"./Point\";\nimport common from \"./common/toPoint\";\nimport defs from \"./defs\";\nimport nadgrid from \"./nadgrid\";\nimport transform from \"./transform\";\nimport mgrs from \"mgrs\";\nimport includedProjections from \"../projs\";\n\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = Proj;\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = Point;\nproj4.toPoint = common;\nproj4.defs = defs;\nproj4.nadgrid = nadgrid;\nproj4.transform = transform;\nproj4.mgrs = mgrs;\nproj4.version = '__VERSION__';\nincludedProjections(proj4);\nexport default proj4;\n","import proj4 from 'proj4';\n\nproj4.defs('urn:ogc:def:crs:EPSG:6.18.3:3857', proj4.defs('EPSG:3857'));\nproj4.defs('urn:ogc:def:crs:EPSG:3857', proj4.defs('EPSG:3857'));\nproj4.defs('urn:ogc:def:crs:EPSG::3857', proj4.defs('EPSG:3857'));\n\nexport const imageToLonLat = (viewport, projection, offset = { x: 0, y: 0 }) => xy => {\n  const pt = viewport.imageToViewportCoordinates(xy[0] + offset.x, xy[1] + offset.y);\n  return viewportToLonLat(projection)([ pt.x, pt.y ]);\n}\n\nexport const lonLatToImageCoordinates = (viewport, projection, offset = { x: 0, y: 0 }) => lonLat => {\n  const pt = lonLatToViewportCoordinates(projection)(lonLat);\n  const { x, y } = viewport.viewportToImageCoordinates(pt[0], pt[1]);\n  return [ x - offset.x, y - offset.y ];\n}\n\nexport const lonLatToMapCoordinates = projection => lonLat =>\n  proj4('EPSG:4326', projection.code, lonLat);\n\nexport const lonLatToViewportCoordinates = projection => lonLat => {\n  const eastNorth = proj4('EPSG:4326', projection.code, lonLat);\n  return mapToViewportCoordinates(projection.extent)(eastNorth);\n}\n\nexport const mapToLonLat = projection => eastNorth =>\n  proj4(projection.code, 'EPSG:4326', eastNorth);\n\nexport const mapToViewportCoordinates = worldExtent => eastNorth => {\n  const [ east, north ] = eastNorth;\n  const [ worldWidth, worldHeight ] = worldExtent;\n\n  const [ falseEast, falseNorth ] = [ worldWidth / 2, worldHeight / 2 ];\n\n  const x = east + falseEast;\n  const y = falseNorth - north;\n\n  return [ x / worldWidth, y / worldHeight ];\n}\n\nexport const viewportToLonLat = projection => xy => {\n  const en = viewportToMapCoordinates(projection.extent)(xy);\n  return proj4(projection.code, 'EPSG:4326', en);\n}\n\nexport const viewportToMapCoordinates = worldExtent => xy => {\n  const [ x, y ] = xy;\n\n  const [ worldWidth, worldHeight ] = worldExtent;\n\n  const [ falseEast, falseNorth ] = [ worldWidth / 2, worldHeight / 2 ];\n\n  const east = x * worldWidth - falseEast;\n  const north = falseNorth - y * worldHeight;\n\n  return [ east, north ];\n}\n\n\n\n\n\n","import { parseCapabilities } from './WMTS';\nimport {\n  imageToLonLat,\n  lonLatToImageCoordinates,\n  lonLatToMapCoordinates,\n  lonLatToViewportCoordinates,\n  mapToLonLat,\n  mapToViewportCoordinates,\n  viewportToLonLat,\n  viewportToMapCoordinates\n} from './Transform';\n\nconst OpenSeadragonWMTS = (viewer, args) => {\n\n  const { url } = args;\n\n  // Return after map has loaded\n  return new Promise((resolve, reject) => {\n    fetch(url)\n      .then(response => response.text())\n      .then(text => {\n        const { tileSource, mapBounds, projection } = parseCapabilities(text, args);\n\n        const topLeft = lonLatToViewportCoordinates(projection)([\n          Math.min(mapBounds[0], mapBounds[2]),\n          Math.max(mapBounds[3], mapBounds[1])\n        ]);\n\n        const bottomRight = lonLatToViewportCoordinates(projection)([\n          Math.max(mapBounds[2], mapBounds[0]),\n          Math.min(mapBounds[3], mapBounds[1])\n        ]);\n\n        viewer.addTiledImage({ \n          tileSource,        \n          success: () => {\n            const viewportRegion = new OpenSeadragon.Rect(topLeft[0], topLeft[1], bottomRight[0] - topLeft[0], bottomRight[1] - topLeft[1]);\n            viewer.viewport.fitBounds(viewportRegion, true);\n\n            const imageTopLeft = viewer.viewport.viewportToImageCoordinates(topLeft[0], topLeft[1]);\n            const imageBottomRight = viewer.viewport.viewportToImageCoordinates(bottomRight[0], bottomRight[1]);\n\n            const imageRegion = {\n              x: imageTopLeft.x,\n              y: imageTopLeft.y,\n              width: imageBottomRight.x - imageTopLeft.x,\n              height: imageBottomRight.y - imageTopLeft.y\n            }\n            \n            resolve({\n              // Useful metadata\n              mapBounds,\n              viewportRegion,\n              imageRegion,\n\n              // Image coordinate space transforms\n              imageToLonLat: imageToLonLat(viewer.viewport, projection),\n              imageRegionToLonLat: imageToLonLat(viewer.viewport, projection, imageTopLeft),\n              lonLatToImage: lonLatToImageCoordinates(viewer.viewport, projection),\n              lonLatToImageRegion: lonLatToImageCoordinates(viewer.viewport, projection, imageTopLeft),\n\n              // Map and viewport coordinate space transforms\n              mapToLonLat: mapToLonLat(projection),\n              mapToViewportCoordinates: mapToViewportCoordinates(projection.extent),\n              lonLatToMapCoordinates: lonLatToMapCoordinates(projection),\n              lonLatToViewportCoordinates: lonLatToViewportCoordinates(projection),\n              viewportToLonLat: viewportToLonLat(projection),\n              viewportToMapCoordinates: viewportToMapCoordinates(projection.extent)\n            });\n          },\n          error: e => reject(e)\n        });\n        \n      });\n  });\n\n}\n\nexport default OpenSeadragonWMTS;\n"],"names":["getAllTextContent","node","normalizeWhitespace","getAllTextContent_","accumulator","n","isDocument","object","parse","xml","makeArrayPusher","valueReader","opt_this","objectStack","value","array","makeObjectPropertyPusher","opt_property","property","makeObjectPropertySetter","makeStructureNS","namespaceURIs","structure","opt_structureNS","structureNS","i","ii","parseNode","parsersNS","parsers","parser","pushParseAndPop","XML","source","doc","XML$1","NAMESPACE_URI","readHref","readDecimal","s","readDecimalString","string","m","readPositiveInteger","readNonNegativeIntegerString","readString","__extends","this","extendStatics","d","b","p","__","NAMESPACE_URIS","PARSERS","readServiceIdentification","readServiceProvider","readOperationsMetadata","OWS","_super","owsObject","ADDRESS_PARSERS","ALLOWED_VALUES_PARSERS","readValue","CONSTRAINT_PARSERS","readAllowedValues","CONTACT_INFO_PARSERS","readPhone","readAddress","DCP_PARSERS","readHttp","HTTP_PARSERS","readGet","OPERATION_PARSERS","readDcp","OPERATIONS_METADATA_PARSERS","readOperation","PHONE_PARSERS","REQUEST_METHOD_PARSERS","readConstraint","SERVICE_CONTACT_PARSERS","readContactInfo","SERVICE_IDENTIFICATION_PARSERS","SERVICE_PROVIDER_PARSERS","readServiceContact","name","href","OWS$1","boundingExtent","coordinates","extent","createEmpty","extendCoordinate","coordinate","OWS_NAMESPACE_URIS","readContents","WMTSCapabilities","_this","version","WMTSCapabilityObject","CONTENTS_PARSERS","readLayer","readTileMatrixSet","LAYER_PARSERS","readStyle","readTileMatrixSetLink","readDimensions","readResourceUrl","readBoundingBox","STYLE_PARSERS","readLegendUrl","TMS_LINKS_PARSERS","readTileMatrixLimitsList","TMS_LIMITS_LIST_PARSERS","readTileMatrixLimits","TMS_LIMITS_PARSERS","DIMENSION_PARSERS","WGS84_BBOX_READERS","readCoordinates","TMS_PARSERS","readTileMatrix","TM_PARSERS","style","isDefault","format","template","resourceType","resource","legend","x","y","WMTSCapabilities$1","parseCapabilities","response","args","capabilities","Layer","l","Style","TileUrlTemplate","TileMatrixSetLink","TileMatrixSet","TileMatrix","TileWidth","TileHeight","MatrixWidth","MatrixHeight","TopLeftCorner","level","globals","defs","PJD_3PARAM","PJD_7PARAM","PJD_GRIDSHIFT","PJD_WGS84","PJD_NODATUM","SRS_WGS84_SEMIMAJOR","SRS_WGS84_SEMIMINOR","SRS_WGS84_ESQUARED","SEC_TO_RAD","HALF_PI","SIXTH","RA4","RA6","EPSLN","D2R","R2D","FORTPI","TWO_PI","SPI","exports","units","ignoredChar","match","obj","key","keys","lkey","testkey","processedKey","projStr","defData","self","paramObj","v","a","split","paramName","paramVal","paramOutname","params","unit","pm","PrimeMeridian","legalAxis","NEUTRAL","KEYWORD","NUMBER","QUOTED","AFTERQUOTE","ENDED","whitespace","latin","keyword","endThings","digets","Parser","text","char","newObjects","parseString","txt","mapit","thing","out","newObj","item","sExpr","rename","outName","inName","d2r","input","cleanWKT","wkt","axisOrder","axis","geogcs","toMeter","ratio","renamer","list","lisp","type","that","def","parseProj","testObj","code","testDef","codeWords","testWKT","word","codes","checkMercator","auth","checkProjStr","ext","testProj","maybeProjStr","extend","destination","msfnz","eccent","sinphi","cosphi","con","sign","adjust_lon","tsfnz","phi","com","phi2z","ts","eccnth","dphi","init","forward","lon","lat","inverse","names","merc","identity","pt","projs","projStore","add","proj","len","get","start","projections","exports$2","WGS84","eccentricity","rf","R_A","a2","b2","es","e","ep2","sphere","ellps","ellipse","Ellipsoid","exports$1","datum","datumCode","datum_params","nadgrids","loadedNadgrids","nadgrid","data","view","isLittleEndian","detectLittleEndian","header","readHeader","subgrids","readSubgrids","getNadgrids","grids","parseNadgridString","optional","secondsToRadians","seconds","nFields","decodeString","end","gridOffset","subHeader","readGridHeader","nodes","readGridNodes","lngColumnCount","latColumnCount","mapNodes","r","offset","gridHeader","nodesOffset","gridRecordLength","gridShiftRecords","record","Projection","srsCode","callback","error","json","parseCode","ourProj","datumDef","Datum","sphere_","dc_sphere","ecc","dc_eccentricity","datumObj","compareDatums","dest","geodeticToGeocentric","Longitude","Latitude","Height","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","geocentricToGeodetic","genau","genau2","maxiter","P","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","iter","X","Y","Z","geocentricToWgs84","datum_type","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","geocentricFromWgs84","x_tmp","y_tmp","z_tmp","checkParams","datum_transform","point","source_a","source_es","gridShiftCode","applyGridShift","dest_a","dest_b","dest_es","destGridShiftResult","output","attemptedGrids","grid","subgrid","epsilon","minX","minY","maxX","maxY","applySubgridShift","pin","ct","val","tb","t","nadInterpolate","tol","dif","del","indx","frct","inx","f00","f10","f11","f01","m11","m10","m00","m01","adjust_axis","crs","denorm","xin","yin","zin","common","checkSanity","checkCoord","num","checkNotWGS","transform","enforceAxis","wgs84","toPoint","transformer","from","to","coords","transformedArray","checkProj","proj4","fromProj","toProj","coord","single","NUM_100K_SETS","SET_ORIGIN_COLUMN_LETTERS","SET_ORIGIN_ROW_LETTERS","A","I","O","V","mgrs","ll","accuracy","encode","LLtoUTM","bbox","UTMtoLL","decode","degToRad","deg","radToDeg","rad","Lat","Long","eccSquared","k0","LongOrigin","eccPrimeSquared","N","T","C","M","LatRad","LongRad","LongOriginRad","ZoneNumber","UTMEasting","UTMNorthing","getLetterDesignator","utm","zoneLetter","zoneNumber","e1","N1","T1","C1","R1","D","mu","phi1Rad","result","topRight","LetterDesignator","seasting","snorthing","get100kID","easting","northing","setParm","get100kSetForZone","setColumn","setRow","getLetter100kID","column","row","parm","index","colOrigin","rowOrigin","colInt","rowInt","rollover","twoLetter","mgrsString","length","hunK","sb","testChar","set","east100k","getEastingFromChar","north100k","getNorthingFromChar","getMinNorthing","remainder","sep","sepEasting","sepNorthing","accuracyBonus","sepEastingString","sepNorthingString","curCol","eastingValue","rewindMarker","curRow","northingValue","Point","z","mgrsStr","C00","C02","C04","C06","C08","C22","C44","C46","C48","C66","C68","C88","pj_enfn","en","pj_mlfn","sphi","cphi","MAX_ITER","pj_inv_mlfn","arg","k","delta_lon","sin_phi","cos_phi","al","als","cs","tq","ml","tan_phi","c","ds","f","g","temp","h","tmerc","sinh","hypot","log1py","asinhy","gatg","pp","B","cos_2B","h1","h2","clens","arg_r","hr1","hr2","hr","cosh","clens_cmplx","arg_i","sin_arg_r","cos_arg_r","sinh_arg_i","cosh_arg_i","j","hi1","hi","hi2","np","Ce","Cn","sin_Cn","cos_Cn","sin_Ce","cos_Ce","tmp","etmerc","adjust_zone","zone","dependsOn","srat","esinp","exp","DEL_TOL","gauss","sinc","cosc","cosl","rho","sterea","ssfn_","phit","eccen","sinlat","coslat","sinX","cosX","rh","dlon","ce","Chi","stere","phy0","sinPhy0","semiMajorAxis","invF","flattening","e2","k1","k2","k3","Sa1","Sa2","S","rotI","rotB","lambda","phy","prevPhy","iteration","somerc","TOL","isTypeA","typeAProjections","projectionName","cosph0","F","H","L","sinph0","J","gamma","gamma0","lamc","lam1","lam2","phi1","phi2","alpha_c","alp","gam","one_es","U","W","u","Qp","Sp","Tp","Vp","Up","omerc","sin1","cos1","ms1","ts1","sin2","cos2","ms2","ts2","ts0","rh1","theta","lcc","gfi","deltav","eps","ro","fi1","ok","krovak","mlfn","e0","e3","e0fn","e1fn","e2fn","e3fn","gN","adjust_lat","imlfn","lam","nl","tl","asq","cl","dd","ml1","nl1","rl1","tl1","dl","dsq","cass","qsfnz","S_POLE","N_POLE","EQUIT","OBLIQ","authset","coslam","sinlam","q","sinb","cosb","cCe","sCe","ab","cosz","sinz","authlat","P00","P01","P02","P10","P11","P20","APA","beta","laea","asinz","qs","phi1z","eccnts","aea","coslon","ksp","gnom","iqsfnz","cea","dlat","eqc","el","bl","tanphi","mln","mlnp","ma","poly","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_re","th_im","th_n_re","th_n_im","th_n_re1","th_n_im1","z_re","z_im","delta_x","delta_y","z_n_re","z_n_im","z_n_re1","z_n_im1","num_re","num_im","den_re","den_im","den2","d_psi_n","nzmg","mill","sinu","delta_theta","moll","eqdc","sinth","costh","gsq","msq","xx","yy","xys","c1","c2","c3","a1","m1","th1","vandg","Mlp","Ml","Nl1","Nl","psi","Az","G","GH","Hs","kp","cos_c","s2","s3","s4","s5","cosAz","Ee","sinpsi","aeqd","ortho","FACE_ENUM","AREA_ENUM","xy","area","sinlon","qsc_shift_lon_origin","qsc_fwd_equat_face_theta","lp","nu","cosmu","tannu","tantheta","invert_sign","xa","slon","qsc","COEFS_X","COEFS_Y","FXC","FYC","RC1","NODES","poly3_val","coefs","poly3_der","newton_rapshon","f_df","max_err","iters","upd","robin","geocent","mode","omega","yt","ba","bm","bq","tpers","includedProjections","Proj","imageToLonLat","viewport","projection","viewportToLonLat","lonLatToImageCoordinates","lonLat","lonLatToViewportCoordinates","lonLatToMapCoordinates","eastNorth","mapToViewportCoordinates","mapToLonLat","worldExtent","east","north","worldWidth","worldHeight","falseEast","falseNorth","viewportToMapCoordinates","viewer","url","resolve","reject","tileSource","mapBounds","topLeft","bottomRight","viewportRegion","imageTopLeft","imageBottomRight","imageRegion"],"mappings":"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"}