6 lines
7.5 KiB
JavaScript

/**
* @preserve
* gcoord 1.0.6, geographic coordinate library
* Copyright (c) 2024 Jiulong Hu <me@hujiulong.com>
*/
var gcoord=function(){"use strict";var r=function(){return r=Object.assign||function(r){for(var t,e=1,n=arguments.length;e<n;e++)for(var a in t=arguments[e])Object.prototype.hasOwnProperty.call(t,a)&&(r[a]=t[a]);return r},r.apply(this,arguments)};"function"==typeof SuppressedError&&SuppressedError;var t=Math.sin,e=Math.cos,n=Math.sqrt,a=Math.abs,o=Math.PI,i=6378245,u=.006693421622965823;function c(r,t){return r>=72.004&&r<=137.8347&&t>=.8293&&t<=55.8271}function f(r,c){var f,l,s,h=(s=300+(f=r-105)+2*(l=c-35)+.1*f*f+.1*f*l+.1*n(a(f)),s+=2*(20*t(6*f*o)+20*t(2*f*o))/3,(s+=2*(20*t(f*o)+40*t(f/3*o))/3)+2*(150*t(f/12*o)+300*t(f/30*o))/3),g=function(r,e){var i=2*r-100+3*e+.2*e*e+.1*r*e+.2*n(a(r));return i+=2*(20*t(6*r*o)+20*t(2*r*o))/3,i+=2*(20*t(e*o)+40*t(e/3*o))/3,i+2*(160*t(e/12*o)+320*t(e*o/30))/3}(r-105,c-35),M=c/180*o,v=t(M),p=n(v=1-u*v*v);return[h=180*h/(i/p*e(M)*o),g=180*g/(i*(1-u)/(v*p)*o)]}function l(r){var t=r[0],e=r[1];if(!c(t,e))return[t,e];var n=f(t,e);return[t+n[0],e+n[1]]}function s(r){var t=r[0],e=r[1];if(!c(t,e))return[t,e];for(var n=[t,e],o=n[0],i=n[1],u=l([o,i]),f=u[0]-t,s=u[1]-e;a(f)>1e-6||a(s)>1e-6;)f=(u=l([o-=f,i-=s]))[0]-t,s=u[1]-e;return[o,i]}var h=Math.sin,g=Math.cos,M=Math.atan2,v=Math.sqrt,p=3e3*Math.PI/180;function G(r){var t=r[0]-.0065,e=r[1]-.006,n=v(t*t+e*e)-2e-5*h(e*p),a=M(e,t)-3e-6*g(t*p);return[n*g(a),n*h(a)]}function d(r){var t=r[0],e=r[1],n=v(t*t+e*e)+2e-5*h(e*p),a=M(e,t)+3e-6*g(t*p);return[n*g(a)+.0065,n*h(a)+.006]}var S=180/Math.PI,y=Math.PI/180,P=6378137,b=20037508.342789244;function B(r){return[r[0]*S/P,(.5*Math.PI-2*Math.atan(Math.exp(-r[1]/P)))*S]}function C(r){var t=Math.abs(r[0])<=180?r[0]:r[0]-360*(r[0]<0?-1:1),e=[P*t*y,P*Math.log(Math.tan(.25*Math.PI+.5*r[1]*y))];return e[0]>b&&(e[0]=b),e[0]<-b&&(e[0]=-b),e[1]>b&&(e[1]=b),e[1]<-b&&(e[1]=-b),e}var D,E,m,w,I,W,k=Math.abs,J=[12890594.86,8362377.87,5591021,3481989.83,1678043.12,0],x=[75,60,45,30,15,0],L=[[1.410526172116255e-8,898305509648872e-20,-1.9939833816331,200.9824383106796,-187.2403703815547,91.6087516669843,-23.38765649603339,2.57121317296198,-.03801003308653,17337981.2],[-7.435856389565537e-9,8983055097726239e-21,-.78625201886289,96.32687599759846,-1.85204757529826,-59.36935905485877,47.40033549296737,-16.50741931063887,2.28786674699375,10260144.86],[-3.030883460898826e-8,898305509983578e-20,.30071316287616,59.74293618442277,7.357984074871,-25.38371002664745,13.45380521110908,-3.29883767235584,.32710905363475,6856817.37],[-1.981981304930552e-8,8983055099779535e-21,.03278182852591,40.31678527705744,.65659298677277,-4.44255534477492,.85341911805263,.12923347998204,-.04625736007561,4482777.06],[3.09191371068437e-9,8983055096812155e-21,6995724062e-14,23.10934304144901,-.00023663490511,-.6321817810242,-.00663494467273,.03430082397953,-.00466043876332,2555164.4],[2.890871144776878e-9,8983055095805407e-21,-3.068298e-8,7.47137025468032,-353937994e-14,-.02145144861037,-1234426596e-14,.00010322952773,-323890364e-14,826088.5]],j=[[-.0015702102444,111320.7020616939,0x60e374c3105a3,-0x24bb4115e2e164,0x5cc55543bb0ae8,-0x7ce070193f3784,0x5e7ca61ddf8150,-0x261a578d8b24d0,0x665d60f3742ca,82.5],[.0008277824516172526,111320.7020463578,647795574.6671607,-4082003173.641316,10774905663.51142,-15171875531.51559,12053065338.62167,-5124939663.577472,913311935.9512032,67.5],[.00337398766765,111320.7020202162,4481351.045890365,-23393751.19931662,79682215.47186455,-115964993.2797253,97236711.15602145,-43661946.33752821,8477230.501135234,52.5],[.00220636496208,111320.7020209128,51751.86112841131,3796837.749470245,992013.7397791013,-1221952.21711287,1340652.697009075,-620943.6990984312,144416.9293806241,37.5],[-.0003441963504368392,111320.7020576856,278.2353980772752,2485758.690035394,6070.750963243378,54821.18345352118,9540.606633304236,-2710.55326746645,1405.483844121726,22.5],[-.0003218135878613132,111320.7020701615,.00369383431289,823725.6402795718,.46104986909093,2351.343141331292,1.58060784298199,8.77738589078284,.37238884252424,7.45]];function q(r,t,e){var n=k(t)/e[9],a=e[0]+e[1]*k(r),o=e[2]+e[3]*n+e[4]*Math.pow(n,2)+e[5]*Math.pow(n,3)+e[6]*Math.pow(n,4)+e[7]*Math.pow(n,5)+e[8]*Math.pow(n,6);return[a*=r<0?-1:1,o*=t<0?-1:1]}function N(r){for(var t=r[0],e=r[1],n=[],a=0;a<x.length;a++)if(k(e)>x[a]){n=j[a];break}return q(t,e,n)}function O(r){for(var t=r[0],e=r[1],n=[],a=0;a<J.length;a++)if(e>=J[a]){n=L[a];break}return q(t,e,n)}function T(r,t){if(!r)throw new Error(t)}function A(r){return!!r&&"[object Array]"===Object.prototype.toString.call(r)}function F(r){return!isNaN(Number(r))&&null!==r&&!A(r)}function R(){for(var r=[],t=0;t<arguments.length;t++)r[t]=arguments[t];var e=r.length-1;return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var a=e,o=r[e].apply(null,t);a--;)o=r[a].call(null,o);return o}}function U(r,t,e){if(void 0===e&&(e=!1),null!==r)for(var n,a,o,i,u,c,f,l,s=0,h=0,g=r.type,M="FeatureCollection"===g,v="Feature"===g,p=M?r.features.length:1,G=0;G<p;G++){c=(l=!!(f=M?r.features[G].geometry:v?r.geometry:r)&&"GeometryCollection"===f.type)?f.geometries.length:1;for(var d=0;d<c;d++){var S=0,y=0;if(null!==(i=l?f.geometries[d]:f)){var P=i.type;switch(s=!e||"Polygon"!==P&&"MultiPolygon"!==P?0:1,P){case null:break;case"Point":if(!1===t(u=i.coordinates,h,G,S,y))return!1;h++,S++;break;case"LineString":case"MultiPoint":for(u=i.coordinates,n=0;n<u.length;n++){if(!1===t(u[n],h,G,S,y))return!1;h++,"MultiPoint"===P&&S++}"LineString"===P&&S++;break;case"Polygon":case"MultiLineString":for(u=i.coordinates,n=0;n<u.length;n++){for(a=0;a<u[n].length-s;a++){if(!1===t(u[n][a],h,G,S,y))return!1;h++}"MultiLineString"===P&&S++,"Polygon"===P&&y++}"Polygon"===P&&S++;break;case"MultiPolygon":for(u=i.coordinates,n=0;n<u.length;n++){for(y=0,a=0;a<u[n].length;a++){for(o=0;o<u[n][a].length-s;o++){if(!1===t(u[n][a][o],h,G,S,y))return!1;h++}y++}S++}break;case"GeometryCollection":for(n=0;n<i.geometries.length;n++)if(!1===U(i.geometries[n],t,e))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}!function(r){r.WGS84="WGS84",r.WGS1984="WGS84",r.EPSG4326="WGS84",r.GCJ02="GCJ02",r.AMap="GCJ02",r.BD09="BD09",r.BD09LL="BD09",r.Baidu="BD09",r.BMap="BD09",r.BD09MC="BD09MC",r.BD09Meter="BD09MC",r.EPSG3857="EPSG3857",r.EPSG900913="EPSG3857",r.EPSG102100="EPSG3857",r.WebMercator="EPSG3857",r.WM="EPSG3857"}(W||(W={}));var z={WGS84:{to:(D={},D[W.GCJ02]=l,D[W.BD09]=R(d,l),D[W.BD09MC]=R(N,d,l),D[W.EPSG3857]=C,D)},GCJ02:{to:(E={},E[W.WGS84]=s,E[W.BD09]=d,E[W.BD09MC]=R(N,d),E[W.EPSG3857]=R(C,s),E)},BD09:{to:(m={},m[W.WGS84]=R(s,G),m[W.GCJ02]=G,m[W.EPSG3857]=R(C,s,G),m[W.BD09MC]=N,m)},EPSG3857:{to:(w={},w[W.WGS84]=B,w[W.GCJ02]=R(l,B),w[W.BD09]=R(d,l,B),w[W.BD09MC]=R(N,d,l,B),w)},BD09MC:{to:(I={},I[W.WGS84]=R(s,G,O),I[W.GCJ02]=R(G,O),I[W.EPSG3857]=R(C,s,G,O),I[W.BD09]=O,I)}};var H=r(r({},W),{CRSTypes:W,transform:function(r,t,e){if(T(!!r,"The args[0] input coordinate is required"),T(!!t,"The args[1] original coordinate system is required"),T(!!e,"The args[2] target coordinate system is required"),t===e)return r;var n=z[t];T(!!n,"Invalid original coordinate system: ".concat(t));var a=n.to[e];T(!!a,"Invalid target coordinate system: ".concat(e));var o=typeof r;if(T("string"===o||"object"===o,"Invalid input coordinate type: ".concat(o)),"string"===o)try{r=JSON.parse(r)}catch(c){throw new Error("Invalid input coordinate: ".concat(r))}var i=!1;A(r)&&(T(r.length>=2,"Invalid input coordinate: ".concat(r)),T(F(r[0])&&F(r[1]),"Invalid input coordinate: ".concat(r)),r=r.map(Number),i=!0);var u=a;return i?u(r):(U(r,(function(r){var t;t=u(r),r[0]=t[0],r[1]=t[1]})),r)}});return H}();