UNPKG

mercator-proj

Version:

[![Build Status](https://img.shields.io/travis/com/sakitam-gis/mercator-proj)](https://travis-ci.com/sakitam-gis/mercator-proj) [![GZIP size](http://img.badgesize.io/https://unpkg.com/mercator-proj/dist/mercator-proj.min.js?compression=gzip&label=gzip%20s

10 lines (9 loc) 32.3 kB
/*! * author: sakitam-fdd <smilefdd@gmail.com> * mercator-proj v0.0.7 * build-time: 2021-3-4 20:41 * LICENSE: MIT * (c) 2020-2021 https://github.com/sakitam-gis/mercator-proj */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).mercatorProj={})}(this,(function(t){"use strict";function e(t,e){for(var i=0;i<e.length;i++){var o=e[i];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function i(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(t)))return;var i=[],o=!0,r=!1,n=void 0;try{for(var a,s=t[Symbol.iterator]();!(o=(a=s.next()).done)&&(i.push(a.value),!e||i.length!==e);o=!0);}catch(t){r=!0,n=t}finally{try{o||null==s.return||s.return()}finally{if(r)throw n}}return i}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return o(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);"Object"===i&&t.constructor&&(i=t.constructor.name);if("Map"===i||"Set"===i)return Array.from(t);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return o(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,o=new Array(e);i<e;i++)o[i]=t[i];return o}var r,n="undefined"!=typeof Float32Array?Float32Array:Array;function a(t,e){var i=e[0],o=e[1],r=e[2],n=e[3],a=e[4],s=e[5],c=e[6],u=e[7],l=e[8],f=e[9],p=e[10],_=e[11],h=e[12],v=e[13],d=e[14],m=e[15],j=i*s-o*a,P=i*c-r*a,M=i*u-n*a,g=o*c-r*s,E=o*u-n*s,O=r*u-n*c,A=l*v-f*h,x=l*d-p*h,T=l*m-_*h,I=f*d-p*v,L=f*m-_*v,R=p*m-_*d,w=j*R-P*L+M*I+g*T-E*x+O*A;return w?(w=1/w,t[0]=(s*R-c*L+u*I)*w,t[1]=(r*L-o*R-n*I)*w,t[2]=(v*O-d*E+m*g)*w,t[3]=(p*E-f*O-_*g)*w,t[4]=(c*T-a*R-u*x)*w,t[5]=(i*R-r*T+n*x)*w,t[6]=(d*M-h*O-m*P)*w,t[7]=(l*O-p*M+_*P)*w,t[8]=(a*L-s*T+u*A)*w,t[9]=(o*T-i*L-n*A)*w,t[10]=(h*E-v*M+m*j)*w,t[11]=(f*M-l*E-_*j)*w,t[12]=(s*x-a*I-c*A)*w,t[13]=(i*I-o*x+r*A)*w,t[14]=(v*P-h*g-d*j)*w,t[15]=(l*g-f*P+p*j)*w,t):null}function s(t,e,i){var o=e[0],r=e[1],n=e[2],a=e[3],s=e[4],c=e[5],u=e[6],l=e[7],f=e[8],p=e[9],_=e[10],h=e[11],v=e[12],d=e[13],m=e[14],j=e[15],P=i[0],M=i[1],g=i[2],E=i[3];return t[0]=P*o+M*s+g*f+E*v,t[1]=P*r+M*c+g*p+E*d,t[2]=P*n+M*u+g*_+E*m,t[3]=P*a+M*l+g*h+E*j,P=i[4],M=i[5],g=i[6],E=i[7],t[4]=P*o+M*s+g*f+E*v,t[5]=P*r+M*c+g*p+E*d,t[6]=P*n+M*u+g*_+E*m,t[7]=P*a+M*l+g*h+E*j,P=i[8],M=i[9],g=i[10],E=i[11],t[8]=P*o+M*s+g*f+E*v,t[9]=P*r+M*c+g*p+E*d,t[10]=P*n+M*u+g*_+E*m,t[11]=P*a+M*l+g*h+E*j,P=i[12],M=i[13],g=i[14],E=i[15],t[12]=P*o+M*s+g*f+E*v,t[13]=P*r+M*c+g*p+E*d,t[14]=P*n+M*u+g*_+E*m,t[15]=P*a+M*l+g*h+E*j,t}function c(t,e,i){var o,r,n,a,s,c,u,l,f,p,_,h,v=i[0],d=i[1],m=i[2];return e===t?(t[12]=e[0]*v+e[4]*d+e[8]*m+e[12],t[13]=e[1]*v+e[5]*d+e[9]*m+e[13],t[14]=e[2]*v+e[6]*d+e[10]*m+e[14],t[15]=e[3]*v+e[7]*d+e[11]*m+e[15]):(o=e[0],r=e[1],n=e[2],a=e[3],s=e[4],c=e[5],u=e[6],l=e[7],f=e[8],p=e[9],_=e[10],h=e[11],t[0]=o,t[1]=r,t[2]=n,t[3]=a,t[4]=s,t[5]=c,t[6]=u,t[7]=l,t[8]=f,t[9]=p,t[10]=_,t[11]=h,t[12]=o*v+s*d+f*m+e[12],t[13]=r*v+c*d+p*m+e[13],t[14]=n*v+u*d+_*m+e[14],t[15]=a*v+l*d+h*m+e[15]),t}function u(t,e,i){var o=i[0],r=i[1],n=i[2];return t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t[3]=e[3]*o,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*n,t[9]=e[9]*n,t[10]=e[10]*n,t[11]=e[11]*n,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function l(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t}function f(t,e,i,o){var r=e[0],n=e[1];return t[0]=r+o*(i[0]-r),t[1]=n+o*(i[1]-n),t}function p(t){return Array.isArray(t)||ArrayBuffer.isView(t)&&!(t instanceof DataView)}Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)}),r=new n(3),n!=Float32Array&&(r[0]=0,r[1]=0,r[2]=0),function(){var t=function(){var t=new n(2);return n!=Float32Array&&(t[0]=0,t[1]=0),t}()}();var _=1e-12;function h(t,e,i){var o=_;i&&(_=i);try{if(t===e)return!0;if(p(t)&&p(e)&&"number"!=typeof t&&"number"!=typeof e){if((null==t?void 0:t.length)!==(null==e?void 0:e.length))return!1;for(var r=0;r<t.length;++r)if(!h(t[r],e[r]))return!1;return!0}return!("number"!=typeof t||"number"!=typeof e||!Number.isFinite(t)||!Number.isFinite(e))&&Math.abs(t-e)<=_*Math.max(1,Math.abs(t),Math.abs(e))}finally{_=o}}function v(t,e,i,o){var r=[t,e,i],n=Math.sqrt(function(t){for(var e=0,i=0;i<t.length;++i)e+=t[i]*t[i];return e}(r));return{distance:o/n,normal:[-t/n,-e/n,-i/n]}}function d(t,e){var i=function(t,e,i){var o=e[0],r=e[1],n=e[2],a=e[3];return t[0]=i[0]*o+i[4]*r+i[8]*n+i[12]*a,t[1]=i[1]*o+i[5]*r+i[9]*n+i[13]*a,t[2]=i[2]*o+i[6]*r+i[10]*n+i[14]*a,t[3]=i[3]*o+i[7]*r+i[11]*n+i[15]*a,t}([],e,t);return function(t,e,i){t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t[3]=e[3]*i}(i,i,1/i[3]),i}function m(t,e){if(!t)throw new Error(e||"mercator-proj: assertion failed.")}!function(){var t=function(){var t=new n(4);return n!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}()}();var j=Math.PI/180;function P(t){var e,i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=t.width,n=t.height,a=t.unproject,s={targetZ:o},c=a([0,n],s),u=a([r,n],s),l=Math.atan(.5/t.altitude),f=(90-t.pitch)*j;return l>f-.01?(e=M(t,0,o),i=M(t,r,o)):(e=a([0,0],s),i=a([r,0],s)),[c,u,i,e]}function M(t,e,i){var o=t.pixelUnprojectionMatrix,r=d(o,[e,0,1,1]),n=d(o,[e,t.height,1,1]),a=L(f([],r,n,(i*t.distanceScales.unitsPerMeter[2]-r[2])/(n[2]-r[2])));return a[2]=i,a}var g,E,O=Math.PI,A=O/4,x=O/180,T=180/O;function I(t){var e=i(t,2),o=e[0],r=e[1];m(Number.isFinite(o)),m(Number.isFinite(r)&&r>=-90&&r<=90,"invalid latitude");var n=r*x;return[512*(o*x+O)/(2*O),512*(O+Math.log(Math.tan(A+.5*n)))/(2*O)]}function L(t){var e=i(t,2),o=e[0],r=e[1],n=o/512*(2*O)-O,a=2*(Math.atan(Math.exp(r/512*(2*O)-O))-A);return[n*T,a*T]}function R(t){var e=t.latitude;return m(Number.isFinite(e)),function(t){return Math.log2(t)}(4003e4*Math.cos(e*x))-9}function w(t){var e=t.latitude,i=t.longitude,o=t.highPrecision,r=void 0!==o&&o;m(Number.isFinite(e)&&Number.isFinite(i));var n={degreesPerUnit:[],metersPerUnit:[],unitsPerDegree:[],unitsPerMeter:[]},a=Math.cos(e*x),s=512/360/a,c=512/4003e4/a;if(n.unitsPerMeter=[c,c,c],n.metersPerUnit=[1/c,1/c,1/c],n.unitsPerDegree=[512/360,s,c],n.degreesPerUnit=[.703125,1/s,1/c],r){var u=x*Math.tan(e*x)/a,l=512/360*u/2,f=512/4003e4*u,p=f/s*c;n.unitsPerDegree2=[0,l,f],n.unitsPerMeter2=[p,0,p]}return n}function y(t){var e=t.height,i=t.pitch,o=t.bearing,r=t.altitude,n=t.scale,a=t.center,s=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return c(s,s,[0,0,-r]),function(t,e,i){var o=Math.sin(i),r=Math.cos(i),n=e[4],a=e[5],s=e[6],c=e[7],u=e[8],l=e[9],f=e[10],p=e[11];e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=n*r+u*o,t[5]=a*r+l*o,t[6]=s*r+f*o,t[7]=c*r+p*o,t[8]=u*r-n*o,t[9]=l*r-a*o,t[10]=f*r-s*o,t[11]=p*r-c*o}(s,s,-i*x),function(t,e,i){var o=Math.sin(i),r=Math.cos(i),n=e[0],a=e[1],s=e[2],c=e[3],u=e[4],l=e[5],f=e[6],p=e[7];e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=n*r+u*o,t[1]=a*r+l*o,t[2]=s*r+f*o,t[3]=c*r+p*o,t[4]=u*r-n*o,t[5]=l*r-a*o,t[6]=f*r-s*o,t[7]=p*r-c*o}(s,s,o*x),u(s,s,[n/=e,n,n]),a&&c(s,s,function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}([],a)),s}function C(t,e){var o=i(t,3),r=o[0],n=o[1],a=o[2],s=void 0===a?0:a;return m(Number.isFinite(r)&&Number.isFinite(n)&&Number.isFinite(s)),d(e,[r,n,s,1])}function S(t,e){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=i(t,3),n=r[0],a=r[1],s=r[2];if(m(Number.isFinite(n)&&Number.isFinite(a),"invalid pixel coordinate"),Number.isFinite(s)){var c=d(e,[n,a,s,1]);return c}var u=d(e,[n,a,0,1]),l=d(e,[n,a,1,1]),p=u[2],_=l[2],h=p===_?0:((o||0)-p)/(_-p);return f([],u,l,h)}!function(t){t[t.WEB_MERCATOR=1]="WEB_MERCATOR",t[t.GLOBE=2]="GLOBE",t[t.WEB_MERCATOR_AUTO_OFFSET=4]="WEB_MERCATOR_AUTO_OFFSET",t[t.IDENTITY=0]="IDENTITY"}(g||(g={})),function(t){t[t.DEFAULT=-1]="DEFAULT",t[t.LNGLAT=1]="LNGLAT",t[t.METER_OFFSETS=2]="METER_OFFSETS",t[t.LNGLAT_OFFSETS=3]="LNGLAT_OFFSETS",t[t.CARTESIAN=0]="CARTESIAN"}(E||(E={}));var U=Math.PI/180,F=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],N=[0,0,0],b={unitsPerMeter:[1,1,1],metersPerUnit:[1,1,1]},D=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var i=e.id,o=e.x,r=void 0===o?0:o,n=e.y,a=void 0===n?0:n,u=e.latitude,l=void 0===u?0:u,f=e.longitude,p=void 0===f?0:f,_=e.zoom,h=void 0===_?11:_,v=e.pitch,d=void 0===v?0:v,m=e.bearing,j=void 0===m?0:m,P=e.nearZMultiplier,M=void 0===P?.1:P,g=e.farZMultiplier,E=void 0===g?1.01:g,O=e.orthographic,A=void 0!==O&&O,T=e.repeat,I=void 0!==T&&T,L=e.worldOffset,R=void 0===L?0:L,w=e.projectOffsetZoom,C=void 0===w?12:w,S=e.width,U=e.height,F=e.altitude,N=void 0===F?1.5:F,b=Math.pow(2,h),D=function(t){var e=t.width,i=t.height,o=t.altitude,r=void 0===o?1.5:o,n=t.pitch,a=void 0===n?0:n,s=t.nearZMultiplier,c=void 0===s?1:s,u=t.farZMultiplier,l=void 0===u?1:u,f=a*x,p=Math.atan(.5/r),_=Math.sin(p)*r/Math.sin(Math.min(Math.max(Math.PI/2-f-p,.01),Math.PI-.01));return{fov:2*p,aspect:e/i,focalDistance:r,near:c,far:(Math.sin(f)*_+r)*l}}({width:S=S||1,height:U=U||1,pitch:d,altitude:N=Math.max(.75,N),nearZMultiplier:M,farZMultiplier:E}),W=D.fov,k=D.aspect,z=D.focalDistance,V=D.near,G=D.far,B=y({height:U,pitch:d,bearing:j,scale:b,altitude:N,center:null});if(R){var J=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],Z=c(J,J,[512*R,0,0]);B=s(Z,B,Z)}this.id=i||"viewport";var q=Object.assign({},e,{width:S,height:U,viewMatrix:B,longitude:p,latitude:l,zoom:h,orthographic:A,fovyRadians:W,aspect:k,focalDistance:A?z:1,near:V,far:G});this.latitude=l,this.longitude=p,this.zoom=h,this.pitch=d,this.bearing=j,this.altitude=N,this.projectOffsetZoom=C,this.orthographic=A,this._subViewports=I?[]:void 0,this.x=r,this.y=a,this.width=S||1,this.height=U||1,this._initViewMatrix(q),this._initProjectionMatrix(q),this._initPixelMatrices(),this.equals=this.equals.bind(this),this.project=this.project.bind(this),this.unproject=this.unproject.bind(this),this.projectPosition=this.projectPosition.bind(this),this.unprojectPosition=this.unprojectPosition.bind(this),this.projectFlat=this.projectFlat.bind(this),this.unprojectFlat=this.unprojectFlat.bind(this)}var o,r,n;return o=t,(r=[{key:"metersPerPixel",get:function(){return this.distanceScales.metersPerUnit[2]/this.scale}},{key:"projectionMode",get:function(){return this.isGeospatial?this.zoom<this.projectOffsetZoom?g.WEB_MERCATOR:g.WEB_MERCATOR_AUTO_OFFSET:g.IDENTITY}},{key:"equals",value:function(e){return e instanceof t&&(this===e||e.width===this.width&&e.height===this.height&&e.scale===this.scale&&h(e.projectionMatrix,this.projectionMatrix)&&h(e.viewMatrix,this.viewMatrix))}},{key:"project",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=e.topLeft,r=void 0===o||o,n=this.projectPosition(t),a=C(n,this.pixelProjectionMatrix),s=i(a,2),c=s[0],u=s[1],l=r?u:this.height-u;return 2===t.length?[c,l]:[c,l,a[2]]}},{key:"unproject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=e.topLeft,r=void 0===o||o,n=e.targetZ,a=i(t,3),s=a[0],c=a[1],u=a[2],l=r?c:this.height-c,f=n&&n*this.distanceScales.unitsPerMeter[2],p=S([s,l,u],this.pixelUnprojectionMatrix,f),_=this.unprojectPosition(p),h=i(_,3),v=h[0],d=h[1],m=h[2];return Number.isFinite(u)?[v,d,m]:Number.isFinite(n)?[v,d,n]:[v,d]}},{key:"projectPosition",value:function(t){var e=i(this.projectFlat(t),2);return[e[0],e[1],(t[2]||0)*this.distanceScales.unitsPerMeter[2]]}},{key:"unprojectPosition",value:function(t){var e=i(this.unprojectFlat(t),2);return[e[0],e[1],(t[2]||0)*this.distanceScales.metersPerUnit[2]]}},{key:"projectFlat",value:function(t){return this.isGeospatial?I(t):t}},{key:"unprojectFlat",value:function(t){return this.isGeospatial?L(t):t}},{key:"getDistanceScales",value:function(t){return t&&Array.isArray(t)?w({longitude:t[0],latitude:t[1],highPrecision:!0}):this.distanceScales}},{key:"containsPixel",value:function(t){var e=t.x,i=t.y,o=t.width,r=void 0===o?1:o,n=t.height,a=void 0===n?1:n;return e<this.x+this.width&&this.x<e+r&&i<this.y+this.height&&this.y<i+a}},{key:"getFrustumPlanes",value:function(){var t,e,i;return null!==(t=this._frustumPlanes)&&void 0!==t&&t.near||(this._frustumPlanes=(e=this.viewProjectionMatrix,(i={}).left=v(e[3]+e[0],e[7]+e[4],e[11]+e[8],e[15]+e[12]),i.right=v(e[3]-e[0],e[7]-e[4],e[11]-e[8],e[15]-e[12]),i.bottom=v(e[3]+e[1],e[7]+e[5],e[11]+e[9],e[15]+e[13]),i.top=v(e[3]-e[1],e[7]-e[5],e[11]-e[9],e[15]-e[13]),i.near=v(e[3]+e[2],e[7]+e[6],e[11]+e[10],e[15]+e[14]),i.far=v(e[3]-e[2],e[7]-e[6],e[11]-e[10],e[15]-e[14]),i)),this._frustumPlanes}},{key:"getCameraPosition",value:function(){return this.cameraPosition}},{key:"_createProjectionMatrix",value:function(t){var e=t.orthographic,i=t.fovyRadians,o=t.aspect,r=t.focalDistance,n=t.near,a=t.far,s=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];if(e){if(i>2*Math.PI)throw Error("radians");var c=i/2,u=r*Math.tan(c),l=u*o;!function(t,e,i,o,r,n,a){var s=1/(e-i),c=1/(o-r),u=1/(n-a);t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+i)*s,t[13]=(r+o)*c,t[14]=(a+n)*u,t[15]=1}(s,-l,l,-u,u,n,a)}else!function(t,e,i,o,r){var n,a=1/Math.tan(e/2);t[0]=a/i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=r&&r!==1/0?(n=1/(o-r),t[10]=(r+o)*n,t[14]=2*r*o*n):(t[10]=-1,t[14]=-2*o)}(s,i,o,n,a);return s}},{key:"_initViewMatrix",value:function(t){var e=t.viewMatrix,i=void 0===e?F:e,o=t.longitude,r=t.latitude,n=t.zoom,a=t.position,u=void 0===a?null:a,l=t.modelMatrix,f=void 0===l?null:l,p=t.focalDistance,_=void 0===p?1:p,h=t.distanceScales;this.isGeospatial=Number.isFinite(r)&&Number.isFinite(o),this.zoom=n,Number.isFinite(this.zoom)||(this.zoom=this.isGeospatial?R({latitude:r})+Math.log2(_):0),this.scale=Math.pow(2,this.zoom),this.distanceScales=this.isGeospatial?w({latitude:r,longitude:o}):h||b,this.focalDistance=_,this.position=N,this.meterOffset=N,u&&f&&(this.position=u,this.modelMatrix=f,this.meterOffset=f?function(t,e,i){var o=e[0],r=e[1],n=e[2],a=i[3]*o+i[7]*r+i[11]*n+i[15];return a=a||1,t[0]=(i[0]*o+i[4]*r+i[8]*n+i[12])/a,t[1]=(i[1]*o+i[5]*r+i[9]*n+i[13])/a,t[2]=(i[2]*o+i[6]*r+i[10]*n+i[14])/a,t}([-0,-0,-0],u,f):u),this.isGeospatial?(this.longitude=o,this.latitude=r,this.center=this._getCenterInWorld({longitude:o,latitude:r})):this.center=u?this.projectPosition(u):[0,0,0],this.viewMatrixUncentered=i,this.viewMatrix=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],s(this.viewMatrix,this.viewMatrixUncentered,this.viewMatrix),c(this.viewMatrix,this.viewMatrix,(this.center||N).map((function(t){return-t})))}},{key:"_initProjectionMatrix",value:function(t){var e=t.projectionMatrix,i=void 0===e?null:e,o=t.orthographic,r=void 0!==o&&o,n=t.fovyRadians,a=t.fovy,s=void 0===a?75:a,c=t.near,u=void 0===c?.1:c,l=t.far,f=void 0===l?1e3:l,p=t.focalDistance,_=void 0===p?1:p;this.projectionMatrix=i||this._createProjectionMatrix({orthographic:r,fovyRadians:n||s*U,aspect:this.width/this.height,focalDistance:_,near:u,far:f})}},{key:"_initPixelMatrices",value:function(){var t,e=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];s(e,e,this.projectionMatrix),s(e,e,this.viewMatrix),this.viewProjectionMatrix=e,this.viewMatrixInverse=a([],this.viewMatrix)||this.viewMatrix,this.cameraPosition=[(t=this.viewMatrixInverse)[12],t[13],t[14]];var i=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];u(i,i,[this.width/2,-this.height/2,1]),c(i,i,[1,-1,0]),s(o,i,this.viewProjectionMatrix),this.pixelProjectionMatrix=o,this.viewportMatrix=i;var r=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];this.pixelUnprojectionMatrix=a(r,this.pixelProjectionMatrix),this.pixelUnprojectionMatrix||console.warn("Pixel project matrix not invertible")}},{key:"_getCenterInWorld",value:function(t){var e=t.longitude,i=t.latitude,o=this.meterOffset,r=this.distanceScales,n=this.projectPosition([e,i,0]);if(o){for(var a=o,s=0;s<a.length;++s)a[s]*=r.unitsPerMeter[s];for(var c=0;c<n.length;++c)n[c]+=a[c]}return n}},{key:"subViewports",get:function(){if(this._subViewports&&!this._subViewports.length)for(var e=this.getBounds(),i=Math.floor((e[0]+180)/360),o=Math.ceil((e[2]-180)/360),r=i;r<=o;r++){var n=r?new t(Object.assign({},this,{worldOffset:r})):this;this._subViewports.push(n)}return this._subViewports}},{key:"addMetersToLngLat",value:function(t,e){return function(t,e){var o=i(t,3),r=o[0],n=o[1],a=o[2],s=i(e,3),c=s[0],u=s[1],l=s[2],f=w({longitude:r,latitude:n,highPrecision:!0}),p=f.unitsPerMeter,_=f.unitsPerMeter2,h=I(t);_&&(h[0]+=c*(p[0]+_[0]*u)),_&&(h[1]+=u*(p[1]+_[1]*u));var v=L(h),d=(a||0)+(l||0);return Number.isFinite(a)||Number.isFinite(l)?[v[0],v[1],d]:v}(t,e)}},{key:"getMapCenterByLngLatPosition",value:function(t){var e=t.lngLat,i=S(t.pos,this.pixelUnprojectionMatrix),o=l([],this.projectFlat(e),function(t,e){return t[0]=-e[0],t[1]=-e[1],t}([],i)),r=l([],this.center,o);return this.unprojectFlat(r)}},{key:"getBounds",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=P(this,t.z||0);return[Math.min(e[0][0],e[1][0],e[2][0],e[3][0]),Math.min(e[0][1],e[1][1],e[2][1],e[3][1]),Math.max(e[0][0],e[1][0],e[2][0],e[3][0]),Math.max(e[0][1],e[1][1],e[2][1],e[3][1])]}}])&&e(o.prototype,r),n&&e(o,n),t}();function W(t){switch(function(t){var e=t.getExtension("WEBGL_debug_renderer_info"),i=t.getParameter((null==e?void 0:e.UNMASKED_VENDOR_WEBGL)||7936),o=t.getParameter((null==e?void 0:e.UNMASKED_RENDERER_WEBGL)||7937);return{gpuVendor:function(t,e){return t.match(/NVIDIA/i)||e.match(/NVIDIA/i)?"NVIDIA":t.match(/INTEL/i)||e.match(/INTEL/i)?"INTEL":t.match(/AMD/i)||e.match(/AMD/i)||t.match(/ATI/i)||e.match(/ATI/i)?"AMD":"UNKNOWN GPU"}(i,o),vendor:i,renderer:o,version:t.getParameter(7938),shadingLanguageVersion:t.getParameter(35724)}}(t).gpuVendor.toLowerCase()){case"nvidia":return"#define NVIDIA_GPU\n// Nvidia optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n";case"intel":return"#define INTEL_GPU\n// Intel optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n";case"amd":return"#define AMD_GPU\n";default:return"#define DEFAULT_GPU\n// Prevent driver from optimizing away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n"}}function k(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=0,i="";for(var o in t){0===e&&(i+="\n// APPLICATION DEFINES\n"),e++;var r=t[o];(r||Number.isFinite(r))&&(i+="#define ".concat(o.toUpperCase()," ").concat(t[o],"\n"))}return 0===e&&(i+="\n"),i}var z,V,G="#define GLSLIFY 1\n#define PROJECT_TILE_SIZE 512.0\n#define PROJECT_PI 3.141592653589793\n#define PROJECT_EARTH_RADIUS 6370972.0\n#define PROJECT_WORLD_SCALE (PROJECT_TILE_SIZE / (PROJECT_PI * 2.0))\n#define PROJECT_EARTH_CIRCUMFRENCE (2.0 * PROJECT_PI * PROJECT_EARTH_RADIUS)\nuniform vec4 project_uCenter;uniform vec3 project_uCoordinateOrigin;uniform float project_uScale;uniform mat4 project_uModelMatrix;uniform mat4 project_uViewProjectionMatrix;uniform vec3 project_uCommonUnitsPerMeter;uniform vec3 project_uCommonUnitsPerWorldUnit;uniform vec3 project_uCommonUnitsPerWorldUnit2;uniform vec2 project_uViewportSize;uniform float project_uDevicePixelRatio;uniform float project_uFocalDistance;uniform bool project_uWrapLongitude;const vec3 ZERO_64_LOW=vec3(0.0);float project_size(float meters){return meters*project_uCommonUnitsPerMeter.z;}vec2 project_size(vec2 meters){return meters*project_uCommonUnitsPerMeter.xy;}vec3 project_size(vec3 meters){return meters*project_uCommonUnitsPerMeter;}vec4 project_size(vec4 meters){return vec4(meters.xyz*project_uCommonUnitsPerMeter,meters.w);}vec3 project_normal(vec3 vector){vec4 normal_modelspace=project_uModelMatrix*vec4(vector,0.0);return normalize(normal_modelspace.xyz*project_uCommonUnitsPerMeter);}vec4 project_offset(vec4 offset){float dy=offset.y;dy=clamp(dy,-1.,1.);vec3 commonUnitsPerWorldUnit=project_uCommonUnitsPerWorldUnit+project_uCommonUnitsPerWorldUnit2*dy;return vec4(offset.xyz*commonUnitsPerWorldUnit,offset.w);}vec2 project_mercator(vec2 lnglat){float x=lnglat.x;if(project_uWrapLongitude){x=mod(x+180.,360.0)-180.;}float y=clamp(lnglat.y,-89.9,89.9);return vec2(radians(x)+PROJECT_PI,PROJECT_PI+log(tan_fp32(PROJECT_PI*0.25+radians(y)*0.5)));}vec4 project_position(vec4 position,vec3 position64Low){vec4 position_world=project_uModelMatrix*position;if(project_uScale<PROJECT_OFFSET_THRESHOLD){vec2 point=project_mercator(position_world.xy)*PROJECT_WORLD_SCALE;return vec4(point,project_size(position_world.z),position_world.w);}position_world.xyz-=project_uCoordinateOrigin;return project_offset(position_world+project_uModelMatrix*vec4(position64Low,0.0));}vec4 project_position(vec4 position){return project_position(position,ZERO_64_LOW);}vec3 project_position(vec3 position,vec3 position64Low){vec4 projected_position=project_position(vec4(position,1.0),position64Low);return projected_position.xyz;}vec3 project_position(vec3 position){vec4 projected_position=project_position(vec4(position,1.0),ZERO_64_LOW);return projected_position.xyz;}vec2 project_position(vec2 position){vec4 projected_position=project_position(vec4(position,0.0,1.0),ZERO_64_LOW);return projected_position.xy;}vec4 project_common_position_to_clipspace(vec4 position,mat4 viewProjectionMatrix,vec4 center){return viewProjectionMatrix*position+center;}vec4 project_common_position_to_clipspace(vec4 position){return project_common_position_to_clipspace(position,project_uViewProjectionMatrix,project_uCenter);}vec2 project_pixel_size_to_clipspace(vec2 pixels){vec2 offset=pixels/project_uViewportSize*project_uDevicePixelRatio*2.0;return offset*project_uFocalDistance;}float project_size_to_pixel(float meters){return project_size(meters)*project_uScale;}float project_pixel_size(float pixels){return pixels/project_uScale;}vec2 project_pixel_size(vec2 pixels){return pixels/project_uScale;}vec4 project_position_to_clipspace(vec3 position,vec3 position64Low,vec3 offset,out vec4 commonPosition){vec3 projectedPosition=project_position(position,position64Low);commonPosition=vec4(projectedPosition+offset,1.0);return project_common_position_to_clipspace(commonPosition);}vec4 project_position_to_clipspace(vec3 position,vec3 position64Low,vec3 offset){vec4 commonPosition;return project_position_to_clipspace(position,position64Low,offset,commonPosition);}float circumferenceAtLatitude(float latitude){return PROJECT_EARTH_CIRCUMFRENCE*cos(latitude*PROJECT_PI/180.0);}float mercatorXfromLng(float lng){return(180.0+lng)/360.0;}float mercatorYfromLat(float lat){return(180.0-degrees(log(tan(PROJECT_PI/4.0+0.5*radians(lat)))))/360.0;}float mercatorZfromAltitude(float altitude,float lat){return altitude/circumferenceAtLatitude(lat);}",B="#define GLSLIFY 1\n#define MODULE_FP32\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\nconst float TWO_PI=6.2831854820251465;const float PI_2=1.5707963705062866;const float PI_16=0.1963495463132858;const float SIN_TABLE_0=0.19509032368659973;const float SIN_TABLE_1=0.3826834261417389;const float SIN_TABLE_2=0.5555702447891235;const float SIN_TABLE_3=0.7071067690849304;const float COS_TABLE_0=0.9807852506637573;const float COS_TABLE_1=0.9238795042037964;const float COS_TABLE_2=0.8314695954322815;const float COS_TABLE_3=0.7071067690849304;const float INVERSE_FACTORIAL_3=1.666666716337204e-01;const float INVERSE_FACTORIAL_5=8.333333767950535e-03;const float INVERSE_FACTORIAL_7=1.9841270113829523e-04;const float INVERSE_FACTORIAL_9=2.75573188446287533e-06;float sin_taylor_fp32(float a){float r,s,t,x;if(a==0.0){return 0.0;}x=-a*a;s=a;r=a;r=r*x;t=r*INVERSE_FACTORIAL_3;s=s+t;r=r*x;t=r*INVERSE_FACTORIAL_5;s=s+t;r=r*x;t=r*INVERSE_FACTORIAL_7;s=s+t;r=r*x;t=r*INVERSE_FACTORIAL_9;s=s+t;return s;}void sincos_taylor_fp32(float a,out float sin_t,out float cos_t){if(a==0.0){sin_t=0.0;cos_t=1.0;}sin_t=sin_taylor_fp32(a);cos_t=sqrt(1.0-sin_t*sin_t);}float tan_taylor_fp32(float a){float sin_a;float cos_a;if(a==0.0){return 0.0;}float z=floor(a/TWO_PI);float r=a-TWO_PI*z;float t;float q=floor(r/PI_2+0.5);int j=int(q);if(j<-2||j>2){return 0.0/0.0;}t=r-PI_2*q;q=floor(t/PI_16+0.5);int k=int(q);int abs_k=int(abs(float(k)));if(abs_k>4){return 0.0/0.0;}else{t=t-PI_16*q;}float u=0.0;float v=0.0;float sin_t,cos_t;float s,c;sincos_taylor_fp32(t,sin_t,cos_t);if(k==0){s=sin_t;c=cos_t;}else{if(abs(float(abs_k)-1.0)<0.5){u=COS_TABLE_0;v=SIN_TABLE_0;}else if(abs(float(abs_k)-2.0)<0.5){u=COS_TABLE_1;v=SIN_TABLE_1;}else if(abs(float(abs_k)-3.0)<0.5){u=COS_TABLE_2;v=SIN_TABLE_2;}else if(abs(float(abs_k)-4.0)<0.5){u=COS_TABLE_3;v=SIN_TABLE_3;}if(k>0){s=u*sin_t+v*cos_t;c=u*cos_t-v*sin_t;}else{s=u*sin_t-v*cos_t;c=u*cos_t+v*sin_t;}}if(j==0){sin_a=s;cos_a=c;}else if(j==1){sin_a=c;cos_a=-s;}else if(j==-1){sin_a=-c;cos_a=s;}else{sin_a=-s;cos_a=-c;}return sin_a/cos_a;}\n#endif\nfloat tan_fp32(float a){\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\nreturn tan_taylor_fp32(a);\n#else\nreturn tan(a);\n#endif\n}",J=[0,0,0,0],Z=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0],q=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],K=[0,0,0],H=[0,0,0],Y={devicePixelRatio:window.devicePixelRatio||(null===(z=window.screen)||void 0===z?void 0:z.deviceXDPI)/(null===(V=window.screen)||void 0===V?void 0:V.logicalXDPI)||1};function X(t,e){if(t===e)return!0;if(Array.isArray(t)){var i=t.length;if(!e||e.length!==i)return!1;for(var o=0;o<i;o++)if(t[o]!==e[o])return!1;return!0}return!1}function $(t){var e,i={};return function(o){for(var r in o)if(!X(o[r],i[r])){e=t(o),i=o;break}return e}}function Q(t,e,i){var o=e[0],r=e[1],n=e[2],a=e[3],s=e[4],c=e[5],u=e[6],l=e[7],f=e[8],p=e[9],_=e[10],h=e[11],v=e[12],d=e[13],m=e[14],j=e[15],P=i[0],M=i[1],g=i[2],E=i[3];return t[0]=P*o+M*s+g*f+E*v,t[1]=P*r+M*c+g*p+E*d,t[2]=P*n+M*u+g*_+E*m,t[3]=P*a+M*l+g*h+E*j,P=i[4],M=i[5],g=i[6],E=i[7],t[4]=P*o+M*s+g*f+E*v,t[5]=P*r+M*c+g*p+E*d,t[6]=P*n+M*u+g*_+E*m,t[7]=P*a+M*l+g*h+E*j,P=i[8],M=i[9],g=i[10],E=i[11],t[8]=P*o+M*s+g*f+E*v,t[9]=P*r+M*c+g*p+E*d,t[10]=P*n+M*u+g*_+E*m,t[11]=P*a+M*l+g*h+E*j,P=i[12],M=i[13],g=i[14],E=i[15],t[12]=P*o+M*s+g*f+E*v,t[13]=P*r+M*c+g*p+E*d,t[14]=P*n+M*u+g*_+E*m,t[15]=P*a+M*l+g*h+E*j,t}function tt(t,e,i){var o=e[0],r=e[1],n=e[2],a=e[3];return t[0]=i[0]*o+i[4]*r+i[8]*n+i[12]*a,t[1]=i[1]*o+i[5]*r+i[9]*n+i[13]*a,t[2]=i[2]*o+i[6]*r+i[10]*n+i[14]*a,t[3]=i[3]*o+i[7]*r+i[11]*n+i[15]*a,t}function et(t,e){var i=e[0],o=e[1],r=e[2],n=e[3],a=e[4],s=e[5],c=e[6],u=e[7],l=e[8],f=e[9],p=e[10],_=e[11],h=e[12],v=e[13],d=e[14],m=e[15],j=i*s-o*a,P=i*c-r*a,M=i*u-n*a,g=o*c-r*s,E=o*u-n*s,O=r*u-n*c,A=l*v-f*h,x=l*d-p*h,T=l*m-_*h,I=f*d-p*v,L=f*m-_*v,R=p*m-_*d,w=j*R-P*L+M*I+g*T-E*x+O*A;return w?(w=1/w,t[0]=(s*R-c*L+u*I)*w,t[1]=(r*L-o*R-n*I)*w,t[2]=(v*O-d*E+m*g)*w,t[3]=(p*E-f*O-_*g)*w,t[4]=(c*T-a*R-u*x)*w,t[5]=(i*R-r*T+n*x)*w,t[6]=(d*M-h*O-m*P)*w,t[7]=(l*O-p*M+_*P)*w,t[8]=(a*L-s*T+u*A)*w,t[9]=(o*T-i*L-n*A)*w,t[10]=(h*E-v*M+m*j)*w,t[11]=(f*M-l*E-_*j)*w,t[12]=(s*x-a*I-c*A)*w,t[13]=(i*I-o*x+r*A)*w,t[14]=(v*P-h*g-d*j)*w,t[15]=(l*g-f*P+p*j)*w,t):null}var it=$((function(t){var e=t.viewport,i=t.devicePixelRatio,o=t.coordinateSystem,r=t.coordinateOrigin,n=function(t,e,i){var o=t.viewMatrixUncentered,r=t.projectionMatrix,n=t.viewMatrix,a=t.viewProjectionMatrix,s=J,c=t.cameraPosition,u=ot(t,e,i),l=u.geospatialOrigin,f=u.shaderCoordinateOrigin;if(u.offsetMode){var p=null==t?void 0:t.projectPosition(l||f);c=[c[0]-p[0],c[1]-p[1],c[2]-p[2]],p[3]=1,s=tt([],p,a),a=Q([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],r,n=o||n),a=Q([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],a,Z)}return{viewMatrix:n,viewProjectionMatrix:a,projectionCenter:s,geospatialOrigin:l,shaderCoordinateOrigin:f,cameraPosCommon:c}}(e,o,r),a=n.projectionCenter,s=n.viewProjectionMatrix,c=n.shaderCoordinateOrigin,u=n.geospatialOrigin,l=n.cameraPosCommon,f=e.distanceScales,p=[e.width*i,e.height*i],_={project_uCoordinateSystem:o,project_uProjectionMode:e.projectionMode,project_uCoordinateOrigin:c,project_uCenter:a,project_uAntimeridian:(e.longitude||0)-180,project_uViewportSize:p,project_uDevicePixelRatio:i,project_uFocalDistance:e.focalDistance||1,project_uCommonUnitsPerMeter:f.unitsPerMeter,project_uCommonUnitsPerWorldUnit:f.unitsPerMeter,project_uCommonUnitsPerWorldUnit2:H,project_uScale:e.scale,project_uViewProjectionMatrix:s,project_uInverseViewProjectionMatrix:et([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],s),project_metersPerPixel:f.metersPerUnit[2]/e.scale,project_uCameraPosition:l};if(u){var h=e.getDistanceScales(u);if(h)switch(o){case E.METER_OFFSETS:_.project_uCommonUnitsPerWorldUnit=h.unitsPerMeter,_.project_uCommonUnitsPerWorldUnit2=h.unitsPerMeter2;break;case E.LNGLAT:case E.LNGLAT_OFFSETS:_.project_uCommonUnitsPerWorldUnit=h.unitsPerDegree,_.project_uCommonUnitsPerWorldUnit2=h.unitsPerDegree2;break;case E.CARTESIAN:_.project_uCommonUnitsPerWorldUnit=[1,1,h.unitsPerMeter[2]],_.project_uCommonUnitsPerWorldUnit2=[0,0,h.unitsPerMeter2[2]]}}return _}));function ot(t,e){var i,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:K,r=o,n=!0;switch(i=e===E.LNGLAT_OFFSETS||e===E.METER_OFFSETS?o:t.isGeospatial?[Math.fround(t.longitude),Math.fround(t.latitude),0]:null,t.projectionMode){case g.WEB_MERCATOR:e!==E.LNGLAT&&e!==E.CARTESIAN||(n=!1);break;case g.WEB_MERCATOR_AUTO_OFFSET:e===E.LNGLAT?r=i:e===E.CARTESIAN&&(r=[Math.fround(t.center[0]),Math.fround(t.center[1]),0],i=t.unprojectPosition(r),r[0]-=o[0],r[1]-=o[1],r[2]-=o[2]);break;case g.IDENTITY:r=t.position.map(Math.fround);break;default:n=!1}return r[2]=r[2]||0,{geospatialOrigin:i,shaderCoordinateOrigin:r,offsetMode:n}}function rt(t){var e=t.viewport,i=t.devicePixelRatio,o=void 0===i?Y.devicePixelRatio:i,r=t.modelMatrix,n=void 0===r?null:r,a=t.coordinateSystem,s=void 0===a?E.DEFAULT:a,c=t.coordinateOrigin,u=t.autoWrapLongitude,l=void 0!==u&&u;s===E.DEFAULT&&(s=e.isGeospatial?E.LNGLAT:E.CARTESIAN);var f=it({viewport:e,devicePixelRatio:o,coordinateSystem:s,coordinateOrigin:c});return f.project_uWrapLongitude=l,f.project_uModelMatrix=n||q,f}function nt(t){return t.viewport?rt(t):{}}var at={name:"fp32",vs:B,fs:null},st={name:"project",vs:G,fs:null,inject:{},dependencies:[at],deprecations:[],getUniforms:nt};t.WebMercatorViewport=D,t.fp32=at,t.getOffsetOrigin=ot,t.getUniformKeys=function(){return["project_uCoordinateSystem","project_uProjectionMode","project_uCoordinateOrigin","project_uCenter","project_uAntimeridian","project_uViewportSize","project_uDevicePixelRatio","project_uFocalDistance","project_uCommonUnitsPerMeter","project_uCommonUnitsPerWorldUnit","project_uCommonUnitsPerWorldUnit2","project_uScale","project_uViewProjectionMatrix","project_metersPerPixel","project_uModelMatrix","project_uWrapLongitude","project_uCameraPosition"]},t.getUniforms=nt,t.getUniformsFromViewport=rt,t.highPrecisionLngLat=function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2,o=Math.ceil((t.length-e)/i),r=new Float32Array(2*o),n=0;n<o;++n){var a=e+n*i,s=2*n;r[s]=t[a]-Math.fround(t[a]),r[s+1]=t[a+1]-Math.fround(t[a+1])}return r},t.injectMercatorGLSL=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{PROJECT_OFFSET_THRESHOLD:"4096.0"},o=e.match(/#version \d+(\s+es)?\s*\n/),r=o?o[0]:"";return"".concat(r,"\n").concat(W(t),"\n").concat(k(i),"\n").concat("precision highp float;\n","\n").concat(B,"\n").concat(G,"\n").concat(e.replace(r,""),"\n")},t.invert=et,t.isEqual=X,t.memoize=$,t.multiply=Q,t.project=st,t.transformMat4=tt,Object.defineProperty(t,"__esModule",{value:!0})})); //# sourceMappingURL=mercator-proj.min.js.map