UNPKG

@jindin/js-coordinate-transformer

Version:

百度地图(BD09)、高德地图(火星坐标GCJ02)和WGS84坐标系相互转换

2 lines (1 loc) 1.92 kB
(function(r,M){typeof exports=="object"&&typeof module<"u"?M(exports):typeof define=="function"&&define.amd?define(["exports"],M):(r=typeof globalThis<"u"?globalThis:r||self,M(r["js-cooordinate-transformer"]={}))})(this,function(r){"use strict";const M=52.35987755982988,o=3.141592653589793,u=6378245,d=.006693421622965943,G=(s,t)=>s<72.004||s>137.8347||t<.8293||t>55.8271||!1;function g(s,t){let n=-100+2*s+3*t+.2*t*t+.1*s*t+.2*Math.sqrt(Math.abs(s));return n+=(20*Math.sin(6*s*o)+20*Math.sin(2*s*o))*2/3,n+=(20*Math.sin(t*o)+40*Math.sin(t/3*o))*2/3,n+=(160*Math.sin(t/12*o)+320*Math.sin(t*o/30))*2/3,n}function m(s,t){let n=300+s+2*t+.1*s*s+.1*s*t+.1*Math.sqrt(Math.abs(s));return n+=(20*Math.sin(6*s*o)+20*Math.sin(2*s*o))*2/3,n+=(20*Math.sin(s*o)+40*Math.sin(s/3*o))*2/3,n+=(150*Math.sin(s/12*o)+300*Math.sin(s/30*o))*2/3,n}const S=s=>{const[t,n]=s,a=3.141592653589793*3e3/180,e=t-.0065,i=n-.006,c=Math.sqrt(e*e+i*i)-2e-5*Math.sin(i*a),h=Math.atan2(i,e)-3e-6*Math.cos(e*a),l=c*Math.cos(h),f=c*Math.sin(h);return[l,f]},b=s=>{const[t,n]=s,a=Math.sqrt(t*t+n*n)+2e-5*Math.sin(n*M),e=Math.atan2(n,t)+3e-6*Math.cos(t*M),i=a*Math.cos(e)+.0065,c=a*Math.sin(e)+.006;return[i,c]},C=s=>{const[t,n]=s;if(G(t,n))return[t,n];{let a=g(t-105,n-35),e=m(t-105,n-35);const i=n/180*o;let c=Math.sin(i);c=1-d*c*c;const h=Math.sqrt(c);a=a*180/(u*(1-d)/(c*h)*o),e=e*180/(u/h*Math.cos(i)*o);const l=n+a;return[t+e,l]}},q=s=>{const[t,n]=s;if(G(t,n))return[t,n];{let a=g(t-105,n-35),e=m(t-105,n-35);const i=n/180*o;let c=Math.sin(i);c=1-d*c*c;const h=Math.sqrt(c);a=a*180/(u*(1-d)/(c*h)*o),e=e*180/(u/h*Math.cos(i)*o);const l=n+a,f=t+e;return[t*2-f,n*2-l]}},B=s=>{const[t,n]=s,a=S([t,n]);return q([a[0],a[1]])},D=s=>{const[t,n]=s,a=C([t,n]);return b([a[0],a[1]])};r.calBD09toGCJ02=S,r.calBD09toWGS84=B,r.calGCJ02toBD09=b,r.calGCJ02toWGS84=q,r.calWGS84toBD09=D,r.calWGS84toGCJ02=C,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});