jeotiff
Version:
GeoTIFF image decoding in JavaScript
472 lines (431 loc) • 15.3 kB
JavaScript
var chai = require("chai");
var expect = chai.expect;
var Promise = require('es6-promise').Promise;
import GeoTIFF from "../src/main.js"
var retrieve = function(filename, done, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', '/base/test/data/' + filename, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
callback(GeoTIFF.parse(this.response));
};
xhr.onerror = function(e) {
console.error(e);
done(error);
};
callback;
xhr.send();
};
var retrieveSync = function(filename, done, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', '/base/test/data/' + filename, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
callback(GeoTIFF.parse(this.response));
};
xhr.onerror = function(e) {
console.error(e);
done(error);
};
callback;
xhr.send();
};
describe("mainTests", function() {
it("geotiff.js module available", function() {
expect(GeoTIFF).to.be.ok;
});
it("should work on stripped tiffs", function(done) {
retrieve("stripped.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Uint16Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work on tiled tiffs", function(done) {
retrieve("tiled.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Uint16Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work on band interleaved tiffs", function(done) {
retrieve("interleave.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Uint16Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work on band interleaved and tiled tiffs", function(done) {
retrieve("interleave.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Uint16Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work on LZW compressed images", function(done) {
retrieve("lzw.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Uint16Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work on band interleaved, lzw compressed, and tiled tiffs", function(done) {
retrieve("tiledplanarlzw.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Uint16Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work on Int32 tiffs", function(done) {
retrieve("int32.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Int32Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work on UInt32 tiffs", function(done) {
retrieve("uint32.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Uint32Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work on Float32 tiffs", function(done) {
retrieve("float32.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Float32Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work on Float64 tiffs", function(done) {
retrieve("float64.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Float64Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work on Float64 and lzw compressed tiffs", function(done) {
retrieve("float64lzw.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Float64Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work on packbit compressed tiffs", function(done) {
retrieve("packbits.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
expect(image).to.be.ok;
expect(image.getWidth()).to.equal(539);
expect(image.getHeight()).to.equal(448);
expect(image.getSamplesPerPixel()).to.equal(15);
try {
var allData = image.readRasters({window: [200, 200, 210, 210]});
expect(allData).to.have.length(15);
expect(allData[0]).to.be.an.instanceof(Uint16Array);
var data = image.readRasters({window: [200, 200, 210, 210], samples: [5]});
expect(data[0]).to.deep.equal(allData[5]);
done();
}
catch (error) {
done(error);
}
});
});
it("should work with no options other than a callback", function(done) {
retrieve("small.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
image.readRasters(function(allData) {
expect(allData).to.have.length(15);
expect(allData[0].length).to.equal(53*44);
done();
});
});
});
it("should work with callback and error callback", function(done) {
retrieve("small.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
image.readRasters(function(allData) {
expect(allData).to.have.length(15);
expect(allData[0].length).to.equal(53*44);
done();
}, function(error) {
done(error);
});
});
});
it("should work with options and callback", function(done) {
retrieve("packbits.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
image.readRasters({window: [200, 200, 210, 210]}, function(allData) {
expect(allData).to.have.length(15);
expect(allData[0].length).to.equal(10*10);
done();
});
});
});
it("should work with options, callback and error callback", function(done) {
retrieve("packbits.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
image.readRasters({window: [200, 200, 210, 210]}, function(allData) {
expect(allData).to.have.length(15);
expect(allData[0].length).to.equal(10*10);
done();
}, function(error) {
done(error);
});
});
});
it("should work with interleaved reading", function(done) {
retrieve("packbits.tiff", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
try {
var raster = image.readRasters({window: [200, 200, 210, 210], samples: [0, 1, 2, 3], interleave: true});
expect(raster).to.have.length(10 * 10 * 4);
expect(raster).to.be.an.instanceof(Uint16Array);
done();
}
catch (error) {
done(error);
}
});
});
it("should work with BigTIFFs", function(done) {
retrieve("BigTIFF.tif", done, function(tiff) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
try {
var raster = image.readRasters({samples: [0, 1, 2], interleave: true});
// expect(raster).to.have.length(10 * 10 * 3);
expect(raster).to.be.an.instanceof(Uint8Array);
done();
}
catch (error) {
done(error);
}
});
});
});
describe("RGB-tests", function() {
var options = { window: [250, 250, 300, 300], interleave: true };
var comparisonPromise = new Promise(function(resolve, reject) {
retrieve("rgb.tiff", reject, function(tiff) {
try {
var image = tiff.getImage();
resolve(image.readRasters(options));
} catch(error) {
reject(error);
}
});
});
it("should work with CMYK files", function(done) {
retrieve("cmyk.tif", done, function(tiff) {
comparisonPromise.then(function(comparisonRaster) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
image.readRGB(options, function(rgbRaster) {
expect(rgbRaster).to.have.lengthOf(comparisonRaster.length);
var diff = new Float32Array(rgbRaster);
for (var i = 0; i < rgbRaster.length; ++i) {
diff[i] = Math.abs(comparisonRaster[i] - rgbRaster[i]);
}
expect(Math.max.apply(null, diff)).to.be.at.most(1);
done();
}, done);
}, done);
});
});
it("should work with YCbCr files", function(done) {
retrieve("ycbcr.tif", done, function(tiff) {
comparisonPromise.then(function(comparisonRaster) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
image.readRGB(options, function(rgbRaster) {
expect(rgbRaster).to.have.lengthOf(comparisonRaster.length);
var diff = new Float32Array(rgbRaster);
for (var i = 0; i < rgbRaster.length; ++i) {
diff[i] = Math.abs(comparisonRaster[i] - rgbRaster[i]);
}
expect(Math.max.apply(null, diff)).to.be.at.most(3);
done();
}, done);
}, done);
});
});
it("should work with paletted files", function(done) {
retrieve("rgb_paletted.tiff", done, function(tiff) {
comparisonPromise.then(function(comparisonRaster) {
expect(tiff).to.be.ok;
var image = tiff.getImage();
image.readRGB(options, function(rgbRaster) {
expect(rgbRaster).to.have.lengthOf(comparisonRaster.length);
var diff = new Float32Array(rgbRaster);
for (var i = 0; i < rgbRaster.length; ++i) {
diff[i] = Math.abs(comparisonRaster[i] - rgbRaster[i]);
}
expect(Math.max.apply(null, diff)).to.be.at.most(15);
done();
}, done);
}, done);
});
});
});