VectorField.read = function(data) { var field = []; var w = data[0].header.nx; var h = data[0].header.ny; var n = 2 * w * h; var i = 0; var total = 0; var weight = 0; for (var x = 0; x < w; x++) { field[x] = []; for (var y = 0; y < h; y++) { var vx = data[0].data[w*y+x]; var vy = data[1].data[w*y+x]; var v = newVector(vx, vy); var ux = x / (w - 1); var uy = y / (h - 1); var lon = data[0].header.lo1 * (1 - ux) + data[0].header.lo2 * ux; // 获取矢量场的经度坐标,类似于X0+ux(X1-X0) var lat = data[0].header.la1 * (1 - uy) + data[0].header.la2 * uy; var m = Math.PI * lat / 180; var length = v.length(); if (length) { total += length * m; weight += m; } v.x /= Math.cos(m); v.setLength(length); field[x].push(v); } } var result = newVectorField(field, data[0].header.lo1, data[0].header.la1, data[0].header.lo2, data[0].header.la2); // window.console.log('total = ' + total); // window.console.log('weight = ' + weight); if (total && weight) {
result.averageLength = total / weight; } return result; };