/**
 * Minified by jsDelivr using Terser v5.37.0.
 * Original file: /npm/amap-wind@1.2.4/dist/amap-wind.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i((t="undefined"!=typeof globalThis?globalThis:t||self).AMapWind={})}(this,(function(t){"use strict";const i=Object.prototype.hasOwnProperty,s="undefined"!=typeof Symbol?Symbol.toStringTag:void 0;function e(t){if(!function(t){const i=typeof t;return null!==t&&("object"===i||"function"===i)}(t))return!1;const e=function(t){if(null===t)return void 0===t?"[object Undefined]":"[object Null]";if(!s||!(s in Object(t)))return toString.call(t);const e=i.call(t,s),n=t[s];let o=!1;try{t[s]=void 0,o=!0}catch(t){}const a=Object.prototype.toString.call(t);return o&&(e?t[s]=n:delete t[s]),a}(t);return"[object Function]"===e||"[object AsyncFunction]"===e||"[object GeneratorFunction]"===e||"[object Proxy]"===e}function n(t){return"[object Number]"===Object.prototype.toString.call(t)&&!isNaN(t)}function o(t,...i){return Object.assign(t,...i)}function a(t,i){console.warn(`${i||"wind-layer"}: ${t}`)}const h={};function r(t){return null!=t&&!isNaN(t)}class l{constructor(t,i){this.u=t,this.v=i,this.m=this.magnitude()}magnitude(){return Math.sqrt(this.u**2+this.v**2)}directionTo(){let t=Math.atan2(this.u,this.v)*(180/Math.PI);return t<0&&(t+=360),t}directionFrom(){return(this.directionTo()+180)%360}}class c{constructor(t){this.grid=[],this.xmin=t.xmin,this.xmax=t.xmax,this.ymin=t.ymin,this.ymax=t.ymax,this.cols=t.cols,this.rows=t.rows,this.us=t.us,this.vs=t.vs,this.deltaX=t.deltaX,this.deltaY=t.deltaY,this.flipY=Boolean(t.flipY),this.ymin=Math.min(t.ymax,t.ymin),this.ymax=Math.max(t.ymax,t.ymin),this.deltaY<0&&this.ymin<this.ymax||(void 0===t.flipY&&(this.flipY=!0),console.warn("[wind-core]: The data is flipY")),this.isFields=!0;const i=Math.ceil((this.xmax-this.xmin)/t.deltaX),s=Math.ceil((this.ymax-this.ymin)/t.deltaY);var e,n;i===this.cols&&s===this.rows||console.warn("[wind-core]: The data grid not equal"),this.isContinuous=Math.floor(this.cols*t.deltaX)>=360,this.translateX="translateX"in t?t.translateX:this.xmax>180,"wrappedX"in t&&(e="[wind-core]: ",h[n="`wrappedX` namespace will deprecated please use `translateX` instead！"]||(a(n,e),h[n]=!0)),this.wrapX=Boolean(t.wrapX),this.grid=this.buildGrid(),this.range=this.calculateRange()}buildGrid(){const t=[];let i=0;const{rows:s,cols:e,us:n,vs:o}=this;for(let a=0;a<s;a++){const s=[];for(let t=0;t<e;t++,i++){const e=n[i],a=o[i],h=this.isValid(e)&&this.isValid(a);s[t]=h?new l(e,a):null}this.isContinuous&&s.push(s[0]),t[a]=s}return t}release(){this.grid=[]}extent(){return[this.xmin,this.ymin,this.xmax,this.ymax]}bilinearInterpolateVector(t,i,s,e,n,o){const a=1-t,h=1-i,r=a*h,c=t*h,d=a*i,p=t*i,u=s.u*r+e.u*c+n.u*d+o.u*p,m=s.v*r+e.v*c+n.v*d+o.v*p;return new l(u,m)}calculateRange(){if(!this.grid||!this.grid[0])return;const t=this.grid.length,i=this.grid[0].length;let s,e;for(let n=0;n<t;n++)for(let t=0;t<i;t++){const i=this.grid[n][t];if(null!==i){const t=i.m||i.magnitude();void 0===s?s=t:void 0===e?(e=t,s=Math.min(s,e),e=Math.max(s,e)):(s=Math.min(t,s),e=Math.max(t,e))}}return[s,e]}isValid(t){return null!=t}getWrappedLongitudes(){let t=this.xmin,i=this.xmax;return this.translateX&&(this.isContinuous?(t=-180,i=180):(i=this.xmax-360,t=this.xmin-360)),[t,i]}contains(t,i){const[s,e]=this.getWrappedLongitudes();e>180&&t>=-180&&t<=e-360?t+=360:s<-180&&t<=180&&t>=s+360&&(t-=360);const n=t>=s&&t<=e;let o;return o=this.deltaY>=0?i>=this.ymin&&i<=this.ymax:i>=this.ymax&&i<=this.ymin,n&&o}getDecimalIndexes(t,i){const s=((e=t-this.xmin)-(n=360)*Math.floor(e/n))/this.deltaX;var e,n;if(this.flipY){return[s,(this.ymax-i)/this.deltaY]}return[s,(this.ymin+i)/this.deltaY]}valueAt(t,i){let s=!1;if((this.wrapX||this.contains(t,i))&&(s=!0),!s)return null;const e=this.getDecimalIndexes(t,i),n=Math.floor(e[0]),o=Math.floor(e[1]),a=this.clampColumnIndex(n),h=this.clampRowIndex(o);return this.valueAtIndexes(a,h)}interpolatedValueAt(t,i){let s=!1;if((this.wrapX||this.contains(t,i))&&(s=!0),!s)return null;const[e,n]=this.getDecimalIndexes(t,i);return this.interpolatePoint(e,n)}hasValueAt(t,i){return null!==this.valueAt(t,i)}interpolatePoint(t,i){const s=this.getFourSurroundingIndexes(t,i),[e,n,o,a]=s,h=this.getFourSurroundingValues(e,n,o,a);if(h){const[s,n,a,r]=h;return this.bilinearInterpolateVector(t-e,i-o,s,n,a,r)}return null}clampColumnIndex(t){let i=t;t<0&&(i=0);const s=this.cols-1;return t>s&&(i=s),i}clampRowIndex(t){let i=t;t<0&&(i=0);const s=this.rows-1;return t>s&&(i=s),i}getFourSurroundingIndexes(t,i){const s=Math.floor(t);let e=s+1;this.isContinuous&&e>=this.cols&&(e=0),e=this.clampColumnIndex(e);const n=this.clampRowIndex(Math.floor(i));return[s,e,n,this.clampRowIndex(n+1)]}getFourSurroundingValues(t,i,s,e){let n;if(n=this.grid[s]){const s=n[t],o=n[i];if(this.isValid(s)&&this.isValid(o)&&(n=this.grid[e])){const e=n[t],a=n[i];if(this.isValid(e)&&this.isValid(a))return[s,o,e,a]}}return null}valueAtIndexes(t,i){return this.grid[i][t]}lonLatAtIndexes(t,i){return[this.longitudeAtX(t),this.latitudeAtY(i)]}longitudeAtX(t){const i=this.deltaX/2;let s=this.xmin+i+t*this.deltaX;return this.translateX&&(s=s>180?s-360:s),s}latitudeAtY(t){const i=this.deltaY/2;return this.ymax-i-t*this.deltaY}randomize(t={},i,s,e){const n=Math.random()*(i||this.cols)|0,o=Math.random()*(s||this.rows)|0,a=e([n,o]);return null!==a?(t.x=a[0],t.y=a[1]):(t.x=this.longitudeAtX(n),t.y=this.latitudeAtY(o)),t}checkFields(){return this.isFields}}const d={globalAlpha:.9,lineWidth:1,colorScale:"#fff",velocityScale:.04,maxAge:90,paths:800,frameRate:20,useCoordsDraw:!0};function p(t,i,s,e){return Math.max(0,Math.min(e.length-1,Math.round((t-i)/(s-i)*(e.length-1))))}class u{constructor(t,i,s){if(this.particles=[],this.generated=!1,this.ctx=t,!this.ctx)throw new Error("ctx error");this.animate=this.animate.bind(this),this.setOptions(i),s&&this.updateData(s)}static{this.Field=c}setOptions(t){this.options={...d,...t};const{width:i,height:s}=this.ctx.canvas;"particleAge"in t&&!("maxAge"in t)&&n(this.options.particleAge)&&(this.options.maxAge=this.options.particleAge),"particleMultiplier"in t&&!("paths"in t)&&n(this.options.particleMultiplier)&&(this.options.paths=Math.round(i*s*this.options.particleMultiplier)),this.prerender()}getOptions(){return this.options}updateData(t){this.field=t,this.generated&&(this.particles=this.prepareParticlePaths())}project(...t){throw new Error("project must be overriden")}unproject(...t){throw new Error("unproject must be overriden")}intersectsCoordinate(t){throw new Error("must be overriden")}clearCanvas(){this.stop(),this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.forceStop=!1}isStop(){return!this.starting}start(){this.starting=!0,this.forceStop=!1,this.then=Date.now(),this.animate()}stop(){cancelAnimationFrame(this.animationLoop),this.starting=!1,this.forceStop=!0}animate(){this.animationLoop&&cancelAnimationFrame(this.animationLoop),this.animationLoop=requestAnimationFrame(this.animate);const t=Date.now(),i=t-this.then;i>this.options.frameRate&&(this.then=t-i%this.options.frameRate,this.render())}prerender(){this.generated=!1,this.field&&(this.particles=this.prepareParticlePaths(),this.generated=!0,this.starting||this.forceStop||(this.starting=!0,this.then=Date.now(),this.animate()))}render(){this.moveParticles(),this.drawParticles(),this.postrender()}postrender(){}moveParticles(){const{width:t,height:i}=this.ctx.canvas,s=this.particles,n=this.options.maxAge,o=e(this.options.velocityScale)?this.options.velocityScale():this.options.velocityScale;let a=0;const h=s.length;for(;a<h;a++){const e=s[a];e.age>n&&(e.age=0,this.field.randomize(e,t,i,this.unproject));const h=e.x,r=e.y,l=this.field.interpolatedValueAt(h,r);if(null===l)e.age=n;else{const t=h+l.u*o,i=r+l.v*o;this.field.hasValueAt(t,i)?(e.xt=t,e.yt=i,e.m=l.m):(e.x=t,e.y=i,e.age=n)}e.age++}}fadeIn(){const t=this.ctx.globalCompositeOperation;this.ctx.globalCompositeOperation="destination-in",this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.ctx.globalCompositeOperation=t}drawParticles(){const t=this.particles;var i;this.fadeIn(),this.ctx.globalAlpha=this.options.globalAlpha,this.ctx.fillStyle=`rgba(0, 0, 0, ${this.options.globalAlpha})`,this.ctx.lineWidth=n(this.options.lineWidth)?this.options.lineWidth:1,this.ctx.strokeStyle=null!=(i=this.options.colorScale)&&("string"==typeof i||null!==i.constructor&&i.constructor===String)?this.options.colorScale:"#fff";let s=0;const e=t.length;if(this.field&&e>0){let i,n;for(r(this.options.minVelocity)&&r(this.options.maxVelocity)?(i=this.options.minVelocity,n=this.options.maxVelocity):[i,n]=this.field.range;s<e;s++)this[this.options.useCoordsDraw?"drawCoordsParticle":"drawPixelParticle"](t[s],i,n)}}drawPixelParticle(t,i,s){const n=[t.x,t.y],o=[t.xt,t.yt];if(o&&n&&r(o[0])&&r(o[1])&&r(n[0])&&r(n[1])&&t.age<=this.options.maxAge){if(this.ctx.beginPath(),this.ctx.moveTo(n[0],n[1]),this.ctx.lineTo(o[0],o[1]),e(this.options.colorScale))this.ctx.strokeStyle=this.options.colorScale(t.m);else if(Array.isArray(this.options.colorScale)){const e=p(t.m,i,s,this.options.colorScale);this.ctx.strokeStyle=this.options.colorScale[e]}e(this.options.lineWidth)&&(this.ctx.lineWidth=this.options.lineWidth(t.m)),t.x=t.xt,t.y=t.yt,this.ctx.stroke()}}drawCoordsParticle(t,i,s){const n=[t.x,t.y],o=[t.xt,t.yt];if(o&&n&&r(o[0])&&r(o[1])&&r(n[0])&&r(n[1])&&this.intersectsCoordinate(o)&&t.age<=this.options.maxAge){const a=this.project(n),h=this.project(o);if(a&&h){if(this.ctx.beginPath(),this.ctx.moveTo(a[0],a[1]),this.ctx.lineTo(h[0],h[1]),t.x=t.xt,t.y=t.yt,e(this.options.colorScale))this.ctx.strokeStyle=this.options.colorScale(t.m);else if(Array.isArray(this.options.colorScale)){const e=p(t.m,i,s,this.options.colorScale);this.ctx.strokeStyle=this.options.colorScale[e]}e(this.options.lineWidth)&&(this.ctx.lineWidth=this.options.lineWidth(t.m)),this.ctx.stroke()}}}prepareParticlePaths(){const{width:t,height:i}=this.ctx.canvas,s="function"==typeof this.options.paths?this.options.paths(this):this.options.paths,e=[];if(!this.field)return[];let n=0;for(;n<s;n++)e.push(this.field.randomize({age:this.randomize()},t,i,this.unproject));return e}randomize(){return Math.floor(Math.random()*this.options.maxAge)}}const m="undefined"==typeof window?global:window,g=m?.AMap;if(!g)throw new Error("Before using this plugin, you must first introduce the amap JS API <https://lbs.amap.com/api/javascript-api/summary>");const x={context:"2d",animation:!1,opacity:1,zIndex:12,zooms:[0,22],windOptions:{},fieldOptions:{}};class f{constructor(t,i={}){this.options=o({},x,i),this.canvas=null,this.wind=null,this.init=this.init.bind(this),this.handleResize=this.handleResize.bind(this),this.canvasFunction=this.canvasFunction.bind(this),this.pickWindOptions(),t&&this.setData(t,this.options.fieldOptions)}appendTo(t){if(!t)throw new Error("not map object");this.init(t)}init(t){if(!t)throw new Error("not map object");this.map=t,this.context=this.options.context||"2d",this.getCanvasLayer(),this.map.on("resize",this.handleResize,this)}handleResize(){this.canvas&&this.canvasFunction()}render(t){if(!this.getData())return this;const i=this.getWindOptions();if(t&&!this.wind){const t=this.getData(),s=this.getContext();s&&(this.wind=new u(s,i,t),this.wind.project=this.project.bind(this),this.wind.unproject=this.unproject.bind(this),this.wind.intersectsCoordinate=this.intersectsCoordinate.bind(this),this.wind.postrender=()=>{})}return this.wind&&(this.wind.prerender(),this.wind.render()),this}getCanvasLayer(){if(!this.canvas){const t=this.canvasFunction(),i={canvas:t};this.options.zooms&&(i.zooms=this.options.zooms),"zIndex"in this.options&&"number"==typeof this.options.zIndex&&(i.zIndex=this.options.zIndex,t.style.zIndex=i.zIndex),"opacity"in this.options&&"number"==typeof this.options.opacity&&(i.opacity=this.options.opacity);const s=this.map.getContainer();if(!s)return void console.error("map container not exit");const e=s.querySelector(".amap-layers");e&&e.appendChild(t),this.map.on("mapmove",this.canvasFunction,this),this.map.on("zoomchange",this.canvasFunction,this)}}canvasFunction(){const t=g.Browser.retina?2:1,[i,s]=[this.map.getSize().width,this.map.getSize().height];return this.canvas?(this.canvas.style.width=`${i}px`,this.canvas.style.height=`${s}px`,this.canvas.width=i*t,this.canvas.height=s*t):(this.canvas=function(t,i,s,e){if("undefined"!=typeof document){const e=document.createElement("canvas");return e.width=t*s,e.height=i*s,e}return new e(t*s,i*s)}(i,s,t,null),this.canvas.style.position="absolute",this.canvas.style.top="0px",this.canvas.style.left="0px",this.canvas.style.right="0px",this.canvas.style.bottom="0px",this.canvas.style.width=`${i}px`,this.canvas.style.height=`${s}px`),this.canvas&&this.render(this.canvas),this.canvas}_getBounds(){let[t,i]=[void 0,void 0];const s=this.map.getBounds();if(function(t,i){t=t.split("."),i=i.split(".");const s=Math.max(t.length,i.length);for(;t.length<s;)t.push("0");for(;i.length<s;)i.push("0");for(let e=0;e<s;e++){const s=parseInt(t[e]),n=parseInt(i[e]);if(s>n)return 1;if(s<n)return-1}return 0}(g.version,"2.0")>=0)i=s.getNorthEast(),t=s.getSouthWest();else{if("2d"===this.map.getViewMode_().toLowerCase())i=s.getNorthEast(),t=s.getSouthWest();else{const e=s.bounds.map((t=>[t.getLng(),t.getLat()]));t=new g.LngLat(e[3][0],e[3][1]),i=new g.LngLat(e[1][0],e[1][1])}}return new g.Bounds(t,i)}removeLayer(){var t;this.map&&(this.wind&&this.wind.stop(),this.map.off("resize",this.handleResize,this),this.map.off("mapmove",this.canvasFunction,this),this.map.off("zoomchange",this.canvasFunction,this),this.canvas&&(t=this.canvas)&&t.parentNode&&t.parentNode.removeChild(t),delete this.map,delete this.canvas)}remove(){this.removeLayer()}project(t){const i=g.Browser.retina?2:1,s=this.map.lngLatToContainer(new g.LngLat(t[0],t[1],!0));return[s.x*i,s.y*i]}unproject(t){const i=this.map.containerToLngLat(new g.Pixel(t[0],t[1]));return i?[i.lng,i.lat]:null}intersectsCoordinate(t){return this._getBounds().contains(new g.LngLat(t[0],t[1]))}getContext(){if(null!==this.canvas)return this.canvas.getContext(this.context)}pickWindOptions(){Object.keys(d).forEach((t=>{t in this.options&&(void 0===this.options.windOptions&&(this.options.windOptions={}),this.options.windOptions[t]=this.options[t])}))}getData(){return this.field}setData(t,i={}){var s;return t&&t.checkFields&&t.checkFields()?this.field=t:(s=t,Array.isArray(s)?this.field=function(t,i={}){let s,e;if(t.forEach((function(t){switch(t.header.parameterCategory+","+t.header.parameterNumber){case"1,2":case"2,2":s=t;break;case"1,3":case"2,3":e=t}})),!e||!s)return;const n=s.header;return new c({xmin:n.lo1,ymin:n.la1,xmax:n.lo2,ymax:n.la2,deltaX:n.dx,deltaY:n.dy,cols:n.nx,rows:n.ny,us:s.data,vs:e.data,...i})}(t,i):console.error("Illegal data")),this.map&&this.canvas&&this.field&&(this?.wind?.updateData(this.field),this.render(this.canvas)),this}updateParams(t={}){return a("will move to setWindOptions"),this.setWindOptions(t),this}getParams(){return a("will move to getWindOptions"),this.getWindOptions()}setWindOptions(t){const i=this.options.windOptions||{};this.options=o(this.options,{windOptions:o(i,t||{})}),this.wind&&(this.wind.setOptions(this.options.windOptions),this.wind.prerender())}getWindOptions(){return this.options.windOptions||{}}}const y=f;t.Field=c,t.WindLayer=y,t.default=f,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=/sm/c85590967c95b477af762faa28bf12590f60b7a7a0f348b174aef14a73e4d4a4.map