{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Working With Units","description":"Accelerate E&P application development and protect your innovation by consuming our Data and Domain APIs / Platform APIs.","lang":"en-US","meta":[{"name":"robots","content":"noindex"}],"llmstxt":{"hide":false}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"working-with-units","__idx":0},"children":["Working With Units"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When you work with numbers, you often need to know the unit of the quantity expressed. INTViewer has a simple unit system to retrieve units and convert numbers expressed in different units."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"retrieving-the-vertical-unit-of-a-dataset","__idx":1},"children":["Retrieving the vertical unit of a dataset"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If a dataset (implementing com.interactive.intviewerapi.data.IData) has time or depth unit information, this dataset implements the com.interactive.intviewerapi.units.IZUnitProvider interface. The only method of that interface is getZUnit()."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["At this time, only com.interactive.intviewerapi.data.seismic.ISeismicData and com.interactive.intviewerapi.data.well.IWellData implement the IZUnitProvider interface."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"ISeismicData seismicData = ...\nIUnit unit = seismicData.getZUnit();\nSystem.out.println(unit.getSymbol()); // example: \"s\"\nSystem.out.println(unit.getName()); // example: \"Seconds\"\n"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"finding-out-whether-a-dataset-is-in-time-or-depth","__idx":2},"children":["Finding out whether a dataset is in time or depth"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"ISeismicData seismicData = ...\nIUnit unit = seismicData.getZUnit();\nif (unit.getSIUnit().getSymbol().equals(IUnit.SECONDS_SYMBOL)) {\n    System.out.println(\"Dataset is in time\");\n} else if (unit.getSIUnit().getSymbol().equals(IUnit.METERS_SYMBOL)) {\n    System.out.println(\"Dataset is in depth\");\n}\n"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"converting-quantities","__idx":3},"children":["Converting quantities"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"ISeismicData seismicData = ...\nIUnit fromUnit = seismicData.getZUnit();\ndouble sampleRate = seismicData.getDataStatistics().getSampleRate();\nIUnit millisecondsUnit = IUnit.Factory.getUnit(IUnit.MILLISECONDS_SYMBOL);\ndouble sampleRateInMilliseconds = fromUnit.convert(quantity, millisecondsUnit);\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can convert multiple quantities at a time using the convert(double[] quantities, IUnit unit) method."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"registering-your-own-unit","__idx":4},"children":["Registering your own unit"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To create your own unit, create a class extending com.interactive.intviewerapi.units.AbstractUnit."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["TIMEINMILLISECONDSUNIT.JAVA"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"package com.interactive.intviewer.units;\nimport com.interactive.intviewerapi.units.AbstractUnit;\nimport com.interactive.intviewerapi.units.IUnit;\npublic class TimeInMillisecondsUnit extends AbstractUnit {\n    public TimeInMillisecondsUnit() {\n        super(\"Milliseconds\", IUnit.MILLISECONDS_SYMBOL);\n    }\n    @Override\n    public double convertToSIUnit(double timeInMilliseconds) {\n        return timeInMilliseconds / 1000;\n    }\n    @Override\n    public double convertFromSIUnit(double timeInSeconds) {\n        return timeInSeconds * 1000;\n    }\n    @Override\n    public IUnit getSIUnit() {\n        return IUnit.Factory.getUnit(IUnit.SECONDS_SYMBOL);\n    }\n}\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Then register that class in the layer.xml file:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["LAYER.XML"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"xml","header":{"controls":{"copy":{}}},"source":"    <folder name=\"Units\">\n        <file name=\"com-interactive-intviewer-units-TimeInMillisecondsUnit.instance\"/>\n    </folder>\n","lang":"xml"},"children":[]}]},"headings":[{"value":"Working With Units","id":"working-with-units","depth":1},{"value":"Retrieving the vertical unit of a dataset","id":"retrieving-the-vertical-unit-of-a-dataset","depth":3},{"value":"Finding out whether a dataset is in time or depth","id":"finding-out-whether-a-dataset-is-in-time-or-depth","depth":3},{"value":"Converting quantities","id":"converting-quantities","depth":3},{"value":"Registering your own unit","id":"registering-your-own-unit","depth":3}],"frontmatter":{"title":"Working With Units","pageId":"other-useful-intviewer-apis/working-with-units","seo":{"title":"Working With Units"}},"lastModified":"2026-10-22T14:32:05.580Z","pagePropGetterError":{"message":"","name":""}},"slug":"/solutions/intviewer/other-useful-intviewer-apis/working-with-units","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}