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, }); }