This tutorial demonstrates how to read a local SEG Y file and display it inside a seismic widget. Choose a SEG Y file from a local file system to see the result.
In the code below, create an instance of the LocalFile that provides access to FileReader. Then, create an instance of the SegyReader with default SEG Y format definition.
The reader uses asynchronous API to read data from the file. First, it reads the meta data.
Next, it calculates statistics (such as min, max, rms, and average) of the sample values to be used for normalization.
The last step creates a pipeline and passes it to the new instance of the widget.
import { SeismicWidget } from "@int/geotoolkit/seismic/widgets/SeismicWidget.ts";
import { SeismicColors } from "@int/geotoolkit/seismic/util/SeismicColors.ts";
import { SeismicPipeline } from "@int/geotoolkit/seismic/pipeline/SeismicPipeline.ts";
import { SegyReader } from "@int/geotoolkit/seismic/data/SegyReader.ts";
import { StandardSegyFormat } from "@int/geotoolkit/seismic/data/StandardSegyFormat.ts";
import { LocalFile } from "@int/geotoolkit/seismic/data/LocalFile.js";
import { Plot } from "@int/geotoolkit/plot/Plot.ts";
import { BrowserFileStream } from "@int/geotoolkit/util/stream/BrowserFileStream.ts";
function onFileOpen(evt, plot, fileInfo) {
evt.stopPropagation();
evt.preventDefault();
const files = evt.target.files;
return handleFileSelect(files, plot, fileInfo);
}
function onFileDrop(evt, plot, fileInfo) {
evt.stopPropagation();
evt.preventDefault();
const files = evt.dataTransfer.files;
evt.dataTransfer.dropEffect = "copy";
return handleFileSelect(files, plot, fileInfo);
}
function handleFileSelect(files, plot, fileInfo) {
const widget = plot.getRoot();
let output = "";
if (files.length > 0) {
const file = LocalFile.isSupported() ? new LocalFile(files[0]) : new BrowserFileStream({ "file": files[0] });
const fileName = files[0].name;
const fileSize = files[0].size;
output = escape(fileName) + " size[" + fileSize + "] bytes";
new SegyReader(file, new StandardSegyFormat(), -6).loadMetaData((reader) => {
if (reader instanceof Error) {
window.alert(reader.message);
return;
}
reader.readDataSetStatistics((reader2, statistics) => {
const pipeline = new SeismicPipeline({
"name": fileName,
"reader": reader2,
"statistics": statistics
});
const colorProvider = SeismicColors.getDefault();
pipeline.setColorMap(colorProvider.createNamedColorMap("RedWhiteBlack"));
pipeline.setPlotType({ "wiggle": false, "interpolateddensity": true });
widget.setPipeline(pipeline);
});
});
}
fileInfo.text = output;
}
function createScene(canvas) {
const widget = new SeismicWidget({
"colorbar": {
"axis": {
"tickgenerator": {
"edge": {
"tickvisible": false,
"labelvisible": false
}
}
}
},
"layouttype": "inside",
"statusbar": {
"visible": false
}
});
return new Plot({
"root": widget,
"canvaselement": canvas
});
}
export { createScene, onFileDrop, onFileOpen };
createScene(document.querySelector('[ref="plot"]'));