123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- //define([],function () {
- var WindField = function (obj) {
- this.west = null;
- this.east = null;
- this.south = null;
- this.north = null;
- this.rows = null;
- this.cols = null;
- this.dx = null;
- this.dy = null;
- this.unit = null;
- this.date = null;
- this.grid = null;
- this._init(obj);
- };
- WindField.prototype = {
- constructor: WindField,
- _init: function (obj) {
- var header = obj.header,
- uComponent = obj['uComponent'],
- vComponent = obj['vComponent'];
- this.west = +header['lo1'];
- this.east = +header['lo2'];
- this.south = +header['la2'];
- this.north = +header['la1'];
- this.rows = +header['ny'];
- this.cols = +header['nx'];
- this.dx = +header['dx'];
- this.dy = +header['dy'];
- this.unit = header['parameterUnit'];
- this.date = header['refTime'];
- this.grid = [];
- var k = 0,
- rows = null,
- uv = null;
- for (var j = 0; j < this.rows; j++) {
- rows = [];
- for (var i = 0; i < this.cols; i++, k++) {
- uv = this._calcUV(uComponent[k], vComponent[k]);
- rows.push(uv);
- }
- this.grid.push(rows);
- }
- },
- _calcUV: function (u, v) {
- return [+u, +v, Math.sqrt(u * u + v * v)];
- },
- _bilinearInterpolation: function (x, y, g00, g10, g01, g11) {
- var rx = (1 - x);
- var ry = (1 - y);
- var a = rx * ry, b = x * ry, c = rx * y, d = x * y;
- var u = g00[0] * a + g10[0] * b + g01[0] * c + g11[0] * d;
- var v = g00[1] * a + g10[1] * b + g01[1] * c + g11[1] * d;
- return this._calcUV(u, v);
- },
- getIn: function (x, y) {
- var x0 = Math.floor(x),
- y0 = Math.floor(y),
- x1, y1;
- if (x0 === x && y0 === y) return this.grid[y][x];
- x1 = x0 + 1;
- y1 = y0 + 1;
- var g00 = this.getIn(x0, y0),
- g10 = this.getIn(x1, y0),
- g01 = this.getIn(x0, y1),
- g11 = this.getIn(x1, y1);
- return this._bilinearInterpolation(x - x0, y - y0, g00, g10, g01, g11);
- },
- isInBound: function (x, y) {
- if ((x >= 0 && x < this.cols - 2) && (y >= 0 && y < this.rows - 2)) return true;
- return false;
- }
- };
- // return WindField;
- //})
- export default WindField
|