{"version":3,"file":"OlWind.js","sources":["../src/windy/windy.js","../src/helper/index.js","../src/openlayers/index.js"],"sourcesContent":["/* eslint-disable */\n\n/* Global class for simulating the movement of particle through a 1km wind grid\n credit: All the credit for this work goes to: https://github.com/cambecc for creating the repo:\n https://github.com/cambecc/earth. The majority of this code is directly take nfrom there, since its awesome.\n This class takes a canvas element and an array of data (1km GFS from http://www.emc.ncep.noaa.gov/index.php?branch=GFS)\n and then uses a mercator (forward/reverse) projection to correctly map wind vectors in \"map space\".\n The \"start\" method takes the bounds of the map at its current extent and starts the whole gridding,\n interpolation and animation process.\n */\n\nconst Windy = function (params = {}) {\n this.params = params;\n const that = this;\n\n that.canvas = params.canvas;\n\n var defaulColorScale = [\n \"rgb(36,104, 180)\",\n \"rgb(60,157, 194)\",\n \"rgb(128,205,193 )\",\n \"rgb(151,218,168 )\",\n \"rgb(198,231,181)\",\n \"rgb(238,247,217)\",\n \"rgb(255,238,159)\",\n \"rgb(252,217,125)\",\n \"rgb(255,182,100)\",\n \"rgb(252,150,75)\",\n \"rgb(250,112,52)\",\n \"rgb(245,64,32)\",\n \"rgb(237,45,28)\",\n \"rgb(220,24,32)\",\n \"rgb(180,0,35)\"\n ];\n\n var buildParams = function(params) {\n if (!params.projection) params.projection = 'EPSG:4326';\n that.MIN_VELOCITY_INTENSITY = params.minVelocity || 0; // velocity at which particle intensity is minimum (m/s)\n that.MAX_VELOCITY_INTENSITY = params.maxVelocity || 10; // velocity at which particle intensity is maximum (m/s)\n that.VELOCITY_SCALE = (params.velocityScale || 0.005) * (Math.pow(window.devicePixelRatio, 1 / 3) || 1); // scale for wind velocity (completely arbitrary--this value looks nice)\n that.MAX_PARTICLE_AGE = params.particleAge || 90; \t // max number of frames a particle is drawn before regeneration\n that.PARTICLE_LINE_WIDTH = params.lineWidth || 1; // line width of a drawn particle\n that.PARTICLE_MULTIPLIER = params.particleMultiplier || 1 / 300; // particle count scalar (completely arbitrary--this values looks nice)\n that.PARTICLE_REDUCTION = (Math.pow(window.devicePixelRatio, 1 / 3) || 1.6); // multiply particle count for mobiles by this amount\n that.FRAME_RATE = params.frameRate || 16;\n that.COLOR_SCALE = params.colorScale || defaulColorScale;\n };\n\n buildParams(params);\n\n window.FRAME_TIME = 1000 / that.FRAME_RATE; // desired frames per second\n\n var NULL_WIND_VECTOR = [NaN, NaN, null]; // singleton for no wind in the form: [u, v, magnitude]\n\n var builder;\n var grid;\n var gridData = that.params.data;\n var date;\n var λ0, φ0, Δλ, Δφ, ni, nj;\n\n var setData = function (data) {\n gridData = data;\n };\n\n // interpolation for vectors like wind (u,v,m)\n var bilinearInterpolateVector = function (x, y, g00, g10, g01, g11) {\n var rx = (1 - x);\n var ry = (1 - y);\n var a = rx * ry, b = x * ry, c = rx * y, d = x * y;\n var u = g00[0] * a + g10[0] * b + g01[0] * c + g11[0] * d;\n var v = g00[1] * a + g10[1] * b + g01[1] * c + g11[1] * d;\n return [u, v, Math.sqrt(u * u + v * v)];\n };\n\n\n var createWindBuilder = function (uComp, vComp) {\n var uData = uComp.data, vData = vComp.data;\n return {\n header: uComp.header,\n //recipe: recipeFor(\"wind-\" + uComp.header.surface1Value),\n data: function (i) {\n return [uData[i], vData[i]];\n },\n interpolate: bilinearInterpolateVector\n }\n };\n\n var createBuilder = function (data) {\n var uComp = null, vComp = null, scalar = null;\n\n data.forEach(function (record) {\n switch (record.header.parameterCategory + \",\" + record.header.parameterNumber) {\n case \"1,2\":\n case \"2,2\":\n uComp = record;\n break;\n case \"1,3\":\n case \"2,3\":\n vComp = record;\n break;\n default:\n scalar = record;\n }\n });\n\n return createWindBuilder(uComp, vComp);\n };\n\n var buildGrid = function (data, callback) {\n\n builder = createBuilder(data);\n var header = builder.header;\n\n λ0 = header.lo1;\n φ0 = Math.max(header.la2, header.la1); // the grid's origin (e.g., 0.0E, 90.0N)\n\n Δλ = header.dx;\n Δφ = header.dy; // distance between grid points (e.g., 2.5 deg lon, 2.5 deg lat)\n\n ni = header.nx;\n nj = header.ny; // number of grid points W-E and N-S (e.g., 144 x 73)\n\n date = new Date(header.refTime);\n date.setHours(date.getHours() + header.forecastTime);\n\n // Scan mode 0 assumed. Longitude increases from λ0, and latitude decreases from φ0.\n // http://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_table3-4.shtml\n grid = [];\n var p = 0;\n var isContinuous = Math.floor(ni * Δλ) >= 360;\n\n for (var j = 0; j < nj; j++) {\n var row = [];\n for (var i = 0; i < ni; i++, p++) {\n row[i] = builder.data(p);\n }\n if (isContinuous) {\n // For wrapped grids, duplicate first column as last column to simplify interpolation logic\n row.push(row[0]);\n }\n grid[j] = row;\n }\n\n callback({\n date: date,\n interpolate: interpolate\n });\n };\n\n /**\n * Get interpolated grid value from Lon/Lat position\n * @param λ {Float} Longitude\n * @param φ {Float} Latitude\n * @returns {Object}\n */\n var interpolate = function (λ, φ) {\n\n if (!grid) return null;\n\n var i = floorMod(λ - λ0, 360) / Δλ; // calculate longitude index in wrapped range [0, 360)\n var j = (φ0 - φ) / Δφ; // calculate latitude index in direction +90 to -90\n\n var fi = Math.floor(i), ci = fi + 1;\n var fj = Math.floor(j), cj = fj + 1;\n\n var row;\n if ((row = grid[fj])) {\n var g00 = row[fi];\n var g10 = row[ci];\n if (isValue(g00) && isValue(g10) && (row = grid[cj])) {\n var g01 = row[fi];\n var g11 = row[ci];\n if (isValue(g01) && isValue(g11)) {\n // All four points found, so interpolate the value.\n return builder.interpolate(i - fi, j - fj, g00, g10, g01, g11);\n }\n }\n }\n return null;\n };\n\n /**\n * @returns {Boolean} true if the specified value is not null and not undefined.\n */\n var isValue = function (x) {\n return x !== null && x !== undefined;\n };\n\n /**\n * @returns {Number} returns remainder of floored division, i.e., floor(a / n). Useful for consistent modulo\n * of negative numbers. See http://en.wikipedia.org/wiki/Modulo_operation.\n */\n var floorMod = function (a, n) {\n return a - n * Math.floor(a / n);\n };\n\n /**\n * @returns {Number} the value x clamped to the range [low, high].\n */\n var clamp = function (x, range) {\n return Math.max(range[0], Math.min(x, range[1]));\n };\n\n /**\n * @returns {Boolean} true if agent is probably a mobile device. Don't really care if this is accurate.\n */\n var isMobile = function () {\n return (/android|blackberry|iemobile|ipad|iphone|ipod|opera mini|webos/i).test(navigator.userAgent);\n };\n\n /**\n * Calculate distortion of the wind vector caused by the shape of the projection at point (x, y). The wind\n * vector is modified in place and returned by this function.\n */\n var distort = function (projection, λ, φ, x, y, scale, wind, windy) {\n var u = wind[0] * scale;\n var v = wind[1] * scale;\n var d = distortion(projection, λ, φ, x, y, windy);\n\n // Scale distortion vectors by u and v, then add.\n wind[0] = d[0] * u + d[2] * v;\n wind[1] = d[1] * u + d[3] * v;\n return wind;\n };\n\n var distortion = function (projection, λ, φ, x, y, windy) {\n var τ = 2 * Math.PI;\n // var H = Math.pow(10, -5.2);\n var H = that.params.projection === 'EPSG:4326' ? 5 : Math.pow(10, -5.2);\n var hλ = λ < 0 ? H : -H;\n var hφ = φ < 0 ? H : -H;\n\n var pλ = project(φ, λ + hλ, windy);\n var pφ = project(φ + hφ, λ, windy);\n\n // Meridian scale factor (see Snyder, equation 4-3), where R = 1. This handles issue where length of 1º λ\n // changes depending on φ. Without this, there is a pinching effect at the poles.\n var k = Math.cos(φ / 360 * τ);\n return [\n (pλ[0] - x) / hλ / k,\n (pλ[1] - y) / hλ / k,\n (pφ[0] - x) / hφ,\n (pφ[1] - y) / hφ\n ];\n };\n\n var createField = function (columns, bounds, callback) {\n\n /**\n * @returns {Array} wind vector [u, v, magnitude] at the point (x, y), or [NaN, NaN, null] if wind\n * is undefined at that point.\n */\n function field (x, y) {\n var column = columns[Math.round(x)];\n return column && column[Math.round(y)] || NULL_WIND_VECTOR;\n }\n\n // Frees the massive \"columns\" array for GC. Without this, the array is leaked (in Chrome) each time a new\n // field is interpolated because the field closure's context is leaked, for reasons that defy explanation.\n field.release = function () {\n columns = [];\n };\n\n field.randomize = function (o) { // UNDONE: this method is terrible\n var x, y;\n var safetyNet = 0;\n do {\n x = Math.round(Math.floor(Math.random() * bounds.width) + bounds.x);\n y = Math.round(Math.floor(Math.random() * bounds.height) + bounds.y)\n } while (field(x, y)[2] === null && safetyNet++ < 30);\n o.x = x;\n o.y = y;\n return o;\n };\n\n callback(bounds, field);\n };\n\n var buildBounds = function (bounds, width, height) {\n var upperLeft = bounds[0];\n var lowerRight = bounds[1];\n var x = Math.round(upperLeft[0]); //Math.max(Math.floor(upperLeft[0], 0), 0);\n var y = Math.max(Math.floor(upperLeft[1], 0), 0);\n var xMax = Math.min(Math.ceil(lowerRight[0], width), width - 1);\n var yMax = Math.min(Math.ceil(lowerRight[1], height), height - 1);\n return {x: x, y: y, xMax: width, yMax: yMax, width: width, height: height};\n };\n\n var deg2rad = function (deg) {\n return (deg / 180) * Math.PI;\n };\n\n var rad2deg = function (ang) {\n return ang / (Math.PI / 180.0);\n };\n\n var invert\n\n if (that.params.projection === 'EPSG:4326') {\n invert = function (x, y, windy) {\n var mapLonDelta = windy.east - windy.west;\n var mapLatDelta = windy.south - windy.north;\n var lat = rad2deg(windy.north) + y / windy.height * rad2deg(mapLatDelta);\n var lon = rad2deg(windy.west) + x / windy.width * rad2deg(mapLonDelta);\n return [lon, lat];\n };\n } else {\n invert = function (x, y, windy) {\n var mapLonDelta = windy.east - windy.west;\n var worldMapRadius = windy.width / rad2deg(mapLonDelta) * 360 / (2 * Math.PI);\n var mapOffsetY = (worldMapRadius / 2 * Math.log((1 + Math.sin(windy.south)) / (1 - Math.sin(windy.south))));\n var equatorY = windy.height + mapOffsetY;\n var a = (equatorY - y) / worldMapRadius;\n var lat = 180 / Math.PI * (2 * Math.atan(Math.exp(a)) - Math.PI / 2);\n var lon = rad2deg(windy.west) + x / windy.width * rad2deg(mapLonDelta);\n return [lon, lat];\n };\n }\n\n var mercY = function (lat) {\n return Math.log(Math.tan(lat / 2 + Math.PI / 4));\n };\n\n\n var project = function (lat, lon, windy) { // both in radians, use deg2rad if neccessary\n var ymin = mercY(windy.south);\n var ymax = mercY(windy.north);\n var xFactor = windy.width / (windy.east - windy.west);\n var yFactor = windy.height / (ymax - ymin);\n\n var y = mercY(deg2rad(lat));\n var x = (deg2rad(lon) - windy.west) * xFactor;\n var y = (ymax - y) * yFactor; // y points south\n return [x, y];\n };\n\n var interpolateField = function (grid, bounds, extent, callback) {\n\n var projection = {};\n var mapArea = ((extent.south - extent.north) * (extent.west - extent.east));\n var velocityScale = that.VELOCITY_SCALE * Math.pow(mapArea, 0.4);\n\n var columns = [];\n var x = bounds.x;\n\n function interpolateColumn (x) {\n var column = [];\n for (var y = bounds.y; y <= bounds.yMax; y += 2) {\n var coord = invert(x, y, extent);\n if (coord) {\n var λ = coord[0], φ = coord[1];\n if (isFinite(λ)) {\n var wind = grid.interpolate(λ, φ);\n if (wind) {\n wind = distort(projection, λ, φ, x, y, velocityScale, wind, extent);\n column[y + 1] = column[y] = wind;\n\n }\n }\n }\n }\n columns[x + 1] = columns[x] = column;\n }\n\n (function batchInterpolate () {\n var start = Date.now();\n while (x < bounds.width) {\n interpolateColumn(x);\n x += 2;\n if ((Date.now() - start) > 1000) { //MAX_TASK_TIME) {\n setTimeout(batchInterpolate, 25);\n return;\n }\n }\n createField(columns, bounds, callback);\n })();\n };\n\n var animationLoop;\n var animate = function (bounds, field) {\n\n function windIntensityColorScale (min, max) {\n\n that.COLOR_SCALE.indexFor = function (m) { // map velocity speed to a style\n return Math.max(0, Math.min((that.COLOR_SCALE.length - 1),\n Math.round((m - min) / (max - min) * (that.COLOR_SCALE.length - 1))));\n\n };\n\n return that.COLOR_SCALE;\n }\n\n var colorStyles = windIntensityColorScale(that.MIN_VELOCITY_INTENSITY, that.MAX_VELOCITY_INTENSITY);\n var buckets = colorStyles.map(function () {\n return [];\n });\n\n var particleCount = Math.round(bounds.width * bounds.height * that.PARTICLE_MULTIPLIER);\n if (isMobile()) {\n particleCount *= that.PARTICLE_REDUCTION;\n }\n\n var fadeFillStyle = \"rgba(0, 0, 0, 0.97)\";\n\n var particles = [];\n for (var i = 0; i < particleCount; i++) {\n particles.push(field.randomize({age: Math.floor(Math.random() * that.MAX_PARTICLE_AGE) + 0}));\n }\n\n function evolve () {\n buckets.forEach(function (bucket) {\n bucket.length = 0;\n });\n particles.forEach(function (particle) {\n if (particle.age > that.MAX_PARTICLE_AGE) {\n field.randomize(particle).age = 0;\n }\n var x = particle.x;\n var y = particle.y;\n var v = field(x, y); // vector at current position\n var m = v[2];\n if (m === null) {\n particle.age = that.MAX_PARTICLE_AGE; // particle has escaped the grid, never to return...\n }\n else {\n var xt = x + v[0];\n var yt = y + v[1];\n if (field(xt, yt)[2] !== null) {\n // Path from (x,y) to (xt,yt) is visible, so add this particle to the appropriate draw bucket.\n particle.xt = xt;\n particle.yt = yt;\n buckets[colorStyles.indexFor(m)].push(particle);\n }\n else {\n // Particle isn't visible, but it still moves through the field.\n particle.x = xt;\n particle.y = yt;\n }\n }\n particle.age += 1;\n });\n }\n\n var g = that.canvas.getContext(\"2d\");\n g.lineWidth = that.PARTICLE_LINE_WIDTH;\n g.fillStyle = fadeFillStyle;\n g.globalAlpha = 0.6;\n\n function draw () {\n // Fade existing particle trails.\n var prev = \"lighter\";\n g.globalCompositeOperation = \"destination-in\";\n g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);\n g.globalCompositeOperation = prev;\n g.globalAlpha = 0.9;\n\n // Draw new particle trails.\n buckets.forEach(function (bucket, i) {\n if (bucket.length > 0) {\n g.beginPath();\n g.strokeStyle = colorStyles[i];\n bucket.forEach(function (particle) {\n g.moveTo(particle.x, particle.y);\n g.lineTo(particle.xt, particle.yt);\n particle.x = particle.xt;\n particle.y = particle.yt;\n });\n g.stroke();\n }\n });\n }\n\n var then = Date.now();\n (function frame () {\n animationLoop = requestAnimationFrame(frame);\n var now = Date.now();\n var delta = now - then;\n if (delta > FRAME_TIME) {\n then = now - (delta % FRAME_TIME);\n evolve();\n draw();\n params.onDraw && params.onDraw();\n }\n })();\n };\n\n var updateData = function (data, bounds, width, height, extent) {\n delete that.params.data;\n that.params.data = data;\n if (extent)\n start(bounds, width, height, extent);\n };\n\n var start = function (bounds, width, height, extent) {\n var mapBounds = {\n south: deg2rad(extent[0][1]),\n north: deg2rad(extent[1][1]),\n east: deg2rad(extent[1][0]),\n west: deg2rad(extent[0][0]),\n width: width,\n height: height\n };\n\n stop();\n\n // build grid\n buildGrid(gridData, function (grid) {\n // interpolateField\n interpolateField(grid, buildBounds(bounds, width, height), mapBounds, function (bounds, field) {\n // animate the canvas with random points\n windy.field = field;\n animate(bounds, field);\n });\n\n });\n };\n\n var stop = function () {\n if (windy.field) windy.field.release();\n if (animationLoop) cancelAnimationFrame(animationLoop);\n };\n\n var shift = function (dx, dy) {\n var canvas = that.canvas, w = canvas.width, h = canvas.height, ctx = canvas.getContext(\"2d\");\n if (w > dx && h > dy) {\n var clamp = function (high, value) {\n return Math.max(0, Math.min(high, value));\n };\n var imageData = ctx.getImageData(clamp(w, -dx), clamp(h, -dy), clamp(w, w - dx), clamp(h, h - dy));\n ctx.clearRect(0, 0, w, h);\n ctx.putImageData(imageData, clamp(w, dx), clamp(h, dy));\n for (var i = 0, pLength = particles.length; i < pLength; i++) {\n particles[i].x += dx;\n particles[i].y += dy;\n }\n }\n };\n\n var updateParams = function(params) {\n that.params = params;\n buildParams(that.params);\n };\n\n var getParams = function() {\n return that.params;\n };\n\n var windy = {\n params: that.params,\n start: start,\n stop: stop,\n update: updateData,\n shift: shift,\n createField: createField,\n interpolatePoint: interpolate,\n setData: setData,\n updateParams: updateParams,\n getParams: getParams,\n buildParams: buildParams,\n };\n\n return windy;\n};\n\n// polyfill\nwindow.requestAnimationFrame = (function () {\n return window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function (callback) {\n return window.setTimeout(callback, 1000 / window.FRAME_RATE);\n };\n})();\n\nif (!window.cancelAnimationFrame) {\n window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n}\n\nexport default Windy\n","/**\r\n * create canvas\r\n * @param width\r\n * @param height\r\n * @param Canvas\r\n * @returns {HTMLCanvasElement}\r\n */\r\nconst createCanvas = (width, height, Canvas) => {\r\n if (typeof document !== 'undefined') {\r\n const canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n return canvas\r\n } else {\r\n // create a new canvas instance in node.js\r\n // the canvas class needs to have a default constructor without any parameter\r\n return new Canvas(width, height);\r\n }\r\n};\r\n\r\nconst getDirection = (uMs, vMs, angleConvention) => {\r\n // Default angle convention is CW\r\n if (angleConvention.endsWith('CCW')) {\r\n // vMs comes out upside-down..\r\n vMs = vMs > 0 ? vMs = -vMs : Math.abs(vMs);\r\n }\r\n const velocityAbs = Math.sqrt(Math.pow(uMs, 2) + Math.pow(vMs, 2));\r\n const velocityDir = Math.atan2(uMs / velocityAbs, vMs / velocityAbs);\r\n let velocityDirToDegrees = velocityDir * 180 / Math.PI + 180;\r\n if (angleConvention === 'bearingCW' || angleConvention === 'meteoCCW') {\r\n velocityDirToDegrees += 180;\r\n if (velocityDirToDegrees >= 360) velocityDirToDegrees -= 360;\r\n }\r\n return velocityDirToDegrees;\r\n};\r\n\r\nconst getSpeed = (uMs, vMs, unit) => {\r\n const velocityAbs = Math.sqrt(Math.pow(uMs, 2) + Math.pow(vMs, 2));\r\n // Default is m/s\r\n if (unit === 'k/h') {\r\n return meterSec2kilometerHour(velocityAbs);\r\n } else if (unit === 'kt') {\r\n return meterSec2Knots(velocityAbs);\r\n } else {\r\n return velocityAbs;\r\n }\r\n};\r\n\r\nconst meterSec2Knots = (meters) => {\r\n return meters / 0.514\r\n};\r\n\r\nconst meterSec2kilometerHour = (meters) => {\r\n return meters * 3.6\r\n};\r\n\r\nconst getExtent = (coords) => {\r\n const extent = [\r\n Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY,\r\n Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY\r\n ];\r\n return coords.reduce((prev, coord) => {\r\n return [\r\n Math.min(coord[0], prev[0]),\r\n Math.min(coord[1], prev[1]),\r\n Math.max(coord[0], prev[2]),\r\n Math.max(coord[1], prev[3])\r\n ];\r\n }, extent);\r\n}\r\n\r\nexport {\r\n getExtent,\r\n getSpeed,\r\n createCanvas,\r\n getDirection\r\n}\r\n","import Windy from '../windy/windy';\nimport { createCanvas, getDirection, getSpeed } from '../helper';\n\nconst global = typeof window === 'undefined' ? {} : window;\nconst ol = global.ol || {};\n\nif (!ol.layer) ol.layer = {};\nif (!ol.layer.Image) ol.layer.Image = class {};\n\nclass OlWind extends ol.layer.Image {\n constructor (data, options = {}) {\n super(options);\n\n /**\n * 矢量图层\n * @type {null}\n */\n this._canvas = null;\n\n /**\n * windy 数据\n */\n this.data = data;\n\n /**\n * windy layer\n * @type {null}\n */\n this.$Windy = null;\n\n /**\n * is clear\n * @type {boolean}\n */\n this.isClear = false;\n\n /**\n * options\n * @type {{}}\n */\n this.options = options;\n this.setSource(new ol.source.ImageCanvas({\n logo: options.logo,\n state: options.state,\n attributions: options.attributions,\n resolutions: options.resolutions,\n canvasFunction: this.canvasFunction.bind(this),\n // projection: (options.hasOwnProperty('projection') ? options.projection : 'EPSG:3857'),\n ratio: (options.hasOwnProperty('ratio') ? options.ratio : 1)\n }));\n this.on('precompose', this.redraw, this);\n }\n\n /**\n * get layer data\n * @returns {*}\n */\n getData () {\n return this.data;\n }\n\n /**\n * set layer data\n * @param data\n * @returns {OlWind}\n */\n setData (data) {\n const _map = this.getMap();\n if (!_map) return this;\n this.data = data;\n this.isClear = false;\n if (!this.$Windy && this._canvas) {\n this.render(this._canvas);\n _map.renderSync();\n } else if (this.$Windy && this._canvas) {\n if (this._cloneLayer) {\n _map.addLayer(this._cloneLayer);\n delete this._cloneLayer;\n }\n const extent = this._getExtent();\n this.$Windy.update(this.getData(), extent[0], extent[1], extent[2], extent[3]);\n } else {\n console.warn('please create new instance');\n }\n return this;\n }\n\n /**\n * render windy layer\n * @returns {OlWind}\n */\n render (canvas) {\n const extent = this._getExtent();\n if (this.isClear || !this.getData() || !extent) return this;\n if (canvas && !this.$Windy) {\n const {\n minVelocity,\n maxVelocity,\n velocityScale,\n particleAge,\n lineWidth,\n particleMultiplier,\n colorScale\n } = this.options;\n this.$Windy = new Windy({\n canvas: canvas,\n projection: this._getProjectionCode(),\n data: this.getData(),\n minVelocity,\n maxVelocity,\n velocityScale,\n particleAge,\n lineWidth,\n particleMultiplier,\n colorScale\n });\n this.$Windy.start(extent[0], extent[1], extent[2], extent[3]);\n } else if (canvas && this.$Windy) {\n const extent = this._getExtent();\n this.$Windy.start(extent[0], extent[1], extent[2], extent[3]);\n }\n return this\n }\n\n /**\n * re-draw\n */\n redraw () {\n if (this.isClear) return;\n const _extent = this.options.extent || this._getMapExtent();\n this.setExtent(_extent);\n }\n\n /**\n * canvas constructor\n * @param extent\n * @param resolution\n * @param pixelRatio\n * @param size\n * @param projection\n * @returns {*}\n */\n canvasFunction (extent, resolution, pixelRatio, size, projection) {\n if (!this._canvas) {\n this._canvas = createCanvas(size[0], size[1]);\n } else {\n this._canvas.width = size[0];\n this._canvas.height = size[1];\n }\n if (resolution <= this.get('maxResolution')) {\n this.render(this._canvas);\n } else {\n // console.warn('超出所设置最大分辨率!')\n }\n return this._canvas;\n }\n\n /**\n * bounds, width, height, extent\n * @returns {*}\n * @private\n */\n _getExtent () {\n const size = this._getMapSize();\n const _extent = this._getMapExtent();\n if (size && _extent) {\n const _projection = this._getProjectionCode();\n const extent = ol.proj.transformExtent(_extent, _projection, 'EPSG:4326');\n return [[[0, 0], [size[0], size[1]]], size[0], size[1], [[extent[0], extent[1]], [extent[2], extent[3]]]];\n } else {\n return false;\n }\n }\n\n /**\n * get map current extent\n * @returns {ol.View|*|Array}\n * @private\n */\n _getMapExtent () {\n if (!this.getMap()) return;\n const size = this._getMapSize();\n const _view = this.getMap().getView();\n return _view && _view.calculateExtent(size);\n }\n\n /**\n * get size\n * @returns {ol.Size|*}\n * @private\n */\n _getMapSize () {\n if (!this.getMap()) return;\n return this.getMap().getSize();\n }\n\n /**\n * append layer to map\n * @param map\n */\n appendTo (map) {\n if (map && map instanceof ol.Map) {\n this.set('originMap', map);\n this.getSource().projection_ = this._getProjectionCode();\n map.addLayer(this);\n } else {\n throw new Error('not map object');\n }\n }\n\n /**\n * get mouse point data\n * @param coordinates\n * @returns {null|{speed: (*|number), direction}}\n */\n getPointData (coordinates) {\n if (!this.$Windy) return null;\n const gridValue = this.$Windy.interpolatePoint(coordinates[0], coordinates[1]);\n if (gridValue && !isNaN(gridValue[0]) && !isNaN(gridValue[1]) && gridValue[2]) {\n return {\n direction: getDirection(gridValue[0], gridValue[1], this.options.angleConvention || 'bearingCCW'),\n speed: getSpeed(gridValue[0], gridValue[1], this.options.speedUnit)\n }\n }\n }\n\n /**\n * clearWind method will retain the instance\n * @private\n */\n clearWind () {\n const _map = this.getMap();\n if (!_map) return;\n if (this.$Windy) this.$Windy.stop();\n this.isClear = true;\n this._cloneLayer = this;\n _map.removeLayer(this);\n this.changed();\n this.getMap().renderSync();\n }\n\n /**\n * remove layer this instance will be destroyed after remove\n */\n removeLayer () {\n const _map = this.getMap();\n if (!_map) return;\n if (this.$Windy) this.$Windy.stop();\n this.un('precompose', this.redraw, this);\n _map.removeLayer(this);\n delete this._canvas;\n delete this.$Windy;\n delete this._cloneLayer;\n }\n\n /**\n * set map\n * @param map\n */\n setMap (map) {\n this.set('originMap', map);\n // ol.layer.Image.prototype.setMap.call(this, map)\n }\n\n /**\n * get map\n */\n getMap () {\n return this.get('originMap');\n }\n\n _getProjectionCode () {\n let code = '';\n const map = this.getMap();\n if (map) {\n code =\n map.getView() &&\n map\n .getView()\n .getProjection()\n .getCode();\n } else {\n code = 'EPSG:3857';\n }\n return code;\n }\n\n /**\n * update windy config\n * @param params\n * @returns {OlWind}\n */\n updateParams (params) {\n this.options = Object.assign(this.options, params);\n if (this.$Windy) {\n const {\n minVelocity, // 粒子强度最小的速度 (m/s)\n maxVelocity, // 粒子强度最大的速度 (m/s)\n velocityScale, // 风速的比例\n particleAge, // 重绘之前生成的离子数量的最大帧数\n lineWidth, // 绘制粒子的线宽\n particleMultiplier, // 离子数量\n colorScale\n } = this.options;\n if (this.$Windy) {\n this.$Windy.updateParams({\n minVelocity,\n maxVelocity,\n velocityScale,\n particleAge,\n lineWidth,\n particleMultiplier,\n colorScale\n });\n if (this.getMap() && this._canvas && this.data) {\n this.render(this._canvas);\n }\n }\n }\n return this;\n }\n\n /**\n * get windy config\n * @returns {null|*|Windy.params|{velocityScale, minVelocity, maxVelocity, colorScale, particleAge, lineWidth, particleMultiplier}}\n */\n getParams () {\n return this.$Windy && this.$Windy.getParams();\n }\n}\n\nexport default OlWind;\n"],"names":["const","let","super","extent"],"mappings":"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"}