UNPKG

38.5 kBSource Map (JSON)View Raw
1{"version":3,"file":"uriproj.min.js","sources":["node_modules/whatwg-fetch/fetch.js","../../../../../\u0000babelHelpers","src/index.js"],"sourcesContent":["(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob()\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n reader.readAsText(blob)\n return fileReaderReady(reader)\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (!body) {\n this._bodyText = ''\n } else if (support.arrayBuffer && ArrayBuffer.prototype.isPrototypeOf(body)) {\n // Only support ArrayBuffers for POST method.\n // Receiving ArrayBuffers happens via Blobs, instead.\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = (xhr.getAllResponseHeaders() || '').trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n","var babelHelpers = {};\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n};\n\nexport var jsx = function () {\n var REACT_ELEMENT_TYPE = typeof Symbol === \"function\" && Symbol.for && Symbol.for(\"react.element\") || 0xeac7;\n return function createRawReactElement(type, props, key, children) {\n var defaultProps = type && type.defaultProps;\n var childrenLength = arguments.length - 3;\n\n if (!props && childrenLength !== 0) {\n props = {};\n }\n\n if (props && defaultProps) {\n for (var propName in defaultProps) {\n if (props[propName] === void 0) {\n props[propName] = defaultProps[propName];\n }\n }\n } else if (!props) {\n props = defaultProps || {};\n }\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n\n props.children = childArray;\n }\n\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key === undefined ? null : '' + key,\n ref: null,\n props: props,\n _owner: null\n };\n };\n}();\n\nexport var asyncToGenerator = function (fn) {\n return function () {\n var gen = fn.apply(this, arguments);\n return new Promise(function (resolve, reject) {\n function step(key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n return Promise.resolve(value).then(function (value) {\n return step(\"next\", value);\n }, function (err) {\n return step(\"throw\", err);\n });\n }\n }\n\n return step(\"next\");\n });\n };\n};\n\nexport var classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nexport var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nexport var defineEnumerableProperties = function (obj, descs) {\n for (var key in descs) {\n var desc = descs[key];\n desc.configurable = desc.enumerable = true;\n if (\"value\" in desc) desc.writable = true;\n Object.defineProperty(obj, key, desc);\n }\n\n return obj;\n};\n\nexport var defaults = function (obj, defaults) {\n var keys = Object.getOwnPropertyNames(defaults);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = Object.getOwnPropertyDescriptor(defaults, key);\n\n if (value && value.configurable && obj[key] === undefined) {\n Object.defineProperty(obj, key, value);\n }\n }\n\n return obj;\n};\n\nexport var defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nexport var get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nexport var inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar _instanceof = function (left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n};\n\nexport var interopRequireDefault = function (obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n};\n\nexport var interopRequireWildcard = function (obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n return newObj;\n }\n};\n\nexport var newArrowCheck = function (innerThis, boundThis) {\n if (innerThis !== boundThis) {\n throw new TypeError(\"Cannot instantiate an arrow function\");\n }\n};\n\nexport var objectDestructuringEmpty = function (obj) {\n if (obj == null) throw new TypeError(\"Cannot destructure undefined\");\n};\n\nexport var objectWithoutProperties = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nexport var possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nexport var selfGlobal = typeof global === \"undefined\" ? self : global;\n\nexport var set = function set(object, property, value, receiver) {\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent !== null) {\n set(parent, property, value, receiver);\n }\n } else if (\"value\" in desc && desc.writable) {\n desc.value = value;\n } else {\n var setter = desc.set;\n\n if (setter !== undefined) {\n setter.call(receiver, value);\n }\n }\n\n return value;\n};\n\nexport var slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\nexport var slicedToArrayLoose = function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n var _arr = [];\n\n for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {\n _arr.push(_step.value);\n\n if (i && _arr.length === i) break;\n }\n\n return _arr;\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n};\n\nexport var taggedTemplateLiteral = function (strings, raw) {\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n};\n\nexport var taggedTemplateLiteralLoose = function (strings, raw) {\n strings.raw = raw;\n return strings;\n};\n\nexport var temporalRef = function (val, name, undef) {\n if (val === undef) {\n throw new ReferenceError(name + \" is not defined - temporal dead zone\");\n } else {\n return val;\n }\n};\n\nexport var temporalUndefined = {};\n\nexport var toArray = function (arr) {\n return Array.isArray(arr) ? arr : Array.from(arr);\n};\n\nexport var toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nbabelHelpers;\n\nexport { _typeof as typeof, _extends as extends, _instanceof as instanceof }","import 'whatwg-fetch'\r\nimport proj4 from 'proj4'\r\n\r\nconst ROOT_PREFIX = 'http://www.opengis.net/def/crs/'\r\nconst OGC_PREFIX = ROOT_PREFIX + 'OGC/'\r\nconst EPSG_PREFIX = ROOT_PREFIX + 'EPSG/0/'\r\n\r\n/**\r\n * @typedef {Object} Projection\r\n * @property {function(lonlat: Array<number>): Array<number>} forward\r\n * Transforms a geographic WGS84 [longitude, latitude] coordinate to an [x, y] projection coordinate.\r\n * @property {function(xy: Array<number>): Array<number>} inverse\r\n * Transforms an [x, y] projection coordinate to a geographic WGS84 [longitude, latitude] coordinate.\r\n */\r\n\r\n// a cache of URI string -> Projection object mappings\r\nlet projCache = {}\r\n\r\n// work-arounds for incorrect epsg.io / proj4 behaviour\r\nlet needsAxesReordering = {\r\n [EPSG_PREFIX + 4326]: true // proj4 is [lon,lat], we need [lat,lon]\r\n}\r\n\r\n// store some built-in projections which are not available on epsg.io\r\nlet LONLAT = proj4('+proj=longlat +datum=WGS84 +no_defs')\r\nset(OGC_PREFIX + '1.3/CRS84', LONLAT)\r\nset(EPSG_PREFIX + 4979, reverseAxes(LONLAT))\r\n\r\n/**\r\n * Returns a stored {@link Projection} for a given URI, or {@link undefined} if no {@link Projection} is stored for that URI.\r\n * \r\n * @param {string} crsUri The CRS URI for which to return a {@link Projection}.\r\n * @return {Projection|undefined} A {@link Projection} object, or {@link undefined} if not stored by {@link load} or {@link set}.\r\n * \r\n * @example\r\n * // has to be stored previously via load() or set()\r\n * var proj = uriproj.get('http://www.opengis.net/def/crs/EPSG/0/27700')\r\n * var [longitude, latitude] = [-1.54, 55.5]\r\n * var [easting,northing] = proj.forward([longitude, latitude])\r\n */\r\nexport function get (crsUri) {\r\n return projCache[crsUri]\r\n}\r\n\r\n/**\r\n * Returns a {@link Promise} that succeeds with an already stored {@link Projection} or, if not stored,\r\n * that remotely loads the {@link Projection} (currently using https://epsg.io), stores it, and then succeeds with it.\r\n * \r\n * @param {string} crsUri The CRS URI for which to return a projection.\r\n * @return {Promise<Projection,Error>} A {@link Promise} object succeeding with a {@link Projection} object,\r\n * and failing with an {@link Error} object in case of network or PROJ.4 parsing problems.\r\n * \r\n * @example <caption>Loading a single projection</caption>\r\n * uriproj.load('http://www.opengis.net/def/crs/EPSG/0/27700').then(proj => {\r\n * var [longitude, latitude] = [-1.54, 55.5]\r\n * var [easting,northing] = proj.forward([longitude, latitude])\r\n * })\r\n * \r\n * @example <caption>Loading multiple projections</caption>\r\n * var uris = [\r\n * 'http://www.opengis.net/def/crs/EPSG/0/27700',\r\n * 'http://www.opengis.net/def/crs/EPSG/0/7376',\r\n * 'http://www.opengis.net/def/crs/EPSG/0/7375']\r\n * Promise.all(uris.map(uriproj.load)).then(projs => {\r\n * // all projections are loaded and stored now\r\n * \r\n * // get the first projection\r\n * var proj1 = projs[0]\r\n * // or:\r\n * var proj1 = uriproj.get(uris[0])\r\n * })\r\n * \r\n */\r\nexport function load (crsUri) {\r\n if (crsUri in projCache) {\r\n return Promise.resolve(projCache[crsUri])\r\n }\r\n \r\n let epsg = crsUriToEPSG(crsUri)\r\n let url = `https://epsg.io/${epsg}.proj4`\r\n \r\n return fetch(url).then(response => {\r\n if (!response.ok) {\r\n throw new Error(`HTTP response code: ${response.status}`)\r\n }\r\n return response.text()\r\n }).then(proj4string => set(crsUri, proj4string, {reverseAxes: crsUri in needsAxesReordering}))\r\n}\r\n\r\n/**\r\n * Stores a given projection for a given URI that can then be accessed via {@link get} and {@link load}.\r\n * If the projection is given as proj4 string and does not require axis reversal, then it is stored\r\n * as a named projection in proj4 itself under the given URI.\r\n * \r\n * @param {string} crsUri The CRS URI for which to store the projection.\r\n * @param {string|Projection} proj A proj4 string or a {@link Projection} object.\r\n * @param {Object} [options] Options object.\r\n * @param {boolean} [options.reverseAxes=false] If proj is a proj4 string, whether to reverse the projection axes.\r\n * @return {Projection} The newly stored projection.\r\n * @throws {Error} If crsUri or proj is missing, or if a PROJ.4 string cannot be parsed by proj4js. \r\n * \r\n * @example <caption>Storing a projection using a PROJ.4 string</caption>\r\n * var uri = 'http://www.opengis.net/def/crs/EPSG/0/27700'\r\n * var proj4 = '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 ' +\r\n * '+ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs'\r\n * uriproj.set(uri, proj4)\r\n * \r\n * @example <caption>Storing a projection using a Projection object</caption>\r\n * var uri = 'http://www.opengis.net/def/crs/EPSG/0/27700'\r\n * var proj = {\r\n * forward: ([lon,lat]) => [..., ...],\r\n * inverse: ([x,y]) => [..., ...]\r\n * }\r\n * uriproj.set(uri, proj)\r\n */\r\nexport function set (crsUri, proj, options={}) {\r\n if (!crsUri || !proj) {\r\n throw new Error('crsUri and proj cannot be empty')\r\n }\r\n let projobj\r\n if (typeof proj === 'string') {\r\n projobj = proj4(proj)\r\n if (!projobj) {\r\n throw new Error(`Unsupported proj4 string: ${proj}`)\r\n }\r\n proj4.defs(crsUri, proj)\r\n if (options.reverseAxes) {\r\n projobj = reverseAxes(projobj)\r\n } \r\n } else {\r\n projobj = proj\r\n }\r\n projCache[crsUri] = projobj\r\n return projobj\r\n}\r\n\r\n/**\r\n * Return the EPSG code of an OGC CRS URI of the form\r\n * http://www.opengis.net/def/crs/EPSG/0/1234 (would return 1234).\r\n * \r\n * @param {string} crsUri The CRS URI for which to return the EPSG code.\r\n * @return {string} The EPSG code.\r\n */\r\nfunction crsUriToEPSG (uri) {\r\n let epsg\r\n if (uri.indexOf(EPSG_PREFIX) === 0) {\r\n epsg = uri.substr(EPSG_PREFIX.length)\r\n } else {\r\n throw new Error(`Unsupported CRS URI: ${uri}`)\r\n }\r\n \r\n return epsg\r\n}\r\n\r\n/**\r\n * Reverses projection axis order.\r\n * \r\n * For example, a projection with lon, lat axis order is turned into one with lat, lon order.\r\n * This is necessary since geographic projections in proj4 can only be defined with\r\n * lon,lat order, however some CRSs have lat,lon order (like EPSG4326).\r\n * Incorrectly, epsg.io returns a proj4 string (with lon,lat order) even if the CRS\r\n * has lat,lon order. This function manually flips the axis order of a given projection.\r\n * See also `needsAxesReordering` above.\r\n * \r\n * @param {Projection} proj The projection whose axis order to revert.\r\n * @return {Projection} The projection with reversed axis order.\r\n */\r\nfunction reverseAxes (proj) {\r\n return {\r\n forward: pos => proj.forward(pos).reverse(),\r\n inverse: pos => proj.inverse([pos[1], pos[0]])\r\n }\r\n}\r\n"],"names":["get","crsUri","projCache","load","Promise","resolve","epsg","crsUriToEPSG","url","fetch","then","response","ok","Error","status","text","set","proj4string","reverseAxes","needsAxesReordering","proj","options","projobj","proj4","defs","uri","indexOf","EPSG_PREFIX","substr","length","forward","pos","reverse","inverse","self","normalizeName","name","String","test","TypeError","toLowerCase","normalizeValue","value","iteratorFor","items","iterator","next","shift","done","undefined","support","iterable","Symbol","Headers","headers","this","map","forEach","append","Object","getOwnPropertyNames","consumed","body","bodyUsed","reject","fileReaderReady","reader","onload","result","onerror","error","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","readBlobAsText","readAsText","Body","_initBody","_bodyInit","_bodyText","Blob","prototype","isPrototypeOf","_bodyBlob","formData","FormData","_bodyFormData","searchParams","URLSearchParams","toString","arrayBuffer","ArrayBuffer","type","rejected","decode","json","JSON","parse","normalizeMethod","method","upcased","toUpperCase","methods","Request","input","credentials","mode","referrer","form","trim","split","bytes","replace","join","decodeURIComponent","xhr","head","pairs","getAllResponseHeaders","header","key","Response","bodyInit","statusText","e","list","push","values","getAll","has","hasOwnProperty","callback","thisArg","call","keys","entries","clone","redirectStatuses","redirect","RangeError","location","init","responseURL","getResponseHeader","request","XMLHttpRequest","responseText","ontimeout","open","withCredentials","responseType","setRequestHeader","send","polyfill","defineProperty","obj","enumerable","configurable","writable","ROOT_PREFIX","OGC_PREFIX","LONLAT"],"mappings":"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"}
\No newline at end of file