@huaiyinhcy/trans-coord
Version:
支持墨卡托(Mercator)、WGS84、高德(GCJ02)、百度(BD09)之间的坐标转换,无需调用外部接口,可在本地直接执行。
2 lines (1 loc) • 1.78 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("@turf/turf"),e=Math.PI,g=6378245,j=.006693421622965943,i=e*3e3/180;function m([t,o]){return t<72.004||t>137.8347?!0:o<.8293||o>55.8271}function W([t,o]){let s=q(t-105,o-35),n=G(t-105,o-35);const c=o/180*e;let r=Math.sin(c);r=1-j*r*r;const f=Math.sqrt(r);return s=s*180/(g*(1-j)/(r*f)*e),n=n*180/(g/f*Math.cos(c)*e),[n,s]}function q(t,o){let s=-100+2*t+3*o+.2*o*o+.1*t*o+.2*Math.sqrt(Math.abs(t));return s+=(20*Math.sin(6*t*e)+20*Math.sin(2*t*e))*2/3,s+=(20*Math.sin(o*e)+40*Math.sin(o/3*e))*2/3,s+=(160*Math.sin(o/12*e)+320*Math.sin(o*e/30))*2/3,s}function G(t,o){let s=300+t+2*o+.1*t*t+.1*t*o+.1*Math.sqrt(Math.abs(t));return s+=(20*Math.sin(6*t*e)+20*Math.sin(2*t*e))*2/3,s+=(20*Math.sin(t*e)+40*Math.sin(t/3*e))*2/3,s+=(150*Math.sin(t/12*e)+300*Math.sin(t/30*e))*2/3,s}const u={toWgs84:t=>{const o=h.toWgs84(h.point(t)).geometry.coordinates;return[o[0],o[1]]},toGcj02:t=>a.toGcj02(u.toWgs84(t)),toBd09:t=>M.toBd09(u.toGcj02(t))},a={toMerc:t=>h.toMercator(h.point(t)).geometry.coordinates,toGcj02:([t,o])=>{if(!m([t,o])){const[s,n]=W([t,o]);t+=s,o+=n}return[t,o]},toBd09:t=>M.toBd09(a.toGcj02(t))},M={toWgs84:([t,o])=>{if(!m([t,o])){const[s,n]=W([t,o]);t-=s,o-=n}return[t,o]},toBd09:([t,o])=>{let s=t,n=o;const c=Math.sqrt(s*s+n*n)+2e-5*Math.sin(n*i),r=Math.atan2(n,s)+3e-6*Math.cos(s*i);return s=c*Math.cos(r)+.0065,n=c*Math.sin(r)+.006,[s,n]},toMerc:t=>a.toMerc(M.toWgs84(t))},d={toWgs84:t=>M.toWgs84(d.toGcj02(t)),toGcj02:([t,o])=>{let s=t-.0065,n=o-.006;const c=Math.sqrt(s*s+n*n)-2e-5*Math.sin(n*i),r=Math.atan2(n,s)-3e-6*Math.cos(s*i);return s=c*Math.cos(r),n=c*Math.sin(r),[s,n]},toMerc:t=>a.toMerc(d.toWgs84(t))};exports.bd09=d;exports.gcj02=M;exports.merc=u;exports.wgs84=a;