blob: 4257b4e4c6ed62190a9a5d119a825dda8d01d321 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (19) -->
<title>CoordinateOperationFinder (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, class: CoordinateOperationFinder">
<meta name="generator" content="javadoc/ClassWriterImpl">
<meta name="keywords" content="org.apache.sis.referencing.operation.CoordinateOperationFinder class">
<meta name="keywords" content="createOperation()">
<meta name="keywords" content="createOperations()">
<meta name="keywords" content="createOperationStep()">
<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/CoordinateOperationFinder.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>Nested</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><a href="#field-detail">Field</a></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>Nested&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><a href="#field-detail">Field</a>&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</a></div>
<h1 title="Class CoordinateOperationFinder" class="title">Class CoordinateOperationFinder</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">CoordinateOperationFinder</div>
</div>
<section class="class-description" id="class-description">
<hr>
<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">CoordinateOperationFinder</span>
<span class="extends-implements">extends <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></span></div>
<div class="block">Finds a conversion or transformation path from a source CRS to a target CRS.
This class implements two strategies for searching the coordinate operation:
<ol class="verbose">
<li>When <code><a href="#createOperation(org.opengis.referencing.crs.CoordinateReferenceSystem,org.opengis.referencing.crs.CoordinateReferenceSystem)">create­Operation</a>(source­CRS, target­CRS)</code> is invoked,
this class first <a href="../factory/IdentifiedObjectFinder.html" title="class in org.apache.sis.referencing.factory">tries to
find the authority codes</a> for the given source and target CRS. If such codes are found, they are
<a href="../factory/GeodeticAuthorityFactory.html#createFromCoordinateReferenceSystemCodes(java.lang.String,java.lang.String)">submitted to a registry of coordinate operations</a>. If an operation is found, it will be returned.
<div class="note"><b>Note:</b> the above is known as the <cite>late-binding</cite> approach.
The late-binding approach allows the authority to define better suited operations than what
we would get if we were transforming everything from and to a pivot system (e.g. WGS84).
In addition, this approach provides useful information like the coordinate operation
<a href="AbstractCoordinateOperation.html#getScope()">scope</a> and
<a href="AbstractCoordinateOperation.html#getDomainOfValidity()">domain of validity</a>,
<a href="AbstractCoordinateOperation.html#getCoordinateOperationAccuracy()">accuracy</a>.</div>
</li>
<li>If the above authority factory does not know about the specified CRS, then this class tries to
infer the coordinate operation by itself. The CRS type is examined and the work is dispatched
to one or many of the <code>create­Operation­Step(…)</code> protected methods defined in this class.
Those methods use properties associated to the CRS, including <code>BOUNDCRS</code> or <code>TOWGS84</code>
elements found in <cite>Well Known Text</cite> (WKT).
<div class="note"><b>Note:</b> the use of elements like <code>TOWGS84</code> is known as the
<cite>early-binding</cite> approach. The operation found by this approach may be sub-optimal.
The early-binding approach is used only as a fallback when the late-binding approach gave no result.</div>
</li>
</ol>
<h2>Customization</h2>
Instances of this class are created by <a href="DefaultCoordinateOperationFactory.html" title="class in org.apache.sis.referencing.operation"><code>Default­Coordinate­Operation­Factory</code></a>.
The only public method is <a href="#createOperation(org.opengis.referencing.crs.CoordinateReferenceSystem,org.opengis.referencing.crs.CoordinateReferenceSystem)"><code>create­Operation(Coordinate­Reference­System, Coordinate­Reference­System)</code></a>,
which dispatches its work to the <code>create­Operation­Step(…)</code> protected methods.
Developers can override those protected methods if they want to alter the way some operations are created.
<h2>Limitations</h2>
<ul>
<li>Each instance of this class shall be used only once.</li>
<li>This class is not thread-safe. A new instance shall be created for each coordinate operation to infer.</li>
</ul></div>
<dl class="notes">
<dt>Since:</dt>
<dd>0.7</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="DefaultCoordinateOperationFactory.html#createOperation(org.opengis.referencing.crs.CoordinateReferenceSystem,org.opengis.referencing.crs.CoordinateReferenceSystem,org.apache.sis.referencing.operation.CoordinateOperationContext)"><code>Default­Coordinate­Operation­Factory​.create­Operation(Coordinate­Reference­System, Coordinate­Reference­System, Coordinate­Operation­Context)</code></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">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>protected <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/metadata/extent/Extent.html" title="class or interface in org.opengis.metadata.extent" class="external-link">Extent</a></code></div>
<div class="col-second even-row-color"><code><a href="#areaOfInterest" class="member-name-link">area­Of­Interest</a></code></div>
<div class="col-last even-row-color">
<div class="block">The spatiotemporal area of interest, or <code>null</code> if none.</div>
</div>
<div class="col-first odd-row-color"><code>protected double</code></div>
<div class="col-second odd-row-color"><code><a href="#desiredAccuracy" class="member-name-link">desired­Accuracy</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The desired accuracy in metres, or 0 for the best accuracy available.</div>
</div>
<div class="col-first even-row-color"><code>protected final <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperationFactory.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation­Factory</a></code></div>
<div class="col-second even-row-color"><code><a href="#factory" class="member-name-link">factory</a></code></div>
<div class="col-last even-row-color">
<div class="block">The factory to use for creating coordinate operations not found in the registry.</div>
</div>
<div class="col-first odd-row-color"><code>protected final <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperationAuthorityFactory.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation­Authority­Factory</a></code></div>
<div class="col-second odd-row-color"><code><a href="#registry" class="member-name-link">registry</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The factory to use for creating operations as defined by authority, or <code>null</code> if none.</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table 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.CoordinateOperationAuthorityFactory,org.opengis.referencing.operation.CoordinateOperationFactory,org.apache.sis.referencing.operation.CoordinateOperationContext)" class="member-name-link">Coordinate­Operation­Finder</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperationAuthorityFactory.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation­Authority­Factory</a>&nbsp;registry,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperationFactory.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation­Factory</a>&nbsp;factory,
<a href="CoordinateOperationContext.html" title="class in org.apache.sis.referencing.operation">Coordinate­Operation­Context</a>&nbsp;context)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates a new instance for the given factory and context.</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/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#createOperation(org.opengis.referencing.crs.CoordinateReferenceSystem,org.opengis.referencing.crs.CoordinateReferenceSystem)" class="member-name-link">create­Operation</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Coordinate­Reference­System</a>&nbsp;source­CRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Coordinate­Reference­System</a>&nbsp;target­CRS)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Infers an operation for conversion or transformation between two coordinate reference systems.</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/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation</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="#createOperations(org.opengis.referencing.crs.CoordinateReferenceSystem,org.opengis.referencing.crs.CoordinateReferenceSystem)" class="member-name-link">create­Operations</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Coordinate­Reference­System</a>&nbsp;source­CRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Coordinate­Reference­System</a>&nbsp;target­CRS)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Infers operations for conversions or transformations between two coordinate reference systems.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#createOperationStep(org.opengis.referencing.crs.CoordinateReferenceSystem,java.util.List,org.opengis.referencing.crs.CoordinateReferenceSystem,java.util.List)" class="member-name-link">create­Operation­Step</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Coordinate­Reference­System</a>&nbsp;source­CRS,
<a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;? extends <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/SingleCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Single­CRS</a>&gt;&nbsp;source­Components,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Coordinate­Reference­System</a>&nbsp;target­CRS,
<a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;? extends <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/SingleCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Single­CRS</a>&gt;&nbsp;target­Components)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Creates an operation between at least one <code>Compound­CRS</code> (usually the source) and an arbitrary CRS.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation</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="#createOperationStep(org.opengis.referencing.crs.GeneralDerivedCRS,org.opengis.referencing.crs.GeneralDerivedCRS)" class="member-name-link">create­Operation­Step</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">General­Derived­CRS</a>&nbsp;source­CRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">General­Derived­CRS</a>&nbsp;target­CRS)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Creates an operation between two derived coordinate reference systems.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#createOperationStep(org.opengis.referencing.crs.GeneralDerivedCRS,org.opengis.referencing.crs.SingleCRS)" class="member-name-link">create­Operation­Step</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">General­Derived­CRS</a>&nbsp;source­CRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/SingleCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Single­CRS</a>&nbsp;target­CRS)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Creates an operation from a derived CRS to an arbitrary single coordinate reference system.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation</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="#createOperationStep(org.opengis.referencing.crs.GeodeticCRS,org.opengis.referencing.crs.GeodeticCRS)" class="member-name-link">create­Operation­Step</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeodeticCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Geodetic­CRS</a>&nbsp;source­CRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeodeticCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Geodetic­CRS</a>&nbsp;target­CRS)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Creates an operation between two geodetic (geographic or geocentric) coordinate reference systems.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#createOperationStep(org.opengis.referencing.crs.GeodeticCRS,org.opengis.referencing.crs.VerticalCRS)" class="member-name-link">create­Operation­Step</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeodeticCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Geodetic­CRS</a>&nbsp;source­CRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/VerticalCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Vertical­CRS</a>&nbsp;target­CRS)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Creates an operation between a geodetic and a vertical coordinate reference systems.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation</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="#createOperationStep(org.opengis.referencing.crs.SingleCRS,org.opengis.referencing.crs.GeneralDerivedCRS)" class="member-name-link">create­Operation­Step</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/SingleCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Single­CRS</a>&nbsp;source­CRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">General­Derived­CRS</a>&nbsp;target­CRS)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Creates operations from an arbitrary single CRS to a derived coordinate reference system.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#createOperationStep(org.opengis.referencing.crs.TemporalCRS,org.opengis.referencing.crs.TemporalCRS)" class="member-name-link">create­Operation­Step</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/TemporalCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Temporal­CRS</a>&nbsp;source­CRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/TemporalCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Temporal­CRS</a>&nbsp;target­CRS)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Creates an operation between two temporal coordinate reference systems.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Coordinate­Operation</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="#createOperationStep(org.opengis.referencing.crs.VerticalCRS,org.opengis.referencing.crs.VerticalCRS)" class="member-name-link">create­Operation­Step</a><wbr>(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/VerticalCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Vertical­CRS</a>&nbsp;source­CRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/VerticalCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">Vertical­CRS</a>&nbsp;target­CRS)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Creates an operation between two vertical coordinate reference systems.</div>
</div>
</div>
</div>
</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#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</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#hashCode()" title="class or interface in java.lang" class="external-link">hash­Code</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#toString()" title="class or interface in java.lang" class="external-link">to­String</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>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="registry">
<h3>registry</h3>
<div class="member-signature"><span class="modifiers">protected final</span>&nbsp;<span class="return-type"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperationAuthorityFactory.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperationAuthorityFactory</a></span>&nbsp;<span class="element-name">registry</span></div>
<div class="block">The factory to use for creating operations as defined by authority, or <code>null</code> if none.
This is the factory used by the <cite>late-binding</cite> approach.</div>
</section>
</li>
<li>
<section class="detail" id="factory">
<h3>factory</h3>
<div class="member-signature"><span class="modifiers">protected final</span>&nbsp;<span class="return-type"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperationFactory.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperationFactory</a></span>&nbsp;<span class="element-name">factory</span></div>
<div class="block">The factory to use for creating coordinate operations not found in the registry.
This is the factory used by the <cite>early-binding</cite> approach.</div>
</section>
</li>
<li>
<section class="detail" id="areaOfInterest">
<h3>areaOfInterest</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/metadata/extent/Extent.html" title="class or interface in org.opengis.metadata.extent" class="external-link">Extent</a></span>&nbsp;<span class="element-name">areaOfInterest</span></div>
<div class="block">The spatiotemporal area of interest, or <code>null</code> if none.
When a new <code>Coordinate­Operation­Finder</code> instance is created with a non-null
<a href="CoordinateOperationContext.html" title="class in org.apache.sis.referencing.operation"><code>Coordinate­Operation­Context</code></a>, the context is used for initializing this value.
After initialization, this field may be updated as <code>Coordinate­Operation­Finder</code>
progresses in its search for a coordinate operation.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="CoordinateOperationContext.html#getAreaOfInterest()"><code>Coordinate­Operation­Context​.get­Area­Of­Interest()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="desiredAccuracy">
<h3>desiredAccuracy</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type">double</span>&nbsp;<span class="element-name">desiredAccuracy</span></div>
<div class="block">The desired accuracy in metres, or 0 for the best accuracy available.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="CoordinateOperationContext.html#getDesiredAccuracy()"><code>Coordinate­Operation­Context​.get­Desired­Accuracy()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= 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.CoordinateOperationAuthorityFactory,org.opengis.referencing.operation.CoordinateOperationFactory,org.apache.sis.referencing.operation.CoordinateOperationContext)">
<h3>CoordinateOperationFinder</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">CoordinateOperationFinder</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperationAuthorityFactory.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperationAuthorityFactory</a>&nbsp;registry,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperationFactory.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperationFactory</a>&nbsp;factory,
<a href="CoordinateOperationContext.html" title="class in org.apache.sis.referencing.operation">CoordinateOperationContext</a>&nbsp;context)</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">Creates a new instance for the given factory and context.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>registry</code> - the factory to use for creating operations as defined by authority, or <code>null</code> if none.</dd>
<dd><code>factory</code> - the factory to use for creating operations not found in the registry.</dd>
<dd><code>context</code> - the area of interest and desired accuracy, or <code>null</code> if none.</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 initializing this <code>Coordinate­Operation­Finder</code>.</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="DefaultCoordinateOperationFactory.html#createOperationFinder(org.opengis.referencing.operation.CoordinateOperationAuthorityFactory,org.apache.sis.referencing.operation.CoordinateOperationContext)"><code>Default­Coordinate­Operation­Factory​.create­Operation­Finder(Coordinate­Operation­Authority­Factory, Coordinate­Operation­Context)</code></a></li>
</ul>
</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="createOperation(org.opengis.referencing.crs.CoordinateReferenceSystem,org.opengis.referencing.crs.CoordinateReferenceSystem)">
<h3>createOperation</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/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperation</a></span>&nbsp;<span class="element-name">createOperation</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">CoordinateReferenceSystem</a>&nbsp;sourceCRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">CoordinateReferenceSystem</a>&nbsp;targetCRS)</span>
throws <span class="exceptions"><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/OperationNotFoundException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">OperationNotFoundException</a>,
<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">Infers an operation for conversion or transformation between two coordinate reference systems.
If a non-null authority factory – the <cite>registry</cite> – has been specified at construction time,
then this method will first query that factory (<cite>late-binding</cite> approach – see class javadoc).
If no operation has been found in the registry or if no registry has been specified to the constructor,
this method inspects the given CRS and delegates the work to one or many <code>create­Operation­Step(…)</code>
methods (<cite>early-binding</cite> approach).
<p>The default implementation invokes <code><a href="#createOperations(org.opengis.referencing.crs.CoordinateReferenceSystem,org.opengis.referencing.crs.CoordinateReferenceSystem)">create­Operations</a>(source­CRS,
target­CRS)</code>, then returns the first operation in the returned list or throws an exception if the
list is empty.</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>source­CRS</code> - input coordinate reference system.</dd>
<dd><code>target­CRS</code> - output coordinate reference system.</dd>
<dt>Returns:</dt>
<dd>a coordinate operation from <code>source­CRS</code> to <code>target­CRS</code>.</dd>
<dt>Throws:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/OperationNotFoundException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Operation­Not­Found­Exception</a></code> - if no operation path was found from <code>source­CRS</code> to <code>target­CRS</code>.</dd>
<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 the operation creation failed for some other reason.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="createOperations(org.opengis.referencing.crs.CoordinateReferenceSystem,org.opengis.referencing.crs.CoordinateReferenceSystem)">
<h3>createOperations</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/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperation</a>&gt;</span>&nbsp;<span class="element-name">createOperations</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">CoordinateReferenceSystem</a>&nbsp;sourceCRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">CoordinateReferenceSystem</a>&nbsp;targetCRS)</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">Infers operations for conversions or transformations between two coordinate reference systems.
If a non-null authority factory – the <cite>registry</cite> – has been specified at construction time,
then this method will first query that factory (<cite>late-binding</cite> approach – see class javadoc).
If no operation has been found in the registry or if no registry has been specified to the constructor,
this method inspects the given CRS and delegates the work to one or many <code>create­Operation­Step(…)</code>
methods (<cite>early-binding</cite> approach).
<p>At first, this method is invoked with the <code>source­CRS</code> and <code>target­CRS</code> arguments given to the
<a href="DefaultCoordinateOperationFactory.html#createOperation(org.opengis.referencing.crs.CoordinateReferenceSystem,org.opengis.referencing.crs.CoordinateReferenceSystem,org.apache.sis.referencing.operation.CoordinateOperationContext)"><code>Coordinate­Operation­Factory​.create­Operation(…)</code></a> method. But then, this method may
be invoked recursively by some <code>create­Operation­Step(…)</code> methods with different source or target CRS,
for example in order to process the <a href="../crs/DefaultProjectedCRS.html#getBaseCRS()">base geographic CRS</a> of a projected CRS.</p>
<p>Coordinate operations are returned in preference order: best operations for the area of interest should be first.
The returned list is modifiable: callers can add, remove or set elements without impact on this
<code>Coordinate­Operation­Finder</code> instance.</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>source­CRS</code> - input coordinate reference system.</dd>
<dd><code>target­CRS</code> - output coordinate reference system.</dd>
<dt>Returns:</dt>
<dd>coordinate operations from <code>source­CRS</code> to <code>target­CRS</code>.</dd>
<dt>Throws:</dt>
<dd><code><a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/OperationNotFoundException.html" title="class or interface in org.opengis.referencing.operation" class="external-link">Operation­Not­Found­Exception</a></code> - if no operation path was found from <code>source­CRS</code> to <code>target­CRS</code>.</dd>
<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 the operation creation failed for some other reason.</dd>
<dt>Since:</dt>
<dd>1.0</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="createOperationStep(org.opengis.referencing.crs.SingleCRS,org.opengis.referencing.crs.GeneralDerivedCRS)">
<h3>createOperationStep</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperation</a>&gt;</span>&nbsp;<span class="element-name">createOperationStep</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/SingleCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">SingleCRS</a>&nbsp;sourceCRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">GeneralDerivedCRS</a>&nbsp;targetCRS)</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">Creates operations from an arbitrary single CRS to a derived coordinate reference system.
Conversions from <code>Geographic­CRS</code> to <code>Projected­CRS</code> are also handled by this method,
since projected CRS are a special kind of <code>General­Derived­CRS</code>.
<p>The default implementation constructs the following operation chain:</p>
<blockquote><code>source­CRS → <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html#getBaseCRS()" title="class or interface in org.opengis.referencing.crs" class="external-link">base­CRS</a> → target­CRS</code></blockquote>
where the conversion from <code>base­CRS</code> to <code>target­CRS</code> is obtained from
<code>target­CRS.<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html#getConversionFromBase()" title="class or interface in org.opengis.referencing.crs" class="external-link">get­Conversion­From­Base()</a></code>.
<p>This method returns only <em>one</em> step for a chain of concatenated operations (to be built by the caller).
But a list is returned because the same step may be implemented by different operation methods. Only one element
in the returned list should be selected (usually the first one).</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>source­CRS</code> - input coordinate reference system.</dd>
<dd><code>target­CRS</code> - output coordinate reference system.</dd>
<dt>Returns:</dt>
<dd>coordinate operations from <code>source­CRS</code> to <code>target­CRS</code>.</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 the operation cannot be constructed.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="createOperationStep(org.opengis.referencing.crs.GeneralDerivedCRS,org.opengis.referencing.crs.SingleCRS)">
<h3>createOperationStep</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperation</a>&gt;</span>&nbsp;<span class="element-name">createOperationStep</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">GeneralDerivedCRS</a>&nbsp;sourceCRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/SingleCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">SingleCRS</a>&nbsp;targetCRS)</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">Creates an operation from a derived CRS to an arbitrary single coordinate reference system.
Conversions from <code>Projected­CRS</code> to <code>Geographic­CRS</code> are also handled by this method,
since projected CRS are a special kind of <code>General­Derived­CRS</code>.
<p>The default implementation constructs the following operation chain:</p>
<blockquote><code>source­CRS → <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html#getBaseCRS()" title="class or interface in org.opengis.referencing.crs" class="external-link">base­CRS</a> → target­CRS</code></blockquote>
where the conversion from <code>source­CRS</code> to <code>base­CRS</code> is obtained from the inverse of
<code>source­CRS.<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html#getConversionFromBase()" title="class or interface in org.opengis.referencing.crs" class="external-link">get­Conversion­From­Base()</a></code>.
<p>This method returns only <em>one</em> step for a chain of concatenated operations (to be built by the caller).
But a list is returned because the same step may be implemented by different operation methods. Only one element
in the returned list should be selected (usually the first one).</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>source­CRS</code> - input coordinate reference system.</dd>
<dd><code>target­CRS</code> - output coordinate reference system.</dd>
<dt>Returns:</dt>
<dd>a coordinate operation from <code>source­CRS</code> to <code>target­CRS</code>.</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 the operation cannot be constructed.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="createOperationStep(org.opengis.referencing.crs.GeneralDerivedCRS,org.opengis.referencing.crs.GeneralDerivedCRS)">
<h3>createOperationStep</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperation</a>&gt;</span>&nbsp;<span class="element-name">createOperationStep</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">GeneralDerivedCRS</a>&nbsp;sourceCRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeneralDerivedCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">GeneralDerivedCRS</a>&nbsp;targetCRS)</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">Creates an operation between two derived coordinate reference systems.
The default implementation performs three steps:
<ol>
<li>Convert from <code>source­CRS</code> to its base CRS.</li>
<li>Convert the source base CRS to target base CRS.</li>
<li>Convert from the target base CRS to the <code>target­CRS</code>.</li>
</ol>
<p>This method returns only <em>one</em> step for a chain of concatenated operations (to be built by the caller).
But a list is returned because the same step may be implemented by different operation methods. Only one element
in the returned list should be selected (usually the first one).</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>source­CRS</code> - input coordinate reference system.</dd>
<dd><code>target­CRS</code> - output coordinate reference system.</dd>
<dt>Returns:</dt>
<dd>a coordinate operation from <code>source­CRS</code> to <code>target­CRS</code>.</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 the operation cannot be constructed.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="createOperationStep(org.opengis.referencing.crs.GeodeticCRS,org.opengis.referencing.crs.GeodeticCRS)">
<h3>createOperationStep</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperation</a>&gt;</span>&nbsp;<span class="element-name">createOperationStep</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeodeticCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">GeodeticCRS</a>&nbsp;sourceCRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeodeticCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">GeodeticCRS</a>&nbsp;targetCRS)</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">Creates an operation between two geodetic (geographic or geocentric) coordinate reference systems.
The default implementation can:
<ul>
<li>adjust axis order and orientation, for example converting from (<cite>North</cite>, <cite>West</cite>)
axes to (<cite>East</cite>, <cite>North</cite>) axes,</li>
<li>apply units conversion if needed,</li>
<li>perform longitude rotation if needed,</li>
<li>perform datum shift if <a href="../datum/BursaWolfParameters.html" title="class in org.apache.sis.referencing.datum">Bursa-Wolf parameters</a> are available
for the area of interest.</li>
</ul>
<p>This method returns only <em>one</em> step for a chain of concatenated operations (to be built by the caller).
But a list is returned because the same step may be implemented by different operation methods. Only one element
in the returned list should be selected (usually the first one).</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>source­CRS</code> - input coordinate reference system.</dd>
<dd><code>target­CRS</code> - output coordinate reference system.</dd>
<dt>Returns:</dt>
<dd>a coordinate operation from <code>source­CRS</code> to <code>target­CRS</code>.</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 the operation cannot be constructed.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="createOperationStep(org.opengis.referencing.crs.GeodeticCRS,org.opengis.referencing.crs.VerticalCRS)">
<h3>createOperationStep</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperation</a>&gt;</span>&nbsp;<span class="element-name">createOperationStep</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeodeticCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">GeodeticCRS</a>&nbsp;sourceCRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/VerticalCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">VerticalCRS</a>&nbsp;targetCRS)</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">Creates an operation between a geodetic and a vertical coordinate reference systems.
The height returned by this method will usually be part of a
<a href="DefaultPassThroughOperation.html" title="class in org.apache.sis.referencing.operation">pass-through operation</a>.
<p>This method returns only <em>one</em> step for a chain of concatenated operations (to be built by the caller).
But a list is returned because the same step may be implemented by different operation methods. Only one element
in the returned list should be selected (usually the first one).</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>source­CRS</code> - input coordinate reference system.</dd>
<dd><code>target­CRS</code> - output coordinate reference system.</dd>
<dt>Returns:</dt>
<dd>a coordinate operation from <code>source­CRS</code> to <code>target­CRS</code>.</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 the operation cannot be constructed.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="createOperationStep(org.opengis.referencing.crs.VerticalCRS,org.opengis.referencing.crs.VerticalCRS)">
<h3>createOperationStep</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperation</a>&gt;</span>&nbsp;<span class="element-name">createOperationStep</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/VerticalCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">VerticalCRS</a>&nbsp;sourceCRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/VerticalCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">VerticalCRS</a>&nbsp;targetCRS)</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">Creates an operation between two vertical coordinate reference systems.
The default implementation checks if both CRS use the same datum, then
adjusts for axis direction and units.
<p>This method returns only <em>one</em> step for a chain of concatenated operations (to be built by the caller).
But a list is returned because the same step may be implemented by different operation methods. Only one element
in the returned list should be selected (usually the first one).</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>source­CRS</code> - input coordinate reference system.</dd>
<dd><code>target­CRS</code> - output coordinate reference system.</dd>
<dt>Returns:</dt>
<dd>a coordinate operation from <code>source­CRS</code> to <code>target­CRS</code>.</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 the operation cannot be constructed.</dd>
<dt>TODO:</dt>
<dd>Needs to implement vertical datum shift.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="createOperationStep(org.opengis.referencing.crs.TemporalCRS,org.opengis.referencing.crs.TemporalCRS)">
<h3>createOperationStep</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperation</a>&gt;</span>&nbsp;<span class="element-name">createOperationStep</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/TemporalCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">TemporalCRS</a>&nbsp;sourceCRS,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/TemporalCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">TemporalCRS</a>&nbsp;targetCRS)</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">Creates an operation between two temporal coordinate reference systems.
The default implementation checks if both CRS use the same datum, then
adjusts for axis direction, units and epoch.
<p>This method returns only <em>one</em> step for a chain of concatenated operations (to be built by the caller).
But a list is returned because the same step may be implemented by different operation methods. Only one element
in the returned list should be selected (usually the first one).</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>source­CRS</code> - input coordinate reference system.</dd>
<dd><code>target­CRS</code> - output coordinate reference system.</dd>
<dt>Returns:</dt>
<dd>a coordinate operation from <code>source­CRS</code> to <code>target­CRS</code>.</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 the operation cannot be constructed.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="createOperationStep(org.opengis.referencing.crs.CoordinateReferenceSystem,java.util.List,org.opengis.referencing.crs.CoordinateReferenceSystem,java.util.List)">
<h3>createOperationStep</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/operation/CoordinateOperation.html" title="class or interface in org.opengis.referencing.operation" class="external-link">CoordinateOperation</a>&gt;</span>&nbsp;<span class="element-name">createOperationStep</span><wbr><span class="parameters">(<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">CoordinateReferenceSystem</a>&nbsp;sourceCRS,
<a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;? extends <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/SingleCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">SingleCRS</a>&gt;&nbsp;sourceComponents,
<a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/CoordinateReferenceSystem.html" title="class or interface in org.opengis.referencing.crs" class="external-link">CoordinateReferenceSystem</a>&nbsp;targetCRS,
<a href="https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;? extends <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/SingleCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link">SingleCRS</a>&gt;&nbsp;targetComponents)</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">Creates an operation between at least one <code>Compound­CRS</code> (usually the source) and an arbitrary CRS.
The default implementation tries to invoke the <a href="#createOperation(org.opengis.referencing.crs.CoordinateReferenceSystem,org.opengis.referencing.crs.CoordinateReferenceSystem)"><code>create­Operation(…)</code></a> method with
various combinations of source and target components. A preference is given for components of the same
type (e.g. source <a href="http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/crs/GeodeticCRS.html" title="class or interface in org.opengis.referencing.crs" class="external-link"><code>Geodetic­CRS</code></a> with target <code>Geodetic­CRS</code>, <i>etc.</i>).
<p>This method returns only <em>one</em> step for a chain of concatenated operations (to be built by the caller).
But a list is returned because the same step may be implemented by different operation methods. Only one element
in the returned list should be selected (usually the first one).</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>source­CRS</code> - input coordinate reference system.</dd>
<dd><code>source­Components</code> - components of the source CRS.</dd>
<dd><code>target­CRS</code> - output coordinate reference system.</dd>
<dd><code>target­Components</code> - components of the target CRS.</dd>
<dt>Returns:</dt>
<dd>a coordinate operation from <code>source­CRS</code> to <code>target­CRS</code>.</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 the operation cannot be constructed.</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>