管道基础大数据平台系统开发-【前端】-新系統界面
编辑 | blame | 历史 | 原始文档
importScripts("config.js");
importScripts("omcommand.js");

var colorInfo = null;
var colorEqually = true;
/**
 * 海洋大面图线程
 *  金磊
 * @param {any} start
 * @param {any} end
 */
self.addEventListener("message", function (e) {
    colorInfo = e.data.color || colorTable;
    if (e.data.colorEqually != undefined) {
        colorEqually = e.data.colorEqually;
    }

    getCacheInfo(e.data, getImageData);
});
function getImageData(id, byteArray) {
    var offset = 0;
    var direction = byteArray[offset];
    offset += 1;
    var width = byteArray[offset];
    offset += 1;
    var minx = 999;
    var maxx = -999;
    for (var i = 0; i < width; i++) {
        if (minx > byteArray[offset + i]) {
            minx = byteArray[offset + i];
        }
        if (maxx < byteArray[offset + i]) {
            maxx = byteArray[offset + i];
        }
    }
    offset += width;
    var height = byteArray[offset];
    offset += 1;
    var miny = 999;
    var maxy = -999;
    for (var i = 0; i < height; i++) {
        if (miny > byteArray[offset + i]) {
            miny = byteArray[offset + i];
        }
        if (maxy < byteArray[offset + i]) {
            maxy = byteArray[offset + i];
        }
    }
    offset += height;
    var dataCount = byteArray[offset];
    offset += 1;

    var colorBar = colorInfo;
    var valMax = byteArray[byteArray.length - 1];
    var valMin = byteArray[byteArray.length - 2];
    
    if (colorEqually) {
        var delta = valMax - valMin;
        delta = delta / (colorBar.length - 1);
        for (var i = 0; i < colorBar.length; i++) {
            colorBar[i][0] = valMin + i * delta;
        }
    }

    var colorgradient = segmentedColorScale(colorBar);

    var data = new Uint8Array(height * width * 4);
    for (var i = 0; i < height; i++) {
        for (var j = 0; j < width; j++) {
            var m = (i * width + j) * 4;
            var value = byteArray[(height - i - 1) * width + j + offset];
            if (value == -9999) {
                data[m] = 0;
                data[m + 1] = 0;
                data[m + 2] = 0;
                data[m + 3] = 0;
            } else {
                //value = Math.sqrt(Math.sqrt(value * value) * 1000);
                var rgba = colorgradient(value, RD_OVERLAY_ALPHA);
                data[m] = rgba[0];
                data[m + 1] = rgba[1];
                data[m + 2] = rgba[2];
                data[m + 3] = rgba[3];
            }
        }
    }

    self.postMessage({
        id: id,
        width: width,
        height: height,
        minx: minx,
        maxx: maxx,
        miny: miny,
        maxy: maxy,
        offset: offset,
        data: byteArray,
        arrayBufferView: data,
    });
}