suerprisePlus
2024-06-14 c3be71b180ea95f7928bdffccbec0525911eca9d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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];
    debugger
    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,
    });
}