Files
4.0/static/sdk/3rdparty/proj4.js

1922 lines
116 KiB
JavaScript
Raw Normal View History

2025-07-03 17:39:09 +08:00
!function (t, s) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = s() : "function" == typeof define && define.amd ? define(s) : t.proj4 = s()
}(this, function () {
"use strict";
function t(t, s) {
if (t[s]) return t[s];
for (var i, a = Object.keys(t), h = s.toLowerCase().replace(Ot, ""), e = -1; ++e < a.length;) if (i = a[e], i.toLowerCase().replace(Ot, "") === h) return t[i]
}
function s(t) {
if ("string" != typeof t) throw new Error("not a string");
this.text = t.trim(), this.level = 0, this.place = 0, this.root = null, this.stack = [], this.currentObject = null, this.state = qt
}
function i(t) {
return new s(t).output()
}
function a(t, s, i) {
Array.isArray(s) && (i.unshift(s), s = null);
var a = s ? {} : t, e = i.reduce(function (t, s) {
return h(s, t), t
}, a);
s && (t[s] = e)
}
function h(t, s) {
if (Array.isArray(t)) {
var i = t.shift();
if ("PARAMETER" === i && (i = t.shift()), 1 === t.length) return Array.isArray(t[0]) ? (s[i] = {}, void h(t[0], s[i])) : void (s[i] = t[0]);
if (t.length) if ("TOWGS84" !== i) {
if ("AXIS" === i) return i in s || (s[i] = []), void s[i].push(t);
Array.isArray(i) || (s[i] = {});
var e;
switch (i) {
case"UNIT":
case"PRIMEM":
case"VERT_DATUM":
return s[i] = {name: t[0].toLowerCase(), convert: t[1]}, void (3 === t.length && h(t[2], s[i]));
case"SPHEROID":
case"ELLIPSOID":
return s[i] = {name: t[0], a: t[1], rf: t[2]}, void (4 === t.length && h(t[3], s[i]));
case"PROJECTEDCRS":
case"PROJCRS":
case"GEOGCS":
case"GEOCCS":
case"PROJCS":
case"LOCAL_CS":
case"GEODCRS":
case"GEODETICCRS":
case"GEODETICDATUM":
case"EDATUM":
case"ENGINEERINGDATUM":
case"VERT_CS":
case"VERTCRS":
case"VERTICALCRS":
case"COMPD_CS":
case"COMPOUNDCRS":
case"ENGINEERINGCRS":
case"ENGCRS":
case"FITTED_CS":
case"LOCAL_DATUM":
case"DATUM":
return t[0] = ["name", t[0]], void a(s, i, t);
default:
for (e = -1; ++e < t.length;) if (!Array.isArray(t[e])) return h(t, s[i]);
return a(s, i, t)
}
} else s[i] = t; else s[i] = !0
} else s[t] = !0
}
function e(t, s) {
var i = s[0], a = s[1];
!(i in t) && a in t && (t[i] = t[a], 3 === s.length && (t[i] = s[2](t[i])))
}
function n(t) {
return t * Bt
}
function r(t) {
function s(s) {
return s * (t.to_meter || 1)
}
if ("GEOGCS" === t.type ? t.projName = "longlat" : "LOCAL_CS" === t.type ? (t.projName = "identity", t.local = !0) : "object" == typeof t.PROJECTION ? t.projName = Object.keys(t.PROJECTION)[0] : t.projName = t.PROJECTION, t.AXIS) {
for (var i = "", a = 0, h = t.AXIS.length; a < h; ++a) {
var r = t.AXIS[a][0].toLowerCase();
-1 !== r.indexOf("north") ? i += "n" : -1 !== r.indexOf("south") ? i += "s" : -1 !== r.indexOf("east") ? i += "e" : -1 !== r.indexOf("west") && (i += "w")
}
2 === i.length && (i += "u"), 3 === i.length && (t.axis = i)
}
t.UNIT && (t.units = t.UNIT.name.toLowerCase(), "metre" === t.units && (t.units = "meter"), t.UNIT.convert && ("GEOGCS" === t.type ? t.DATUM && t.DATUM.SPHEROID && (t.to_meter = t.UNIT.convert * t.DATUM.SPHEROID.a) : t.to_meter = t.UNIT.convert));
var o = t.GEOGCS;
"GEOGCS" === t.type && (o = t), o && (o.DATUM ? t.datumCode = o.DATUM.name.toLowerCase() : t.datumCode = o.name.toLowerCase(), "d_" === t.datumCode.slice(0, 2) && (t.datumCode = t.datumCode.slice(2)), "new_zealand_geodetic_datum_1949" !== t.datumCode && "new_zealand_1949" !== t.datumCode || (t.datumCode = "nzgd49"), "wgs_1984" !== t.datumCode && "world_geodetic_system_1984" !== t.datumCode || ("Mercator_Auxiliary_Sphere" === t.PROJECTION && (t.sphere = !0), t.datumCode = "wgs84"), "_ferro" === t.datumCode.slice(-6) && (t.datumCode = t.datumCode.slice(0, -6)), "_jakarta" === t.datumCode.slice(-8) && (t.datumCode = t.datumCode.slice(0, -8)), ~t.datumCode.indexOf("belge") && (t.datumCode = "rnb72"), o.DATUM && o.DATUM.SPHEROID && (t.ellps = o.DATUM.SPHEROID.name.replace("_19", "").replace(/[Cc]larke\_18/, "clrk"), "international" === t.ellps.toLowerCase().slice(0, 13) && (t.ellps = "intl"), t.a = o.DATUM.SPHEROID.a, t.rf = parseFloat(o.DATUM.SPHEROID.rf, 10)), o.DATUM && o.DATUM.TOWGS84 && (t.datum_params = o.DATUM.TOWGS84), ~t.datumCode.indexOf("osgb_1936") && (t.datumCode = "osgb36"), ~t.datumCode.indexOf("osni_1952") && (t.datumCode = "osni52"), (~t.datumCode.indexOf("tm65") || ~t.datumCode.indexOf("geodetic_datum_of_1965")) && (t.datumCode = "ire65"), "ch1903+" === t.datumCode && (t.datumCode = "ch1903"), ~t.datumCode.indexOf("israel") && (t.datumCode = "isr93")), t.b && !isFinite(t.b) && (t.b = t.a);
[["standard_parallel_1", "Standard_Parallel_1"], ["standard_parallel_2", "Standard_Parallel_2"], ["false_easting", "False_Easting"], ["false_northing", "False_Northing"], ["central_meridian", "Central_Meridian"], ["latitude_of_origin", "Latitude_Of_Origin"], ["latitude_of_origin", "Central_Parallel"], ["scale_factor", "Scale_Factor"], ["k0", "scale_factor"], ["latitude_of_center", "Latitude_Of_Center"], ["latitude_of_center", "Latitude_of_center"], ["lat0", "latitude_of_center", n], ["longitude_of_center", "Longitude_Of_Center"], ["longitude_of_center", "Longitude_of_center"], ["longc", "longitude_of_center", n], ["x0", "false_easting", s], ["y0", "false_northing", s], ["long0", "central_meridian", n], ["lat0", "latitude_of_origin", n], ["lat0", "standard_parallel_1", n], ["lat1", "standard_parallel_1", n], ["lat2", "standard_parallel_2", n], ["azimuth", "Azimuth"], ["alpha", "azimuth", n], ["srsCode", "name"]].forEach(function (s) {
return e(t, s)
}), t.long0 || !t.longc || "Albers_Conic_Equal_Area" !== t.projName && "Lambert_Azimuthal_Equal_Area" !== t.projName || (t.long0 = t.longc), t.lat_ts || !t.lat1 || "Stereographic_South_Pole" !== t.projName && "Polar Stereographic (variant B)" !== t.projName || (t.lat0 = n(t.lat1 > 0 ? 90 : -90), t.lat_ts = t.lat1)
}
function o(t) {
var s = this;
if (2 === arguments.length) {
var i = arguments[1];
"string" == typeof i ? "+" === i.charAt(0) ? o[t] = kt(arguments[1]) : o[t] = zt(arguments[1]) : o[t] = i
} else if (1 === arguments.length) {
if (Array.isArray(t)) return t.map(function (t) {
Array.isArray(t) ? o.apply(s, t) : o(t)
});
if ("string" == typeof t) {
if (t in o) return o[t]
} else "EPSG" in t ? o["EPSG:" + t.EPSG] = t : "ESRI" in t ? o["ESRI:" + t.ESRI] = t : "IAU2000" in t ? o["IAU2000:" + t.IAU2000] = t : console.log(t);
return
}
}
function l(t) {
return "string" == typeof t
}
function c(t) {
return t in o
}
function u(t) {
return Ft.some(function (s) {
return t.indexOf(s) > -1
})
}
function M(s) {
var i = t(s, "authority");
if (i) {
var a = t(i, "epsg");
return a && Dt.indexOf(a) > -1
}
}
function f(s) {
var i = t(s, "extension");
if (i) return t(i, "proj4")
}
function d(t) {
return "+" === t[0]
}
function m(t) {
if (!l(t)) return t;
if (c(t)) return o[t];
if (u(t)) {
var s = zt(t);
if (M(s)) return o["EPSG:3857"];
var i = f(s);
return i ? kt(i) : s
}
return d(t) ? kt(t) : void 0
}
function p(t) {
return t
}
function y(t, s) {
var i = Zt.length;
return t.names ? (Zt[i] = t, t.names.forEach(function (t) {
Vt[t.toLowerCase()] = i
}), this) : (console.log(s), !0)
}
function _(t, s, i, a) {
var h = t * t, e = s * s, n = (h - e) / h, r = 0;
return a ? (h = (t *= 1 - n * (gt + n * (vt + n * bt))) * t, n = 0) : r = Math.sqrt(n), {
es: n,
e: r,
ep2: (h - e) / e
}
}
function x(s, i, a, h, e) {
if (!s) {
var n = t($t, h);
n || (n = ts), s = n.a, i = n.b, a = n.rf
}
return a && !i && (i = (1 - 1 / a) * s), (0 === a || Math.abs(s - i) < wt) && (e = !0, i = s), {
a: s,
b: i,
rf: a,
sphere: e
}
}
function g(t, s, i, a, h, e, n) {
var r = {};
return r.datum_type = void 0 === t || "none" === t ? yt : pt, s && (r.datum_params = s.map(parseFloat), 0 === r.datum_params[0] && 0 === r.datum_params[1] && 0 === r.datum_params[2] || (r.datum_type = ft), r.datum_params.length > 3 && (0 === r.datum_params[3] && 0 === r.datum_params[4] && 0 === r.datum_params[5] && 0 === r.datum_params[6] || (r.datum_type = dt, r.datum_params[3] *= _t, r.datum_params[4] *= _t, r.datum_params[5] *= _t, r.datum_params[6] = r.datum_params[6] / 1e6 + 1))), n && (r.datum_type = mt, r.grids = n), r.a = i, r.b = a, r.es = h, r.ep2 = e, r
}
function v(t) {
return void 0 === t ? null : t.split(",").map(b)
}
function b(t) {
if (0 === t.length) return null;
var s = "@" === t[0];
return s && (t = t.slice(1)), "null" === t ? {name: "null", mandatory: !s, grid: null, isNull: !0} : {
name: t,
mandatory: !s,
grid: is[t] || null,
isNull: !1
}
}
function w(t) {
return t / 3600 * Math.PI / 180
}
function A(t) {
var s = t.getInt32(8, !1);
return 11 !== s && (11 !== (s = t.getInt32(8, !0)) && console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian"), !0)
}
function E(t, s) {
return {
nFields: t.getInt32(8, s),
nSubgridFields: t.getInt32(24, s),
nSubgrids: t.getInt32(40, s),
shiftType: N(t, 56, 64).trim(),
fromSemiMajorAxis: t.getFloat64(120, s),
fromSemiMinorAxis: t.getFloat64(136, s),
toSemiMajorAxis: t.getFloat64(152, s),
toSemiMinorAxis: t.getFloat64(168, s)
}
}
function N(t, s, i) {
return String.fromCharCode.apply(null, new Uint8Array(t.buffer.slice(s, i)))
}
function C(t, s, i) {
for (var a = [], h = 0; h < s.nSubgrids; h++) {
var e = S(t, 176, i), n = I(t, 176, e, i),
r = Math.round(1 + (e.upperLongitude - e.lowerLongitude) / e.longitudeInterval),
o = Math.round(1 + (e.upperLatitude - e.lowerLatitude) / e.latitudeInterval);
a.push({
ll: [w(e.lowerLongitude), w(e.lowerLatitude)],
del: [w(e.longitudeInterval), w(e.latitudeInterval)],
lim: [r, o],
count: e.gridNodeCount,
cvs: P(n)
})
}
return a
}
function P(t) {
return t.map(function (t) {
return [w(t.longitudeShift), w(t.latitudeShift)]
})
}
function S(t, s, i) {
return {
name: N(t, s + 8, s + 16).trim(),
parent: N(t, s + 24, s + 24 + 8).trim(),
lowerLatitude: t.getFloat64(s + 72, i),
upperLatitude: t.getFloat64(s + 88, i),
lowerLongitude: t.getFloat64(s + 104, i),
upperLongitude: t.getFloat64(s + 120, i),
latitudeInterval: t.getFloat64(s + 136, i),
longitudeInterval: t.getFloat64(s + 152, i),
gridNodeCount: t.getInt32(s + 168, i)
}
}
function I(t, s, i, a) {
for (var h = s + 176, e = [], n = 0; n < i.gridNodeCount; n++) {
var r = {
latitudeShift: t.getFloat32(h + 16 * n, a),
longitudeShift: t.getFloat32(h + 16 * n + 4, a),
latitudeAccuracy: t.getFloat32(h + 16 * n + 8, a),
longitudeAccuracy: t.getFloat32(h + 16 * n + 12, a)
};
e.push(r)
}
return e
}
function Projection(s, i) {
if (!(this instanceof Projection)) return new Projection(s);
i = i || function (t) {
if (t) throw t
};
var a = m(s);
if ("object" == typeof a) {
var h = Projection.projections.get(a.projName);
if (h) {
if (a.datumCode && "none" !== a.datumCode) {
var e = t(ss, a.datumCode);
e && (a.datum_params = a.datum_params || (e.towgs84 ? e.towgs84.split(",") : null), a.ellps = e.ellipse, a.datumName = e.datumName ? e.datumName : a.datumCode)
}
a.k0 = a.k0 || 1, a.axis = a.axis || "enu", a.ellps = a.ellps || "wgs84", a.lat1 = a.lat1 || a.lat0;
var n = x(a.a, a.b, a.rf, a.ellps, a.sphere), r = _(n.a, n.b, n.rf, a.R_A), o = v(a.nadgrids),
l = a.datum || g(a.datumCode, a.datum_params, n.a, n.b, r.es, r.ep2, o);
Ut(this, a), Ut(this, h), this.a = n.a, this.b = n.b, this.rf = n.rf, this.sphere = n.sphere, this.es = r.es, this.e = r.e, this.ep2 = r.ep2, this.datum = l, this.init(), i(null, this)
} else i(s)
} else i(s)
}
function O(t, s) {
return t.datum_type === s.datum_type && (!(t.a !== s.a || Math.abs(t.es - s.es) > 5e-11) && (t.datum_type === ft ? t.datum_params[0] === s.datum_params[0] && t.datum_params[1] === s.datum_params[1] && t.datum_params[2] === s.datum_params[2] : t.datum_type !== dt || t.datum_params[0] === s.datum_params[0] && t.datum_params[1] === s.datum_params[1] && t.datum_params[2] === s.datum_params[2] && t.datum_params[3] === s.datum_params[3] && t.datum_params[4] === s.datum_params[4] && t.datum_params[5] === s.datum_params[5] && t.datum_params[6] === s.datum_params[6]))
}
function k(t, s, i) {
var a, h, e, n, r = t.x, o = t.y, l = t.z ? t.z : 0;
if (o < -xt && o > -1.001 * xt) o = -xt; else if (o > xt && o < 1.001 * xt) o = xt; else {
if (o < -xt) return {x: -1 / 0, y: -1 / 0, z: t.z};
if (o > xt) return {x: 1 / 0, y: 1 / 0, z: t.z}
}
return r > Math.PI && (r -= 2 * Math.PI), h = Math.sin(o), n = Math.cos(o), e = h * h, a = i / Math.sqrt(1 - s * e), {
x: (a + l) * n * Math.cos(r),
y: (a + l) * n * Math.sin(r),
z: (a * (1 - s) + l) * h
}
}
function q(t, s, i, a) {
var h, e, n, r, o, l, c, u, M, f, d, m, p, y, _, x, g = t.x, v = t.y, b = t.z ? t.z : 0;
if (h = Math.sqrt(g * g + v * v), e = Math.sqrt(g * g + v * v + b * b), h / i < 1e-12) {
if (y = 0, e / i < 1e-12) return _ = xt, x = -a, {x: t.x, y: t.y, z: t.z}
} else y = Math.atan2(v, g);
n = b / e, u = (r = h / e) * (1 - s) * (o = 1 / Math.sqrt(1 - s * (2 - s) * r * r)), M = n * o, p = 0;
do {
p++, l = s * (c = i / Math.sqrt(1 - s * M * M)) / (c + (x = h * u + b * M - c * (1 - s * M * M))), m = (d = n * (o = 1 / Math.sqrt(1 - l * (2 - l) * r * r))) * u - (f = r * (1 - l) * o) * M, u = f, M = d
} while (m * m > 1e-24 && p < 30);
return _ = Math.atan(d / Math.abs(f)), {x: y, y: _, z: x}
}
function R(t, s, i) {
if (s === ft) return {x: t.x + i[0], y: t.y + i[1], z: t.z + i[2]};
if (s === dt) {
var a = i[0], h = i[1], e = i[2], n = i[3], r = i[4], o = i[5], l = i[6];
return {
x: l * (t.x - o * t.y + r * t.z) + a,
y: l * (o * t.x + t.y - n * t.z) + h,
z: l * (-r * t.x + n * t.y + t.z) + e
}
}
}
function T(t, s, i) {
if (s === ft) return {x: t.x - i[0], y: t.y - i[1], z: t.z - i[2]};
if (s === dt) {
var a = i[0], h = i[1], e = i[2], n = i[3], r = i[4], o = i[5], l = i[6], c = (t.x - a) / l,
u = (t.y - h) / l, M = (t.z - e) / l;
return {x: c + o * u - r * M, y: -o * c + u + n * M, z: r * c - n * u + M}
}
}
function L(t) {
return t === ft || t === dt
}
function G(t, s, i) {
if (null === t.grids || 0 === t.grids.length) return console.log("Grid shift grids not found"), -1;
for (var a = {x: -i.x, y: i.y}, h = {x: Number.NaN, y: Number.NaN}, e = [], n = 0; n < t.grids.length; n++) {
var r = t.grids[n];
if (e.push(r.name), r.isNull) {
h = a;
break
}
if (null !== r.grid) {
var o = r.grid.subgrids[0], l = (Math.abs(o.del[1]) + Math.abs(o.del[0])) / 1e4, c = o.ll[0] - l,
u = o.ll[1] - l, M = o.ll[0] + (o.lim[0] - 1) * o.del[0] + l,
f = o.ll[1] + (o.lim[1] - 1) * o.del[1] + l;
if (!(u > a.y || c > a.x || f < a.y || M < a.x || (h = j(a, s, o), isNaN(h.x)))) break
} else if (r.mandatory) return console.log("Unable to find mandatory grid '" + r.name + "'"), -1
}
return isNaN(h.x) ? (console.log("Failed to find a grid shift table for location '" + -a.x * Et + " " + a.y * Et + " tried: '" + e + "'"), -1) : (i.x = -h.x, i.y = h.y, 0)
}
function j(t, s, i) {
var a = {x: Number.NaN, y: Number.NaN};
if (isNaN(t.x)) return a;
var h = {x: t.x, y: t.y};
h.x -= i.ll[0], h.y -= i.ll[1], h.x = Ht(h.x - Math.PI) + Math.PI;
var e = B(h, i);
if (s) {
if (isNaN(e.x)) return a;
e.x = h.x - e.x, e.y = h.y - e.y;
var n, r, o = 9;
do {
if (r = B(e, i), isNaN(r.x)) {
console.log("Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.");
break
}
n = {x: h.x - (r.x + e.x), y: h.y - (r.y + e.y)}, e.x += n.x, e.y += n.y
} while (o-- && Math.abs(n.x) > 1e-12 && Math.abs(n.y) > 1e-12);
if (o < 0) return console.log("Inverse grid shift iterator failed to converge."), a;
a.x = Ht(e.x + i.ll[0]), a.y = e.y + i.ll[1]
} else isNaN(e.x) || (a.x = t.x + e.x, a.y = t.y + e.y);
return a
}
function B(t, s) {
var i, a = {x: t.x / s.del[0], y: t.y / s.del[1]}, h = {x: Math.floor(a.x), y: Math.floor(a.y)},
e = {x: a.x - 1 * h.x, y: a.y - 1 * h.y}, n = {x: Number.NaN, y: Number.NaN};
if (h.x < 0 || h.x >= s.lim[0]) return n;
if (h.y < 0 || h.y >= s.lim[1]) return n;
i = h.y * s.lim[0] + h.x;
var r = {x: s.cvs[i][0], y: s.cvs[i][1]};
i++;
var o = {x: s.cvs[i][0], y: s.cvs[i][1]};
i += s.lim[0];
var l = {x: s.cvs[i][0], y: s.cvs[i][1]};
i--;
var c = {x: s.cvs[i][0], y: s.cvs[i][1]}, u = e.x * e.y, M = e.x * (1 - e.y), f = (1 - e.x) * (1 - e.y),
d = (1 - e.x) * e.y;
return n.x = f * r.x + M * o.x + d * c.x + u * l.x, n.y = f * r.y + M * o.y + d * c.y + u * l.y, n
}
function z(t) {
if ("function" == typeof Number.isFinite) {
if (Number.isFinite(t)) return;
throw new TypeError("coordinates must be finite numbers")
}
if ("number" != typeof t || t !== t || !isFinite(t)) throw new TypeError("coordinates must be finite numbers")
}
function F(t, s) {
return (t.datum.datum_type === ft || t.datum.datum_type === dt) && "WGS84" !== s.datumCode || (s.datum.datum_type === ft || s.datum.datum_type === dt) && "WGS84" !== t.datumCode
}
function D(t, s, i) {
var a;
if (Array.isArray(i) && (i = es(i)), ns(i), t.datum && s.datum && F(t, s) && (i = D(t, a = new Projection("WGS84"), i), t = a), "enu" !== t.axis && (i = hs(t, !1, i)), "longlat" === t.projName) i = {
x: i.x * At,
y: i.y * At,
z: i.z || 0
}; else if (t.to_meter && (i = {
x: i.x * t.to_meter,
y: i.y * t.to_meter,
z: i.z || 0
}), !(i = t.inverse(i))) return;
if (t.from_greenwich && (i.x += t.from_greenwich), i = as(t.datum, s.datum, i)) return s.from_greenwich && (i = {
x: i.x - s.from_greenwich,
y: i.y,
z: i.z || 0
}), "longlat" === s.projName ? i = {
x: i.x * Et,
y: i.y * Et,
z: i.z || 0
} : (i = s.forward(i), s.to_meter && (i = {
x: i.x / s.to_meter,
y: i.y / s.to_meter,
z: i.z || 0
})), "enu" !== s.axis ? hs(s, !0, i) : i
}
function U(t, s, i) {
var a, h, e;
return Array.isArray(i) ? (a = D(t, s, i) || {
x: NaN,
y: NaN
}, i.length > 2 ? void 0 !== t.name && "geocent" === t.name || void 0 !== s.name && "geocent" === s.name ? "number" == typeof a.z ? [a.x, a.y, a.z].concat(i.splice(3)) : [a.x, a.y, i[2]].concat(i.splice(3)) : [a.x, a.y].concat(i.splice(2)) : [a.x, a.y]) : (h = D(t, s, i), 2 === (e = Object.keys(i)).length ? h : (e.forEach(function (a) {
if (void 0 !== t.name && "geocent" === t.name || void 0 !== s.name && "geocent" === s.name) {
if ("x" === a || "y" === a || "z" === a) return
} else if ("x" === a || "y" === a) return;
h[a] = i[a]
}), h))
}
function Q(t) {
return t instanceof Projection ? t : t.oProj ? t.oProj : Projection(t)
}
function W(t, s, i) {
t = Q(t);
var a, h = !1;
return void 0 === s ? (s = t, t = rs, h = !0) : (void 0 !== s.x || Array.isArray(s)) && (i = s, s = t, t = rs, h = !0), s = Q(s), i ? U(t, s, i) : (a = {
forward: function (i) {
return U(t, s, i)
}, inverse: function (i) {
return U(s, t, i)
}
}, h && (a.oProj = s), a)
}
function H(t, s) {
return s = s || 5, $(V({lat: t[1], lon: t[0]}), s)
}
function X(t) {
var s = Z(at(t.toUpperCase()));
return s.lat && s.lon ? [s.lon, s.lat] : [(s.left + s.right) / 2, (s.top + s.bottom) / 2]
}
function J(t) {
return t * (Math.PI / 180)
}
function K(t) {
return t / Math.PI * 180
}
function V(t) {
var s, i, a, h, e, n, r, o = t.lat, l = t.lon, c = 6378137, u = J(o), M = J(l);
r = Math.floor((l + 180) / 6) + 1, 180 === l && (r = 60), o >= 56 && o < 64 && l >= 3 && l < 12 && (r = 32), o >= 72 && o < 84 && (l >= 0 && l < 9 ? r = 31 : l >= 9 && l < 21 ? r = 33 : l >= 21 && l < 33 ? r = 35 : l >= 33 && l < 42 && (r = 37)), n = J(6 * (r - 1) - 180 + 3), s = c / Math.sqrt(1 - .00669438 * Math.sin(u) * Math.sin(u)), i = Math.tan(u) * Math.tan(u), a = .006739496752268451 * Math.cos(u) * Math.cos(u);
var f = .9996 * s * ((h = Math.cos(u) * (M - n)) + (1 - i + a) * h * h * h / 6 + (5 - 18 * i + i * i + 72 * a - .39089081163157013) * h * h * h * h * h / 120) + 5e5,
d = .9996 * ((e = c * (.9983242984503243 * u - .002514607064228144 * Math.sin(2 * u) + 2639046602129982e-21 * Math.sin(4 * u) - 3.418046101696858e-9 * Math.sin(6 * u))) + s * Math.tan(u) * (h * h / 2 + (5 - i + 9 * a + 4 * a * a) * h * h * h * h / 24 + (61 - 58 * i + i * i + 600 * a - 2.2240339282485886) * h * h * h * h * h * h / 720));
return o < 0 && (d += 1e7), {northing: Math.round(d), easting: Math.round(f), zoneNumber: r, zoneLetter: Y(o)}
}
function Z(t) {
var s = t.northing, i = t.easting, a = t.zoneLetter, h = t.zoneNumber;
if (h < 0 || h > 60) return null;
var e, n, r, o, l, c, u, M, f = 6378137, d = (1 - Math.sqrt(.99330562)) / (1 + Math.sqrt(.99330562)),
m = i - 5e5, p = s;
a < "N" && (p -= 1e7), c = 6 * (h - 1) - 180 + 3, M = (u = p / .9996 / 6367449.145945056) + (3 * d / 2 - 27 * d * d * d / 32) * Math.sin(2 * u) + (21 * d * d / 16 - 55 * d * d * d * d / 32) * Math.sin(4 * u) + 151 * d * d * d / 96 * Math.sin(6 * u), e = f / Math.sqrt(1 - .00669438 * Math.sin(M) * Math.sin(M)), n = Math.tan(M) * Math.tan(M), r = .006739496752268451 * Math.cos(M) * Math.cos(M), o = .99330562 * f / Math.pow(1 - .00669438 * Math.sin(M) * Math.sin(M), 1.5), l = m / (.9996 * e);
var y = M - e * Math.tan(M) / o * (l * l / 2 - (5 + 3 * n + 10 * r - 4 * r * r - .06065547077041606) * l * l * l * l / 24 + (61 + 90 * n + 298 * r + 45 * n * n - 1.6983531815716497 - 3 * r * r) * l * l * l * l * l * l / 720);
y = K(y);
var _ = (l - (1 + 2 * n + r) * l * l * l / 6 + (5 - 2 * r + 28 * n - 3 * r * r + .05391597401814761 + 24 * n * n) * l * l * l * l * l / 120) / Math.cos(M);
_ = c + K(_);
var x;
if (t.accuracy) {
var g = Z({
northing: t.northing + t.accuracy,
easting: t.easting + t.accuracy,
zoneLetter: t.zoneLetter,
zoneNumber: t.zoneNumber
});
x = {top: g.lat, right: g.lon, bottom: y, left: _}
} else x = {lat: y, lon: _};
return x
}
function Y(t) {
var s = "Z";
return 84 >= t && t >= 72 ? s = "X" : 72 > t && t >= 64 ? s = "W" : 64 > t && t >= 56 ? s = "V" : 56 > t && t >= 48 ? s = "U" : 48 > t && t >= 40 ? s = "T" : 40 > t && t >= 32 ? s = "S" : 32 > t && t >= 24 ? s = "R" : 24 > t && t >= 16 ? s = "Q" : 16 > t && t >= 8 ? s = "P" : 8 > t && t >= 0 ? s = "N" : 0 > t && t >= -8 ? s = "M" : -8 > t && t >= -16 ? s = "L" : -16 > t && t >= -24 ? s = "K" : -24 > t && t >= -32 ? s = "J" : -32 > t && t >= -40 ? s = "H" : -40 > t && t >= -48 ? s = "G" : -48 > t && t >= -56 ? s = "F" : -56 > t && t >= -64 ? s = "E" : -64 > t && t >= -72 ? s = "D" : -72 > t && t >= -80 && (s = "C"), s
}
function $(t, s) {
var i = "00000" + t.easting, a = "00000" + t.northing;
return t.zoneNumber + t.zoneLetter + tt(t.easting, t.northing, t.zoneNumber) + i.substr(i.length - 5, s) + a.substr(a.length - 5, s)
}
function tt(t, s, i) {
var a = st(i);
return it(Math.floor(t / 1e5), Math.floor(s / 1e5) % 20, a)
}
function st(t) {
var s = t % os;
return 0 === s && (s = os), s
}
function it(t, s, i) {
var a = i - 1, h = ls.charCodeAt(a), e = cs.charCodeAt(a), n = h + t - 1, r = e + s, o = !1;
return n > ms && (n = n - ms + us - 1, o = !0), (n === Ms || h < Ms && n > Ms || (n > Ms || h < Ms) && o) && n++, (n === fs || h < fs && n > fs || (n > fs || h < fs) && o) && ++n === Ms && n++, n > ms && (n = n - ms + us - 1), r > ds ? (r = r - ds + us - 1, o = !0) : o = !1, (r === Ms || e < Ms && r > Ms || (r > Ms || e < Ms) && o) && r++, (r === fs || e < fs && r > fs || (r > fs || e < fs) && o) && ++r === Ms && r++, r > ds && (r = r - ds + us - 1), String.fromCharCode(n) + String.fromCharCode(r)
}
function at(t) {
if (t && 0 === t.length) throw"MGRSPoint coverting from nothing";
for (var s, i = t.length, a = null, h = "", e = 0; !/[A-Z]/.test(s = t.charAt(e));) {
if (e >= 2) throw"MGRSPoint bad conversion from: " + t;
h += s, e++
}
var n = parseInt(h, 10);
if (0 === e || e + 3 > i) throw"MGRSPoint bad conversion from: " + t;
var r = t.charAt(e++);
if (r <= "A" || "B" === r || "Y" === r || r >= "Z" || "I" === r || "O" === r) throw"MGRSPoint zone letter " + r + " not handled: " + t;
a = t.substring(e, e += 2);
for (var o = st(n), l = ht(a.charAt(0), o), c = et(a.charAt(1), o); c < nt(r);) c += 2e6;
var u = i - e;
if (u % 2 != 0) 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" + t;
var M, f, d, m, p, y = u / 2, _ = 0, x = 0;
return y > 0 && (M = 1e5 / Math.pow(10, y), f = t.substring(e, e + y), _ = parseFloat(f) * M, d = t.substring(e + y), x = parseFloat(d) * M), m = _ + l, p = x + c, {
easting: m,
northing: p,
zoneLetter: r,
zoneNumber: n,
accuracy: M
}
}
function ht(t, s) {
for (var i = ls.charCodeAt(s - 1), a = 1e5, h = !1; i !== t.charCodeAt(0);) {
if (++i === Ms && i++, i === fs && i++, i > ms) {
if (h) throw"Bad character: " + t;
i = us, h = !0
}
a += 1e5
}
return a
}
function et(t, s) {
if (t > "V") throw"MGRSPoint given invalid Northing " + t;
for (var i = cs.charCodeAt(s - 1), a = 0, h = !1; i !== t.charCodeAt(0);) {
if (++i === Ms && i++, i === fs && i++, i > ds) {
if (h) throw"Bad character: " + t;
i = us, h = !0
}
a += 1e5
}
return a
}
function nt(t) {
var s;
switch (t) {
case"C":
s = 11e5;
break;
case"D":
s = 2e6;
break;
case"E":
s = 28e5;
break;
case"F":
s = 37e5;
break;
case"G":
s = 46e5;
break;
case"H":
s = 55e5;
break;
case"J":
s = 64e5;
break;
case"K":
s = 73e5;
break;
case"L":
s = 82e5;
break;
case"M":
s = 91e5;
break;
case"N":
s = 0;
break;
case"P":
s = 8e5;
break;
case"Q":
s = 17e5;
break;
case"R":
s = 26e5;
break;
case"S":
s = 35e5;
break;
case"T":
s = 44e5;
break;
case"U":
s = 53e5;
break;
case"V":
s = 62e5;
break;
case"W":
s = 7e6;
break;
case"X":
s = 79e5;
break;
default:
s = -1
}
if (s >= 0) return s;
throw"Invalid zone letter: " + t
}
function Point(t, s, i) {
if (!(this instanceof Point)) return new Point(t, s, i);
if (Array.isArray(t)) this.x = t[0], this.y = t[1], this.z = t[2] || 0; else if ("object" == typeof t) this.x = t.x, this.y = t.y, this.z = t.z || 0; else if ("string" == typeof t && void 0 === s) {
var a = t.split(",");
this.x = parseFloat(a[0], 10), this.y = parseFloat(a[1], 10), this.z = parseFloat(a[2], 10) || 0
} else this.x = t, this.y = s, this.z = i || 0;
console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")
}
function rt(t) {
var s = ["Hotine_Oblique_Mercator", "Hotine_Oblique_Mercator_Azimuth_Natural_Origin"],
i = "object" == typeof t.PROJECTION ? Object.keys(t.PROJECTION)[0] : t.PROJECTION;
return "no_uoff" in t || "no_off" in t || -1 !== s.indexOf(i)
}
function ot(t) {
var s, i = [];
return i[0] = t * $s, s = t * t, i[0] += s * ti, i[1] = s * ii, s *= t, i[0] += s * si, i[1] += s * ai, i[2] = s * hi, i
}
function lt(t, s) {
var i = t + t;
return t + s[0] * Math.sin(i) + s[1] * Math.sin(i + i) + s[2] * Math.sin(i + i + i)
}
function ct(t, s, i, a) {
var h;
return t < wt ? (a.value = Ai.AREA_0, h = 0) : (h = Math.atan2(s, i), Math.abs(h) <= Nt ? a.value = Ai.AREA_0 : h > Nt && h <= xt + Nt ? (a.value = Ai.AREA_1, h -= xt) : h > xt + Nt || h <= -(xt + Nt) ? (a.value = Ai.AREA_2, h = h >= 0 ? h - Pt : h + Pt) : (a.value = Ai.AREA_3, h += xt)), h
}
function ut(t, s) {
var i = t + s;
return i < -Pt ? i += Ct : i > +Pt && (i -= Ct), i
}
function Mt(t, s, i, a) {
for (var h = s; a; --a) {
var e = t(h);
if (h -= e, Math.abs(e) < i) break
}
return h
}
var ft = 1, dt = 2, mt = 3, pt = 4, yt = 5, _t = 484813681109536e-20, xt = Math.PI / 2, gt = .16666666666666666,
vt = .04722222222222222, bt = .022156084656084655, wt = 1e-10, At = .017453292519943295, Et = 57.29577951308232,
Nt = Math.PI / 4, Ct = 2 * Math.PI, Pt = 3.14159265359, St = {};
St.greenwich = 0, St.lisbon = -9.131906111111, St.paris = 2.337229166667, St.bogota = -74.080916666667, St.madrid = -3.687938888889, St.rome = 12.452333333333, St.bern = 7.439583333333, St.jakarta = 106.807719444444, St.ferro = -17.666666666667, St.brussels = 4.367975, St.stockholm = 18.058277777778, St.athens = 23.7163375, St.oslo = 10.722916666667;
var It = {ft: {to_meter: .3048}, "us-ft": {to_meter: 1200 / 3937}}, Ot = /[\s_\-\/\(\)]/g, kt = function (s) {
var i, a, h, e = {}, n = s.split("+").map(function (t) {
return t.trim()
}).filter(function (t) {
return t
}).reduce(function (t, s) {
var i = s.split("=");
return i.push(!0), t[i[0].toLowerCase()] = i[1], t
}, {}), r = {
proj: "projName", datum: "datumCode", rf: function (t) {
e.rf = parseFloat(t)
}, lat_0: function (t) {
e.lat0 = t * At
}, lat_1: function (t) {
e.lat1 = t * At
}, lat_2: function (t) {
e.lat2 = t * At
}, lat_ts: function (t) {
e.lat_ts = t * At
}, lon_0: function (t) {
e.long0 = t * At
}, lon_1: function (t) {
e.long1 = t * At
}, lon_2: function (t) {
e.long2 = t * At
}, alpha: function (t) {
e.alpha = parseFloat(t) * At
}, gamma: function (t) {
e.rectified_grid_angle = parseFloat(t)
}, lonc: function (t) {
e.longc = t * At
}, x_0: function (t) {
e.x0 = parseFloat(t)
}, y_0: function (t) {
e.y0 = parseFloat(t)
}, k_0: function (t) {
e.k0 = parseFloat(t)
}, k: function (t) {
e.k0 = parseFloat(t)
}, a: function (t) {
e.a = parseFloat(t)
}, b: function (t) {
e.b = parseFloat(t)
}, r_a: function () {
e.R_A = !0
}, zone: function (t) {
e.zone = parseInt(t, 10)
}, south: function () {
e.utmSouth = !0
}, towgs84: function (t) {
e.datum_params = t.split(",").map(function (t) {
return parseFloat(t)
})
}, to_meter: function (t) {
e.to_meter = parseFloat(t)
}, units: function (s) {
e.units = s;
var i = t(It, s);
i && (e.to_meter = i.to_meter)
}, from_greenwich: function (t) {
e.from_greenwich = t * At
}, pm: function (s) {
var i = t(St, s);
e.from_greenwich = (i || parseFloat(s)) * At
}, nadgrids: function (t) {
"@null" === t ? e.datumCode = "none" : e.nadgrids = t
}, axis: function (t) {
3 === t.length && -1 !== "ewnsud".indexOf(t.substr(0, 1)) && -1 !== "ewnsud".indexOf(t.substr(1, 1)) && -1 !== "ewnsud".indexOf(t.substr(2, 1)) && (e.axis = t)
}, approx: function () {
e.approx = !0
}
};
for (i in n) a = n[i], i in r ? "function" == typeof (h = r[i]) ? h(a) : e[h] = a : e[i] = a;
return "string" == typeof e.datumCode && "WGS84" !== e.datumCode && (e.datumCode = e.datumCode.toLowerCase()), e
}, qt = 1, Rt = /\s/, Tt = /[A-Za-z]/, Lt = /[A-Za-z84]/, Gt = /[,\]]/, jt = /[\d\.E\-\+]/;
s.prototype.readCharicter = function () {
var t = this.text[this.place++];
if (4 !== this.state) for (; Rt.test(t);) {
if (this.place >= this.text.length) return;
t = this.text[this.place++]
}
switch (this.state) {
case qt:
return this.neutral(t);
case 2:
return this.keyword(t);
case 4:
return this.quoted(t);
case 5:
return this.afterquote(t);
case 3:
return this.number(t);
case-1:
return
}
}, s.prototype.afterquote = function (t) {
if ('"' === t) return this.word += '"', void (this.state = 4);
if (Gt.test(t)) return this.word = this.word.trim(), void this.afterItem(t);
throw new Error("havn't handled \"" + t + '" in afterquote yet, index ' + this.place)
}, s.prototype.afterItem = function (t) {
return "," === t ? (null !== this.word && this.currentObject.push(this.word), this.word = null, void (this.state = qt)) : "]" === t ? (this.level--, null !== this.word && (this.currentObject.push(this.word), this.word = null), this.state = qt, this.currentObject = this.stack.pop(), void (this.currentObject || (this.state = -1))) : void 0
}, s.prototype.number = function (t) {
if (!jt.test(t)) {
if (Gt.test(t)) return this.word = parseFloat(this.word), void this.afterItem(t);
throw new Error("havn't handled \"" + t + '" in number yet, index ' + this.place)
}
this.word += t
}, s.prototype.quoted = function (t) {
'"' !== t ? this.word += t : this.state = 5
}, s.prototype.keyword = function (t) {
if (Lt.test(t)) this.word += t; else {
if ("[" === t) {
var s = [];
return s.push(this.word), this.level++, null === this.root ? this.root = s : this.currentObject.push(s), this.stack.push(this.currentObject), this.currentObject = s, void (this.state = qt)
}
if (!Gt.test(t)) throw new Error("havn't handled \"" + t + '" in keyword yet, index ' + this.place);
this.afterItem(t)
}
}, s.prototype.neutral = function (t) {
if (Tt.test(t)) return this.word = t, void (this.state = 2);
if ('"' === t) return this.word = "", void (this.state = 4);
if (jt.test(t)) return this.word = t, void (this.state = 3);
{
if (!Gt.test(t)) throw new Error("havn't handled \"" + t + '" in neutral yet, index ' + this.place);
this.afterItem(t)
}
}, s.prototype.output = function () {
for (; this.place < this.text.length;) this.readCharicter();
if (-1 === this.state) return this.root;
throw new Error('unable to parse string "' + this.text + '". State is ' + this.state)
};
var Bt = .017453292519943295, zt = function (t) {
var s = i(t), a = s.shift(), e = s.shift();
s.unshift(["name", e]), s.unshift(["type", a]);
var n = {};
return h(s, n), r(n), n
};
!function (t) {
t("EPSG:4326", "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"), t("EPSG:4269", "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"), t("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"), t.WGS84 = t["EPSG:4326"], t["EPSG:3785"] = t["EPSG:3857"], t.GOOGLE = t["EPSG:3857"], t["EPSG:900913"] = t["EPSG:3857"], t["EPSG:102113"] = t["EPSG:3857"]
}(o);
var Ft = ["PROJECTEDCRS", "PROJCRS", "GEOGCS", "GEOCCS", "PROJCS", "LOCAL_CS", "GEODCRS", "GEODETICCRS", "GEODETICDATUM", "ENGCRS", "ENGINEERINGCRS"],
Dt = ["3857", "900913", "3785", "102113"], Ut = function (t, s) {
t = t || {};
var i, a;
if (!s) return t;
for (a in s) void 0 !== (i = s[a]) && (t[a] = i);
return t
}, Qt = function (t, s, i) {
var a = t * s;
return i / Math.sqrt(1 - a * a)
}, Wt = function (t) {
return t < 0 ? -1 : 1
}, Ht = function (t) {
return Math.abs(t) <= Pt ? t : t - Wt(t) * Ct
}, Xt = function (t, s, i) {
var a = t * i, h = .5 * t;
return a = Math.pow((1 - a) / (1 + a), h), Math.tan(.5 * (xt - s)) / a
}, Jt = function (t, s) {
for (var i, a, h = .5 * t, e = xt - 2 * Math.atan(s), n = 0; n <= 15; n++) if (i = t * Math.sin(e), a = xt - 2 * Math.atan(s * Math.pow((1 - i) / (1 + i), h)) - e, e += a, Math.abs(a) <= 1e-10) return e;
return -9999
}, Kt = [{
init: function () {
var t = this.b / this.a;
this.es = 1 - t * t, "x0" in this || (this.x0 = 0), "y0" in this || (this.y0 = 0), this.e = Math.sqrt(this.es), this.lat_ts ? this.sphere ? this.k0 = Math.cos(this.lat_ts) : this.k0 = Qt(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) : this.k0 || (this.k ? this.k0 = this.k : this.k0 = 1)
},
forward: function (t) {
var s = t.x, i = t.y;
if (i * Et > 90 && i * Et < -90 && s * Et > 180 && s * Et < -180) return null;
var a, h;
if (Math.abs(Math.abs(i) - xt) <= wt) return null;
if (this.sphere) a = this.x0 + this.a * this.k0 * Ht(s - this.long0), h = this.y0 + this.a * this.k0 * Math.log(Math.tan(Nt + .5 * i)); else {
var e = Math.sin(i), n = Xt(this.e, i, e);
a = this.x0 + this.a * this.k0 * Ht(s - this.long0), h = this.y0 - this.a * this.k0 * Math.log(n)
}
return t.x = a, t.y = h, t
},
inverse: function (t) {
var s, i, a = t.x - this.x0, h = t.y - this.y0;
if (this.sphere) i = xt - 2 * Math.atan(Math.exp(-h / (this.a * this.k0))); else {
var e = Math.exp(-h / (this.a * this.k0));
if (-9999 === (i = Jt(this.e, e))) return null
}
return s = Ht(this.long0 + a / (this.a * this.k0)), t.x = s, t.y = i, t
},
names: ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP", "Mercator_Auxiliary_Sphere", "merc"]
}, {
init: function () {
}, forward: p, inverse: p, names: ["longlat", "identity"]
}], Vt = {}, Zt = [], Yt = {
start: function () {
Kt.forEach(y)
}, add: y, get: function (t) {
if (!t) return !1;
var s = t.toLowerCase();
return void 0 !== Vt[s] && Zt[Vt[s]] ? Zt[Vt[s]] : void 0
}
}, $t = {};
$t.MERIT = {a: 6378137, rf: 298.257, ellipseName: "MERIT 1983"}, $t.SGS85 = {
a: 6378136,
rf: 298.257,
ellipseName: "Soviet Geodetic System 85"
}, $t.GRS80 = {a: 6378137, rf: 298.257222101, ellipseName: "GRS 1980(IUGG, 1980)"}, $t.IAU76 = {
a: 6378140,
rf: 298.257,
ellipseName: "IAU 1976"
}, $t.airy = {a: 6377563.396, b: 6356256.91, ellipseName: "Airy 1830"}, $t.APL4 = {
a: 6378137,
rf: 298.25,
ellipseName: "Appl. Physics. 1965"
}, $t.NWL9D = {a: 6378145, rf: 298.25, ellipseName: "Naval Weapons Lab., 1965"}, $t.mod_airy = {
a: 6377340.189,
b: 6356034.446,
ellipseName: "Modified Airy"
}, $t.andrae = {a: 6377104.43, rf: 300, ellipseName: "Andrae 1876 (Den., Iclnd.)"}, $t.aust_SA = {
a: 6378160,
rf: 298.25,
ellipseName: "Australian Natl & S. Amer. 1969"
}, $t.GRS67 = {a: 6378160, rf: 298.247167427, ellipseName: "GRS 67(IUGG 1967)"}, $t.bessel = {
a: 6377397.155,
rf: 299.1528128,
ellipseName: "Bessel 1841"
}, $t.bess_nam = {a: 6377483.865, rf: 299.1528128, ellipseName: "Bessel 1841 (Namibia)"}, $t.clrk66 = {
a: 6378206.4,
b: 6356583.8,
ellipseName: "Clarke 1866"
}, $t.clrk80 = {a: 6378249.145, rf: 293.4663, ellipseName: "Clarke 1880 mod."}, $t.clrk58 = {
a: 6378293.645208759,
rf: 294.2606763692654,
ellipseName: "Clarke 1858"
}, $t.CPM = {a: 6375738.7, rf: 334.29, ellipseName: "Comm. des Poids et Mesures 1799"}, $t.delmbr = {
a: 6376428,
rf: 311.5,
ellipseName: "Delambre 1810 (Belgium)"
}, $t.engelis = {a: 6378136.05, rf: 298.2566, ellipseName: "Engelis 1985"}, $t.evrst30 = {
a: 6377276.345,
rf: 300.8017,
ellipseName: "Everest 1830"
}, $t.evrst48 = {a: 6377304.063, rf: 300.8017, ellipseName: "Everest 1948"}, $t.evrst56 = {
a: 6377301.243,
rf: 300.8017,
ellipseName: "Everest 1956"
}, $t.evrst69 = {a: 6377295.664, rf: 300.8017, ellipseName: "Everest 1969"}, $t.evrstSS = {
a: 6377298.556,
rf: 300.8017,
ellipseName: "Everest (Sabah & Sarawak)"
}, $t.fschr60 = {a: 6378166, rf: 298.3, ellipseName: "Fischer (Mercury Datum) 1960"}, $t.fschr60m = {
a: 6378155,
rf: 298.3,
ellipseName: "Fischer 1960"
}, $t.fschr68 = {a: 6378150, rf: 298.3, ellipseName: "Fischer 1968"}, $t.helmert = {
a: 6378200,
rf: 298.3,
ellipseName: "Helmert 1906"
}, $t.hough = {a: 6378270, rf: 297, ellipseName: "Hough"}, $t.intl = {
a: 6378388,
rf: 297,
ellipseName: "International 1909 (Hayford)"
}, $t.kaula = {a: 6378163, rf: 298.24, ellipseName: "Kaula 1961"}, $t.lerch = {
a: 6378139,
rf: 298.257,
ellipseName: "Lerch 1979"
}, $t.mprts = {a: 6397300, rf: 191, ellipseName: "Maupertius 1738"}, $t.new_intl = {
a: 6378157.5,
b: 6356772.2,
ellipseName: "New International 1967"
}, $t.plessis = {a: 6376523, rf: 6355863, ellipseName: "Plessis 1817 (France)"}, $t.krass = {
a: 6378245,
rf: 298.3,
ellipseName: "Krassovsky, 1942"
}, $t.SEasia = {a: 6378155, b: 6356773.3205, ellipseName: "Southeast Asia"}, $t.walbeck = {
a: 6376896,
b: 6355834.8467,
ellipseName: "Walbeck"
}, $t.WGS60 = {a: 6378165, rf: 298.3, ellipseName: "WGS 60"}, $t.WGS66 = {
a: 6378145,
rf: 298.25,
ellipseName: "WGS 66"
}, $t.WGS7 = {a: 6378135, rf: 298.26, ellipseName: "WGS 72"};
var ts = $t.WGS84 = {a: 6378137, rf: 298.257223563, ellipseName: "WGS 84"};
$t.sphere = {a: 6370997, b: 6370997, ellipseName: "Normal Sphere (r=6370997)"};
var ss = {};
ss.wgs84 = {towgs84: "0,0,0", ellipse: "WGS84", datumName: "WGS84"}, ss.ch1903 = {
towgs84: "674.374,15.056,405.346",
ellipse: "bessel",
datumName: "swiss"
}, ss.ggrs87 = {
towgs84: "-199.87,74.79,246.62",
ellipse: "GRS80",
datumName: "Greek_Geodetic_Reference_System_1987"
}, ss.nad83 = {
towgs84: "0,0,0",
ellipse: "GRS80",
datumName: "North_American_Datum_1983"
}, ss.nad27 = {
nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",
ellipse: "clrk66",
datumName: "North_American_Datum_1927"
}, ss.potsdam = {
towgs84: "606.0,23.0,413.0",
ellipse: "bessel",
datumName: "Potsdam Rauenberg 1950 DHDN"
}, ss.carthage = {
towgs84: "-263.0,6.0,431.0",
ellipse: "clark80",
datumName: "Carthage 1934 Tunisia"
}, ss.hermannskogel = {
towgs84: "653.0,-212.0,449.0",
ellipse: "bessel",
datumName: "Hermannskogel"
}, ss.osni52 = {
towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
ellipse: "airy",
datumName: "Irish National"
}, ss.ire65 = {
towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
ellipse: "mod_airy",
datumName: "Ireland 1965"
}, ss.rassadiran = {
towgs84: "-133.63,-157.5,-158.62",
ellipse: "intl",
datumName: "Rassadiran"
}, ss.nzgd49 = {
towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",
ellipse: "intl",
datumName: "New Zealand Geodetic Datum 1949"
}, ss.osgb36 = {
towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",
ellipse: "airy",
datumName: "Airy 1830"
}, ss.s_jtsk = {
towgs84: "589,76,480",
ellipse: "bessel",
datumName: "S-JTSK (Ferro)"
}, ss.beduaram = {
towgs84: "-106,-87,188",
ellipse: "clrk80",
datumName: "Beduaram"
}, ss.gunung_segara = {
towgs84: "-403,684,41",
ellipse: "bessel",
datumName: "Gunung Segara Jakarta"
}, ss.rnb72 = {
towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",
ellipse: "intl",
datumName: "Reseau National Belge 1972"
};
var is = {};
Projection.projections = Yt, Projection.projections.start();
var as = function (t, s, i) {
if (O(t, s)) return i;
if (t.datum_type === yt || s.datum_type === yt) return i;
var a = t.a, h = t.es;
if (t.datum_type === mt) {
if (0 !== G(t, !1, i)) return;
a = 6378137, h = .0066943799901413165
}
var e = s.a, n = s.b, r = s.es;
return s.datum_type === mt && (e = 6378137, n = 6356752.314, r = .0066943799901413165), h !== r || a !== e || L(t.datum_type) || L(s.datum_type) ? (i = k(i, h, a), L(t.datum_type) && (i = R(i, t.datum_type, t.datum_params)), L(s.datum_type) && (i = T(i, s.datum_type, s.datum_params)), i = q(i, r, e, n), s.datum_type !== mt || 0 === G(s, !0, i) ? i : void 0) : i
}, hs = function (t, s, i) {
var a, h, e, n = i.x, r = i.y, o = i.z || 0, l = {};
for (e = 0; e < 3; e++) if (!s || 2 !== e || void 0 !== i.z) switch (0 === e ? (a = n, h = -1 !== "ew".indexOf(t.axis[e]) ? "x" : "y") : 1 === e ? (a = r, h = -1 !== "ns".indexOf(t.axis[e]) ? "y" : "x") : (a = o, h = "z"), t.axis[e]) {
case"e":
l[h] = a;
break;
case"w":
l[h] = -a;
break;
case"n":
l[h] = a;
break;
case"s":
l[h] = -a;
break;
case"u":
void 0 !== i[h] && (l.z = a);
break;
case"d":
void 0 !== i[h] && (l.z = -a);
break;
default:
return null
}
return l
}, es = function (t) {
var s = {x: t[0], y: t[1]};
return t.length > 2 && (s.z = t[2]), t.length > 3 && (s.m = t[3]), s
}, ns = function (t) {
z(t.x), z(t.y)
}, rs = Projection("WGS84"), os = 6, ls = "AJSAJS", cs = "AFAFAF", us = 65, Ms = 73, fs = 79, ds = 86, ms = 90,
ps = {
forward: H, inverse: function (t) {
var s = Z(at(t.toUpperCase()));
return s.lat && s.lon ? [s.lon, s.lat, s.lon, s.lat] : [s.left, s.bottom, s.right, s.top]
}, toPoint: X
};
Point.fromMGRS = function (t) {
return new Point(X(t))
}, Point.prototype.toMGRS = function (t) {
return H([this.x, this.y], t)
};
var ys = .01068115234375, _s = function (t) {
var s = [];
s[0] = 1 - t * (.25 + t * (.046875 + t * (.01953125 + t * ys))), s[1] = t * (.75 - t * (.046875 + t * (.01953125 + t * ys)));
var i = t * t;
return s[2] = i * (.46875 - t * (.013020833333333334 + .007120768229166667 * t)), i *= t, s[3] = i * (.3645833333333333 - .005696614583333333 * t), s[4] = i * t * .3076171875, s
}, xs = function (t, s, i, a) {
return i *= s, s *= s, a[0] * t - i * (a[1] + s * (a[2] + s * (a[3] + s * a[4])))
}, gs = function (t, s, i) {
for (var a = 1 / (1 - s), h = t, e = 20; e; --e) {
var n = Math.sin(h), r = 1 - s * n * n;
if (r = (xs(h, n, Math.cos(h), i) - t) * (r * Math.sqrt(r)) * a, h -= r, Math.abs(r) < wt) return h
}
return h
}, vs = {
init: function () {
this.x0 = void 0 !== this.x0 ? this.x0 : 0, this.y0 = void 0 !== this.y0 ? this.y0 : 0, this.long0 = void 0 !== this.long0 ? this.long0 : 0, this.lat0 = void 0 !== this.lat0 ? this.lat0 : 0, this.es && (this.en = _s(this.es), this.ml0 = xs(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en))
}, forward: function (t) {
var s, i, a, h = t.x, e = t.y, n = Ht(h - this.long0), r = Math.sin(e), o = Math.cos(e);
if (this.es) {
var l = o * n, c = Math.pow(l, 2), u = this.ep2 * Math.pow(o, 2), M = Math.pow(u, 2),
f = Math.abs(o) > wt ? Math.tan(e) : 0, d = Math.pow(f, 2), m = Math.pow(d, 2);
s = 1 - this.es * Math.pow(r, 2), l /= Math.sqrt(s);
var p = xs(e, r, o, this.en);
i = this.a * (this.k0 * l * (1 + c / 6 * (1 - d + u + c / 20 * (5 - 18 * d + m + 14 * u - 58 * d * u + c / 42 * (61 + 179 * m - m * d - 479 * d))))) + this.x0, a = this.a * (this.k0 * (p - this.ml0 + r * n * l / 2 * (1 + c / 12 * (5 - d + 9 * u + 4 * M + c / 30 * (61 + m - 58 * d + 270 * u - 330 * d * u + c / 56 * (1385 + 543 * m - m * d - 3111 * d)))))) + this.y0
} else {
var y = o * Math.sin(n);
if (Math.abs(Math.abs(y) - 1) < wt) return 93;
if (i = .5 * this.a * this.k0 * Math.log((1 + y) / (1 - y)) + this.x0, a = o * Math.cos(n) / Math.sqrt(1 - Math.pow(y, 2)), (y = Math.abs(a)) >= 1) {
if (y - 1 > wt) return 93;
a = 0
} else a = Math.acos(a);
e < 0 && (a = -a), a = this.a * this.k0 * (a - this.lat0) + this.y0
}
return t.x = i, t.y = a, t
}, inverse: function (t) {
var s, i, a, h, e = (t.x - this.x0) * (1 / this.a), n = (t.y - this.y0) * (1 / this.a);
if (this.es) if (s = this.ml0 + n / this.k0, i = gs(s, this.es, this.en), Math.abs(i) < xt) {
var r = Math.sin(i), o = Math.cos(i), l = Math.abs(o) > wt ? Math.tan(i) : 0,
c = this.ep2 * Math.pow(o, 2), u = Math.pow(c, 2), M = Math.pow(l, 2), f = Math.pow(M, 2);
s = 1 - this.es * Math.pow(r, 2);
var d = e * Math.sqrt(s) / this.k0, m = Math.pow(d, 2);
a = i - (s *= l) * m / (1 - this.es) * .5 * (1 - m / 12 * (5 + 3 * M - 9 * c * M + c - 4 * u - m / 30 * (61 + 90 * M - 252 * c * M + 45 * f + 46 * c - m / 56 * (1385 + 3633 * M + 4095 * f + 1574 * f * M)))), h = Ht(this.long0 + d * (1 - m / 6 * (1 + 2 * M + c - m / 20 * (5 + 28 * M + 24 * f + 8 * c * M + 6 * c - m / 42 * (61 + 662 * M + 1320 * f + 720 * f * M)))) / o)
} else a = xt * Wt(n), h = 0; else {
var p = Math.exp(e / this.k0), y = .5 * (p - 1 / p), _ = this.lat0 + n / this.k0, x = Math.cos(_);
s = Math.sqrt((1 - Math.pow(x, 2)) / (1 + Math.pow(y, 2))), a = Math.asin(s), n < 0 && (a = -a), h = 0 === y && 0 === x ? 0 : Ht(Math.atan2(y, x) + this.long0)
}
return t.x = h, t.y = a, t
}, names: ["Fast_Transverse_Mercator", "Fast Transverse Mercator"]
}, bs = function (t) {
var s = Math.exp(t);
return s = (s - 1 / s) / 2
}, ws = function (t, s) {
t = Math.abs(t), s = Math.abs(s);
var i = Math.max(t, s), a = Math.min(t, s) / (i || 1);
return i * Math.sqrt(1 + Math.pow(a, 2))
}, As = function (t) {
var s = 1 + t, i = s - 1;
return 0 === i ? t : t * Math.log(s) / i
}, Es = function (t) {
var s = Math.abs(t);
return s = As(s * (1 + s / (ws(1, s) + 1))), t < 0 ? -s : s
}, Ns = function (t, s) {
for (var i, a = 2 * Math.cos(2 * s), h = t.length - 1, e = t[h], n = 0; --h >= 0;) i = a * e - n + t[h], n = e, e = i;
return s + i * Math.sin(2 * s)
}, Cs = function (t, s) {
for (var i, a = 2 * Math.cos(s), h = t.length - 1, e = t[h], n = 0; --h >= 0;) i = a * e - n + t[h], n = e, e = i;
return Math.sin(s) * i
}, Ps = function (t) {
var s = Math.exp(t);
return s = (s + 1 / s) / 2
}, Ss = function (t, s, i) {
for (var a, h, e = Math.sin(s), n = Math.cos(s), r = bs(i), o = Ps(i), l = 2 * n * o, c = -2 * e * r, u = t.length - 1, M = t[u], f = 0, d = 0, m = 0; --u >= 0;) a = d, h = f, M = l * (d = M) - a - c * (f = m) + t[u], m = c * d - h + l * f;
return l = e * o, c = n * r, [l * M - c * m, l * m + c * M]
}, Is = {
init: function () {
if (!this.approx && (isNaN(this.es) || this.es <= 0)) throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');
this.approx && (vs.init.apply(this), this.forward = vs.forward, this.inverse = vs.inverse), this.x0 = void 0 !== this.x0 ? this.x0 : 0, this.y0 = void 0 !== this.y0 ? this.y0 : 0, this.long0 = void 0 !== this.long0 ? this.long0 : 0, this.lat0 = void 0 !== this.lat0 ? this.lat0 : 0, this.cgb = [], this.cbg = [], this.utg = [], this.gtu = [];
var t = this.es / (1 + Math.sqrt(1 - this.es)), s = t / (2 - t), i = s;
this.cgb[0] = s * (2 + s * (-2 / 3 + s * (s * (116 / 45 + s * (26 / 45 + s * (-2854 / 675))) - 2))), this.cbg[0] = s * (s * (2 / 3 + s * (4 / 3 + s * (-82 / 45 + s * (32 / 45 + s * (4642 / 4725))))) - 2), i *= s, this.cgb[1] = i * (7 / 3 + s * (s * (-227 / 45 + s * (2704 / 315 + s * (2323 / 945))) - 1.6)), this.cbg[1] = i * (5 / 3 + s * (-16 / 15 + s * (-13 / 9 + s * (904 / 315 + s * (-1522 / 945))))), i *= s, this.cgb[2] = i * (56 / 15 + s * (-136 / 35 + s * (-1262 / 105 + s * (73814 / 2835)))), this.cbg[2] = i * (-26 / 15 + s * (34 / 21 + s * (1.6 + s * (-12686 / 2835)))), i *= s, this.cgb[3] = i * (4279 / 630 + s * (-332 / 35 + s * (-399572 / 14175))), this.cbg[3] = i * (1237 / 630 + s * (s * (-24832 / 14175) - 2.4)), i *= s, this.cgb[4] = i * (4174 / 315 + s * (-144838 / 6237)), this.cbg[4] = i * (-734 / 315 + s * (109598 / 31185)), i *= s, this.cgb[5] = i * (601676 / 22275), this.cbg[5] = i * (444337 / 155925), i = Math.pow(s, 2), this.Qn = this.k0 / (1 + s) * (1 + i * (.25 + i * (1 / 64 + i / 256))), this.utg[0] = s * (s * (2 / 3 + s * (-37 / 96 + s * (1 / 360 + s * (81 / 512 + s * (-96199 / 604800))))) - .5), this.gtu[0] = s * (.5 + s * (-2 / 3 + s * (5 / 16 + s * (41 / 180 + s * (-127 / 288 + s * (7891 / 37800)))))), this.utg[1] = i * (-1 / 48 + s * (-1 / 15 + s * (437 / 1440 + s * (-46 / 105 + s * (1118711 / 3870720))))), this.gtu[1] = i * (13 / 48 + s * (s * (557 / 1440 + s * (281 / 630 + s * (-1983433 / 1935360))) - .6)), i *= s, this.utg[2] = i * (-17 / 480 + s * (37 / 840 + s * (209 / 4480 + s * (-5569 / 90720)))), this.gtu[2] = i * (61 / 240 + s * (-103 / 140 + s * (15061 / 26880 + s * (167603 / 181440)))), i *= s, this.utg[3] = i * (-4397 / 161280 + s * (11 / 504 + s * (830251 / 7257600))), this.gtu[3] = i * (49561 / 161280 + s * (-179 / 168 + s * (6601661 / 7257600))), i *= s, this.utg[4] = i * (-4583 / 161280 + s * (108847 / 3991680)), this.gtu[4] = i * (34729 / 80640 + s * (-3418889 / 1995840)), i *= s, this.utg[5] = -.03233083094085698 * i, this.gtu[5] = .6650675310896665 * i;
var a = Ns(this.cbg, this.lat0);
this.Zb = -this.Qn * (a + Cs(this.gtu, 2 * a))
},
forward: function (t) {
var s = Ht(t.x - this.long0), i = t.y;
i = Ns(this.cbg, i);
var a = Math.sin(i), h = Math.cos(i), e = Math.sin(s), n = Math.cos(s);
i = Math.atan2(a, n * h), s = Math.atan2(e * h, ws(a, h * n)), s = Es(Math.tan(s));
var r = Ss(this.gtu, 2 * i, 2 * s);
i += r[0], s += r[1];
var o, l;
return Math.abs(s) <= 2.623395162778 ? (o = this.a * (this.Qn * s) + this.x0, l = this.a * (this.Qn * i + this.Zb) + this.y0) : (o = 1 / 0, l = 1 / 0), t.x = o, t.y = l, t
},
inverse: function (t) {
var s = (t.x - this.x0) * (1 / this.a), i = (t.y - this.y0) * (1 / this.a);
i = (i - this.Zb) / this.Qn, s /= this.Qn;
var a, h;
if (Math.abs(s) <= 2.623395162778) {
var e = Ss(this.utg, 2 * i, 2 * s);
i += e[0], s += e[1], s = Math.atan(bs(s));
var n = Math.sin(i), r = Math.cos(i), o = Math.sin(s), l = Math.cos(s);
i = Math.atan2(n * l, ws(o, l * r)), s = Math.atan2(o, l * r), a = Ht(s + this.long0), h = Ns(this.cgb, i)
} else a = 1 / 0, h = 1 / 0;
return t.x = a, t.y = h, t
},
names: ["Extended_Transverse_Mercator", "Extended Transverse Mercator", "etmerc", "Transverse_Mercator", "Transverse Mercator", "tmerc"]
}, Os = function (t, s) {
if (void 0 === t) {
if ((t = Math.floor(30 * (Ht(s) + Math.PI) / Math.PI) + 1) < 0) return 0;
if (t > 60) return 60
}
return t
}, ks = {
init: function () {
var t = Os(this.zone, this.long0);
if (void 0 === t) throw new Error("unknown utm zone");
this.lat0 = 0, this.long0 = (6 * Math.abs(t) - 183) * At, this.x0 = 5e5, this.y0 = this.utmSouth ? 1e7 : 0, this.k0 = .9996, Is.init.apply(this), this.forward = Is.forward, this.inverse = Is.inverse
}, names: ["Universal Transverse Mercator System", "utm"], dependsOn: "etmerc"
}, qs = function (t, s) {
return Math.pow((1 - t) / (1 + t), s)
}, Rs = 20, Ts = {
init: function () {
var t = Math.sin(this.lat0), s = Math.cos(this.lat0);
s *= s, this.rc = Math.sqrt(1 - this.es) / (1 - this.es * t * t), this.C = Math.sqrt(1 + this.es * s * s / (1 - this.es)), this.phic0 = Math.asin(t / this.C), this.ratexp = .5 * this.C * this.e, this.K = Math.tan(.5 * this.phic0 + Nt) / (Math.pow(Math.tan(.5 * this.lat0 + Nt), this.C) * qs(this.e * t, this.ratexp))
}, forward: function (t) {
var s = t.x, i = t.y;
return t.y = 2 * Math.atan(this.K * Math.pow(Math.tan(.5 * i + Nt), this.C) * qs(this.e * Math.sin(i), this.ratexp)) - xt, t.x = this.C * s, t
}, inverse: function (t) {
for (var s = t.x / this.C, i = t.y, a = Math.pow(Math.tan(.5 * i + Nt) / this.K, 1 / this.C), h = Rs; h > 0 && (i = 2 * Math.atan(a * qs(this.e * Math.sin(t.y), -.5 * this.e)) - xt, !(Math.abs(i - t.y) < 1e-14)); --h) t.y = i;
return h ? (t.x = s, t.y = i, t) : null
}, names: ["gauss"]
}, Ls = {
init: function () {
Ts.init.apply(this), this.rc && (this.sinc0 = Math.sin(this.phic0), this.cosc0 = Math.cos(this.phic0), this.R2 = 2 * this.rc, this.title || (this.title = "Oblique Stereographic Alternative"))
},
forward: function (t) {
var s, i, a, h;
return t.x = Ht(t.x - this.long0), Ts.forward.apply(this, [t]), s = Math.sin(t.y), i = Math.cos(t.y), a = Math.cos(t.x), h = this.k0 * this.R2 / (1 + this.sinc0 * s + this.cosc0 * i * a), t.x = h * i * Math.sin(t.x), t.y = h * (this.cosc0 * s - this.sinc0 * i * a), t.x = this.a * t.x + this.x0, t.y = this.a * t.y + this.y0, t
},
inverse: function (t) {
var s, i, a, h, e;
if (t.x = (t.x - this.x0) / this.a, t.y = (t.y - this.y0) / this.a, t.x /= this.k0, t.y /= this.k0, e = Math.sqrt(t.x * t.x + t.y * t.y)) {
var n = 2 * Math.atan2(e, this.R2);
s = Math.sin(n), i = Math.cos(n), h = Math.asin(i * this.sinc0 + t.y * s * this.cosc0 / e), a = Math.atan2(t.x * s, e * this.cosc0 * i - t.y * this.sinc0 * s)
} else h = this.phic0, a = 0;
return t.x = a, t.y = h, Ts.inverse.apply(this, [t]), t.x = Ht(t.x + this.long0), t
},
names: ["Stereographic_North_Pole", "Oblique_Stereographic", "Polar_Stereographic", "sterea", "Oblique Stereographic Alternative", "Double_Stereographic"]
}, Gs = {
init: function () {
this.coslat0 = Math.cos(this.lat0), this.sinlat0 = Math.sin(this.lat0), this.sphere ? 1 === this.k0 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= wt && (this.k0 = .5 * (1 + Wt(this.lat0) * Math.sin(this.lat_ts))) : (Math.abs(this.coslat0) <= wt && (this.lat0 > 0 ? this.con = 1 : this.con = -1), this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e)), 1 === this.k0 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= wt && (this.k0 = .5 * this.cons * Qt(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / Xt(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts))), this.ms1 = Qt(this.e, this.sinlat0, this.coslat0), this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - xt, this.cosX0 = Math.cos(this.X0), this.sinX0 = Math.sin(this.X0))
}, forward: function (t) {
var s, i, a, h, e, n, r = t.x, o = t.y, l = Math.sin(o), c = Math.cos(o), u = Ht(r - this.long0);
return Math.abs(Math.abs(r - this.long0) - Math.PI) <= wt && Math.abs(o + this.lat0) <= wt ? (t.x = NaN, t.y = NaN, t) : this.sphere ? (s = 2 * this.k0 / (1 + this.sinlat0 * l + this.coslat0 * c * Math.cos(u)), t.x = this.a * s * c * Math.sin(u) + this.x0, t.y = this.a * s * (this.coslat0 * l - this.sinlat0 * c * Math.cos(u)) + this.y0, t) : (i = 2 * Math.atan(this.ssfn_(o, l, this.e)) - xt, h = Math.cos(i), a = Math.sin(i), Math.abs(this.coslat0) <= wt ? (e = Xt(this.e, o * this.con, this.con * l), n = 2 * this.a * this.k0 * e / this.cons, t.x = this.x0 + n * Math.sin(r - this.long0), t.y = this.y0 - this.con * n * Math.cos(r - this.long0), t) : (Math.abs(this.sinlat0) < wt ? (s = 2 * this.a * this.k0 / (1 + h * Math.cos(u)), t.y = s * a) : (s = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * a + this.cosX0 * h * Math.cos(u))), t.y = s * (this.cosX0 * a - this.sinX0 * h * Math.cos(u)) + this.y0), t.x = s * h * Math.sin(u) + this.x0, t))
}, inverse: function (t) {
t.x -= this.x0, t.y -= this.y0;
var s, i, a, h, e, n = Math.sqrt(t.x * t.x + t.y * t.y);
if (this.sphere) {
var r = 2 * Math.atan(n / (2 * this.a * this.k0));
return s = this.long0, i = this.lat0, n <= wt ? (t.x = s, t.y = i, t) : (i = Math.asin(Math.cos(r) * this.sinlat0 + t.y * Math.sin(r) * this.coslat0 / n), s = Ht(Math.abs(this.coslat0) < wt ? this.lat0 > 0 ? this.long0 + Math.atan2(t.x, -1 * t.y) : this.long0 + Math.atan2(t.x, t.y) : this.long0 + Math.atan2(t.x * Math.sin(r), n * this.coslat0 * Math.cos(r) - t.y * this.sinlat0 * Math.sin(r))), t.x = s, t.y = i, t)
}
if (Math.abs(this.coslat0) <= wt) {
if (n <= wt) return i = this.lat0, s = this.long0, t.x = s, t.y = i, t;
t.x *= this.con, t.y *= this.con, a = n * this.cons / (2 * this.a * this.k0), i = this.con * Jt(this.e, a), s = this.con * Ht(this.con * this.long0 + Math.atan2(t.x, -1 * t.y))
} else h = 2 * Math.atan(n * this.cosX0 / (2 * this.a * this.k0 * this.ms1)), s = this.long0, n <= wt ? e = this.X0 : (e = Math.asin(Math.cos(h) * this.sinX0 + t.y * Math.sin(h) * this.cosX0 / n), s = Ht(this.long0 + Math.atan2(t.x * Math.sin(h), n * this.cosX0 * Math.cos(h) - t.y * this.sinX0 * Math.sin(h)))), i = -1 * Jt(this.e, Math.tan(.5 * (xt + e)));
return t.x = s, t.y = i, t
}, names: ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant B)"], ssfn_: function (t, s, i) {
return s *= i, Math.tan(.5 * (xt + t)) * Math.pow((1 - s) / (1 + s), .5 * i)
}
}, js = {
init: function () {
var t = this.lat0;
this.lambda0 = this.long0;
var s = Math.sin(t), i = this.a, a = 1 / this.rf, h = 2 * a - Math.pow(a, 2), e = this.e = Math.sqrt(h);
this.R = this.k0 * i * Math.sqrt(1 - h) / (1 - h * Math.pow(s, 2)), this.alpha = Math.sqrt(1 + h / (1 - h) * Math.pow(Math.cos(t), 4)), this.b0 = Math.asin(s / this.alpha);
var n = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2)), r = Math.log(Math.tan(Math.PI / 4 + t / 2)),
o = Math.log((1 + e * s) / (1 - e * s));
this.K = n - this.alpha * r + this.alpha * e / 2 * o
}, forward: function (t) {
var s = Math.log(Math.tan(Math.PI / 4 - t.y / 2)),
i = this.e / 2 * Math.log((1 + this.e * Math.sin(t.y)) / (1 - this.e * Math.sin(t.y))),
a = -this.alpha * (s + i) + this.K, h = 2 * (Math.atan(Math.exp(a)) - Math.PI / 4),
e = this.alpha * (t.x - this.lambda0),
n = Math.atan(Math.sin(e) / (Math.sin(this.b0) * Math.tan(h) + Math.cos(this.b0) * Math.cos(e))),
r = Math.asin(Math.cos(this.b0) * Math.sin(h) - Math.sin(this.b0) * Math.cos(h) * Math.cos(e));
return t.y = this.R / 2 * Math.log((1 + Math.sin(r)) / (1 - Math.sin(r))) + this.y0, t.x = this.R * n + this.x0, t
}, inverse: function (t) {
for (var s = t.x - this.x0, i = t.y - this.y0, a = s / this.R, h = 2 * (Math.atan(Math.exp(i / this.R)) - Math.PI / 4), e = Math.asin(Math.cos(this.b0) * Math.sin(h) + Math.sin(this.b0) * Math.cos(h) * Math.cos(a)), n = Math.atan(Math.sin(a) / (Math.cos(this.b0) * Math.cos(a) - Math.sin(this.b0) * Math.tan(h))), r = this.lambda0 + n / this.alpha, o = 0, l = e, c = -1e3, u = 0; Math.abs(l - c) > 1e-7;) {
if (++u > 20) return;
o = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + e / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(l)) / 2)), c = l, l = 2 * Math.atan(Math.exp(o)) - Math.PI / 2
}
return t.x = r, t.y = l, t
}, names: ["somerc"]
}, Bs = 1e-7, zs = {
init: function () {
var t, s, i, a, h, e, n, r, o, l, c, u = 0, M = 0, f = 0, d = 0, m = 0, p = 0, y = 0;
this.no_off = rt(this), this.no_rot = "no_rot" in this;
var _ = !1;
"alpha" in this && (_ = !0);
var x = !1;
if ("rectified_grid_angle" in this && (x = !0), _ && (y = this.alpha), x && (u = this.rectified_grid_angle * At), _ || x) M = this.longc; else if (f = this.long1, m = this.lat1, d = this.long2, p = this.lat2, Math.abs(m - p) <= Bs || (t = Math.abs(m)) <= Bs || Math.abs(t - xt) <= Bs || Math.abs(Math.abs(this.lat0) - xt) <= Bs || Math.abs(Math.abs(p) - xt) <= Bs) throw new Error;
var g = 1 - this.es;
s = Math.sqrt(g), Math.abs(this.lat0) > wt ? (r = Math.sin(this.lat0), i = Math.cos(this.lat0), t = 1 - this.es * r * r, this.B = i * i, this.B = Math.sqrt(1 + this.es * this.B * this.B / g), this.A = this.B * this.k0 * s / t, (h = (a = this.B * s / (i * Math.sqrt(t))) * a - 1) <= 0 ? h = 0 : (h = Math.sqrt(h), this.lat0 < 0 && (h = -h)), this.E = h += a, this.E *= Math.pow(Xt(this.e, this.lat0, r), this.B)) : (this.B = 1 / s, this.A = this.k0, this.E = a = h = 1), _ || x ? (_ ? (c = Math.asin(Math.sin(y) / a), x || (u = y)) : (c = u, y = Math.asin(a * Math.sin(c))), this.lam0 = M - Math.asin(.5 * (h - 1 / h) * Math.tan(c)) / this.B) : (e = Math.pow(Xt(this.e, m, Math.sin(m)), this.B), n = Math.pow(Xt(this.e, p, Math.sin(p)), this.B), h = this.E / e, o = (n - e) / (n + e), l = ((l = this.E * this.E) - n * e) / (l + n * e), (t = f - d) < -Math.pi ? d -= Ct : t > Math.pi && (d += Ct), this.lam0 = Ht(.5 * (f + d) - Math.atan(l * Math.tan(.5 * this.B * (f - d)) / o) / this.B), c = Math.atan(2 * Math.sin(this.B * Ht(f - this.lam0)) / (h - 1 / h)), u = y = Math.asin(a * Math.sin(c))), this.singam = Math.sin(c), this.cosgam = Math.cos(c), this.sinrot = Math.sin(u), this.cosrot = Math.cos(u), this.rB = 1 / this.B, this.ArB = this.A * this.rB, this.BrA = 1 / this.ArB, this.no_off ? this.u_0 = 0 : (this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(a * a - 1) / Math.cos(y))), this.lat0 < 0 && (this.u_0 = -this.u_0)), h = .5 * c, this.v_pole_n = this.ArB * Math.log(Math.tan(Nt - h)), this.v_pole_s = this.ArB * Math.log(Math.tan(Nt + h))
},
forward: function (t) {
var s, i, a, h, e, n, r, o, l = {};
if (t.x = t.x - this.lam0, Math.abs(Math.abs(t.y) - xt) > wt) {
if (e = this.E / Math.pow(Xt(this.e, t.y, Math.sin(t.y)), this.B), n = 1 / e, s = .5 * (e - n), i = .5 * (e + n), h = Math.sin(this.B * t.x), a = (s * this.singam - h * this.cosgam) / i, Math.abs(Math.abs(a) - 1) < wt) throw new Error;
o = .5 * this.ArB * Math.log((1 - a) / (1 + a)), n = Math.cos(this.B * t.x), r = Math.abs(n) < Bs ? this.A * t.x : this.ArB * Math.atan2(s * this.cosgam + h * this.singam, n)
} else o = t.y > 0 ? this.v_pole_n : this.v_pole_s, r = this.ArB * t.y;
return this.no_rot ? (l.x = r, l.y = o) : (r -= this.u_0, l.x = o * this.cosrot + r * this.sinrot, l.y = r * this.cosrot - o * this.sinrot), l.x = this.a * l.x + this.x0, l.y = this.a * l.y + this.y0, l
},
inverse: function (t) {
var s, i, a, h, e, n, r, o = {};
if (t.x = (t.x - this.x0) * (1 / this.a), t.y = (t.y - this.y0) * (1 / this.a), this.no_rot ? (i = t.y, s = t.x) : (i = t.x * this.cosrot - t.y * this.sinrot, s = t.y * this.cosrot + t.x * this.sinrot + this.u_0), a = Math.exp(-this.BrA * i), h = .5 * (a - 1 / a), e = .5 * (a + 1 / a), n = Math.sin(this.BrA * s), r = (n * this.cosgam + h * this.singam) / e, Math.abs(Math.abs(r) - 1) < wt) o.x = 0, o.y = r < 0 ? -xt : xt; else {
if (o.y = this.E / Math.sqrt((1 + r) / (1 - r)), o.y = Jt(this.e, Math.pow(o.y, 1 / this.B)), o.y === 1 / 0) throw new Error;
o.x = -this.rB * Math.atan2(h * this.cosgam - n * this.singam, Math.cos(this.BrA * s))
}
return o.x += this.lam0, o
},
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"]
}, Fs = {
init: function () {
if (this.lat2 || (this.lat2 = this.lat1), this.k0 || (this.k0 = 1), this.x0 = this.x0 || 0, this.y0 = this.y0 || 0, !(Math.abs(this.lat1 + this.lat2) < wt)) {
var t = this.b / this.a;
this.e = Math.sqrt(1 - t * t);
var s = Math.sin(this.lat1), i = Math.cos(this.lat1), a = Qt(this.e, s, i),
h = Xt(this.e, this.lat1, s), e = Math.sin(this.lat2), n = Math.cos(this.lat2),
r = Qt(this.e, e, n), o = Xt(this.e, this.lat2, e), l = Xt(this.e, this.lat0, Math.sin(this.lat0));
Math.abs(this.lat1 - this.lat2) > wt ? this.ns = Math.log(a / r) / Math.log(h / o) : this.ns = s, isNaN(this.ns) && (this.ns = s), this.f0 = a / (this.ns * Math.pow(h, this.ns)), this.rh = this.a * this.f0 * Math.pow(l, this.ns), this.title || (this.title = "Lambert Conformal Conic")
}
},
forward: function (t) {
var s = t.x, i = t.y;
Math.abs(2 * Math.abs(i) - Math.PI) <= wt && (i = Wt(i) * (xt - 2 * wt));
var a, h, e = Math.abs(Math.abs(i) - xt);
if (e > wt) a = Xt(this.e, i, Math.sin(i)), h = this.a * this.f0 * Math.pow(a, this.ns); else {
if ((e = i * this.ns) <= 0) return null;
h = 0
}
var n = this.ns * Ht(s - this.long0);
return t.x = this.k0 * (h * Math.sin(n)) + this.x0, t.y = this.k0 * (this.rh - h * Math.cos(n)) + this.y0, t
},
inverse: function (t) {
var s, i, a, h, e, n = (t.x - this.x0) / this.k0, r = this.rh - (t.y - this.y0) / this.k0;
this.ns > 0 ? (s = Math.sqrt(n * n + r * r), i = 1) : (s = -Math.sqrt(n * n + r * r), i = -1);
var o = 0;
if (0 !== s && (o = Math.atan2(i * n, i * r)), 0 !== s || this.ns > 0) {
if (i = 1 / this.ns, a = Math.pow(s / (this.a * this.f0), i), -9999 === (h = Jt(this.e, a))) return null
} else h = -xt;
return e = Ht(o / this.ns + this.long0), t.x = e, t.y = h, t
},
names: ["Lambert Tangential Conformal Conic Projection", "Lambert_Conformal_Conic", "Lambert_Conformal_Conic_1SP", "Lambert_Conformal_Conic_2SP", "lcc"]
}, Ds = {
init: function () {
this.a = 6377397.155, this.es = .006674372230614, this.e = Math.sqrt(this.es), this.lat0 || (this.lat0 = .863937979737193), this.long0 || (this.long0 = .4334234309119251), this.k0 || (this.k0 = .9999), this.s45 = .785398163397448, this.s90 = 2 * this.s45, this.fi0 = this.lat0, this.e2 = this.es, this.e = Math.sqrt(this.e2), this.alfa = Math.sqrt(1 + this.e2 * Math.pow(Math.cos(this.fi0), 4) / (1 - this.e2)), this.uq = 1.04216856380474, this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa), this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2), this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g, this.k1 = this.k0, this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2)), this.s0 = 1.37008346281555, this.n = Math.sin(this.s0), this.ro0 = this.k1 * this.n0 / Math.tan(this.s0), this.ad = this.s90 - this.uq
}, forward: function (t) {
var s, i, a, h, e, n, r, o = t.x, l = t.y, c = Ht(o - this.long0);
return s = Math.pow((1 + this.e * Math.sin(l)) / (1 - this.e * Math.sin(l)), this.alfa * this.e / 2), i = 2 * (Math.atan(this.k * Math.pow(Math.tan(l / 2 + this.s45), this.alfa) / s) - this.s45), a = -c * this.alfa, h = Math.asin(Math.cos(this.ad) * Math.sin(i) + Math.sin(this.ad) * Math.cos(i) * Math.cos(a)), e = Math.asin(Math.cos(i) * Math.sin(a) / Math.cos(h)), n = this.n * e, r = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(h / 2 + this.s45), this.n), t.y = r * Math.cos(n) / 1, t.x = r * Math.sin(n) / 1, this.czech || (t.y *= -1, t.x *= -1), t
}, inverse: function (t) {
var s, i, a, h, e, n, r, o = t.x;
t.x = t.y, t.y = o, this.czech || (t.y *= -1, t.x *= -1), e = Math.sqrt(t.x * t.x + t.y * t.y), h = Math.atan2(t.y, t.x) / Math.sin(this.s0), a = 2 * (Math.atan(Math.pow(this.ro0 / e, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45), s = Math.asin(Math.cos(this.ad) * Math.sin(a) - Math.sin(this.ad) * Math.cos(a) * Math.cos(h)), i = Math.asin(Math.cos(a) * Math.sin(h) / Math.cos(s)), t.x = this.long0 - i / this.alfa, n = s, r = 0;
var l = 0;
do {
t.y = 2 * (Math.atan(Math.pow(this.k, -1 / this.alfa) * Math.pow(Math.tan(s / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(n)) / (1 - this.e * Math.sin(n)), this.e / 2)) - this.s45), Math.abs(n - t.y) < 1e-10 && (r = 1), n = t.y, l += 1
} while (0 === r && l < 15);
return l >= 15 ? null : t
}, names: ["Krovak", "krovak"]
}, Us = function (t, s, i, a, h) {
return t * h - s * Math.sin(2 * h) + i * Math.sin(4 * h) - a * Math.sin(6 * h)
}, Qs = function (t) {
return 1 - .25 * t * (1 + t / 16 * (3 + 1.25 * t))
}, Ws = function (t) {
return .375 * t * (1 + .25 * t * (1 + .46875 * t))
}, Hs = function (t) {
return .05859375 * t * t * (1 + .75 * t)
}, Xs = function (t) {
return t * t * t * (35 / 3072)
}, Js = function (t, s, i) {
var a = s * i;
return t / Math.sqrt(1 - a * a)
}, Ks = function (t) {
return Math.abs(t) < xt ? t : t - Wt(t) * Math.PI
}, Vs = function (t, s, i, a, h) {
var e, n;
e = t / s;
for (var r = 0; r < 15; r++) if (n = (t - (s * e - i * Math.sin(2 * e) + a * Math.sin(4 * e) - h * Math.sin(6 * e))) / (s - 2 * i * Math.cos(2 * e) + 4 * a * Math.cos(4 * e) - 6 * h * Math.cos(6 * e)), e += n, Math.abs(n) <= 1e-10) return e;
return NaN
}, Zs = {
init: function () {
this.sphere || (this.e0 = Qs(this.es), this.e1 = Ws(this.es), this.e2 = Hs(this.es), this.e3 = Xs(this.es), this.ml0 = this.a * Us(this.e0, this.e1, this.e2, this.e3, this.lat0))
}, forward: function (t) {
var s, i, a = t.x, h = t.y;
if (a = Ht(a - this.long0), this.sphere) s = this.a * Math.asin(Math.cos(h) * Math.sin(a)), i = this.a * (Math.atan2(Math.tan(h), Math.cos(a)) - this.lat0); else {
var e = Math.sin(h), n = Math.cos(h), r = Js(this.a, this.e, e), o = Math.tan(h) * Math.tan(h),
l = a * Math.cos(h), c = l * l, u = this.es * n * n / (1 - this.es);
s = r * l * (1 - c * o * (1 / 6 - (8 - o + 8 * u) * c / 120)), i = this.a * Us(this.e0, this.e1, this.e2, this.e3, h) - this.ml0 + r * e / n * c * (.5 + (5 - o + 6 * u) * c / 24)
}
return t.x = s + this.x0, t.y = i + this.y0, t
}, inverse: function (t) {
t.x -= this.x0, t.y -= this.y0;
var s, i, a = t.x / this.a, h = t.y / this.a;
if (this.sphere) {
var e = h + this.lat0;
s = Math.asin(Math.sin(e) * Math.cos(a)), i = Math.atan2(Math.tan(a), Math.cos(e))
} else {
var n = this.ml0 / this.a + h, r = Vs(n, this.e0, this.e1, this.e2, this.e3);
if (Math.abs(Math.abs(r) - xt) <= wt) return t.x = this.long0, t.y = xt, h < 0 && (t.y *= -1), t;
var o = Js(this.a, this.e, Math.sin(r)), l = o * o * o / this.a / this.a * (1 - this.es),
c = Math.pow(Math.tan(r), 2), u = a * this.a / o, M = u * u;
s = r - o * Math.tan(r) / l * u * u * (.5 - (1 + 3 * c) * u * u / 24), i = u * (1 - M * (c / 3 + (1 + 3 * c) * c * M / 15)) / Math.cos(r)
}
return t.x = Ht(i + this.long0), t.y = Ks(s), t
}, names: ["Cassini", "Cassini_Soldner", "cass"]
}, Ys = function (t, s) {
var i;
return t > 1e-7 ? (i = t * s, (1 - t * t) * (s / (1 - i * i) - .5 / t * Math.log((1 - i) / (1 + i)))) : 2 * s
}, $s = .3333333333333333, ti = .17222222222222222, si = .10257936507936508, ii = .06388888888888888,
ai = .0664021164021164, hi = .016415012942191543, ei = {
init: function () {
var t = Math.abs(this.lat0);
if (Math.abs(t - xt) < wt ? this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE : Math.abs(t) < wt ? this.mode = this.EQUIT : this.mode = this.OBLIQ, this.es > 0) {
var s;
switch (this.qp = Ys(this.e, 1), this.mmf = .5 / (1 - this.es), this.apa = ot(this.es), this.mode) {
case this.N_POLE:
case this.S_POLE:
this.dd = 1;
break;
case this.EQUIT:
this.rq = Math.sqrt(.5 * this.qp), this.dd = 1 / this.rq, this.xmf = 1, this.ymf = .5 * this.qp;
break;
case this.OBLIQ:
this.rq = Math.sqrt(.5 * this.qp), s = Math.sin(this.lat0), this.sinb1 = Ys(this.e, s) / this.qp, this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1), this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * s * s) * this.rq * this.cosb1), this.ymf = (this.xmf = this.rq) / this.dd, this.xmf *= this.dd
}
} else this.mode === this.OBLIQ && (this.sinph0 = Math.sin(this.lat0), this.cosph0 = Math.cos(this.lat0))
},
forward: function (t) {
var s, i, a, h, e, n, r, o, l, c, u = t.x, M = t.y;
if (u = Ht(u - this.long0), this.sphere) {
if (e = Math.sin(M), c = Math.cos(M), a = Math.cos(u), this.mode === this.OBLIQ || this.mode === this.EQUIT) {
if ((i = this.mode === this.EQUIT ? 1 + c * a : 1 + this.sinph0 * e + this.cosph0 * c * a) <= wt) return null;
s = (i = Math.sqrt(2 / i)) * c * Math.sin(u), i *= this.mode === this.EQUIT ? e : this.cosph0 * e - this.sinph0 * c * a
} else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
if (this.mode === this.N_POLE && (a = -a), Math.abs(M + this.lat0) < wt) return null;
i = Nt - .5 * M, s = (i = 2 * (this.mode === this.S_POLE ? Math.cos(i) : Math.sin(i))) * Math.sin(u), i *= a
}
} else {
switch (r = 0, o = 0, l = 0, a = Math.cos(u), h = Math.sin(u), e = Math.sin(M), n = Ys(this.e, e), this.mode !== this.OBLIQ && this.mode !== this.EQUIT || (r = n / this.qp, o = Math.sqrt(1 - r * r)), this.mode) {
case this.OBLIQ:
l = 1 + this.sinb1 * r + this.cosb1 * o * a;
break;
case this.EQUIT:
l = 1 + o * a;
break;
case this.N_POLE:
l = xt + M, n = this.qp - n;
break;
case this.S_POLE:
l = M - xt, n = this.qp + n
}
if (Math.abs(l) < wt) return null;
switch (this.mode) {
case this.OBLIQ:
case this.EQUIT:
l = Math.sqrt(2 / l), i = this.mode === this.OBLIQ ? this.ymf * l * (this.cosb1 * r - this.sinb1 * o * a) : (l = Math.sqrt(2 / (1 + o * a))) * r * this.ymf, s = this.xmf * l * o * h;
break;
case this.N_POLE:
case this.S_POLE:
n >= 0 ? (s = (l = Math.sqrt(n)) * h, i = a * (this.mode === this.S_POLE ? l : -l)) : s = i = 0
}
}
return t.x = this.a * s + this.x0, t.y = this.a * i + this.y0, t
},
inverse: function (t) {
t.x -= this.x0, t.y -= this.y0;
var s, i, a, h, e, n, r, o = t.x / this.a, l = t.y / this.a;
if (this.sphere) {
var c, u = 0, M = 0;
if (c = Math.sqrt(o * o + l * l), (i = .5 * c) > 1) return null;
switch (i = 2 * Math.asin(i), this.mode !== this.OBLIQ && this.mode !== this.EQUIT || (M = Math.sin(i), u = Math.cos(i)), this.mode) {
case this.EQUIT:
i = Math.abs(c) <= wt ? 0 : Math.asin(l * M / c), o *= M, l = u * c;
break;
case this.OBLIQ:
i = Math.abs(c) <= wt ? this.lat0 : Math.asin(u * this.sinph0 + l * M * this.cosph0 / c), o *= M * this.cosph0, l = (u - Math.sin(i) * this.sinph0) * c;
break;
case this.N_POLE:
l = -l, i = xt - i;
break;
case this.S_POLE:
i -= xt
}
s = 0 !== l || this.mode !== this.EQUIT && this.mode !== this.OBLIQ ? Math.atan2(o, l) : 0
} else {
if (r = 0, this.mode === this.OBLIQ || this.mode === this.EQUIT) {
if (o /= this.dd, l *= this.dd, (n = Math.sqrt(o * o + l * l)) < wt) return t.x = this.long0, t.y = this.lat0, t;
h = 2 * Math.asin(.5 * n / this.rq), a = Math.cos(h), o *= h = Math.sin(h), this.mode === this.OBLIQ ? (r = a * this.sinb1 + l * h * this.cosb1 / n, e = this.qp * r, l = n * this.cosb1 * a - l * this.sinb1 * h) : (r = l * h / n, e = this.qp * r, l = n * a)
} else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
if (this.mode === this.N_POLE && (l = -l), !(e = o * o + l * l)) return t.x = this.long0, t.y = this.lat0, t;
r = 1 - e / this.qp, this.mode === this.S_POLE && (r = -r)
}
s = Math.atan2(o, l), i = lt(Math.asin(r), this.apa)
}
return t.x = Ht(this.long0 + s), t.y = i, t
},
names: ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "laea"],
S_POLE: 1,
N_POLE: 2,
EQUIT: 3,
OBLIQ: 4
}, ni = function (t) {
return Math.abs(t) > 1 && (t = t > 1 ? 1 : -1), Math.asin(t)
}, ri = {
init: function () {
Math.abs(this.lat1 + this.lat2) < wt || (this.temp = this.b / this.a, this.es = 1 - Math.pow(this.temp, 2), this.e3 = Math.sqrt(this.es), this.sin_po = Math.sin(this.lat1), this.cos_po = Math.cos(this.lat1), this.t1 = this.sin_po, this.con = this.sin_po, this.ms1 = Qt(this.e3, this.sin_po, this.cos_po), this.qs1 = Ys(this.e3, this.sin_po, this.cos_po), this.sin_po = Math.sin(this.lat2), this.cos_po = Math.cos(this.lat2), this.t2 = this.sin_po, this.ms2 = Qt(this.e3, this.sin_po, this.cos_po), this.qs2 = Ys(this.e3, this.sin_po, this.cos_po), this.sin_po = Math.sin(this.lat0), this.cos_po = Math.cos(this.lat0), this.t3 = this.sin_po, this.qs0 = Ys(this.e3, this.sin_po, this.cos_po), Math.abs(this.lat1 - this.lat2) > wt ? this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1) : this.ns0 = this.con, this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1, this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0)
}, forward: function (t) {
var s = t.x, i = t.y;
this.sin_phi = Math.sin(i), this.cos_phi = Math.cos(i);
var a = Ys(this.e3, this.sin_phi, this.cos_phi), h = this.a * Math.sqrt(this.c - this.ns0 * a) / this.ns0,
e = this.ns0 * Ht(s - this.long0), n = h * Math.sin(e) + this.x0,
r = this.rh - h * Math.cos(e) + this.y0;
return t.x = n, t.y = r, t
}, inverse: function (t) {
var s, i, a, h, e, n;
return t.x -= this.x0, t.y = this.rh - t.y + this.y0, this.ns0 >= 0 ? (s = Math.sqrt(t.x * t.x + t.y * t.y), a = 1) : (s = -Math.sqrt(t.x * t.x + t.y * t.y), a = -1), h = 0, 0 !== s && (h = Math.atan2(a * t.x, a * t.y)), a = s * this.ns0 / this.a, this.sphere ? n = Math.asin((this.c - a * a) / (2 * this.ns0)) : (i = (this.c - a * a) / this.ns0, n = this.phi1z(this.e3, i)), e = Ht(h / this.ns0 + this.long0), t.x = e, t.y = n, t
}, names: ["Albers_Conic_Equal_Area", "Albers", "aea"], phi1z: function (t, s) {
var i, a, h, e, n, r = ni(.5 * s);
if (t < wt) return r;
for (var o = t * t, l = 1; l <= 25; l++) if (i = Math.sin(r), a = Math.cos(r), h = t * i, e = 1 - h * h, n = .5 * e * e / a * (s / (1 - o) - i / e + .5 / t * Math.log((1 - h) / (1 + h))), r += n, Math.abs(n) <= 1e-7) return r;
return null
}
}, oi = {
init: function () {
this.sin_p14 = Math.sin(this.lat0), this.cos_p14 = Math.cos(this.lat0), this.infinity_dist = 1e3 * this.a, this.rc = 1
}, forward: function (t) {
var s, i, a, h, e, n, r, o = t.x, l = t.y;
return a = Ht(o - this.long0), s = Math.sin(l), i = Math.cos(l), h = Math.cos(a), (e = this.sin_p14 * s + this.cos_p14 * i * h) > 0 || Math.abs(e) <= wt ? (n = this.x0 + 1 * this.a * i * Math.sin(a) / e, r = this.y0 + 1 * this.a * (this.cos_p14 * s - this.sin_p14 * i * h) / e) : (n = this.x0 + this.infinity_dist * i * Math.sin(a), r = this.y0 + this.infinity_dist * (this.cos_p14 * s - this.sin_p14 * i * h)), t.x = n, t.y = r, t
}, inverse: function (t) {
var s, i, a, h, e, n;
return t.x = (t.x - this.x0) / this.a, t.y = (t.y - this.y0) / this.a, t.x /= this.k0, t.y /= this.k0, (s = Math.sqrt(t.x * t.x + t.y * t.y)) ? (h = Math.atan2(s, this.rc), i = Math.sin(h), a = Math.cos(h), n = ni(a * this.sin_p14 + t.y * i * this.cos_p14 / s), e = Math.atan2(t.x * i, s * this.cos_p14 * a - t.y * this.sin_p14 * i), e = Ht(this.long0 + e)) : (n = this.phic0, e = 0), t.x = e, t.y = n, t
}, names: ["gnom"]
}, li = function (t, s) {
var i = 1 - (1 - t * t) / (2 * t) * Math.log((1 - t) / (1 + t));
if (Math.abs(Math.abs(s) - i) < 1e-6) return s < 0 ? -1 * xt : xt;
for (var a, h, e, n, r = Math.asin(.5 * s), o = 0; o < 30; o++) if (h = Math.sin(r), e = Math.cos(r), n = t * h, a = Math.pow(1 - n * n, 2) / (2 * e) * (s / (1 - t * t) - h / (1 - n * n) + .5 / t * Math.log((1 - n) / (1 + n))), r += a, Math.abs(a) <= 1e-10) return r;
return NaN
}, ci = {
init: function () {
this.sphere || (this.k0 = Qt(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)))
}, forward: function (t) {
var s, i, a = t.x, h = t.y, e = Ht(a - this.long0);
if (this.sphere) s = this.x0 + this.a * e * Math.cos(this.lat_ts), i = this.y0 + this.a * Math.sin(h) / Math.cos(this.lat_ts); else {
var n = Ys(this.e, Math.sin(h));
s = this.x0 + this.a * this.k0 * e, i = this.y0 + this.a * n * .5 / this.k0
}
return t.x = s, t.y = i, t
}, inverse: function (t) {
t.x -= this.x0, t.y -= this.y0;
var s, i;
return this.sphere ? (s = Ht(this.long0 + t.x / this.a / Math.cos(this.lat_ts)), i = Math.asin(t.y / this.a * Math.cos(this.lat_ts))) : (i = li(this.e, 2 * t.y * this.k0 / this.a), s = Ht(this.long0 + t.x / (this.a * this.k0))), t.x = s, t.y = i, t
}, names: ["cea"]
}, ui = {
init: function () {
this.x0 = this.x0 || 0, this.y0 = this.y0 || 0, this.lat0 = this.lat0 || 0, this.long0 = this.long0 || 0, this.lat_ts = this.lat_ts || 0, this.title = this.title || "Equidistant Cylindrical (Plate Carre)", this.rc = Math.cos(this.lat_ts)
}, forward: function (t) {
var s = t.x, i = t.y, a = Ht(s - this.long0), h = Ks(i - this.lat0);
return t.x = this.x0 + this.a * a * this.rc, t.y = this.y0 + this.a * h, t
}, inverse: function (t) {
var s = t.x, i = t.y;
return t.x = Ht(this.long0 + (s - this.x0) / (this.a * this.rc)), t.y = Ks(this.lat0 + (i - this.y0) / this.a), t
}, names: ["Equirectangular", "Equidistant_Cylindrical", "eqc"]
}, Mi = 20, fi = {
init: function () {
this.temp = this.b / this.a, this.es = 1 - Math.pow(this.temp, 2), this.e = Math.sqrt(this.es), this.e0 = Qs(this.es), this.e1 = Ws(this.es), this.e2 = Hs(this.es), this.e3 = Xs(this.es), this.ml0 = this.a * Us(this.e0, this.e1, this.e2, this.e3, this.lat0)
}, forward: function (t) {
var s, i, a, h = t.x, e = t.y, n = Ht(h - this.long0);
if (a = n * Math.sin(e), this.sphere) Math.abs(e) <= wt ? (s = this.a * n, i = -1 * this.a * this.lat0) : (s = this.a * Math.sin(a) / Math.tan(e), i = this.a * (Ks(e - this.lat0) + (1 - Math.cos(a)) / Math.tan(e))); else if (Math.abs(e) <= wt) s = this.a * n, i = -1 * this.ml0; else {
var r = Js(this.a, this.e, Math.sin(e)) / Math.tan(e);
s = r * Math.sin(a), i = this.a * Us(this.e0, this.e1, this.e2, this.e3, e) - this.ml0 + r * (1 - Math.cos(a))
}
return t.x = s + this.x0, t.y = i + this.y0, t
}, inverse: function (t) {
var s, i, a, h, e, n, r, o, l;
if (a = t.x - this.x0, h = t.y - this.y0, this.sphere) if (Math.abs(h + this.a * this.lat0) <= wt) s = Ht(a / this.a + this.long0), i = 0; else {
n = this.lat0 + h / this.a, r = a * a / this.a / this.a + n * n, o = n;
var c;
for (e = Mi; e; --e) if (c = Math.tan(o), l = -1 * (n * (o * c + 1) - o - .5 * (o * o + r) * c) / ((o - n) / c - 1), o += l, Math.abs(l) <= wt) {
i = o;
break
}
s = Ht(this.long0 + Math.asin(a * Math.tan(o) / this.a) / Math.sin(i))
} else if (Math.abs(h + this.ml0) <= wt) i = 0, s = Ht(this.long0 + a / this.a); else {
n = (this.ml0 + h) / this.a, r = a * a / this.a / this.a + n * n, o = n;
var u, M, f, d, m;
for (e = Mi; e; --e) if (m = this.e * Math.sin(o), u = Math.sqrt(1 - m * m) * Math.tan(o), M = this.a * Us(this.e0, this.e1, this.e2, this.e3, o), f = this.e0 - 2 * this.e1 * Math.cos(2 * o) + 4 * this.e2 * Math.cos(4 * o) - 6 * this.e3 * Math.cos(6 * o), d = M / this.a, l = (n * (u * d + 1) - d - .5 * u * (d * d + r)) / (this.es * Math.sin(2 * o) * (d * d + r - 2 * n * d) / (4 * u) + (n - d) * (u * f - 2 / Math.sin(2 * o)) - f), o -= l, Math.abs(l) <= wt) {
i = o;
break
}
u = Math.sqrt(1 - this.es * Math.pow(Math.sin(i), 2)) * Math.tan(i), s = Ht(this.long0 + Math.asin(a * u / this.a) / Math.sin(i))
}
return t.x = s, t.y = i, t
}, names: ["Polyconic", "poly"]
}, di = {
init: function () {
this.A = [], this.A[1] = .6399175073, this.A[2] = -.1358797613, this.A[3] = .063294409, this.A[4] = -.02526853, this.A[5] = .0117879, this.A[6] = -.0055161, this.A[7] = .0026906, this.A[8] = -.001333, this.A[9] = 67e-5, this.A[10] = -34e-5, this.B_re = [], this.B_im = [], this.B_re[1] = .7557853228, this.B_im[1] = 0, this.B_re[2] = .249204646, this.B_im[2] = .003371507, this.B_re[3] = -.001541739, this.B_im[3] = .04105856, this.B_re[4] = -.10162907, this.B_im[4] = .01727609, this.B_re[5] = -.26623489, this.B_im[5] = -.36249218, this.B_re[6] = -.6870983, this.B_im[6] = -1.1651967, this.C_re = [], this.C_im = [], this.C_re[1] = 1.3231270439, this.C_im[1] = 0, this.C_re[2] = -.577245789, this.C_im[2] = -.007809598, this.C_re[3] = .508307513, this.C_im[3] = -.112208952, this.C_re[4] = -.15094762, this.C_im[4] = .18200602, this.C_re[5] = 1.01418179, this.C_im[5] = 1.64497696, this.C_re[6] = 1.9660549, this.C_im[6] = 2.5127645, this.D = [], this.D[1] = 1.5627014243, this.D[2] = .5185406398, this.D[3] = -.03333098, this.D[4] = -.1052906, this.D[5] = -.0368594, this.D[6] = .007317, this.D[7] = .0122, this.D[8] = .00394, this.D[9] = -.0013
}, forward: function (t) {
var s, i = t.x, a = t.y - this.lat0, h = i - this.long0, e = a / _t * 1e-5, n = h, r = 1, o = 0;
for (s = 1; s <= 10; s++) r *= e, o += this.A[s] * r;
var l, c = o, u = n, M = 1, f = 0, d = 0, m = 0;
for (s = 1; s <= 6; s++) l = f * c + M * u, M = M * c - f * u, f = l, d = d + this.B_re[s] * M - this.B_im[s] * f, m = m + this.B_im[s] * M + this.B_re[s] * f;
return t.x = m * this.a + this.x0, t.y = d * this.a + this.y0, t
}, inverse: function (t) {
var s, i, a = t.x, h = t.y, e = a - this.x0, n = (h - this.y0) / this.a, r = e / this.a, o = 1, l = 0,
c = 0, u = 0;
for (s = 1; s <= 6; s++) i = l * n + o * r, o = o * n - l * r, l = i, c = c + this.C_re[s] * o - this.C_im[s] * l, u = u + this.C_im[s] * o + this.C_re[s] * l;
for (var M = 0; M < this.iterations; M++) {
var f, d = c, m = u, p = n, y = r;
for (s = 2; s <= 6; s++) f = m * c + d * u, d = d * c - m * u, m = f, p += (s - 1) * (this.B_re[s] * d - this.B_im[s] * m), y += (s - 1) * (this.B_im[s] * d + this.B_re[s] * m);
d = 1, m = 0;
var _ = this.B_re[1], x = this.B_im[1];
for (s = 2; s <= 6; s++) f = m * c + d * u, d = d * c - m * u, m = f, _ += s * (this.B_re[s] * d - this.B_im[s] * m), x += s * (this.B_im[s] * d + this.B_re[s] * m);
var g = _ * _ + x * x;
c = (p * _ + y * x) / g, u = (y * _ - p * x) / g
}
var v = c, b = u, w = 1, A = 0;
for (s = 1; s <= 9; s++) w *= v, A += this.D[s] * w;
var E = this.lat0 + A * _t * 1e5, N = this.long0 + b;
return t.x = N, t.y = E, t
}, names: ["New_Zealand_Map_Grid", "nzmg"]
}, mi = {
init: function () {
}, forward: function (t) {
var s = t.x, i = t.y, a = Ht(s - this.long0), h = this.x0 + this.a * a,
e = this.y0 + this.a * Math.log(Math.tan(Math.PI / 4 + i / 2.5)) * 1.25;
return t.x = h, t.y = e, t
}, inverse: function (t) {
t.x -= this.x0, t.y -= this.y0;
var s = Ht(this.long0 + t.x / this.a), i = 2.5 * (Math.atan(Math.exp(.8 * t.y / this.a)) - Math.PI / 4);
return t.x = s, t.y = i, t
}, names: ["Miller_Cylindrical", "mill"]
}, pi = 20, yi = {
init: function () {
this.sphere ? (this.n = 1, this.m = 0, this.es = 0, this.C_y = Math.sqrt((this.m + 1) / this.n), this.C_x = this.C_y / (this.m + 1)) : this.en = _s(this.es)
}, forward: function (t) {
var s, i, a = t.x, h = t.y;
if (a = Ht(a - this.long0), this.sphere) {
if (this.m) for (var e = this.n * Math.sin(h), n = pi; n; --n) {
var r = (this.m * h + Math.sin(h) - e) / (this.m + Math.cos(h));
if (h -= r, Math.abs(r) < wt) break
} else h = 1 !== this.n ? Math.asin(this.n * Math.sin(h)) : h;
s = this.a * this.C_x * a * (this.m + Math.cos(h)), i = this.a * this.C_y * h
} else {
var o = Math.sin(h), l = Math.cos(h);
i = this.a * xs(h, o, l, this.en), s = this.a * a * l / Math.sqrt(1 - this.es * o * o)
}
return t.x = s, t.y = i, t
}, inverse: function (t) {
var s, i, a, h;
return t.x -= this.x0, a = t.x / this.a, t.y -= this.y0, s = t.y / this.a, this.sphere ? (s /= this.C_y, a /= this.C_x * (this.m + Math.cos(s)), this.m ? s = ni((this.m * s + Math.sin(s)) / this.n) : 1 !== this.n && (s = ni(Math.sin(s) / this.n)), a = Ht(a + this.long0), s = Ks(s)) : (s = gs(t.y / this.a, this.es, this.en), (h = Math.abs(s)) < xt ? (h = Math.sin(s), i = this.long0 + t.x * Math.sqrt(1 - this.es * h * h) / (this.a * Math.cos(s)), a = Ht(i)) : h - wt < xt && (a = this.long0)), t.x = a, t.y = s, t
}, names: ["Sinusoidal", "sinu"]
}, _i = {
init: function () {
}, forward: function (t) {
for (var s = t.x, i = t.y, a = Ht(s - this.long0), h = i, e = Math.PI * Math.sin(i); ;) {
var n = -(h + Math.sin(h) - e) / (1 + Math.cos(h));
if (h += n, Math.abs(n) < wt) break
}
h /= 2, Math.PI / 2 - Math.abs(i) < wt && (a = 0);
var r = .900316316158 * this.a * a * Math.cos(h) + this.x0,
o = 1.4142135623731 * this.a * Math.sin(h) + this.y0;
return t.x = r, t.y = o, t
}, inverse: function (t) {
var s, i;
t.x -= this.x0, t.y -= this.y0, i = t.y / (1.4142135623731 * this.a), Math.abs(i) > .999999999999 && (i = .999999999999), s = Math.asin(i);
var a = Ht(this.long0 + t.x / (.900316316158 * this.a * Math.cos(s)));
a < -Math.PI && (a = -Math.PI), a > Math.PI && (a = Math.PI), i = (2 * s + Math.sin(2 * s)) / Math.PI, Math.abs(i) > 1 && (i = 1);
var h = Math.asin(i);
return t.x = a, t.y = h, t
}, names: ["Mollweide", "moll"]
}, xi = {
init: function () {
Math.abs(this.lat1 + this.lat2) < wt || (this.lat2 = this.lat2 || this.lat1, this.temp = this.b / this.a, this.es = 1 - Math.pow(this.temp, 2), this.e = Math.sqrt(this.es), this.e0 = Qs(this.es), this.e1 = Ws(this.es), this.e2 = Hs(this.es), this.e3 = Xs(this.es), this.sinphi = Math.sin(this.lat1), this.cosphi = Math.cos(this.lat1), this.ms1 = Qt(this.e, this.sinphi, this.cosphi), this.ml1 = Us(this.e0, this.e1, this.e2, this.e3, this.lat1), Math.abs(this.lat1 - this.lat2) < wt ? this.ns = this.sinphi : (this.sinphi = Math.sin(this.lat2), this.cosphi = Math.cos(this.lat2), this.ms2 = Qt(this.e, this.sinphi, this.cosphi), this.ml2 = Us(this.e0, this.e1, this.e2, this.e3, this.lat2), this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1)), this.g = this.ml1 + this.ms1 / this.ns, this.ml0 = Us(this.e0, this.e1, this.e2, this.e3, this.lat0), this.rh = this.a * (this.g - this.ml0))
}, forward: function (t) {
var s, i = t.x, a = t.y;
if (this.sphere) s = this.a * (this.g - a); else {
var h = Us(this.e0, this.e1, this.e2, this.e3, a);
s = this.a * (this.g - h)
}
var e = this.ns * Ht(i - this.long0), n = this.x0 + s * Math.sin(e),
r = this.y0 + this.rh - s * Math.cos(e);
return t.x = n, t.y = r, t
}, inverse: function (t) {
t.x -= this.x0, t.y = this.rh - t.y + this.y0;
var s, i, a, h;
this.ns >= 0 ? (i = Math.sqrt(t.x * t.x + t.y * t.y), s = 1) : (i = -Math.sqrt(t.x * t.x + t.y * t.y), s = -1);
var e = 0;
if (0 !== i && (e = Math.atan2(s * t.x, s * t.y)), this.sphere) return h = Ht(this.long0 + e / this.ns), a = Ks(this.g - i / this.a), t.x = h, t.y = a, t;
var n = this.g - i / this.a;
return a = Vs(n, this.e0, this.e1, this.e2, this.e3), h = Ht(this.long0 + e / this.ns), t.x = h, t.y = a, t
}, names: ["Equidistant_Conic", "eqdc"]
}, gi = {
init: function () {
this.R = this.a
}, forward: function (t) {
var s, i, a = t.x, h = t.y, e = Ht(a - this.long0);
Math.abs(h) <= wt && (s = this.x0 + this.R * e, i = this.y0);
var n = ni(2 * Math.abs(h / Math.PI));
(Math.abs(e) <= wt || Math.abs(Math.abs(h) - xt) <= wt) && (s = this.x0, i = h >= 0 ? this.y0 + Math.PI * this.R * Math.tan(.5 * n) : this.y0 + Math.PI * this.R * -Math.tan(.5 * n));
var r = .5 * Math.abs(Math.PI / e - e / Math.PI), o = r * r, l = Math.sin(n), c = Math.cos(n),
u = c / (l + c - 1), M = u * u, f = u * (2 / l - 1), d = f * f,
m = Math.PI * this.R * (r * (u - d) + Math.sqrt(o * (u - d) * (u - d) - (d + o) * (M - d))) / (d + o);
e < 0 && (m = -m), s = this.x0 + m;
var p = o + u;
return m = Math.PI * this.R * (f * p - r * Math.sqrt((d + o) * (o + 1) - p * p)) / (d + o), i = h >= 0 ? this.y0 + m : this.y0 - m, t.x = s, t.y = i, t
}, inverse: function (t) {
var s, i, a, h, e, n, r, o, l, c, u, M, f;
return t.x -= this.x0, t.y -= this.y0, u = Math.PI * this.R, a = t.x / u, h = t.y / u, e = a * a + h * h, n = -Math.abs(h) * (1 + e), r = n - 2 * h * h + a * a, o = -2 * n + 1 + 2 * h * h + e * e, f = h * h / o + (2 * r * r * r / o / o / o - 9 * n * r / o / o) / 27, l = (n - r * r / 3 / o) / o, c = 2 * Math.sqrt(-l / 3), u = 3 * f / l / c, Math.abs(u) > 1 && (u = u >= 0 ? 1 : -1), M = Math.acos(u) / 3, i = t.y >= 0 ? (-c * Math.cos(M + Math.PI / 3) - r / 3 / o) * Math.PI : -(-c * Math.cos(M + Math.PI / 3) - r / 3 / o) * Math.PI, s = Math.abs(a) < wt ? this.long0 : Ht(this.long0 + Math.PI * (e - 1 + Math.sqrt(1 + 2 * (a * a - h * h) + e * e)) / 2 / a), t.x = s, t.y = i, t
}, names: ["Van_der_Grinten_I", "VanDerGrinten", "vandg"]
}, vi = {
init: function () {
this.sin_p12 = Math.sin(this.lat0), this.cos_p12 = Math.cos(this.lat0)
}, forward: function (t) {
var s, i, a, h, e, n, r, o, l, c, u, M, f, d, m, p, y, _, x, g, v, b, w, A = t.x, E = t.y,
N = Math.sin(t.y), C = Math.cos(t.y), P = Ht(A - this.long0);
return this.sphere ? Math.abs(this.sin_p12 - 1) <= wt ? (t.x = this.x0 + this.a * (xt - E) * Math.sin(P), t.y = this.y0 - this.a * (xt - E) * Math.cos(P), t) : Math.abs(this.sin_p12 + 1) <= wt ? (t.x = this.x0 + this.a * (xt + E) * Math.sin(P), t.y = this.y0 + this.a * (xt + E) * Math.cos(P), t) : (_ = this.sin_p12 * N + this.cos_p12 * C * Math.cos(P), p = Math.acos(_), y = p ? p / Math.sin(p) : 1, t.x = this.x0 + this.a * y * C * Math.sin(P), t.y = this.y0 + this.a * y * (this.cos_p12 * N - this.sin_p12 * C * Math.cos(P)), t) : (s = Qs(this.es), i = Ws(this.es), a = Hs(this.es), h = Xs(this.es), Math.abs(this.sin_p12 - 1) <= wt ? (e = this.a * Us(s, i, a, h, xt), n = this.a * Us(s, i, a, h, E), t.x = this.x0 + (e - n) * Math.sin(P), t.y = this.y0 - (e - n) * Math.cos(P), t) : Math.abs(this.sin_p12 + 1) <= wt ? (e = this.a * Us(s, i, a, h, xt), n = this.a * Us(s, i, a, h, E), t.x = this.x0 + (e + n) * Math.sin(P), t.y = this.y0 + (e + n) * Math.cos(P), t) : (r = N / C, o = Js(this.a, this.e, this.sin_p12), l = Js(this.a, this.e, N), c = Math.atan((1 - this.es) * r + this.es * o * this.sin_p12 / (l * C)), u = Math.atan2(Math.sin(P), this.cos_p12 * Math.tan(c) - this.sin_p12 * Math.cos(P)), x = 0 === u ? Math.asin(this.cos_p12 * Math.sin(c) - this.sin_p12 * Math.cos(c)) : Math.abs(Math.abs(u) - Math.PI) <= wt ? -Math.asin(this.cos_p12 * Math.sin(c) - this.sin_p12 * Math.cos(c)) : Math.asin(Math.sin(P) * Math.cos(c) / Math.sin(u)), M = this.e * this.sin_p12 / Math.sqrt(1 - this.es), f = this.e * this.cos_p12 * Math.cos(u) / Math.sqrt(1 - this.es), d = M * f, m = f * f, g = x * x, v = g * x, b = v * x, w = b * x, p = o * x * (1 - g * m * (1 - m) / 6 + v / 8 * d * (1 - 2 * m) + b / 120 * (m * (4 - 7 * m) - 3 * M * M * (1 - 7 * m)) - w / 48 * d), t.x = this.x0 + p * Math.sin(u), t.y = this.y0 + p * Math.cos(u), t))
}, inverse: function (t) {
t.x -= this.x0, t.y -= this.y0;
var s, i, a, h, e, n, r, o, l, c, u, M, f, d, m, p, y, _, x, g, v, b, w, A;
if (this.sphere) {
if ((s = Math.sqrt(t.x * t.x + t.y * t.y)) > 2 * xt * this.a) return;
return i = s / this.a, a = Math.sin(i), h = Math.cos(i), e = this.long0, Math.abs(s) <= wt ? n = this.lat0 : (n = ni(h * this.sin_p12 + t.y * a * this.cos_p12 / s), r = Math.abs(this.lat0) - xt, e = Ht(Math.abs(r) <= wt ? this.lat0 >= 0 ? this.long0 + Math.atan2(t.x, -t.y) : this.long0 - Math.atan2(-t.x, t.y) : this.long0 + Math.atan2(t.x * a, s * this.cos_p12 * h - t.y * this.sin_p12 * a))), t.x = e, t.y = n, t
}
return o = Qs(this.es), l = Ws(this.es), c = Hs(this.es), u = Xs(this.es), Math.abs(this.sin_p12 - 1) <= wt ? (M = this.a * Us(o, l, c, u, xt), s = Math.sqrt(t.x * t.x + t.y * t.y), f = M - s, n = Vs(f / this.a, o, l, c, u), e = Ht(this.long0 + Math.atan2(t.x, -1 * t.y)), t.x = e, t.y = n, t) : Math.abs(this.sin_p12 + 1) <= wt ? (M = this.a * Us(o, l, c, u, xt), s = Math.sqrt(t.x * t.x + t.y * t.y), f = s - M, n = Vs(f / this.a, o, l, c, u), e = Ht(this.long0 + Math.atan2(t.x, t.y)), t.x = e, t.y = n, t) : (s = Math.sqrt(t.x * t.x + t.y * t.y), p = Math.atan2(t.x, t.y), d = Js(this.a, this.e, this.sin_p12), y = Math.cos(p), _ = this.e * this.cos_p12 * y, x = -_ * _ / (1 - this.es), g = 3 * this.es * (1 - x) * this.sin_p12 * this.cos_p12 * y / (1 - this.es), v = s / d, b = v - x * (1 + x) * Math.pow(v, 3) / 6 - g * (1 + 3 * x) * Math.pow(v, 4) / 24, w = 1 - x * b * b / 2 - v * b * b * b / 6, m = Math.asin(this.sin_p12 * Math.cos(b) + this.cos_p12 * Math.sin(b) * y), e = Ht(this.long0 + Math.asin(Math.sin(p) * Math.sin(b) / Math.cos(m))), A = Math.sin(m), n = Math.atan2((A - this.es * w * this.sin_p12) * Math.tan(m), A * (1 - this.es)), t.x = e, t.y = n, t)
}, names: ["Azimuthal_Equidistant", "aeqd"]
}, bi = {
init: function () {
this.sin_p14 = Math.sin(this.lat0), this.cos_p14 = Math.cos(this.lat0)
}, forward: function (t) {
var s, i, a, h, e, n, r, o = t.x, l = t.y;
return a = Ht(o - this.long0), s = Math.sin(l), i = Math.cos(l), h = Math.cos(a), ((e = this.sin_p14 * s + this.cos_p14 * i * h) > 0 || Math.abs(e) <= wt) && (n = 1 * this.a * i * Math.sin(a), r = this.y0 + 1 * this.a * (this.cos_p14 * s - this.sin_p14 * i * h)), t.x = n, t.y = r, t
}, inverse: function (t) {
var s, i, a, h, e, n, r;
return t.x -= this.x0, t.y -= this.y0, s = Math.sqrt(t.x * t.x + t.y * t.y), i = ni(s / this.a), a = Math.sin(i), h = Math.cos(i), n = this.long0, Math.abs(s) <= wt ? (r = this.lat0, t.x = n, t.y = r, t) : (r = ni(h * this.sin_p14 + t.y * a * this.cos_p14 / s), e = Math.abs(this.lat0) - xt, Math.abs(e) <= wt ? (n = Ht(this.lat0 >= 0 ? this.long0 + Math.atan2(t.x, -t.y) : this.long0 - Math.atan2(-t.x, t.y)), t.x = n, t.y = r, t) : (n = Ht(this.long0 + Math.atan2(t.x * a, s * this.cos_p14 * h - t.y * this.sin_p14 * a)), t.x = n, t.y = r, t))
}, names: ["ortho"]
}, wi = {FRONT: 1, RIGHT: 2, BACK: 3, LEFT: 4, TOP: 5, BOTTOM: 6},
Ai = {AREA_0: 1, AREA_1: 2, AREA_2: 3, AREA_3: 4}, Ei = {
init: function () {
this.x0 = this.x0 || 0, this.y0 = this.y0 || 0, this.lat0 = this.lat0 || 0, this.long0 = this.long0 || 0, this.lat_ts = this.lat_ts || 0, this.title = this.title || "Quadrilateralized Spherical Cube", this.lat0 >= xt - Nt / 2 ? this.face = wi.TOP : this.lat0 <= -(xt - Nt / 2) ? this.face = wi.BOTTOM : Math.abs(this.long0) <= Nt ? this.face = wi.FRONT : Math.abs(this.long0) <= xt + Nt ? this.face = this.long0 > 0 ? wi.RIGHT : wi.LEFT : this.face = wi.BACK, 0 !== this.es && (this.one_minus_f = 1 - (this.a - this.b) / this.a, this.one_minus_f_squared = this.one_minus_f * this.one_minus_f)
}, forward: function (t) {
var s, i, a, h, e, n, r = {x: 0, y: 0}, o = {value: 0};
if (t.x -= this.long0, s = 0 !== this.es ? Math.atan(this.one_minus_f_squared * Math.tan(t.y)) : t.y, i = t.x, this.face === wi.TOP) h = xt - s, i >= Nt && i <= xt + Nt ? (o.value = Ai.AREA_0, a = i - xt) : i > xt + Nt || i <= -(xt + Nt) ? (o.value = Ai.AREA_1, a = i > 0 ? i - Pt : i + Pt) : i > -(xt + Nt) && i <= -Nt ? (o.value = Ai.AREA_2, a = i + xt) : (o.value = Ai.AREA_3, a = i); else if (this.face === wi.BOTTOM) h = xt + s, i >= Nt && i <= xt + Nt ? (o.value = Ai.AREA_0, a = -i + xt) : i < Nt && i >= -Nt ? (o.value = Ai.AREA_1, a = -i) : i < -Nt && i >= -(xt + Nt) ? (o.value = Ai.AREA_2, a = -i - xt) : (o.value = Ai.AREA_3, a = i > 0 ? -i + Pt : -i - Pt); else {
var l, c, u, M, f, d;
this.face === wi.RIGHT ? i = ut(i, +xt) : this.face === wi.BACK ? i = ut(i, +Pt) : this.face === wi.LEFT && (i = ut(i, -xt)), M = Math.sin(s), f = Math.cos(s), d = Math.sin(i), l = f * Math.cos(i), c = f * d, u = M, this.face === wi.FRONT ? a = ct(h = Math.acos(l), u, c, o) : this.face === wi.RIGHT ? a = ct(h = Math.acos(c), u, -l, o) : this.face === wi.BACK ? a = ct(h = Math.acos(-l), u, -c, o) : this.face === wi.LEFT ? a = ct(h = Math.acos(-c), u, l, o) : (h = a = 0, o.value = Ai.AREA_0)
}
return n = Math.atan(12 / Pt * (a + Math.acos(Math.sin(a) * Math.cos(Nt)) - xt)), e = Math.sqrt((1 - Math.cos(h)) / (Math.cos(n) * Math.cos(n)) / (1 - Math.cos(Math.atan(1 / Math.cos(a))))), o.value === Ai.AREA_1 ? n += xt : o.value === Ai.AREA_2 ? n += Pt : o.value === Ai.AREA_3 && (n += 1.5 * Pt), r.x = e * Math.cos(n), r.y = e * Math.sin(n), r.x = r.x * this.a + this.x0, r.y = r.y * this.a + this.y0, t.x = r.x, t.y = r.y, t
}, inverse: function (t) {
var s, i, a, h, e, n, r, o, l, c = {lam: 0, phi: 0}, u = {value: 0};
if (t.x = (t.x - this.x0) / this.a, t.y = (t.y - this.y0) / this.a, i = Math.atan(Math.sqrt(t.x * t.x + t.y * t.y)), s = Math.atan2(t.y, t.x), t.x >= 0 && t.x >= Math.abs(t.y) ? u.value = Ai.AREA_0 : t.y >= 0 && t.y >= Math.abs(t.x) ? (u.value = Ai.AREA_1, s -= xt) : t.x < 0 && -t.x >= Math.abs(t.y) ? (u.value = Ai.AREA_2, s = s < 0 ? s + Pt : s - Pt) : (u.value = Ai.AREA_3, s += xt), l = Pt / 12 * Math.tan(s), e = Math.sin(l) / (Math.cos(l) - 1 / Math.sqrt(2)), n = Math.atan(e), a = Math.cos(s), h = Math.tan(i), (r = 1 - a * a * h * h * (1 - Math.cos(Math.atan(1 / Math.cos(n))))) < -1 ? r = -1 : r > 1 && (r = 1), this.face === wi.TOP) o = Math.acos(r), c.phi = xt - o, u.value === Ai.AREA_0 ? c.lam = n + xt : u.value === Ai.AREA_1 ? c.lam = n < 0 ? n + Pt : n - Pt : u.value === Ai.AREA_2 ? c.lam = n - xt : c.lam = n; else if (this.face === wi.BOTTOM) o = Math.acos(r), c.phi = o - xt, u.value === Ai.AREA_0 ? c.lam = -n + xt : u.value === Ai.AREA_1 ? c.lam = -n : u.value === Ai.AREA_2 ? c.lam = -n - xt : c.lam = n < 0 ? -n - Pt : -n + Pt; else {
var M, f, d;
l = (M = r) * M, f = (l += (d = l >= 1 ? 0 : Math.sqrt(1 - l) * Math.sin(n)) * d) >= 1 ? 0 : Math.sqrt(1 - l), u.value === Ai.AREA_1 ? (l = f, f = -d, d = l) : u.value === Ai.AREA_2 ? (f = -f, d = -d) : u.value === Ai.AREA_3 && (l = f, f = d, d = -l), this.face === wi.RIGHT ? (l = M, M = -f, f = l) : this.face === wi.BACK ? (M = -M, f = -f) : this.face === wi.LEFT && (l = M, M = f, f = -l), c.phi = Math.acos(-d) - xt, c.lam = Math.atan2(f, M), this.face === wi.RIGHT ? c.lam = ut(c.lam, -xt) : this.face === wi.BACK ? c.lam = ut(c.lam, -Pt) : this.face === wi.LEFT && (c.lam = ut(c.lam, +xt))
}
if (0 !== this.es) {
var m, p, y;
m = c.phi < 0 ? 1 : 0, p = Math.tan(c.phi), y = this.b / Math.sqrt(p * p + this.one_minus_f_squared), c.phi = Math.atan(Math.sqrt(this.a * this.a - y * y) / (this.one_minus_f * y)), m && (c.phi = -c.phi)
}
return c.lam += this.long0, t.x = c.lam, t.y = c.phi, t
}, names: ["Quadrilateralized Spherical Cube", "Quadrilateralized_Spherical_Cube", "qsc"]
},
Ni = [[1, 2.2199e-17, -715515e-10, 31103e-10], [.9986, -482243e-9, -24897e-9, -13309e-10], [.9954, -83103e-8, -448605e-10, -9.86701e-7], [.99, -.00135364, -59661e-9, 36777e-10], [.9822, -.00167442, -449547e-11, -572411e-11], [.973, -.00214868, -903571e-10, 1.8736e-8], [.96, -.00305085, -900761e-10, 164917e-11], [.9427, -.00382792, -653386e-10, -26154e-10], [.9216, -.00467746, -10457e-8, 481243e-11], [.8962, -.00536223, -323831e-10, -543432e-11], [.8679, -.00609363, -113898e-9, 332484e-11], [.835, -.00698325, -640253e-10, 9.34959e-7], [.7986, -.00755338, -500009e-10, 9.35324e-7], [.7597, -.00798324, -35971e-9, -227626e-11], [.7186, -.00851367, -701149e-10, -86303e-10], [.6732, -.00986209, -199569e-9, 191974e-10], [.6213, -.010418, 883923e-10, 624051e-11], [.5722, -.00906601, 182e-6, 624051e-11], [.5322, -.00677797, 275608e-9, 624051e-11]],
Ci = [[-5.20417e-18, .0124, 1.21431e-18, -8.45284e-11], [.062, .0124, -1.26793e-9, 4.22642e-10], [.124, .0124, 5.07171e-9, -1.60604e-9], [.186, .0123999, -1.90189e-8, 6.00152e-9], [.248, .0124002, 7.10039e-8, -2.24e-8], [.31, .0123992, -2.64997e-7, 8.35986e-8], [.372, .0124029, 9.88983e-7, -3.11994e-7], [.434, .0123893, -369093e-11, -4.35621e-7], [.4958, .0123198, -102252e-10, -3.45523e-7], [.5571, .0121916, -154081e-10, -5.82288e-7], [.6176, .0119938, -241424e-10, -5.25327e-7], [.6769, .011713, -320223e-10, -5.16405e-7], [.7346, .0113541, -397684e-10, -6.09052e-7], [.7903, .0109107, -489042e-10, -104739e-11], [.8435, .0103431, -64615e-9, -1.40374e-9], [.8936, .00969686, -64636e-9, -8547e-9], [.9394, .00840947, -192841e-9, -42106e-10], [.9761, .00616527, -256e-6, -42106e-10], [1, .00328947, -319159e-9, -42106e-10]],
Pi = .8487, Si = 1.3523, Ii = Et / 5, Oi = 1 / Ii, ki = 18, qi = function (t, s) {
return t[0] + s * (t[1] + s * (t[2] + s * t[3]))
}, Ri = function (t, s) {
return t[1] + s * (2 * t[2] + 3 * s * t[3])
}, Ti = {
init: function () {
this.x0 = this.x0 || 0, this.y0 = this.y0 || 0, this.long0 = this.long0 || 0, this.es = 0, this.title = this.title || "Robinson"
}, forward: function (t) {
var s = Ht(t.x - this.long0), i = Math.abs(t.y), a = Math.floor(i * Ii);
a < 0 ? a = 0 : a >= ki && (a = ki - 1), i = Et * (i - Oi * a);
var h = {x: qi(Ni[a], i) * s, y: qi(Ci[a], i)};
return t.y < 0 && (h.y = -h.y), h.x = h.x * this.a * Pi + this.x0, h.y = h.y * this.a * Si + this.y0, h
}, inverse: function (t) {
var s = {x: (t.x - this.x0) / (this.a * Pi), y: Math.abs(t.y - this.y0) / (this.a * Si)};
if (s.y >= 1) s.x /= Ni[ki][0], s.y = t.y < 0 ? -xt : xt; else {
var i = Math.floor(s.y * ki);
for (i < 0 ? i = 0 : i >= ki && (i = ki - 1); ;) if (Ci[i][0] > s.y) --i; else {
if (!(Ci[i + 1][0] <= s.y)) break;
++i
}
var a = Ci[i], h = 5 * (s.y - a[0]) / (Ci[i + 1][0] - a[0]);
h = Mt(function (t) {
return (qi(a, t) - s.y) / Ri(a, t)
}, h, wt, 100), s.x /= qi(Ni[i], h), s.y = (5 * i + h) * At, t.y < 0 && (s.y = -s.y)
}
return s.x = Ht(s.x + this.long0), s
}, names: ["Robinson", "robin"]
}, Li = {
init: function () {
this.name = "geocent"
}, forward: function (t) {
return k(t, this.es, this.a)
}, inverse: function (t) {
return q(t, this.es, this.a, this.b)
}, names: ["Geocentric", "geocentric", "geocent", "Geocent"]
}, Gi = {N_POLE: 0, S_POLE: 1, EQUIT: 2, OBLIQ: 3}, ji = {
h: {def: 1e5, num: !0},
azi: {def: 0, num: !0, degrees: !0},
tilt: {def: 0, num: !0, degrees: !0},
long0: {def: 0, num: !0},
lat0: {def: 0, num: !0}
}, Bi = {
init: function () {
if (Object.keys(ji).forEach(function (t) {
if (void 0 === this[t]) this[t] = ji[t].def; else {
if (ji[t].num && isNaN(this[t])) throw new Error("Invalid parameter value, must be numeric " + t + " = " + this[t]);
ji[t].num && (this[t] = parseFloat(this[t]))
}
ji[t].degrees && (this[t] = this[t] * At)
}.bind(this)), Math.abs(Math.abs(this.lat0) - xt) < wt ? this.mode = this.lat0 < 0 ? Gi.S_POLE : Gi.N_POLE : Math.abs(this.lat0) < wt ? this.mode = Gi.EQUIT : (this.mode = Gi.OBLIQ, this.sinph0 = Math.sin(this.lat0), this.cosph0 = Math.cos(this.lat0)), this.pn1 = this.h / this.a, this.pn1 <= 0 || this.pn1 > 1e10) throw new Error("Invalid height");
this.p = 1 + this.pn1, this.rp = 1 / this.p, this.h1 = 1 / this.pn1, this.pfact = (this.p + 1) * this.h1, this.es = 0;
var t = this.tilt, s = this.azi;
this.cg = Math.cos(s), this.sg = Math.sin(s), this.cw = Math.cos(t), this.sw = Math.sin(t)
}, forward: function (t) {
t.x -= this.long0;
var s, i, a = Math.sin(t.y), h = Math.cos(t.y), e = Math.cos(t.x);
switch (this.mode) {
case Gi.OBLIQ:
i = this.sinph0 * a + this.cosph0 * h * e;
break;
case Gi.EQUIT:
i = h * e;
break;
case Gi.S_POLE:
i = -a;
break;
case Gi.N_POLE:
i = a
}
switch (i = this.pn1 / (this.p - i), s = i * h * Math.sin(t.x), this.mode) {
case Gi.OBLIQ:
i *= this.cosph0 * a - this.sinph0 * h * e;
break;
case Gi.EQUIT:
i *= a;
break;
case Gi.N_POLE:
i *= -h * e;
break;
case Gi.S_POLE:
i *= h * e
}
var n, r;
return n = i * this.cg + s * this.sg, r = 1 / (n * this.sw * this.h1 + this.cw), s = (s * this.cg - i * this.sg) * this.cw * r, i = n * r, t.x = s * this.a, t.y = i * this.a, t
}, inverse: function (t) {
t.x /= this.a, t.y /= this.a;
var s, i, a, h = {x: t.x, y: t.y};
a = 1 / (this.pn1 - t.y * this.sw), s = this.pn1 * t.x * a, i = this.pn1 * t.y * this.cw * a, t.x = s * this.cg + i * this.sg, t.y = i * this.cg - s * this.sg;
var e = ws(t.x, t.y);
if (Math.abs(e) < wt) h.x = 0, h.y = t.y; else {
var n, r;
switch (r = 1 - e * e * this.pfact, r = (this.p - Math.sqrt(r)) / (this.pn1 / e + e / this.pn1), n = Math.sqrt(1 - r * r), this.mode) {
case Gi.OBLIQ:
h.y = Math.asin(n * this.sinph0 + t.y * r * this.cosph0 / e), t.y = (n - this.sinph0 * Math.sin(h.y)) * e, t.x *= r * this.cosph0;
break;
case Gi.EQUIT:
h.y = Math.asin(t.y * r / e), t.y = n * e, t.x *= r;
break;
case Gi.N_POLE:
h.y = Math.asin(n), t.y = -t.y;
break;
case Gi.S_POLE:
h.y = -Math.asin(n)
}
h.x = Math.atan2(t.x, t.y)
}
return t.x = h.x + this.long0, t.y = h.y, t
}, names: ["Tilted_Perspective", "tpers"]
};
return W.defaultDatum = "WGS84", W.Proj = Projection, W.WGS84 = new W.Proj("WGS84"),
W.Point = Point, W.toPoint = es, W.defs = o, W.nadgrid = function (t, s) {
var i = new DataView(s), a = A(i), h = E(i, a);
h.nSubgrids > 1 && console.log("Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored");
var e = {header: h, subgrids: C(i, h, a)};
return is[t] = e, e
},
W.transform = D, W.mgrs = ps, W.version = "2.7.2", function (proj4) {
proj4.Proj.projections.add(vs),
proj4.Proj.projections.add(Is),
proj4.Proj.projections.add(ks),
proj4.Proj.projections.add(Ls),
proj4.Proj.projections.add(Gs),
proj4.Proj.projections.add(js), proj4.Proj.projections.add(zs), proj4.Proj.projections.add(Fs), proj4.Proj.projections.add(Ds), proj4.Proj.projections.add(Zs), proj4.Proj.projections.add(ei), proj4.Proj.projections.add(ri), proj4.Proj.projections.add(oi), proj4.Proj.projections.add(ci), proj4.Proj.projections.add(ui), proj4.Proj.projections.add(fi), proj4.Proj.projections.add(di), proj4.Proj.projections.add(mi), proj4.Proj.projections.add(yi), proj4.Proj.projections.add(_i), proj4.Proj.projections.add(xi), proj4.Proj.projections.add(gi), proj4.Proj.projections.add(vi), proj4.Proj.projections.add(bi), proj4.Proj.projections.add(Ei), proj4.Proj.projections.add(Ti), proj4.Proj.projections.add(Li), proj4.Proj.projections.add(Bi)
}(W), W
});