blob: da138f42ce58a2a523ed7b2c6aa98f6cb836ad63 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (11.0.4) on Fri Sep 20 12:10:30 CEST 2019 -->
<title>LinearTransformBuilder (Apache SIS 1.0 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2019-09-20">
<meta name="keywords" content="org.apache.sis.referencing.operation.builder.LinearTransformBuilder class">
<meta name="keywords" content="getSourceDimensions()">
<meta name="keywords" content="getTargetDimensions()">
<meta name="keywords" content="getSourceEnvelope()">
<meta name="keywords" content="getTargetEnvelope()">
<meta name="keywords" content="setControlPoints()">
<meta name="keywords" content="getControlPoints()">
<meta name="keywords" content="setControlPoint()">
<meta name="keywords" content="getControlPoint()">
<meta name="keywords" content="addLinearizers()">
<meta name="keywords" content="create()">
<meta name="keywords" content="linearizer()">
<meta name="keywords" content="correlation()">
<meta name="keywords" content="toString()">
<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="../../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../../jquery/jquery-3.3.1.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jquery-migrate-3.0.1.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="LinearTransformBuilder (Apache SIS 1.0 API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../../";
var useModuleDirectories = false;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/LinearTransformBuilder.html">Use</a></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">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&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="subNavList">
<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>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.sis.referencing.operation.builder</a></div>
<h2 title="Class LinearTransformBuilder" class="title">Class LinearTransformBuilder</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></li>
<li>
<ul class="inheritance">
<li><a href="TransformBuilder.html" title="class in org.apache.sis.referencing.operation.builder">TransformBuilder</a></li>
<li>
<ul class="inheritance">
<li>LinearTransformBuilder</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public class <span class="typeNameLabel">LinearTransformBuilder</span>
extends <a href="TransformBuilder.html" title="class in org.apache.sis.referencing.operation.builder">TransformBuilder</a></pre>
<div class="block">Creates an affine transform which will map approximately the given source positions to the given target positions.
In many cases, the <em>source</em> positions are grid indices and the <em>target</em> positions are geographic or
projected coordinates, but this is not mandatory. If the source positions are known to be grid indices,
then a builder created by the <a href="#%3Cinit%3E(int...)"><code>Linear­Transform­Builder(int...)</code></a> constructor will be more efficient.
Otherwise a builder created by the <a href="#%3Cinit%3E()"><code>Linear­Transform­Builder()</code></a> constructor will be able to handle
randomly distributed coordinates.
<p>Builders are not thread-safe. Builders can be used only once;
points can not be added or modified after <a href="#create(org.opengis.referencing.operation.MathTransformFactory)"><code>create(Math­Transform­Factory)</code></a> has been invoked.
The transform coefficients are determined using a <cite>least squares</cite> estimation method,
with the assumption that source positions are exact and all the uncertainty is in the target positions.</p>
<div class="section">Linearizers</div>
Consider the following situation (commonly found with <a href="../../../storage/netcdf/package-summary.html">netCDF files</a>):
the <i>sources</i> coordinates are pixel indices and the <i>targets</i> are (longitude, latitude) coordinates,
but we suspect that the <i>sources to targets</i> transform is some undetermined map projection, maybe Mercator.
A linear approximation between those coordinates will give poor results; the results would be much better if all
(longitude, latitude) coordinates were converted to the right projection first. However that map projection may
not be known, but we can try to guess it by trials-and-errors using a set of plausible projections.
That set can be specified by <a href="#addLinearizers(java.util.Map,int...)"><code>add­Linearizers(Map, int...)</code></a>.
If the <a href="#create(org.opengis.referencing.operation.MathTransformFactory)"><code>create(Math­Transform­Factory)</code></a> method finds that one of the specified projections seems a good fit,
it will automatically convert all target coordinates to that projection.
That selected projection is given by <a href="#linearizer()"><code>linearizer()</code></a>.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>0.5</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="LocalizationGridBuilder.html" title="class in org.apache.sis.referencing.operation.builder"><code>Localization­Grid­Builder</code></a>,
<a href="../transform/LinearTransform.html" title="interface in org.apache.sis.referencing.operation.transform"><code>Linear­Transform</code></a>,
<a href="../../../math/Line.html" title="class in org.apache.sis.math"><code>Line</code></a>,
<a href="../../../math/Plane.html" title="class in org.apache.sis.math"><code>Plane</code></a></dd>
<p><font size="-1">Defined in the <code>sis-referencing</code> module</font></p>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">LinearTransformBuilder</a></span>()</code></th>
<td class="colLast">
<div class="block">Creates a new linear transform builder for randomly distributed positions.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(int...)">LinearTransformBuilder</a></span>&#8203;(int...&nbsp;gridSize)</code></th>
<td class="colLast">
<div class="block">Creates a new linear transform builder for source positions distributed on a regular grid.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addLinearizers(java.util.Map,int...)">addLinearizers</a></span>&#8203;(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink">String</a>,&#8203;<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransform.html?is-external=true" title="class or interface in org.opengis.referencing.operation" class="externalLink">MathTransform</a>&gt;&nbsp;projections,
int...&nbsp;projToGrid)</code></th>
<td class="colLast">
<div class="block">Adds transforms to potentially apply on target coordinates before to compute the linear transform.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>double[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#correlation()">correlation</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the Pearson correlation coefficients of the transform created by <a href="#create(org.opengis.referencing.operation.MathTransformFactory)"><code>create(…)</code></a>.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../transform/LinearTransform.html" title="interface in org.apache.sis.referencing.operation.transform">LinearTransform</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#create(org.opengis.referencing.operation.MathTransformFactory)">create</a></span>&#8203;(<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransformFactory.html?is-external=true" title="class or interface in org.opengis.referencing.operation" class="externalLink">MathTransformFactory</a>&nbsp;factory)</code></th>
<td class="colLast">
<div class="block">Creates a linear transform approximation from the source positions to the target positions.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>double[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getControlPoint(int%5B%5D)">getControlPoint</a></span>&#8203;(int[]&nbsp;source)</code></th>
<td class="colLast">
<div class="block">Returns a single target coordinate for the given source coordinate, or <code>null</code> if none.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink">Map</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/DirectPosition.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">DirectPosition</a>,&#8203;<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/DirectPosition.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">DirectPosition</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getControlPoints()">getControlPoints</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns all control points as a map.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSourceDimensions()">getSourceDimensions</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the number of dimensions in source positions.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code><a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/Envelope.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">Envelope</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSourceEnvelope()">getSourceEnvelope</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the envelope of source points (<em>keys</em> of the map returned by <a href="#getControlPoints()"><code>get­Control­Points()</code></a>).</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getTargetDimensions()">getTargetDimensions</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the number of dimensions in target positions.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code><a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/Envelope.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">Envelope</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getTargetEnvelope()">getTargetEnvelope</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the envelope of target points (<em>values</em> of the map returned by <a href="#getControlPoints()"><code>get­Control­Points()</code></a>).</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util" class="externalLink">Optional</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransform.html?is-external=true" title="class or interface in org.opengis.referencing.operation" class="externalLink">MathTransform</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#linearizer()">linearizer</a></span>()</code></th>
<td class="colLast">
<div class="block">If target coordinates have been projected to another space, returns that projection.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setControlPoint(int%5B%5D,double%5B%5D)">setControlPoint</a></span>&#8203;(int[]&nbsp;source,
double[]&nbsp;target)</code></th>
<td class="colLast">
<div class="block">Sets a single matching control point pair.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setControlPoints(java.util.Map)">setControlPoints</a></span>&#8203;(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink">Map</a>&lt;? extends <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/coordinate/Position.html?is-external=true" title="class or interface in org.opengis.geometry.coordinate" class="externalLink">Position</a>,&#8203;? extends <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/coordinate/Position.html?is-external=true" title="class or interface in org.opengis.geometry.coordinate" class="externalLink">Position</a>&gt;&nbsp;sourceToTarget)</code></th>
<td class="colLast">
<div class="block">Sets all matching control point pairs, overwriting any previous setting.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink">String</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#toString()">toString</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns a string representation of this builder for debugging purpose.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang" class="externalLink">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang" class="externalLink">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang" class="externalLink">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang" class="externalLink">get­Class</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang" class="externalLink">hash­Code</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang" class="externalLink">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang" class="externalLink">notify­All</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait(long,int)" title="class or interface in java.lang" class="externalLink">wait</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>LinearTransformBuilder</h4>
<pre>public&nbsp;LinearTransformBuilder()</pre>
<div class="block">Creates a new linear transform builder for randomly distributed positions.
<div class="note"><b>Tip:</b>
if the source coordinates are grid indices, then
the <a href="#%3Cinit%3E(int...)"><code>Linear­Transform­Builder(int...)</code></a> constructor will create a more efficient builder.
</div></div>
</li>
</ul>
<a id="&lt;init&gt;(int...)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>LinearTransformBuilder</h4>
<pre>public&nbsp;LinearTransformBuilder&#8203;(int...&nbsp;gridSize)</pre>
<div class="block">Creates a new linear transform builder for source positions distributed on a regular grid.
This constructor notifies <code>Linear­Transform­Builder</code> that coordinate values of all source positions will
be integers in the [0 … <code>grid­Size[0]</code>-1] range for the first dimension (typically column indices),
in the [0 … <code>grid­Size[1]</code>-1] range for the second dimension (typically row indices), <i>etc.</i>
The dimension of all source positions is the length of the given <code>grid­Size</code> array.
<p>An empty array is equivalent to invoking the no-argument constructor,
i.e. no restriction is put on the source coordinates.</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>grid­Size</code> - the number of integer coordinate values in each grid dimension.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­Argument­Exception</a></code> - if a grid size is not strictly positive, or if the product
of all values (∏<code>grid­Size</code>) is greater than <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang" class="externalLink"><code>Integer​.MAX_VALUE</code></a>.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>0.8</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="getSourceDimensions()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSourceDimensions</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;getSourceDimensions()</pre>
<div class="block">Returns the number of dimensions in source positions. This is the length of the <code>source</code> array given in argument
to <a href="#getControlPoint(int%5B%5D)"><code>get</code></a>/<a href="#setControlPoint(int%5B%5D,double%5B%5D)"><code>set­Control­Point(int[], …)</code></a> methods.
This is also the number of dimensions of the <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/DirectPosition.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink"><code>Direct­Position</code></a> <em>keys</em> in the <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink"><code>Map</code></a> exchanged by
<a href="#getControlPoints()"><code>get</code></a>/<a href="#setControlPoints(java.util.Map)"><code>set­Control­Points(Map)</code></a> methods.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the dimension of source points.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­State­Exception</a></code> - if the number of source dimensions is not yet known.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>0.8</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransform.html?is-external=true#getSourceDimensions()" title="class or interface in org.opengis.referencing.operation" class="externalLink"><code>Math­Transform​.get­Source­Dimensions()</code></a></dd>
</dl>
</li>
</ul>
<a id="getTargetDimensions()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTargetDimensions</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;getTargetDimensions()</pre>
<div class="block">Returns the number of dimensions in target positions. This is the length of the <code>target</code> array exchanged by
<a href="#getControlPoint(int%5B%5D)"><code>get</code></a>/<a href="#setControlPoint(int%5B%5D,double%5B%5D)"><code>set­Control­Point(…, double[])</code></a> methods.
This is also the number of dimensions of the <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/DirectPosition.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink"><code>Direct­Position</code></a> <em>values</em> in the <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink"><code>Map</code></a> exchanged by
<a href="#getControlPoints()"><code>get</code></a>/<a href="#setControlPoints(java.util.Map)"><code>set­Control­Points(Map)</code></a> methods.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the dimension of target points.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­State­Exception</a></code> - if the number of target dimensions is not yet known.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>0.8</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransform.html?is-external=true#getTargetDimensions()" title="class or interface in org.opengis.referencing.operation" class="externalLink"><code>Math­Transform​.get­Target­Dimensions()</code></a></dd>
</dl>
</li>
</ul>
<a id="getSourceEnvelope()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSourceEnvelope</h4>
<pre class="methodSignature">public&nbsp;<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/Envelope.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">Envelope</a>&nbsp;getSourceEnvelope()</pre>
<div class="block">Returns the envelope of source points (<em>keys</em> of the map returned by <a href="#getControlPoints()"><code>get­Control­Points()</code></a>).
The number of dimensions is equal to <a href="#getSourceDimensions()"><code>get­Source­Dimensions()</code></a>.
This method returns the known minimum and maximum values (inclusive) for each dimension,
<strong>not</strong> expanded to encompass full cell surfaces. In other words, the returned envelope encompasses only
<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/datum/PixelInCell.html?is-external=true#CELL_CENTER" title="class or interface in org.opengis.referencing.datum" class="externalLink">cell centers</a>.
<p>If a grid size was <a href="#%3Cinit%3E(int...)"><code>specified at construction time</code></a>,
then those minimums and maximums are inferred from the grid size and are always integer values.
Otherwise, the minimums and maximums are extracted from the control points and may be any floating point values.
In any cases, the lower and upper values are inclusive.</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the envelope of source points (cell centers), inclusive.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­State­Exception</a></code> - if the source points are not yet known.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.0</dd>
</dl>
</li>
</ul>
<a id="getTargetEnvelope()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTargetEnvelope</h4>
<pre class="methodSignature">public&nbsp;<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/Envelope.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">Envelope</a>&nbsp;getTargetEnvelope()</pre>
<div class="block">Returns the envelope of target points (<em>values</em> of the map returned by <a href="#getControlPoints()"><code>get­Control­Points()</code></a>).
The number of dimensions is equal to <a href="#getTargetDimensions()"><code>get­Target­Dimensions()</code></a>. The lower and upper values are inclusive.
If a <a href="#linearizer()">linearizer has been applied</a>, then coordinates of
the returned envelope are projected by that linearizer.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the envelope of target points.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­State­Exception</a></code> - if the target points are not yet known.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.0</dd>
</dl>
</li>
</ul>
<a id="setControlPoints(java.util.Map)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setControlPoints</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setControlPoints&#8203;(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink">Map</a>&lt;? extends <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/coordinate/Position.html?is-external=true" title="class or interface in org.opengis.geometry.coordinate" class="externalLink">Position</a>,&#8203;? extends <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/coordinate/Position.html?is-external=true" title="class or interface in org.opengis.geometry.coordinate" class="externalLink">Position</a>&gt;&nbsp;sourceToTarget)
throws <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/MismatchedDimensionException.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">MismatchedDimensionException</a></pre>
<div class="block">Sets all matching control point pairs, overwriting any previous setting. The source positions are the keys in
the given map, and the target positions are the associated values in the map. The map should not contain two
entries with the same source position. Coordinate reference systems are ignored.
Null positions are silently ignored.
Positions with NaN or infinite coordinates cause an exception to be thrown.
<p>All source positions shall have the same number of dimensions (the <cite>source dimension</cite>),
and all target positions shall have the same number of dimensions (the <cite>target dimension</cite>).
However the source dimension does not need to be the same than the target dimension.
Apache SIS currently supports only one- or two-dimensional source positions,
together with arbitrary target dimension.</p>
<p>If this builder has been created with the <a href="#%3Cinit%3E(int...)"><code>Linear­Transform­Builder(int...)</code></a> constructor,
then the coordinate values of all source positions shall be integers in the [0 … <code>grid­Size[0]</code>-1]
range for the first dimension (typically column indices), in the [0 … <code>grid­Size[1]</code>-1] range for
the second dimension (typically row indices), <i>etc</i>. This constraint does not apply for builders
created with the <a href="#%3Cinit%3E()"><code>Linear­Transform­Builder()</code></a> constructor.</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>source­To­Target</code> - a map of source positions to target positions.
Source positions are assumed precise and target positions are assumed uncertain.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­State­Exception</a></code> - if <a href="#create(org.opengis.referencing.operation.MathTransformFactory)"><code>create(…)</code></a> has already been invoked.</dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­Argument­Exception</a></code> - if the given positions contain NaN or infinite coordinate values.</dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­Argument­Exception</a></code> - if this builder has been <a href="#%3Cinit%3E(int...)">created for a grid</a> but some source coordinates are not indices in that grid.</dd>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/MismatchedDimensionException.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">Mismatched­Dimension­Exception</a></code> - if some positions do not have the expected number of dimensions.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>0.8</dd>
</dl>
</li>
</ul>
<a id="getControlPoints()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getControlPoints</h4>
<pre class="methodSignature">public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink">Map</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/DirectPosition.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">DirectPosition</a>,&#8203;<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/DirectPosition.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">DirectPosition</a>&gt;&nbsp;getControlPoints()</pre>
<div class="block">Returns all control points as a map. Values are source coordinates and keys are target coordinates.
The map is unmodifiable and is guaranteed to contain only non-null keys and values.
The map is a view: changes in this builder are immediately reflected in the returned map.
<p>If <a href="#linearizer()"><code>linearizer()</code></a> returns a non-empty value,
then the values in the returned map are projected using that linearizer.
This may happen only after <a href="#create(org.opengis.referencing.operation.MathTransformFactory)"><code>create(…)</code></a> has been invoked.</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>all control points in this builder.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.0</dd>
</dl>
</li>
</ul>
<a id="setControlPoint(int[],double[])">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setControlPoint</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setControlPoint&#8203;(int[]&nbsp;source,
double[]&nbsp;target)</pre>
<div class="block">Sets a single matching control point pair. Source position is assumed precise and target position is assumed uncertain.
If the given source position was already associated with another target position, then the old target position is discarded.
<div class="note"><b>Performance note:</b>
current implementation is efficient for builders <a href="#%3Cinit%3E(int...)">created for a grid</a>
but inefficient for builders <a href="#%3Cinit%3E()">created for randomly distributed points</a>.
In the later case, the <a href="#setControlPoints(java.util.Map)"><code>set­Control­Points(Map)</code></a> method is a more efficient alternative.</div></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>source</code> - the source coordinates. If this builder has been created with the <a href="#%3Cinit%3E(int...)"><code>Linear­Transform­Builder(int...)</code></a> constructor,
then for every index <var>i</var> the <code>source[i]</code> value shall be in the [0 … <code>grid­Size[i]</code>-1] range inclusive.
If this builder has been created with the <a href="#%3Cinit%3E()"><code>Linear­Transform­Builder()</code></a> constructor, then no constraint apply.</dd>
<dd><code>target</code> - the target coordinates, assumed uncertain.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­State­Exception</a></code> - if <a href="#create(org.opengis.referencing.operation.MathTransformFactory)"><code>create(…)</code></a> has already been invoked.</dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­Argument­Exception</a></code> - if this builder has been <a href="#%3Cinit%3E(int...)">created for a grid</a>
but some source coordinates are out of index range, or if <code>target</code> contains NaN of infinite numbers.</dd>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/MismatchedDimensionException.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">Mismatched­Dimension­Exception</a></code> - if the source or target position does not have the expected number of dimensions.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>0.8</dd>
</dl>
</li>
</ul>
<a id="getControlPoint(int[])">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getControlPoint</h4>
<pre class="methodSignature">public&nbsp;double[]&nbsp;getControlPoint&#8203;(int[]&nbsp;source)</pre>
<div class="block">Returns a single target coordinate for the given source coordinate, or <code>null</code> if none.
This method can be used for retrieving points set by previous calls to
<a href="#setControlPoint(int%5B%5D,double%5B%5D)"><code>set­Control­Point(int[], double[])</code></a> or <a href="#setControlPoints(java.util.Map)"><code>set­Control­Points(Map)</code></a>.
<p>If <a href="#linearizer()"><code>linearizer()</code></a> returns a non-empty value, then the returned values are projected using that linearizer.
This may happen only if this method is invoked after <a href="#create(org.opengis.referencing.operation.MathTransformFactory)"><code>create(…)</code></a>.</p>
<div class="note"><b>Performance note:</b>
current implementation is efficient for builders <a href="#%3Cinit%3E(int...)">created for a grid</a>
but inefficient for builders <a href="#%3Cinit%3E()">created for randomly distributed points</a>.</div></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>source</code> - the source coordinates. If this builder has been created with the <a href="#%3Cinit%3E(int...)"><code>Linear­Transform­Builder(int...)</code></a> constructor,
then for every index <var>i</var> the <code>source[i]</code> value shall be in the [0 … <code>grid­Size[i]</code>-1] range inclusive.
If this builder has been created with the <a href="#%3Cinit%3E()"><code>Linear­Transform­Builder()</code></a> constructor, then no constraint apply.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the target coordinates associated to the given source, or <code>null</code> if none.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­Argument­Exception</a></code> - if this builder has been <a href="#%3Cinit%3E(int...)">created for a grid</a>
but some source coordinates are out of index range.</dd>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org/opengis/geometry/MismatchedDimensionException.html?is-external=true" title="class or interface in org.opengis.geometry" class="externalLink">Mismatched­Dimension­Exception</a></code> - if the source position does not have the expected number of dimensions.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>0.8</dd>
</dl>
</li>
</ul>
<a id="addLinearizers(java.util.Map,int...)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addLinearizers</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addLinearizers&#8203;(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink">String</a>,&#8203;<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransform.html?is-external=true" title="class or interface in org.opengis.referencing.operation" class="externalLink">MathTransform</a>&gt;&nbsp;projections,
int...&nbsp;projToGrid)</pre>
<div class="block">Adds transforms to potentially apply on target coordinates before to compute the linear transform.
This method can be invoked if one suspects that the <cite>source to target</cite> transform may be
more linear when the target is another space than the current space of <a href="#getTargetEnvelope()">target coordinates</a>. If linearizers have been specified, then the <a href="#create(org.opengis.referencing.operation.MathTransformFactory)"><code>create(Math­Transform­Factory)</code></a>
method will try to apply each transform on target coordinates and check which one results in the best
<a href="#correlation()">correlation</a> coefficients. It may be none.
<p>The linearizers are specified as <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransform.html?is-external=true" title="class or interface in org.opengis.referencing.operation" class="externalLink"><code>Math­Transform</code></a>s from current <a href="#getTargetEnvelope()">target coordinates</a> to other spaces where <cite>sources to new targets</cite> transforms may be more linear.
Keys in the map are arbitrary identifiers used in <a href="#toString()"><code>to­String()</code></a> for debugging purpose.
Values in the map are non-<a href="../transform/LinearTransform.html" title="interface in org.apache.sis.referencing.operation.transform"><code>Linear­Transform</code></a>s (linear transforms are not forbidden, but are useless for this process).</p>
<p>The <code>proj­To­Grid</code> argument maps <code>projections</code> dimensions to this builder target dimensions.
For example if <code>proj­To­Grid</code> array is <code>{2,1}</code>, then dimensions 0 and 1 of given <code>projections</code>
(both source and target dimensions) will map to dimensions 2 and 1 of this builder target dimensions, respectively.
The <code>proj­To­Grid</code> argument can be omitted or null, in which {0, 1, 2 … <a href="#getTargetDimensions()"><code>get­Target­Dimensions()</code></a> - 1} is assumed.
All given <code>projections</code> shall have a number of source and target dimensions equals to the length of the given or assumed
<code>proj­To­Grid</code> array. It is possible to invoke this method many times with different <code>proj­To­Grid</code> argument values.</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>projections</code> - projections from current target coordinates to other spaces which may result in more linear transforms.</dd>
<dd><code>proj­To­Grid</code> - the target dimensions to project, or null or omitted for projecting all target dimensions.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang" class="externalLink">Illegal­State­Exception</a></code> - if <a href="#create(org.opengis.referencing.operation.MathTransformFactory)"><code>create(…)</code></a> has already been invoked.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.0</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="#linearizer()"><code>linearizer()</code></a>,
<a href="#correlation()"><code>correlation()</code></a></dd>
</dl>
</li>
</ul>
<a id="create(org.opengis.referencing.operation.MathTransformFactory)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>create</h4>
<pre class="methodSignature">public&nbsp;<a href="../transform/LinearTransform.html" title="interface in org.apache.sis.referencing.operation.transform">LinearTransform</a>&nbsp;create&#8203;(<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransformFactory.html?is-external=true" title="class or interface in org.opengis.referencing.operation" class="externalLink">MathTransformFactory</a>&nbsp;factory)
throws <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/util/FactoryException.html?is-external=true" title="class or interface in org.opengis.util" class="externalLink">FactoryException</a></pre>
<div class="block">Creates a linear transform approximation from the source positions to the target positions.
This method assumes that source positions are precise and that all uncertainty is in the target positions.
If <a href="#addLinearizers(java.util.Map,int...)">linearizers have been specified</a>, then this method may project all target
coordinates using one of those linearizers in order to get a more linear transform.
If such projection is applied, then <a href="#linearizer()"><code>linearizer()</code></a> will return a non-empty value after this method call.
<p>If this method is invoked more than once, the previously created transform instance is returned.</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="TransformBuilder.html#create(org.opengis.referencing.operation.MathTransformFactory)">create</a></code>&nbsp;in class&nbsp;<code><a href="TransformBuilder.html" title="class in org.apache.sis.referencing.operation.builder">Transform­Builder</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>factory</code> - the factory to use for creating the transform, or <code>null</code> for the default factory.
The <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransformFactory.html?is-external=true#createAffineTransform(org.opengis.referencing.operation.Matrix)" title="class or interface in org.opengis.referencing.operation" class="externalLink"><code>Math­Transform­Factory​.create­Affine­Transform(Matrix)</code></a> method of that factory
shall return <a href="../transform/LinearTransform.html" title="interface in org.apache.sis.referencing.operation.transform"><code>Linear­Transform</code></a> instances.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the fitted linear transform.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org/opengis/util/FactoryException.html?is-external=true" title="class or interface in org.opengis.util" class="externalLink">Factory­Exception</a></code> - if the transform can not be created,
for example because the source or target points have not be specified.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>0.8</dd>
</dl>
</li>
</ul>
<a id="linearizer()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>linearizer</h4>
<pre class="methodSignature">public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util" class="externalLink">Optional</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransform.html?is-external=true" title="class or interface in org.opengis.referencing.operation" class="externalLink">MathTransform</a>&gt;&nbsp;linearizer()</pre>
<div class="block">If target coordinates have been projected to another space, returns that projection.
This method returns a non-empty value only if all the following conditions are met:
<ol>
<li><a href="#addLinearizers(java.util.Map,int...)"><code>add­Linearizers(Map, int...)</code></a> has been invoked.</li>
<li><a href="#create(org.opengis.referencing.operation.MathTransformFactory)"><code>create(Math­Transform­Factory)</code></a> has been invoked.</li>
<li>The <code>create(…)</code> method at step 2 found that projecting target coordinates using
one of the linearizers specified at step 1 results in a more linear transform.</li>
</ol>
If this method returns a non-empty value, then the envelope returned by <a href="#getTargetEnvelope()"><code>get­Target­Envelope()</code></a>
and all control points returned by <a href="#getControlPoint(int%5B%5D)"><code>get­Control­Point(int[])</code></a> are projected by this transform.
The returned transform includes axes swapping specified by the <code>dimensions</code> argument given to
<code><a href="#addLinearizers(java.util.Map,int...)">add­Linearizers</a>(…, dimensions)</code>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the projection applied on target coordinates before to compute a linear transform.</dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.0</dd>
</dl>
</li>
</ul>
<a id="correlation()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>correlation</h4>
<pre class="methodSignature">public&nbsp;double[]&nbsp;correlation()</pre>
<div class="block">Returns the Pearson correlation coefficients of the transform created by <a href="#create(org.opengis.referencing.operation.MathTransformFactory)"><code>create(…)</code></a>.
The closer those coefficients are to +1 or -1, the better the fit.
This method returns <code>null</code> if <code>create(…)</code> has not yet been invoked.
If non-null, the array length is equal to the number of target dimensions.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>estimation of Pearson correlation coefficients for each target dimension,
or <code>null</code> if <code>create(…)</code> has not been invoked yet.</dd>
</dl>
</li>
</ul>
<a id="toString()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>toString</h4>
<pre class="methodSignature">public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink">String</a>&nbsp;toString()</pre>
<div class="block">Returns a string representation of this builder for debugging purpose.
Current implementation shows the following information:
<ul>
<li>Number of points.</li>
<li>Linearizers and their correlation coefficients (if available).</li>
<li>The linear transform (if already computed).</li>
</ul>
The string representation may change in any future version.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang" class="externalLink">to­String</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a string representation of this builder.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/LinearTransformBuilder.html">Use</a></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">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&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="subNavList">
<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>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2010&#x2013;2019 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</body>
</html>