blob: b93ed17adb243c3e5f8c76620f08c215bd01e3b3 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (21) on Thu Oct 05 19:54:57 CEST 2023 -->
<title>AbstractMathTransform (Apache SIS 1.4 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2023-10-05">
<meta name="description" content="declaration: module: org.apache.sis.referencing, package: org.apache.sis.referencing.operation.transform, class: AbstractMathTransform">
<meta name="generator" content="javadoc/ClassWriterImpl">
<meta name="keywords" content="org.apache.sis.referencing.operation.transform.AbstractMathTransform class">
<meta name="keywords" content="getSourceDimensions()">
<meta name="keywords" content="getTargetDimensions()">
<meta name="keywords" content="getDomain()">
<meta name="keywords" content="getParameterDescriptors()">
<meta name="keywords" content="getParameterValues()">
<meta name="keywords" content="getContextualParameters()">
<meta name="keywords" content="isIdentity()">
<meta name="keywords" content="transform()">
<meta name="keywords" content="derivative()">
<meta name="keywords" content="inverse()">
<meta name="keywords" content="tryConcatenate()">
<meta name="keywords" content="hashCode()">
<meta name="keywords" content="computeHashCode()">
<meta name="keywords" content="equals()">
<meta name="keywords" content="formatTo()">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../sis.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../script-dir/jquery-ui.min.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-3.6.1.min.js"></script>
<script type="text/javascript" src="../../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var pathtoroot = "../../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../../index.html">Overview</a></li>
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html#class">Help</a></li>
</ul>
<ul class="sub-nav-list-small">
<li>
<p>Summary:</p>
<ul>
<li><a href="#nested-class-summary">Nested</a></li>
<li>Field</li>
<li><a href="#constructor-summary">Constr</a></li>
<li><a href="#method-summary">Method</a></li>
</ul>
</li>
<li>
<p>Detail:</p>
<ul>
<li>Field</li>
<li><a href="#constructor-detail">Constr</a></li>
<li><a href="#method-detail">Method</a></li>
</ul>
</li>
</ul>
</div>
<div class="sub-nav">
<div id="navbar-sub-list">
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li><a href="#nested-class-summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><a href="../../../../../../../search.html">SEARCH</a>
<input type="text" id="search-input" disabled placeholder="Search">
<input type="reset" id="reset-button" disabled value="reset">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../../module-summary.html">org.apache.sis.referencing</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.sis.referencing.operation.transform</a></div>
<h1 title="Class AbstractMathTransform" class="title">Class AbstractMathTransform</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>
<div class="inheritance"><a href="../../../io/wkt/FormattableObject.html" title="class in org.apache.sis.io.wkt">FormattableObject</a>
<div class="inheritance">AbstractMathTransform</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../../../parameter/Parameterized.html" title="interface in org.apache.sis.parameter">Parameterized</a></code>, <code><a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/LenientComparable.html" title="interface in org.apache.sis.util">Lenient­Comparable</a></code>, <code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></dd>
</dl>
<dl class="notes">
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="AbstractMathTransform.Inverse.html" title="class in org.apache.sis.referencing.operation.transform">Abstract­Math­Transform​.Inverse</a></code>, <code><a href="AbstractMathTransform1D.html" title="class in org.apache.sis.referencing.operation.transform">Abstract­Math­Transform1D</a></code>, <code><a href="AbstractMathTransform2D.html" title="class in org.apache.sis.referencing.operation.transform">Abstract­Math­Transform2D</a></code>, <code><a href="DatumShiftTransform.html" title="class in org.apache.sis.referencing.operation.transform">Datum­Shift­Transform</a></code>, <code><a href="EllipsoidToCentricTransform.html" title="class in org.apache.sis.referencing.operation.transform">Ellipsoid­To­Centric­Transform</a></code>, <code><a href="PassThroughTransform.html" title="class in org.apache.sis.referencing.operation.transform">Pass­Through­Transform</a></code>, <code><a href="WraparoundTransform.html" title="class in org.apache.sis.referencing.operation.transform">Wraparound­Transform</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public abstract class </span><span class="element-name type-name-label">AbstractMathTransform</span>
<span class="extends-implements">extends <a href="../../../io/wkt/FormattableObject.html" title="class in org.apache.sis.io.wkt">FormattableObject</a>
implements <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">MathTransform</a>, <a href="../../../parameter/Parameterized.html" title="interface in org.apache.sis.parameter">Parameterized</a>, <a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/LenientComparable.html" title="interface in org.apache.sis.util">LenientComparable</a></span></div>
<div class="block">Provides a default implementation for most methods required by the <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link"><code>Math­Transform</code></a> interface.
A <code>Math­Transform</code> is an object that actually does the work of applying a
<a href="../DefaultFormula.html" title="class in org.apache.sis.referencing.operation">formula</a> to coordinate values.
The math transform does not know or care how the coordinates relate to positions in the real world.
For example if an affine transform scales <var>z</var> values by a factor of 1000,
then it could be converting metres to millimetres, or it could be converting kilometres to metres.
<p><code>Abstract­Math­Transform</code> provides a convenient base class from which <code>Math­Transform</code> implementations
can be easily derived. It also defines a few additional SIS-specific methods for convenience of performance.
The simplest way to implement this abstract class is to provide an implementation for the following methods only:</p>
<ul>
<li><a href="#getSourceDimensions()"><code>get­Source­Dimensions()</code></a></li>
<li><a href="#getTargetDimensions()"><code>get­Target­Dimensions()</code></a></li>
<li><a href="#transform(double%5B%5D,int,double%5B%5D,int,boolean)"><code>transform(double[], int, double[], int, boolean)</code></a></li>
</ul>
However, more performance may be gained by overriding the other <code>transform(…)</code> methods as well.
<h2 id="immutability-and-thread-safety-heading">Immutability and thread safety</h2>
All Apache SIS implementations of <code>Math­Transform</code> are immutable and thread-safe.
It is highly recommended that third-party implementations be immutable and thread-safe too.
This means that unless otherwise noted in the javadoc, <code>Math­Transform</code> instances can
be shared by many objects and passed between threads without synchronization.
<h2 id="serialization-heading">Serialization</h2>
<code>Math­Transform</code> may or may not be serializable, at implementation choices.
Most Apache SIS implementations are serializable, but the serialized objects are not guaranteed to be compatible
with future SIS versions. Serialization should be used only for short term storage or RMI between applications
running the same SIS version.</div>
<dl class="notes">
<dt>Since:</dt>
<dd>0.5</dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list">
<li><a href="DefaultMathTransformFactory.html" title="class in org.apache.sis.referencing.operation.transform"><code>Default­Math­Transform­Factory</code></a></li>
<li><a href="../AbstractCoordinateOperation.html" title="class in org.apache.sis.referencing.operation"><code>Abstract­Coordinate­Operation</code></a></li>
</ul>
</dd>
</dl>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li>
<section class="nested-class-summary" id="nested-class-summary">
<h2>Nested Class Summary</h2>
<div class="caption"><span>Nested Classes</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>protected static class&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="AbstractMathTransform.Inverse.html" class="type-name-link" title="class in org.apache.sis.referencing.operation.transform">Abstract­Math­Transform​.Inverse</a></code></div>
<div class="col-last even-row-color">
<div class="block">Base class for implementations of inverse math transforms.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier</div>
<div class="table-header col-second">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>protected </code></div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">Abstract­Math­Transform</a>()</code></div>
<div class="col-last even-row-color">
<div class="block">Constructor for subclasses.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab3" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab3', 3)" class="table-tab">Abstract Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected int</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#computeHashCode()" class="member-name-link">compute­Hash­Code</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Computes a hash value for this transform.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/Matrix.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Matrix</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#derivative(org.opengis.geometry.DirectPosition)" class="member-name-link">derivative</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/DirectPosition.html" title="class or interface in org.opengis.geometry" class="external-link">Direct­Position</a>&nbsp;point)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Gets the derivative of this transform at a point.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;object)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Compares the specified object with this math transform for strict equality.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#equals(java.lang.Object,org.apache.sis.util.ComparisonMode)" class="member-name-link">equals</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;object,
<a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/ComparisonMode.html" title="enum class in org.apache.sis.util">Comparison­Mode</a>&nbsp;mode)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Compares the specified object with this math transform for equality.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#formatTo(org.apache.sis.io.wkt.Formatter)" class="member-name-link">format­To</a><wbr>(<a href="../../../io/wkt/Formatter.html" title="class in org.apache.sis.io.wkt">Formatter</a>&nbsp;formatter)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Formats the inner part of a <cite>Well Known Text</cite> version 1 (WKT 1) element.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="ContextualParameters.html" title="class in org.apache.sis.referencing.operation.transform">Contextual­Parameters</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getContextualParameters()" class="member-name-link">get­Contextual­Parameters</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the parameters for a sequence of <cite>normalize</cite><code>this</code><cite>denormalize</cite>
transforms (<i>optional operation</i>).</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html" title="class or interface in java.util" class="external-link">Optional</a><wbr>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/Envelope.html" title="class or interface in org.opengis.geometry" class="external-link">Envelope</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getDomain(org.apache.sis.referencing.operation.transform.DomainDefinition)" class="member-name-link">get­Domain</a><wbr>(<a href="DomainDefinition.html" title="class in org.apache.sis.referencing.operation.transform">Domain­Definition</a>&nbsp;criteria)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the ranges of coordinate values which can be used as inputs.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/parameter/ParameterDescriptorGroup.html" title="class or interface in org.opengis.parameter" class="external-link">Parameter­Descriptor­Group</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getParameterDescriptors()" class="member-name-link">get­Parameter­Descriptors</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the parameter descriptors for this math transform, or <code>null</code> if unknown.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/parameter/ParameterValueGroup.html" title="class or interface in org.opengis.parameter" class="external-link">Parameter­Value­Group</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getParameterValues()" class="member-name-link">get­Parameter­Values</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the parameter values for this math transform, or <code>null</code> if unknown.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>abstract int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getSourceDimensions()" class="member-name-link">get­Source­Dimensions</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns the number of dimensions of input points.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>abstract int</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#getTargetDimensions()" class="member-name-link">get­Target­Dimensions</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns the number of dimensions of output points.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hash­Code</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns a hash value for this transform.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#inverse()" class="member-name-link">inverse</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the inverse transform of this object.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isIdentity()" class="member-name-link">is­Identity</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Tests whether this transform does not move any points.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>abstract <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/Matrix.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Matrix</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#transform(double%5B%5D,int,double%5B%5D,int,boolean)" class="member-name-link">transform</a><wbr>(double[]&nbsp;src­Pts,
int&nbsp;src­Off,
double[]&nbsp;dst­Pts,
int&nbsp;dst­Off,
boolean&nbsp;derivate)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Transforms a single coordinate tuple in an array, and optionally computes the transform
derivative at that location.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#transform(double%5B%5D,int,double%5B%5D,int,int)" class="member-name-link">transform</a><wbr>(double[]&nbsp;src­Pts,
int&nbsp;src­Off,
double[]&nbsp;dst­Pts,
int&nbsp;dst­Off,
int&nbsp;num­Pts)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Transforms a list of coordinate tuples.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#transform(double%5B%5D,int,float%5B%5D,int,int)" class="member-name-link">transform</a><wbr>(double[]&nbsp;src­Pts,
int&nbsp;src­Off,
float[]&nbsp;dst­Pts,
int&nbsp;dst­Off,
int&nbsp;num­Pts)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Transforms a list of coordinate tuples.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#transform(float%5B%5D,int,double%5B%5D,int,int)" class="member-name-link">transform</a><wbr>(float[]&nbsp;src­Pts,
int&nbsp;src­Off,
double[]&nbsp;dst­Pts,
int&nbsp;dst­Off,
int&nbsp;num­Pts)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Transforms a list of coordinate tuples.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#transform(float%5B%5D,int,float%5B%5D,int,int)" class="member-name-link">transform</a><wbr>(float[]&nbsp;src­Pts,
int&nbsp;src­Off,
float[]&nbsp;dst­Pts,
int&nbsp;dst­Off,
int&nbsp;num­Pts)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Transforms a list of coordinate tuples.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/DirectPosition.html" title="class or interface in org.opengis.geometry" class="external-link">Direct­Position</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#transform(org.opengis.geometry.DirectPosition,org.opengis.geometry.DirectPosition)" class="member-name-link">transform</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/DirectPosition.html" title="class or interface in org.opengis.geometry" class="external-link">Direct­Position</a>&nbsp;pt­Src,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/DirectPosition.html" title="class or interface in org.opengis.geometry" class="external-link">Direct­Position</a>&nbsp;pt­Dst)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Transforms the specified <code>pt­Src</code> and stores the result in <code>pt­Dst</code>.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#tryConcatenate(boolean,org.opengis.referencing.operation.MathTransform,org.opengis.referencing.operation.MathTransformFactory)" class="member-name-link">try­Concatenate</a><wbr>(boolean&nbsp;apply­Other­First,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a>&nbsp;other,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransformFactory.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform­Factory</a>&nbsp;factory)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Concatenates or pre-concatenates in an optimized way this math transform with the given one, if possible.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-FormattableObject">Methods inherited from class&nbsp;<a href="../../../io/wkt/FormattableObject.html" title="class in org.apache.sis.io.wkt">FormattableObject</a></h3>
<code><a href="../../../io/wkt/FormattableObject.html#print()">print</a>, <a href="../../../io/wkt/FormattableObject.html#toString()">to­String</a>, <a href="../../../io/wkt/FormattableObject.html#toString(org.apache.sis.io.wkt.Convention)">to­String</a>, <a href="../../../io/wkt/FormattableObject.html#toWKT()">to­WKT</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-Object">Methods inherited from class&nbsp;<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">get­Class</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notify­All</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-MathTransform">Methods inherited from interface&nbsp;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">MathTransform</a></h3>
<code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html#toWKT()" title="class or interface in org.opengis.referencing.operation" class="external-link">to­WKT</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;()">
<h3>AbstractMathTransform</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="element-name">AbstractMathTransform</span>()</div>
<div class="block">Constructor for subclasses.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="getSourceDimensions()">
<h3>getSourceDimensions</h3>
<div class="member-signature"><span class="modifiers">public abstract</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">getSourceDimensions</span>()</div>
<div class="block">Returns the number of dimensions of input points.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html#getSourceDimensions()" title="class or interface in org.opengis.referencing.operation" class="external-link">get­Source­Dimensions</a></code>&nbsp;in interface&nbsp;<code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></dd>
<dt>Returns:</dt>
<dd>the number of dimensions of input points.</dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list-long">
<li><a href="../DefaultOperationMethod.html#getSourceDimensions()"><code>Default­Operation­Method​.get­Source­Dimensions()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getTargetDimensions()">
<h3>getTargetDimensions</h3>
<div class="member-signature"><span class="modifiers">public abstract</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">getTargetDimensions</span>()</div>
<div class="block">Returns the number of dimensions of output points.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html#getTargetDimensions()" title="class or interface in org.opengis.referencing.operation" class="external-link">get­Target­Dimensions</a></code>&nbsp;in interface&nbsp;<code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></dd>
<dt>Returns:</dt>
<dd>the number of dimensions of output points.</dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list-long">
<li><a href="../DefaultOperationMethod.html#getTargetDimensions()"><code>Default­Operation­Method​.get­Target­Dimensions()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getDomain(org.apache.sis.referencing.operation.transform.DomainDefinition)">
<h3>getDomain</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html" title="class or interface in java.util" class="external-link">Optional</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/Envelope.html" title="class or interface in org.opengis.geometry" class="external-link">Envelope</a>&gt;</span>&nbsp;<span class="element-name">getDomain</span><wbr><span class="parameters">(<a href="DomainDefinition.html" title="class in org.apache.sis.referencing.operation.transform">DomainDefinition</a>&nbsp;criteria)</span>
throws <span class="exceptions"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">TransformException</a></span></div>
<div class="block">Returns the ranges of coordinate values which can be used as inputs.
They are limits where the transform is mathematically and numerically applicable.
This is <em>not</em> the domain of validity for which a coordinate reference system has been defined,
because this method ignores "real world" considerations such as datum and country boundaries.
<p>This method is for allowing callers to crop their data for removing areas that may cause numerical problems.
For example, results of Mercator projection tend to infinity when the latitude value approaches a pole.
For avoiding data structures with unreasonably large values or <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Double.html#NaN" title="class or interface in java.lang" class="external-link"><code>Double​.Na­N</code></a>,
we commonly crop data to some arbitrary maximal latitude value (typically 80 or 84°) before projection.
Those limits are arbitrary, the transform does not become suddenly invalid after a limit.
The <a href="DomainDefinition.html" title="class in org.apache.sis.referencing.operation.transform"><code>Domain­Definition</code></a> gives some controls on the criteria for choosing a limit.</p>
<p>Many transforms, in particular all affine transforms, have no mathematical limits.
Consequently, the default implementation returns an empty value.
Again it does not mean that the <a href="../AbstractCoordinateOperation.html" title="class in org.apache.sis.referencing.operation">coordinate operation</a> has no geospatial domain of validity, but the latter is not the purpose of this method.
This method is (for example) for preventing a viewer to crash when attempting to render a world-wide image.</p>
<p>Callers do not need to search through <a href="MathTransforms.html#getSteps(org.opengis.referencing.operation.MathTransform)">transform steps</a>.
SIS implementation of <a href="MathTransforms.html#concatenate(org.opengis.referencing.operation.MathTransform,org.opengis.referencing.operation.MathTransform)"><code>concatenated transforms</code></a>
do that automatically.</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>criteria</code> - controls the definition of transform domain.</dd>
<dt>Returns:</dt>
<dd>estimation of a domain where this transform is considered numerically applicable.</dd>
<dt>Throws:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Transform­Exception</a></code> - if the domain cannot be estimated.</dd>
<dt>Since:</dt>
<dd>1.3</dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list-long">
<li><a href="MathTransforms.html#getDomain(org.opengis.referencing.operation.MathTransform)"><code>Math­Transforms​.get­Domain(Math­Transform)</code></a></li>
<li><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html#getDomainOfValidity()" title="class or interface in org.opengis.referencing.operation" class="external-link"><code>Coordinate­Operation​.get­Domain­Of­Validity()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getParameterDescriptors()">
<h3>getParameterDescriptors</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/parameter/ParameterDescriptorGroup.html" title="class or interface in org.opengis.parameter" class="external-link">ParameterDescriptorGroup</a></span>&nbsp;<span class="element-name">getParameterDescriptors</span>()</div>
<div class="block">Returns the parameter descriptors for this math transform, or <code>null</code> if unknown.
<h4 id="relationship-with-iso-19111-heading">Relationship with ISO 19111</h4>
This method is similar to <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/OperationMethod.html#getParameters()" title="class or interface in org.opengis.referencing.operation" class="external-link"><code>Operation­Method​.get­Parameters()</code></a>, except that typical
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link"><code>Math­Transform</code></a> implementations return parameters in standard units (usually
<a href="../../../../../../../org.apache.sis.util/org/apache/sis/measure/Units.html#METRE">metres</a> or
<a href="../../../../../../../org.apache.sis.util/org/apache/sis/measure/Units.html#DEGREE">decimal degrees</a>).</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../../../parameter/Parameterized.html#getParameterDescriptors()">get­Parameter­Descriptors</a></code>&nbsp;in interface&nbsp;<code><a href="../../../parameter/Parameterized.html" title="interface in org.apache.sis.parameter">Parameterized</a></code></dd>
<dt>Returns:</dt>
<dd>the parameter descriptors for this math transform, or <code>null</code> if unspecified.</dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list-long">
<li><a href="../DefaultOperationMethod.html#getParameters()"><code>Default­Operation­Method​.get­Parameters()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getParameterValues()">
<h3>getParameterValues</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/parameter/ParameterValueGroup.html" title="class or interface in org.opengis.parameter" class="external-link">ParameterValueGroup</a></span>&nbsp;<span class="element-name">getParameterValues</span>()</div>
<div class="block">Returns the parameter values for this math transform, or <code>null</code> if unknown.
This is not necessarily the parameters that the user specified at construction time,
since implementations may have applied normalizations.
<h4 id="normalized-and-contextual-parameters-heading">Normalized and contextual parameters</h4>
Most Apache SIS implementations of map projections perform their calculations on an ellipsoid
having a semi-major axis length of 1. In such cases, the group returned by this method contains
a <code>"semi_major"</code> parameter with a value of 1. If the real axis length is desired, we need
to take in account the context of this math transform, i.e. the scales and offsets applied before
and after this transform. This information is provided by <a href="#getContextualParameters()"><code>get­Contextual­Parameters()</code></a>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../../../parameter/Parameterized.html#getParameterValues()">get­Parameter­Values</a></code>&nbsp;in interface&nbsp;<code><a href="../../../parameter/Parameterized.html" title="interface in org.apache.sis.parameter">Parameterized</a></code></dd>
<dt>Returns:</dt>
<dd>the parameter values for this math transform, or <code>null</code> if unspecified.
Note that those parameters may be normalized (e.g. represent a transformation
of an ellipsoid of semi-major axis length of 1).</dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list-long">
<li><a href="#getContextualParameters()"><code>get­Contextual­Parameters()</code></a></li>
<li><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/SingleOperation.html#getParameterValues()" title="class or interface in org.opengis.referencing.operation" class="external-link"><code>Single­Operation​.get­Parameter­Values()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getContextualParameters()">
<h3>getContextualParameters</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="ContextualParameters.html" title="class in org.apache.sis.referencing.operation.transform">ContextualParameters</a></span>&nbsp;<span class="element-name">getContextualParameters</span>()</div>
<div class="block">Returns the parameters for a sequence of <cite>normalize</cite><code>this</code><cite>denormalize</cite>
transforms (<i>optional operation</i>).
Subclasses can override this method if they choose to split their computation in linear and non-linear parts.
Such split is optional: it can leads to better performance (because SIS can concatenate efficiently consecutive
linear transforms), but should not change significantly the result (ignoring differences in rounding errors).
If a split has been done, then this <code>Math­Transform</code> represents only the non-linear step and Apache SIS
needs this method for reconstructing the parameters of the complete transform.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the parameter values for the sequence of <cite>normalize</cite><code>this</code><cite>denormalize</cite>
transforms, or <code>null</code> if unspecified.
Callers should not modify the returned parameters, since modifications (if allowed)
will generally not be reflected back in this <code>Math­Transform</code>.</dd>
<dt>Since:</dt>
<dd>0.6</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="isIdentity()">
<h3>isIdentity</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">isIdentity</span>()</div>
<div class="block">Tests whether this transform does not move any points.
The default implementation always returns <code>false</code>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html#isIdentity()" title="class or interface in org.opengis.referencing.operation" class="external-link">is­Identity</a></code>&nbsp;in interface&nbsp;<code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="transform(org.opengis.geometry.DirectPosition,org.opengis.geometry.DirectPosition)">
<h3>transform</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/DirectPosition.html" title="class or interface in org.opengis.geometry" class="external-link">DirectPosition</a></span>&nbsp;<span class="element-name">transform</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/DirectPosition.html" title="class or interface in org.opengis.geometry" class="external-link">DirectPosition</a>&nbsp;ptSrc,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/DirectPosition.html" title="class or interface in org.opengis.geometry" class="external-link">DirectPosition</a>&nbsp;ptDst)</span>
throws <span class="exceptions"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">TransformException</a></span></div>
<div class="block">Transforms the specified <code>pt­Src</code> and stores the result in <code>pt­Dst</code>.
The default implementation performs the following steps:
<ul>
<li>Ensures that the dimension of the given points are consistent with the
<a href="#getSourceDimensions()">source</a> and <a href="#getTargetDimensions()">target dimensions</a> of this math transform.</li>
<li>Delegates to the <a href="#transform(double%5B%5D,int,double%5B%5D,int,boolean)"><code>transform(double[], int, double[], int, boolean)</code></a> method.</li>
</ul>
This method does not update the associated <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link"><code>Coordinate­Reference­System</code></a> value.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html#transform(org.opengis.geometry.DirectPosition,org.opengis.geometry.DirectPosition)" title="class or interface in org.opengis.referencing.operation" class="external-link">transform</a></code>&nbsp;in interface&nbsp;<code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></dd>
<dt>Parameters:</dt>
<dd><code>pt­Src</code> - the coordinate tuple to be transformed.</dd>
<dd><code>pt­Dst</code> - the coordinate tuple that stores the result of transforming <code>pt­Src</code>, or <code>null</code>.</dd>
<dt>Returns:</dt>
<dd>the coordinate tuple after transforming <code>pt­Src</code> and storing the result in <code>pt­Dst</code>,
or a newly created point if <code>pt­Dst</code> was null.</dd>
<dt>Throws:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/MismatchedDimensionException.html" title="class or interface in org.opengis.geometry" class="external-link">Mismatched­Dimension­Exception</a></code> - if <code>pt­Src</code> or <code>pt­Dst</code> doesn't have the expected dimension.</dd>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Transform­Exception</a></code> - if the point cannot be transformed.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="transform(double[],int,double[],int,boolean)">
<h3>transform</h3>
<div class="member-signature"><span class="modifiers">public abstract</span>&nbsp;<span class="return-type"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/Matrix.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Matrix</a></span>&nbsp;<span class="element-name">transform</span><wbr><span class="parameters">(double[]&nbsp;srcPts,
int&nbsp;srcOff,
double[]&nbsp;dstPts,
int&nbsp;dstOff,
boolean&nbsp;derivate)</span>
throws <span class="exceptions"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">TransformException</a></span></div>
<div class="block">Transforms a single coordinate tuple in an array, and optionally computes the transform
derivative at that location. Invoking this method is conceptually equivalent to running
the following:
<div class="snippet-container"><button class="copy snippet-copy" aria-label="Copy snippet" onclick="copySnippet(this)"><span data-copied="Copied!">Copy</span><img src="../../../../../../../copy.svg" alt="Copy snippet"></button>
<pre class="snippet"><code class="language-java">Matrix derivative = null;
if (derivate) {
double[] coordinates = Arrays.copyOfRange(srcPts, srcOff, srcOff + getSourceDimensions());
derivative = this.derivative(new GeneralDirectPosition(coordinates));
}
this.transform(srcPts, srcOff, dstPts, dstOff, 1); // May overwrite srcPts.
return derivative;
</code></pre>
</div>
However, this method provides two advantages:
<ul>
<li>It is usually easier to implement for <code>Abstract­Math­Transform</code> subclasses.
The default <a href="#transform(double%5B%5D,int,double%5B%5D,int,int)"><code>transform(double[], int, double[], int, int)</code></a> method implementation will invoke this
method in a loop, taking care of the <a href="IterationStrategy.html" title="enum class in org.apache.sis.referencing.operation.transform">iteration strategy</a> depending on the
argument value.</li>
<li>When both the transformed point and its derivative are needed, this method may be significantly faster than
invoking the <code>transform</code> and <code>derivative</code> methods separately because many internal calculations are
the same. Computing those two information in a single step can help to reduce redundant calculation.</li>
</ul>
<h4 id="note-for-implementers-heading">Note for implementers</h4>
The source and destination may overlap. Consequently, implementers must read all source
coordinate values before to start writing the transformed coordinates in the destination array.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>src­Pts</code> - the array containing the source coordinates (cannot be <code>null</code>).</dd>
<dd><code>src­Off</code> - the offset to the point to be transformed in the source array.</dd>
<dd><code>dst­Pts</code> - the array into which the transformed coordinates is returned. May be the same than <code>src­Pts</code>.
May be <code>null</code> if only the derivative matrix is desired.</dd>
<dd><code>dst­Off</code> - the offset to the location of the transformed point that is stored in the destination array.</dd>
<dd><code>derivate</code> - <code>true</code> for computing the derivative, or <code>false</code> if not needed.</dd>
<dt>Returns:</dt>
<dd>the matrix of the transform derivative at the given source position,
or <code>null</code> if the <code>derivate</code> argument is <code>false</code>.</dd>
<dt>Throws:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Transform­Exception</a></code> - if the point cannot be transformed or
if a problem occurred while calculating the derivative.</dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list-long">
<li><a href="#derivative(org.opengis.geometry.DirectPosition)"><code>derivative(Direct­Position)</code></a></li>
<li><a href="#transform(org.opengis.geometry.DirectPosition,org.opengis.geometry.DirectPosition)"><code>transform(Direct­Position, Direct­Position)</code></a></li>
<li><a href="MathTransforms.html#derivativeAndTransform(org.opengis.referencing.operation.MathTransform,double%5B%5D,int,double%5B%5D,int)"><code>Math­Transforms​.derivative­And­Transform(Math­Transform, double[], int, double[], int)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="transform(double[],int,double[],int,int)">
<h3>transform</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">transform</span><wbr><span class="parameters">(double[]&nbsp;srcPts,
int&nbsp;srcOff,
double[]&nbsp;dstPts,
int&nbsp;dstOff,
int&nbsp;numPts)</span>
throws <span class="exceptions"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">TransformException</a></span></div>
<div class="block">Transforms a list of coordinate tuples. This method is provided for efficiently transforming many points.
The supplied array of coordinate values will contain packed coordinate values.
<h4 id="example-heading">Example</h4>
If the source dimension is 3, then the coordinates will be packed in this order:
(<var>x₀</var>,<var>y₀</var>,<var>z₀</var>,
<var>x₁</var>,<var>y₁</var>,<var>z₁</var> …).
<h4 id="implementation-note-heading">Implementation note</h4>
The default implementation invokes <a href="#transform(double%5B%5D,int,double%5B%5D,int,boolean)"><code>transform(double[], int, double[], int, boolean)</code></a> in a loop,
using an <a href="IterationStrategy.html" title="enum class in org.apache.sis.referencing.operation.transform">iteration strategy</a> determined from the arguments for iterating
over the points. For creating a more efficient implementation,
see <a href="IterationStrategy.html" title="enum class in org.apache.sis.referencing.operation.transform"><code>Iteration­Strategy</code></a> javadoc for a method skeleton.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html#transform(double%5B%5D,int,double%5B%5D,int,int)" title="class or interface in org.opengis.referencing.operation" class="external-link">transform</a></code>&nbsp;in interface&nbsp;<code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></dd>
<dt>Parameters:</dt>
<dd><code>src­Pts</code> - the array containing the source point coordinates.</dd>
<dd><code>src­Off</code> - the offset to the first point to be transformed in the source array.</dd>
<dd><code>dst­Pts</code> - the array into which the transformed point coordinates are returned.
May be the same than <code>src­Pts</code>.</dd>
<dd><code>dst­Off</code> - the offset to the location of the first transformed point that is stored in the destination array.</dd>
<dd><code>num­Pts</code> - the number of point objects to be transformed.</dd>
<dt>Throws:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Transform­Exception</a></code> - if a point cannot be transformed. Some implementations will stop at the first failure,
wile some other implementations will fill the untransformable points with <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Double.html#NaN" title="class or interface in java.lang" class="external-link">Double.NaN</a> values,
continue and throw the exception only at end. Implementations that fall in the latter case should set the
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html#getLastCompletedTransform()" title="class or interface in org.opengis.referencing.operation" class="external-link">last completed transform</a> to <code>this</code>.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="transform(float[],int,float[],int,int)">
<h3>transform</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">transform</span><wbr><span class="parameters">(float[]&nbsp;srcPts,
int&nbsp;srcOff,
float[]&nbsp;dstPts,
int&nbsp;dstOff,
int&nbsp;numPts)</span>
throws <span class="exceptions"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">TransformException</a></span></div>
<div class="block">Transforms a list of coordinate tuples. The default implementation delegates
to <a href="#transform(double%5B%5D,int,double%5B%5D,int,int)"><code>transform(double[], int, double[], int, int)</code></a> using a temporary array of doubles.
<h4 id="implementation-note-heading1">Implementation note</h4>
See <a href="IterationStrategy.html" title="enum class in org.apache.sis.referencing.operation.transform"><code>Iteration­Strategy</code></a> javadoc for a method skeleton.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html#transform(float%5B%5D,int,float%5B%5D,int,int)" title="class or interface in org.opengis.referencing.operation" class="external-link">transform</a></code>&nbsp;in interface&nbsp;<code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></dd>
<dt>Parameters:</dt>
<dd><code>src­Pts</code> - the array containing the source point coordinates.</dd>
<dd><code>src­Off</code> - the offset to the first point to be transformed in the source array.</dd>
<dd><code>dst­Pts</code> - the array into which the transformed point coordinates are returned.
May be the same than <code>src­Pts</code>.</dd>
<dd><code>dst­Off</code> - the offset to the location of the first transformed point that is stored in the destination array.</dd>
<dd><code>num­Pts</code> - the number of point objects to be transformed.</dd>
<dt>Throws:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Transform­Exception</a></code> - if a point cannot be transformed. Some implementations will stop at the first failure,
wile some other implementations will fill the un-transformable points with <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Float.html#NaN" title="class or interface in java.lang" class="external-link"><code>Float​.Na­N</code></a> values,
continue and throw the exception only at end. Implementations that fall in the latter case should set
the <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html#getLastCompletedTransform()" title="class or interface in org.opengis.referencing.operation" class="external-link">last completed transform</a> to <code>this</code>.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="transform(double[],int,float[],int,int)">
<h3>transform</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">transform</span><wbr><span class="parameters">(double[]&nbsp;srcPts,
int&nbsp;srcOff,
float[]&nbsp;dstPts,
int&nbsp;dstOff,
int&nbsp;numPts)</span>
throws <span class="exceptions"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">TransformException</a></span></div>
<div class="block">Transforms a list of coordinate tuples. The default implementation delegates
to <a href="#transform(double%5B%5D,int,double%5B%5D,int,int)"><code>transform(double[], int, double[], int, int)</code></a> using a temporary array of doubles.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html#transform(double%5B%5D,int,float%5B%5D,int,int)" title="class or interface in org.opengis.referencing.operation" class="external-link">transform</a></code>&nbsp;in interface&nbsp;<code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></dd>
<dt>Parameters:</dt>
<dd><code>src­Pts</code> - the array containing the source point coordinates.</dd>
<dd><code>src­Off</code> - the offset to the first point to be transformed in the source array.</dd>
<dd><code>dst­Pts</code> - the array into which the transformed point coordinates are returned.</dd>
<dd><code>dst­Off</code> - the offset to the location of the first transformed point that is stored in the destination array.</dd>
<dd><code>num­Pts</code> - the number of point objects to be transformed.</dd>
<dt>Throws:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Transform­Exception</a></code> - if a point cannot be transformed. Some implementations will stop at the first failure,
wile some other implementations will fill the untransformable points with <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Float.html#NaN" title="class or interface in java.lang" class="external-link">Float.NaN</a> values,
continue and throw the exception only at end. Implementations that fall in the latter case should set the
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html#getLastCompletedTransform()" title="class or interface in org.opengis.referencing.operation" class="external-link">last completed transform</a> to <code>this</code>.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="transform(float[],int,double[],int,int)">
<h3>transform</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">transform</span><wbr><span class="parameters">(float[]&nbsp;srcPts,
int&nbsp;srcOff,
double[]&nbsp;dstPts,
int&nbsp;dstOff,
int&nbsp;numPts)</span>
throws <span class="exceptions"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">TransformException</a></span></div>
<div class="block">Transforms a list of coordinate tuples. The default implementation delegates
to <a href="#transform(double%5B%5D,int,double%5B%5D,int,int)"><code>transform(double[], int, double[], int, int)</code></a> using a temporary array of doubles
if necessary.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html#transform(float%5B%5D,int,double%5B%5D,int,int)" title="class or interface in org.opengis.referencing.operation" class="external-link">transform</a></code>&nbsp;in interface&nbsp;<code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></dd>
<dt>Parameters:</dt>
<dd><code>src­Pts</code> - the array containing the source point coordinates.</dd>
<dd><code>src­Off</code> - the offset to the first point to be transformed in the source array.</dd>
<dd><code>dst­Pts</code> - the array into which the transformed point coordinates are returned.</dd>
<dd><code>dst­Off</code> - the offset to the location of the first transformed point that is stored in the destination array.</dd>
<dd><code>num­Pts</code> - the number of point objects to be transformed.</dd>
<dt>Throws:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Transform­Exception</a></code> - if a point cannot be transformed. Some implementations will stop at the first failure,
wile some other implementations will fill the untransformable points with <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Double.html#NaN" title="class or interface in java.lang" class="external-link">Double.NaN</a> values,
continue and throw the exception only at end. Implementations that fall in the latter case should set the
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html#getLastCompletedTransform()" title="class or interface in org.opengis.referencing.operation" class="external-link">last completed transform</a> to <code>this</code>.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="derivative(org.opengis.geometry.DirectPosition)">
<h3>derivative</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/Matrix.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Matrix</a></span>&nbsp;<span class="element-name">derivative</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/DirectPosition.html" title="class or interface in org.opengis.geometry" class="external-link">DirectPosition</a>&nbsp;point)</span>
throws <span class="exceptions"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">TransformException</a></span></div>
<div class="block">Gets the derivative of this transform at a point.
The default implementation performs the following steps:
<ul>
<li>Ensure that the <code>point</code> dimension is equal to this math transform
<a href="#getSourceDimensions()">source dimensions</a>.</li>
<li>Copy the coordinates in a temporary array and pass that array to the
<a href="#transform(double%5B%5D,int,double%5B%5D,int,boolean)"><code>transform(double[], int, double[], int, boolean)</code></a> method,
with the <code>derivate</code> boolean argument set to <code>true</code>.</li>
<li>If the latter method returned a non-null matrix, returns that matrix.
Otherwise throws <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link"><code>Transform­Exception</code></a>.</li>
</ul></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html#derivative(org.opengis.geometry.DirectPosition)" title="class or interface in org.opengis.referencing.operation" class="external-link">derivative</a></code>&nbsp;in interface&nbsp;<code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></dd>
<dt>Parameters:</dt>
<dd><code>point</code> - the coordinate tuple where to evaluate the derivative.</dd>
<dt>Returns:</dt>
<dd>the derivative at the specified point (never <code>null</code>).</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/NullPointerException.html" title="class or interface in java.lang" class="external-link">Null­Pointer­Exception</a></code> - if the derivative depends on coordinates and <code>point</code> is <code>null</code>.</dd>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/geometry/MismatchedDimensionException.html" title="class or interface in org.opengis.geometry" class="external-link">Mismatched­Dimension­Exception</a></code> - if <code>point</code> does not have the expected dimension.</dd>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/TransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Transform­Exception</a></code> - if the derivative cannot be evaluated at the specified point.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="inverse()">
<h3>inverse</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">MathTransform</a></span>&nbsp;<span class="element-name">inverse</span>()
throws <span class="exceptions"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/NoninvertibleTransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">NoninvertibleTransformException</a></span></div>
<div class="block">Returns the inverse transform of this object. The default implementation returns
<code>this</code> if this transform is an <a href="#isIdentity()">identity</a> transform,
or throws an exception otherwise. Subclasses should override this method.
<h4 id="implementation-note-heading2">Implementation note</h4>
The <a href="AbstractMathTransform.Inverse.html" title="class in org.apache.sis.referencing.operation.transform"><code>Abstract­Math­Transform​.Inverse</code></a> inner class can be used as a base for inverse transform implementations.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html#inverse()" title="class or interface in org.opengis.referencing.operation" class="external-link">inverse</a></code>&nbsp;in interface&nbsp;<code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform</a></code></dd>
<dt>Throws:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/NoninvertibleTransformException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Noninvertible­Transform­Exception</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="tryConcatenate(boolean,org.opengis.referencing.operation.MathTransform,org.opengis.referencing.operation.MathTransformFactory)">
<h3>tryConcatenate</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">MathTransform</a></span>&nbsp;<span class="element-name">tryConcatenate</span><wbr><span class="parameters">(boolean&nbsp;applyOtherFirst,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform.html" title="class or interface in org.opengis.referencing.operation" class="external-link">MathTransform</a>&nbsp;other,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransformFactory.html" title="class or interface in org.opengis.referencing.operation" class="external-link">MathTransformFactory</a>&nbsp;factory)</span>
throws <span class="exceptions"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/util/FactoryException.html" title="class or interface in org.opengis.util" class="external-link">FactoryException</a></span></div>
<div class="block">Concatenates or pre-concatenates in an optimized way this math transform with the given one, if possible.
If an optimization is possible, a new math transform is created to perform the combined transformation.
The <code>apply­Other­First</code> value determines the transformation order as bellow:
<ul>
<li>If <code>apply­Other­First</code> is <code>true</code>, then transforming a point
<var>p</var> by the combined transform is equivalent to first transforming
<var>p</var> by <code>other</code> and then transforming the result by <code>this</code>.</li>
<li>If <code>apply­Other­First</code> is <code>false</code>, then transforming a point
<var>p</var> by the combined transform is equivalent to first transforming
<var>p</var> by <code>this</code> and then transforming the result by <code>other</code>.</li>
</ul>
If no optimization is available for the combined transform, then this method returns <code>null</code>.
In the latter case, the concatenation will be prepared by <a href="DefaultMathTransformFactory.html" title="class in org.apache.sis.referencing.operation.transform"><code>Default­Math­Transform­Factory</code></a> using
a generic implementation.
<p>The default implementation returns the identity transform if the other transform is the inverse
of this transform, or returns <code>null</code> otherwise. This method is ought to be overridden
by subclasses capable of concatenating some combination of transforms in a special way.
<a href="LinearTransform.html" title="interface in org.apache.sis.referencing.operation.transform"><code>Linear­Transform</code></a> implementations do not need to override this method since matrix multiplications
will be handled automatically, and this method does not need to handle the <a href="#isIdentity()"><code>is­Identity()</code></a> case.</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>apply­Other­First</code> - <code>true</code> if the transformation order is <code>other</code> followed by <code>this</code>, or
<code>false</code> if the transformation order is <code>this</code> followed by <code>other</code>.</dd>
<dd><code>other</code> - the other math transform to (pre-)concatenate with this transform.</dd>
<dd><code>factory</code> - the factory which is (indirectly) invoking this method, or <code>null</code> if none.</dd>
<dt>Returns:</dt>
<dd>the math transforms combined in an optimized way, or <code>null</code> if no such optimization is available.</dd>
<dt>Throws:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/util/FactoryException.html" title="class or interface in org.opengis.util" class="external-link">Factory­Exception</a></code> - if an error occurred while combining the transforms.</dd>
<dt>Since:</dt>
<dd>0.8</dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list-long">
<li><a href="DefaultMathTransformFactory.html#createConcatenatedTransform(org.opengis.referencing.operation.MathTransform,org.opengis.referencing.operation.MathTransform)"><code>Default­Math­Transform­Factory​.create­Concatenated­Transform(Math­Transform, Math­Transform)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns a hash value for this transform. This method invokes <a href="#computeHashCode()"><code>compute­Hash­Code()</code></a>
when first needed and caches the value for future invocations. Subclasses shall override
<code>compute­Hash­Code()</code> instead of this method.</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hash­Code</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
<dt>Returns:</dt>
<dd>the hash code value. This value may change between different execution of the Apache SIS library.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="computeHashCode()">
<h3>computeHashCode</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">computeHashCode</span>()</div>
<div class="block">Computes a hash value for this transform. This method is invoked by <a href="#hashCode()"><code>hash­Code()</code></a> when first needed.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the hash code value. This value may change between different execution of the Apache SIS library.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;object)</span></div>
<div class="block">Compares the specified object with this math transform for strict equality.
This method is implemented as below (omitting assertions):
<div class="snippet-container"><button class="copy snippet-copy" aria-label="Copy snippet" onclick="copySnippet(this)"><span data-copied="Copied!">Copy</span><img src="../../../../../../../copy.svg" alt="Copy snippet"></button>
<pre class="snippet"><code class="language-java">return equals(other, ComparisonMode.STRICT);
</code></pre>
</div>
</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/LenientComparable.html#equals(java.lang.Object)">equals</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/LenientComparable.html" title="interface in org.apache.sis.util">Lenient­Comparable</a></code></dd>
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
<dt>Parameters:</dt>
<dd><code>object</code> - the object to compare with this transform.</dd>
<dt>Returns:</dt>
<dd><code>true</code> if the given object is a transform of the same class and using the same parameter values.</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/AssertionError.html" title="class or interface in java.lang" class="external-link">Assertion­Error</a></code> - if assertions are enabled and the objects are equal but their hash codes are different.</dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list">
<li><a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/ComparisonMode.html#STRICT"><code>Comparison­Mode​.STRICT</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object,org.apache.sis.util.ComparisonMode)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>&nbsp;object,
<a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/ComparisonMode.html" title="enum class in org.apache.sis.util">ComparisonMode</a>&nbsp;mode)</span></div>
<div class="block">Compares the specified object with this math transform for equality.
Two math transforms are considered equal if, given identical source positions, their
<a href="#transform(org.opengis.geometry.DirectPosition,org.opengis.geometry.DirectPosition)">transformed</a> positions would be
equal or <a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/ComparisonMode.html#APPROXIMATE"><code>approximately</code></a> equal.
This method may conservatively returns <code>false</code> if unsure.
<p>The default implementation returns <code>true</code> if the following conditions are met:</p>
<ul>
<li><code>object</code> is an instance of the same class than <code>this</code>. We require the
same class because there is no interface for the various kinds of transform.</li>
<li>If the hash code value has already been <a href="#computeHashCode()">computed</a> for both
instances, their values are the same <i>(opportunist performance enhancement)</i>.</li>
<li>The <a href="#getContextualParameters()">contextual parameters</a> are equal according
the given comparison mode.</li>
</ul></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/LenientComparable.html#equals(java.lang.Object,org.apache.sis.util.ComparisonMode)">equals</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/LenientComparable.html" title="interface in org.apache.sis.util">Lenient­Comparable</a></code></dd>
<dt>Parameters:</dt>
<dd><code>object</code> - the object to compare with this transform.</dd>
<dd><code>mode</code> - the strictness level of the comparison. Default to <a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/ComparisonMode.html#STRICT"><code>STRICT</code></a>.</dd>
<dt>Returns:</dt>
<dd><code>true</code> if the given object is considered equals to this math transform.</dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list-long">
<li><a href="../../../../../../../org.apache.sis.util/org/apache/sis/util/Utilities.html#deepEquals(java.lang.Object,java.lang.Object,org.apache.sis.util.ComparisonMode)"><code>Utilities​.deep­Equals(Object, Object, Comparison­Mode)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="formatTo(org.apache.sis.io.wkt.Formatter)">
<h3>formatTo</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">formatTo</span><wbr><span class="parameters">(<a href="../../../io/wkt/Formatter.html" title="class in org.apache.sis.io.wkt">Formatter</a>&nbsp;formatter)</span></div>
<div class="block">Formats the inner part of a <cite>Well Known Text</cite> version 1 (WKT 1) element.
The default implementation formats all parameter values returned by <a href="#getParameterValues()"><code>get­Parameter­Values()</code></a>.
The parameter group name is used as the math transform name.
<h4 id="compatibility-note-heading">Compatibility note</h4>
<code>Param_MT</code> is defined in the WKT 1 specification only.
If the <a href="../../../io/wkt/Formatter.html#getConvention()">formatter convention</a> is set to WKT 2,
then this method silently uses the WKT 1 convention without raising an error
(unless this <code>Math­Transform</code> cannot be formatted as valid WKT 1 neither).</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../../../io/wkt/FormattableObject.html#formatTo(org.apache.sis.io.wkt.Formatter)">format­To</a></code>&nbsp;in class&nbsp;<code><a href="../../../io/wkt/FormattableObject.html" title="class in org.apache.sis.io.wkt">Formattable­Object</a></code></dd>
<dt>Parameters:</dt>
<dd><code>formatter</code> - the formatter to use.</dd>
<dt>Returns:</dt>
<dd>the WKT element name, which is <code>"Param_MT"</code> in the default implementation.</dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list-long">
<li><a href="DefaultMathTransformFactory.html#createFromWKT(java.lang.String)"><code>Default­Math­Transform­Factory​.create­From­WKT(String)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
</div>
</div>
</body>
</html>