UNPKG

ry-vue-map

Version:

ry公共组件库

268 lines (236 loc) 7.8 kB
((typeof self !== 'undefined' ? self : this)["webpackJsonpryui"] = (typeof self !== 'undefined' ? self : this)["webpackJsonpryui"] || []).push([[3],{ /***/ "852f": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return LZWDecoder; }); /* harmony import */ var _basedecoder_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("b3f7"); const MIN_BITS = 9; const CLEAR_CODE = 256; // clear code const EOI_CODE = 257; // end of information const MAX_BYTELENGTH = 12; function getByte(array, position, length) { const d = position % 8; const a = Math.floor(position / 8); const de = 8 - d; const ef = (position + length) - ((a + 1) * 8); let fg = (8 * (a + 2)) - (position + length); const dg = ((a + 2) * 8) - position; fg = Math.max(0, fg); if (a >= array.length) { console.warn('ran off the end of the buffer before finding EOI_CODE (end on input code)'); return EOI_CODE; } let chunk1 = array[a] & ((2 ** (8 - d)) - 1); chunk1 <<= (length - de); let chunks = chunk1; if (a + 1 < array.length) { let chunk2 = array[a + 1] >>> fg; chunk2 <<= Math.max(0, (length - dg)); chunks += chunk2; } if (ef > 8 && a + 2 < array.length) { const hi = ((a + 3) * 8) - (position + length); const chunk3 = array[a + 2] >>> hi; chunks += chunk3; } return chunks; } function appendReversed(dest, source) { for (let i = source.length - 1; i >= 0; i--) { dest.push(source[i]); } return dest; } function decompress(input) { const dictionaryIndex = new Uint16Array(4093); const dictionaryChar = new Uint8Array(4093); for (let i = 0; i <= 257; i++) { dictionaryIndex[i] = 4096; dictionaryChar[i] = i; } let dictionaryLength = 258; let byteLength = MIN_BITS; let position = 0; function initDictionary() { dictionaryLength = 258; byteLength = MIN_BITS; } function getNext(array) { const byte = getByte(array, position, byteLength); position += byteLength; return byte; } function addToDictionary(i, c) { dictionaryChar[dictionaryLength] = c; dictionaryIndex[dictionaryLength] = i; dictionaryLength++; return dictionaryLength - 1; } function getDictionaryReversed(n) { const rev = []; for (let i = n; i !== 4096; i = dictionaryIndex[i]) { rev.push(dictionaryChar[i]); } return rev; } const result = []; initDictionary(); const array = new Uint8Array(input); let code = getNext(array); let oldCode; while (code !== EOI_CODE) { if (code === CLEAR_CODE) { initDictionary(); code = getNext(array); while (code === CLEAR_CODE) { code = getNext(array); } if (code === EOI_CODE) { break; } else if (code > CLEAR_CODE) { throw new Error(`corrupted code at scanline ${code}`); } else { const val = getDictionaryReversed(code); appendReversed(result, val); oldCode = code; } } else if (code < dictionaryLength) { const val = getDictionaryReversed(code); appendReversed(result, val); addToDictionary(oldCode, val[val.length - 1]); oldCode = code; } else { const oldVal = getDictionaryReversed(oldCode); if (!oldVal) { throw new Error(`Bogus entry. Not in dictionary, ${oldCode} / ${dictionaryLength}, position: ${position}`); } appendReversed(result, oldVal); result.push(oldVal[oldVal.length - 1]); addToDictionary(oldCode, oldVal[oldVal.length - 1]); oldCode = code; } if (dictionaryLength + 1 >= (2 ** byteLength)) { if (byteLength === MAX_BYTELENGTH) { oldCode = undefined; } else { byteLength++; } } code = getNext(array); } return new Uint8Array(result); } class LZWDecoder extends _basedecoder_js__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"] { decodeBlock(buffer) { return decompress(buffer, false).buffer; } } /***/ }), /***/ "b3f7": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, "a", function() { return /* binding */ basedecoder_BaseDecoder; }); // CONCATENATED MODULE: ./node_modules/geotiff/dist-module/predictor.js function decodeRowAcc(row, stride) { let length = row.length - stride; let offset = 0; do { for (let i = stride; i > 0; i--) { row[offset + stride] += row[offset]; offset++; } length -= stride; } while (length > 0); } function decodeRowFloatingPoint(row, stride, bytesPerSample) { let index = 0; let count = row.length; const wc = count / bytesPerSample; while (count > stride) { for (let i = stride; i > 0; --i) { row[index + stride] += row[index]; ++index; } count -= stride; } const copy = row.slice(); for (let i = 0; i < wc; ++i) { for (let b = 0; b < bytesPerSample; ++b) { row[(bytesPerSample * i) + b] = copy[((bytesPerSample - b - 1) * wc) + i]; } } } function applyPredictor(block, predictor, width, height, bitsPerSample, planarConfiguration) { if (!predictor || predictor === 1) { return block; } for (let i = 0; i < bitsPerSample.length; ++i) { if (bitsPerSample[i] % 8 !== 0) { throw new Error('When decoding with predictor, only multiple of 8 bits are supported.'); } if (bitsPerSample[i] !== bitsPerSample[0]) { throw new Error('When decoding with predictor, all samples must have the same size.'); } } const bytesPerSample = bitsPerSample[0] / 8; const stride = planarConfiguration === 2 ? 1 : bitsPerSample.length; for (let i = 0; i < height; ++i) { // Last strip will be truncated if height % stripHeight != 0 if (i * stride * width * bytesPerSample >= block.byteLength) { break; } let row; if (predictor === 2) { // horizontal prediction switch (bitsPerSample[0]) { case 8: row = new Uint8Array( block, i * stride * width * bytesPerSample, stride * width * bytesPerSample, ); break; case 16: row = new Uint16Array( block, i * stride * width * bytesPerSample, stride * width * bytesPerSample / 2, ); break; case 32: row = new Uint32Array( block, i * stride * width * bytesPerSample, stride * width * bytesPerSample / 4, ); break; default: throw new Error(`Predictor 2 not allowed with ${bitsPerSample[0]} bits per sample.`); } decodeRowAcc(row, stride, bytesPerSample); } else if (predictor === 3) { // horizontal floating point row = new Uint8Array( block, i * stride * width * bytesPerSample, stride * width * bytesPerSample, ); decodeRowFloatingPoint(row, stride, bytesPerSample); } } return block; } // CONCATENATED MODULE: ./node_modules/geotiff/dist-module/compression/basedecoder.js class basedecoder_BaseDecoder { async decode(fileDirectory, buffer) { const decoded = await this.decodeBlock(buffer); const predictor = fileDirectory.Predictor || 1; if (predictor !== 1) { const isTiled = !fileDirectory.StripOffsets; const tileWidth = isTiled ? fileDirectory.TileWidth : fileDirectory.ImageWidth; const tileHeight = isTiled ? fileDirectory.TileLength : ( fileDirectory.RowsPerStrip || fileDirectory.ImageLength ); return applyPredictor( decoded, predictor, tileWidth, tileHeight, fileDirectory.BitsPerSample, fileDirectory.PlanarConfiguration, ); } return decoded; } } /***/ }) }]);