This commit is contained in:
105
node_modules/geotiff/dist-node/dataslice.js
generated
vendored
Normal file
105
node_modules/geotiff/dist-node/dataslice.js
generated
vendored
Normal file
@@ -0,0 +1,105 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class DataSlice {
|
||||
constructor(arrayBuffer, sliceOffset, littleEndian, bigTiff) {
|
||||
this._dataView = new DataView(arrayBuffer);
|
||||
this._sliceOffset = sliceOffset;
|
||||
this._littleEndian = littleEndian;
|
||||
this._bigTiff = bigTiff;
|
||||
}
|
||||
get sliceOffset() {
|
||||
return this._sliceOffset;
|
||||
}
|
||||
get sliceTop() {
|
||||
return this._sliceOffset + this.buffer.byteLength;
|
||||
}
|
||||
get littleEndian() {
|
||||
return this._littleEndian;
|
||||
}
|
||||
get bigTiff() {
|
||||
return this._bigTiff;
|
||||
}
|
||||
get buffer() {
|
||||
return this._dataView.buffer;
|
||||
}
|
||||
covers(offset, length) {
|
||||
return this.sliceOffset <= offset && this.sliceTop >= offset + length;
|
||||
}
|
||||
readUint8(offset) {
|
||||
return this._dataView.getUint8(offset - this._sliceOffset, this._littleEndian);
|
||||
}
|
||||
readInt8(offset) {
|
||||
return this._dataView.getInt8(offset - this._sliceOffset, this._littleEndian);
|
||||
}
|
||||
readUint16(offset) {
|
||||
return this._dataView.getUint16(offset - this._sliceOffset, this._littleEndian);
|
||||
}
|
||||
readInt16(offset) {
|
||||
return this._dataView.getInt16(offset - this._sliceOffset, this._littleEndian);
|
||||
}
|
||||
readUint32(offset) {
|
||||
return this._dataView.getUint32(offset - this._sliceOffset, this._littleEndian);
|
||||
}
|
||||
readInt32(offset) {
|
||||
return this._dataView.getInt32(offset - this._sliceOffset, this._littleEndian);
|
||||
}
|
||||
readFloat32(offset) {
|
||||
return this._dataView.getFloat32(offset - this._sliceOffset, this._littleEndian);
|
||||
}
|
||||
readFloat64(offset) {
|
||||
return this._dataView.getFloat64(offset - this._sliceOffset, this._littleEndian);
|
||||
}
|
||||
readUint64(offset) {
|
||||
const left = this.readUint32(offset);
|
||||
const right = this.readUint32(offset + 4);
|
||||
let combined;
|
||||
if (this._littleEndian) {
|
||||
combined = left + ((2 ** 32) * right);
|
||||
if (!Number.isSafeInteger(combined)) {
|
||||
throw new Error(`${combined} exceeds MAX_SAFE_INTEGER. `
|
||||
+ 'Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues');
|
||||
}
|
||||
return combined;
|
||||
}
|
||||
combined = ((2 ** 32) * left) + right;
|
||||
if (!Number.isSafeInteger(combined)) {
|
||||
throw new Error(`${combined} exceeds MAX_SAFE_INTEGER. `
|
||||
+ 'Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues');
|
||||
}
|
||||
return combined;
|
||||
}
|
||||
// adapted from https://stackoverflow.com/a/55338384/8060591
|
||||
readInt64(offset) {
|
||||
let value = 0;
|
||||
const isNegative = (this._dataView.getUint8(offset + (this._littleEndian ? 7 : 0)) & 0x80)
|
||||
> 0;
|
||||
let carrying = true;
|
||||
for (let i = 0; i < 8; i++) {
|
||||
let byte = this._dataView.getUint8(offset + (this._littleEndian ? i : 7 - i));
|
||||
if (isNegative) {
|
||||
if (carrying) {
|
||||
if (byte !== 0x00) {
|
||||
byte = ~(byte - 1) & 0xff;
|
||||
carrying = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
byte = ~byte & 0xff;
|
||||
}
|
||||
}
|
||||
value += byte * (256 ** i);
|
||||
}
|
||||
if (isNegative) {
|
||||
value = -value;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
readOffset(offset) {
|
||||
if (this._bigTiff) {
|
||||
return this.readUint64(offset);
|
||||
}
|
||||
return this.readUint32(offset);
|
||||
}
|
||||
}
|
||||
exports.default = DataSlice;
|
||||
//# sourceMappingURL=dataslice.js.map
|
||||
Reference in New Issue
Block a user