blob: 6b0ffc9bef9cf343a229a1340e8d94d2b4b1daf2 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (19) -->
<title>TransverseMercator (Apache SIS 1.3 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="description" content="declaration: package: org.apache.sis.referencing.operation.projection, class: TransverseMercator">
<meta name="generator" content="javadoc/ClassWriterImpl">
<meta name="keywords" content="org.apache.sis.referencing.operation.projection.TransverseMercator class">
<meta name="keywords" content="createMapProjection()">
<meta name="keywords" content="getDomain()">
<meta name="keywords" content="transform()">
<meta name="keywords" content="inverseTransform()">
<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">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.6.0.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="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/TransverseMercator.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#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><a href="#field-summary">Field</a></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><a href="#field-summary">Field</a>&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="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.sis.referencing.operation.projection</a></div>
<h1 title="Class TransverseMercator" class="title">Class TransverseMercator</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/16/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"><a href="../transform/AbstractMathTransform.html" title="class in org.apache.sis.referencing.operation.transform">AbstractMathTransform</a>
<div class="inheritance"><a href="../transform/AbstractMathTransform2D.html" title="class in org.apache.sis.referencing.operation.transform">AbstractMathTransform2D</a>
<div class="inheritance"><a href="NormalizedProjection.html" title="class in org.apache.sis.referencing.operation.projection">NormalizedProjection</a>
<div class="inheritance">TransverseMercator</div>
</div>
</div>
</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/io/Serializable.html" title="class or interface in java.io" class="external-link">Serializable</a></code>, <code><a href="../../../parameter/Parameterized.html" title="interface in org.apache.sis.parameter">Parameterized</a></code>, <code><a href="../../../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>, <code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/MathTransform2D.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Math­Transform2D</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">TransverseMercator</span>
<span class="extends-implements">extends <a href="NormalizedProjection.html" title="class in org.apache.sis.referencing.operation.projection">NormalizedProjection</a></span></div>
<div class="block"><cite>Transverse Mercator</cite> projection (EPSG codes 9807).
This class implements the "JHS formulas" reproduced in
IOGP Publication 373-7-2 – Geomatics Guidance Note number 7, part 2 – April 2015.
<h2>Description</h2>
This is a cylindrical projection, in which the cylinder has been rotated 90°.
Instead of being tangent to the equator (or to another standard latitude), it is tangent to a central meridian.
Deformation are more important as we are going further from the central meridian.
The Transverse Mercator projection is appropriate for region which have a greater extent north-south than east-west.
<p>There are a number of versions of the Transverse Mercator projection including the Universal (UTM)
and Modified (MTM) Transverses Mercator projections. In these cases the earth is divided into zones.
For the UTM the zones are 6 degrees wide, numbered from 1 to 60 proceeding east from 180 degrees longitude,
and between latitude 84 degrees North and 80 degrees South. The central meridian is taken as the center of the zone
and the latitude of origin is the equator. A scale factor of 0.9996 and false easting of 500000 metres is used for
all zones and a false northing of 10000000 metres is used for zones in the southern hemisphere.
<h2>Domain of validity</h2>
The difference between longitude values λ and the central meridian λ₀ should be less than 60°.
Differences larger than 90° of longitude cause a <a href="ProjectionException.html" title="class in org.apache.sis.referencing.operation.projection"><code>Projection­Exception</code></a> to be thrown.
Differences between 60° and 90° are not rejected by Apache SIS but should be avoided.
See the <a href="#transform(double%5B%5D,int,double%5B%5D,int,boolean)">projection method</a>
for more information.</div>
<dl class="notes">
<dt>Since:</dt>
<dd>0.6</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="Mercator.html" title="class in org.apache.sis.referencing.operation.projection"><code>Mercator</code></a></li>
<li><a href="ObliqueMercator.html" title="class in org.apache.sis.referencing.operation.projection"><code>Oblique­Mercator</code></a></li>
<li><a href="../../../../../../serialized-form.html#org.apache.sis.referencing.operation.projection.TransverseMercator">Serialized Form</a></li>
</ul>
</dd>
<p><font size="-1">Defined in the <code>sis-referencing</code> module</font></p>
</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="inherited-list">
<h2 id="nested-classes-inherited-from-class-org.apache.sis.referencing.operation.projection.NormalizedProjection">Nested classes/interfaces inherited from class&nbsp;<a href="NormalizedProjection.html" title="class in org.apache.sis.referencing.operation.projection">NormalizedProjection</a></h2>
<code><a href="NormalizedProjection.ParameterRole.html" title="enum class in org.apache.sis.referencing.operation.projection">Normalized­Projection​.Parameter­Role</a></code></div>
</section>
</li>
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="inherited-list">
<h3 id="fields-inherited-from-class-NormalizedProjection">Fields inherited from class&nbsp;<a href="NormalizedProjection.html" title="class in org.apache.sis.referencing.operation.projection">NormalizedProjection</a></h3>
<code><a href="NormalizedProjection.html#eccentricity">eccentricity</a>, <a href="NormalizedProjection.html#eccentricitySquared">eccentricity­Squared</a></code></div>
<div class="inherited-list">
<h3 id="fields-inherited-from-class-AbstractMathTransform2D">Fields inherited from class&nbsp;<a href="../transform/AbstractMathTransform2D.html" title="class in org.apache.sis.referencing.operation.transform">AbstractMathTransform2D</a></h3>
<code><a href="../transform/AbstractMathTransform2D.html#DIMENSION">DIMENSION</a></code></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 two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(org.opengis.referencing.operation.OperationMethod,org.apache.sis.parameter.Parameters)" class="member-name-link">Transverse­Mercator</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/OperationMethod.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Operation­Method</a>&nbsp;method,
<a href="../../../parameter/Parameters.html" title="class in org.apache.sis.parameter">Parameters</a>&nbsp;parameters)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates a Transverse Mercator projection from the given parameters.</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-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><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="#createMapProjection(org.opengis.referencing.operation.MathTransformFactory)" class="member-name-link">create­Map­Projection</a><wbr>(<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">Returns the sequence of <cite>normalization</cite><code>this</code><cite>denormalization</cite> transforms
as a whole.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/16/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;</code></div>
<div class="col-second odd-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="../transform/DomainDefinition.html" title="class in org.apache.sis.referencing.operation.transform">Domain­Definition</a>&nbsp;criteria)</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 domain of input coordinates.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#inverseTransform(double%5B%5D,int,double%5B%5D,int)" class="member-name-link">inverse­Transform</a><wbr>(double[]&nbsp;src­Pts,
int&nbsp;src­Off,
double[]&nbsp;dst­Pts,
int&nbsp;dst­Off)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Transforms the specified (η, ξ) coordinates and stores the result in <code>dst­Pts</code> (angles in radians).</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="#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 odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Projects the specified (λ,φ) coordinates (units in radians) and stores the result in <code>dst­Pts</code>.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-NormalizedProjection">Methods inherited from class&nbsp;<a href="NormalizedProjection.html" title="class in org.apache.sis.referencing.operation.projection">NormalizedProjection</a></h3>
<code><a href="NormalizedProjection.html#computeHashCode()">compute­Hash­Code</a>, <a href="NormalizedProjection.html#equals(java.lang.Object,org.apache.sis.util.ComparisonMode)">equals</a>, <a href="NormalizedProjection.html#getContextualParameters()">get­Contextual­Parameters</a>, <a href="NormalizedProjection.html#getParameterDescriptors()">get­Parameter­Descriptors</a>, <a href="NormalizedProjection.html#getParameterValues()">get­Parameter­Values</a>, <a href="NormalizedProjection.html#inverse()">inverse</a>, <a href="NormalizedProjection.html#tryConcatenate(boolean,org.opengis.referencing.operation.MathTransform,org.opengis.referencing.operation.MathTransformFactory)">try­Concatenate</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-AbstractMathTransform2D">Methods inherited from class&nbsp;<a href="../transform/AbstractMathTransform2D.html" title="class in org.apache.sis.referencing.operation.transform">AbstractMathTransform2D</a></h3>
<code><a href="../transform/AbstractMathTransform2D.html#createTransformedShape(java.awt.Shape)">create­Transformed­Shape</a>, <a href="../transform/AbstractMathTransform2D.html#derivative(java.awt.geom.Point2D)">derivative</a>, <a href="../transform/AbstractMathTransform2D.html#getSourceDimensions()">get­Source­Dimensions</a>, <a href="../transform/AbstractMathTransform2D.html#getTargetDimensions()">get­Target­Dimensions</a>, <a href="../transform/AbstractMathTransform2D.html#transform(java.awt.geom.Point2D,java.awt.geom.Point2D)">transform</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-AbstractMathTransform">Methods inherited from class&nbsp;<a href="../transform/AbstractMathTransform.html" title="class in org.apache.sis.referencing.operation.transform">AbstractMathTransform</a></h3>
<code><a href="../transform/AbstractMathTransform.html#derivative(org.opengis.geometry.DirectPosition)">derivative</a>, <a href="../transform/AbstractMathTransform.html#equals(java.lang.Object)">equals</a>, <a href="../transform/AbstractMathTransform.html#formatTo(org.apache.sis.io.wkt.Formatter)">format­To</a>, <a href="../transform/AbstractMathTransform.html#hashCode()">hash­Code</a>, <a href="../transform/AbstractMathTransform.html#isIdentity()">is­Identity</a>, <a href="../transform/AbstractMathTransform.html#transform(double%5B%5D,int,double%5B%5D,int,int)">transform</a>, <a href="../transform/AbstractMathTransform.html#transform(double%5B%5D,int,float%5B%5D,int,int)">transform</a>, <a href="../transform/AbstractMathTransform.html#transform(float%5B%5D,int,double%5B%5D,int,int)">transform</a>, <a href="../transform/AbstractMathTransform.html#transform(float%5B%5D,int,float%5B%5D,int,int)">transform</a>, <a href="../transform/AbstractMathTransform.html#transform(org.opengis.geometry.DirectPosition,org.opengis.geometry.DirectPosition)">transform</a></code></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/16/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/16/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/16/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/16/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/16/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/16/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/16/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/16/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/16/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#derivative(org.opengis.geometry.DirectPosition)" title="class or interface in org.opengis.referencing.operation" class="external-link">derivative</a>, <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>, <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>, <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>, <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>, <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>, <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>, <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></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;(org.opengis.referencing.operation.OperationMethod,org.apache.sis.parameter.Parameters)">
<h3>TransverseMercator</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">TransverseMercator</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/OperationMethod.html" title="class or interface in org.opengis.referencing.operation" class="external-link">OperationMethod</a>&nbsp;method,
<a href="../../../parameter/Parameters.html" title="class in org.apache.sis.parameter">Parameters</a>&nbsp;parameters)</span></div>
<div class="block">Creates a Transverse Mercator projection from the given parameters.
The <code>method</code> argument can be the description of one of the following:
<ul>
<li><cite>"Transverse Mercator"</cite>.</li>
<li><cite>"Transverse Mercator (South Orientated)"</cite>.</li>
</ul></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>method</code> - description of the projection parameters.</dd>
<dd><code>parameters</code> - the parameter values of the projection to create.</dd>
</dl>
</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="createMapProjection(org.opengis.referencing.operation.MathTransformFactory)">
<h3>createMapProjection</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">createMapProjection</span><wbr><span class="parameters">(<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">Returns the sequence of <cite>normalization</cite><code>this</code><cite>denormalization</cite> transforms
as a whole. The transform returned by this method expects (<var>longitude</var>, <var>latitude</var>)
coordinates in <em>degrees</em> and returns (<var>x</var>,<var>y</var>) coordinates in <em>metres</em>.
<p>The non-linear part of the returned transform will be <code>this</code> transform, except if the ellipsoid
is spherical. In the latter case, <code>this</code> transform may be replaced by a simplified implementation.</p></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="NormalizedProjection.html#createMapProjection(org.opengis.referencing.operation.MathTransformFactory)">create­Map­Projection</a></code>&nbsp;in class&nbsp;<code><a href="NormalizedProjection.html" title="class in org.apache.sis.referencing.operation.projection">Normalized­Projection</a></code></dd>
<dt>Parameters:</dt>
<dd><code>factory</code> - the factory to use for creating the transform.</dd>
<dt>Returns:</dt>
<dd>the map projection from (λ,φ) to (<var>x</var>,<var>y</var>) coordinates.</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 creating a transform.</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="../transform/ContextualParameters.html#completeTransform(org.opengis.referencing.operation.MathTransformFactory,org.opengis.referencing.operation.MathTransform)"><code>Contextual­Parameters​.complete­Transform(Math­Transform­Factory, Math­Transform)</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/16/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="../transform/DomainDefinition.html" title="class in org.apache.sis.referencing.operation.transform">DomainDefinition</a>&nbsp;criteria)</span></div>
<div class="block">Returns the domain of input coordinates.
The limits defined by this method are arbitrary and may change in any future implementation.
Current implementation sets a limit at 40° of longitude on each side of the central meridian
(this limit is mentioned in EPSG guidance notes)
and a limit at 84° of latitude (same as <a href="Mercator.html" title="class in org.apache.sis.referencing.operation.projection"><code>Mercator</code></a> projection).</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="../transform/AbstractMathTransform.html#getDomain(org.apache.sis.referencing.operation.transform.DomainDefinition)">get­Domain</a></code>&nbsp;in class&nbsp;<code><a href="../transform/AbstractMathTransform.html" title="class in org.apache.sis.referencing.operation.transform">Abstract­Math­Transform</a></code></dd>
<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>Since:</dt>
<dd>1.3</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="../transform/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="transform(double[],int,double[],int,boolean)">
<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/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="ProjectionException.html" title="class in org.apache.sis.referencing.operation.projection">ProjectionException</a></span></div>
<div class="block">Projects the specified (λ,φ) coordinates (units in radians) and stores the result in <code>dst­Pts</code>.
In addition, opportunistically computes the projection derivative if <code>derivate</code> is <code>true</code>.
The results must be multiplied by the denormalization matrix before to get linear distances.
<h4>Accuracy and domain of validity</h4>
Projection errors depend on the difference ∆λ between longitude λ and the central meridian λ₀.
All Universal Transverse Mercator (UTM) projections aim for ∆λ ≤ 3°, but this implementation
can nevertheless handle larger values. Results have been compared with values provided by
<a href="http://doi.org/10.5281/zenodo.32470">Karney, C.F.F. (2009).
Test data for the transverse Mercator projection [Data set]. Zenodo.</a>
On the WGS84 ellipsoid we observed the following errors compared to Karney's data:
<ul>
<li>Errors less than 1 centimetre for ∆λ &lt; 60° at all latitudes.</li>
<li>At latitudes far enough from equator (|φ| ≥ 20°), the domain can be extended up to ∆λ &lt;
(1 − ℯ)⋅90° (≈ 82.63627282416406551° on WGS84) with errors less than 70 centimetres.</li>
</ul>
<h5>Case of 82.6…° &lt; ∆λ ≤ 90°</h5>
Karney (2009) uses an “extended” domain of transverse Mercator projection for ∆λ ≥ (1 − ℯ)⋅90°,
but Apache SIS does not support such extension. Consequently, ∆λ values between (1 − ℯ)⋅90° and 90°
should be considered invalid but are not rejected by Apache SIS. Note that those invalid values are
consistent with the <a href="#inverseTransform(double%5B%5D,int,double%5B%5D,int)">reverse projection</a>
(i.e. applying a projection followed by a reverse projection gives approximately the original values).
<div class="note"><b>Rational:</b>
those coordinates are accepted despite the low accuracy of projection results because they are sometimes
needed for expressing bounding boxes. A bounding box may have corners located in invalid projection area
even if all features inside the box have valid coordinates. For "contains" and "intersects" tests between
envelopes, we do not need accurate coordinates; a monotonic behavior of x = f(λ) can be sufficient.</div>
<h5>Case of ∆λ &gt; 90°</h5>
Longitude values at a distance greater than 90° from the central meridian are rejected.
A <a href="ProjectionException.html" title="class in org.apache.sis.referencing.operation.projection"><code>Projection­Exception</code></a> is thrown in that case. This limit exists because the
Transverse Mercator projection is conceptually a Mercator projection rotated by 90°.
Consequently, <var>x</var> values tend toward infinity for ∆λ close to ±90°</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="NormalizedProjection.html#transform(double%5B%5D,int,double%5B%5D,int,boolean)">transform</a></code>&nbsp;in class&nbsp;<code><a href="NormalizedProjection.html" title="class in org.apache.sis.referencing.operation.projection">Normalized­Projection</a></code></dd>
<dt>Parameters:</dt>
<dd><code>src­Pts</code> - the array containing the source point coordinates, as (<var>longitude</var>, <var>latitude</var>)
angles in <strong>radians</strong>.</dd>
<dd><code>src­Off</code> - the offset of the single coordinate tuple to be converted in the source array.</dd>
<dd><code>dst­Pts</code> - the array into which the converted coordinates is returned (may be the same than <code>src­Pts</code>).
Coordinates will be expressed in a dimensionless unit, as a linear distance on a unit sphere or ellipse.</dd>
<dd><code>dst­Off</code> - the offset of the location of the converted coordinates 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 projection 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="ProjectionException.html" title="class in org.apache.sis.referencing.operation.projection">Projection­Exception</a></code> - if the coordinates cannot be converted.</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="../transform/AbstractMathTransform.html#derivative(org.opengis.geometry.DirectPosition)"><code>Abstract­Math­Transform​.derivative(Direct­Position)</code></a></li>
<li><a href="../transform/AbstractMathTransform.html#transform(org.opengis.geometry.DirectPosition,org.opengis.geometry.DirectPosition)"><code>Abstract­Math­Transform​.transform(Direct­Position, Direct­Position)</code></a></li>
<li><a href="../transform/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="inverseTransform(double[],int,double[],int)">
<h3>inverseTransform</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">inverseTransform</span><wbr><span class="parameters">(double[]&nbsp;srcPts,
int&nbsp;srcOff,
double[]&nbsp;dstPts,
int&nbsp;dstOff)</span>
throws <span class="exceptions"><a href="ProjectionException.html" title="class in org.apache.sis.referencing.operation.projection">ProjectionException</a></span></div>
<div class="block">Transforms the specified (η, ξ) coordinates and stores the result in <code>dst­Pts</code> (angles in radians).</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="NormalizedProjection.html#inverseTransform(double%5B%5D,int,double%5B%5D,int)">inverse­Transform</a></code>&nbsp;in class&nbsp;<code><a href="NormalizedProjection.html" title="class in org.apache.sis.referencing.operation.projection">Normalized­Projection</a></code></dd>
<dt>Parameters:</dt>
<dd><code>src­Pts</code> - the array containing the source point coordinates, as linear distance on a unit sphere or ellipse.</dd>
<dd><code>src­Off</code> - the offset of the point to be converted in the source array.</dd>
<dd><code>dst­Pts</code> - the array into which the converted point coordinates is returned (may be the same than <code>src­Pts</code>).
Coordinates will be (<var>longitude</var>, <var>latitude</var>) angles in <strong>radians</strong>.</dd>
<dd><code>dst­Off</code> - the offset of the location of the converted point that is stored in the destination array.</dd>
<dt>Throws:</dt>
<dd><code><a href="ProjectionException.html" title="class in org.apache.sis.referencing.operation.projection">Projection­Exception</a></code> - if the point cannot be converted.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>