Last updated

Remote seismic rendering

This tutorial shows how to render seismic tiles and getting picking from different servers. You need to implement your own geotoolkit/seismic/data/RemoteReaderDataProvider using geotoolkit/seismic/data/IServerSideRenderingProvider interface. This interface contains two methods: pickSample() for picking from server and getTileURL() for getting tiles from server. For demonstration you need to run server from folder server: npm install, npm start.

import { Plot } from "@int/geotoolkit/plot/Plot.ts";
import { Events } from "@int/geotoolkit/controls/tools/CrossHair.ts";
import { SeismicWidget } from "@int/geotoolkit/seismic/widgets/SeismicWidget.ts";
import { RenderingSide } from "@int/geotoolkit/seismic/pipeline/RenderingSide.ts";
import { SeismicColors } from "@int/geotoolkit/seismic/util/SeismicColors.ts";
import { NormalizationType } from "@int/geotoolkit/seismic/pipeline/NormalizationType.ts";
import { SeismicPipeline } from "@int/geotoolkit/seismic/pipeline/SeismicPipeline.ts";
import { RemoteSeismicDataSource } from "@int/geotoolkit/seismic/data/RemoteSeismicDataSource.ts";
import "/src/code/Seismic/Readers/RemoteSeismicRendering/nodeServerDataProvider.ts";
function createReader(callback, onfailure) {
  const host = "http://localhost:3002/";
  const data = new RemoteSeismicDataSource({
    "host": host,
    "imagehost": "http://localhost:3003/",
    "pickinghost": "http://localhost:3004/",
    "file": "density.segy",
    "version": "node"
  });
  data.open(
    () => {
      data.select({}, (reader) => {
        callback(reader);
      });
    },
    (err) => {
      onfailure(err);
    }
  );
}
function createPipeline(reader) {
  const pipeline = new SeismicPipeline({
    "name": "Seismic",
    "reader": reader,
    "statistics": reader.getStatistics()
  });
  pipeline.setOptions({
    "normalization": {
      "type": NormalizationType.RMS,
      "scale": 0.4
    },
    "plot": {
      "type": {
        "wiggle": false,
        "interpolateddensity": true
      },
      "decimationspacing": 5
    },
    "colors": {
      "colormap": SeismicColors.getDefault().createNamedColorMap("RedWhiteBlack")
    },
    "renderingside": RenderingSide.Server
  });
  return pipeline;
}
function createScene(canvas, errorObj) {
  const widget = new SeismicWidget({
    "pickingevent": Events.onPointerUp,
    "colorbar": {
      "axis": {
        "tickgenerator": {
          "edge": {
            "tickvisible": false,
            "labelvisible": false
          }
        }
      }
    },
    "layouttype": "inside",
    "statusbar": {
      "visible": true
    },
    "table": {
      "size": 100,
      "visible": false
    }
  });
  createReader((reader) => {
    const pipeline = createPipeline(reader);
    widget.setPipeline(pipeline);
    const headerFields = pipeline.getReader().getTraceHeaderFields();
    let headerInfo;
    for (let i = 0; i < headerFields.length; i++) {
      const header = headerFields[i];
      if (header.getName() === "FIELD TR" || header.getName() === "TSSN") {
        widget.setTraceHeaderVisible(header, true);
      } else if (header.getName() === "TraceNumber") {
        widget.setTraceHeaderVisible(header, false);
      }
      headerInfo = widget.getTraceHeaderAxis(header);
      if (headerInfo) {
        headerInfo["label"].getTextStyle().setColor("#6b6b6b");
      }
    }
  }, (err) => {
    errorObj.show = true;
    errorObj.text = err.message;
  });
  return new Plot({
    "canvaselement": canvas,
    "root": widget
  });
}
export { createScene };

createScene(document.querySelector('[ref="plot"]'), this.error);

Cannot connect to the server! Run node server.js!

Close