Class AbstractCoordinateOperation

All Implemented Interfaces:
Serializable, Formattable, Deprecable, LenientComparable, org.opengis.referencing.IdentifiedObject, org.opengis.referencing.operation.CoordinateOperation
Direct Known Subclasses:
AbstractSingleOperation, DefaultConcatenatedOperation, DefaultPassThroughOperation, DeferredCoordinateOperation

public class AbstractCoordinateOperation extends AbstractIdentifiedObject implements org.opengis.referencing.operation.CoordinateOperation
Describes the operation for transforming coordinates in the source CRS to coordinates in the target CRS. Coordinate operations contain a math transform, which does the actual work of transforming coordinates, together with the following information:

Instantiation

This class is conceptually abstract, even if it is technically possible to instantiate it. Typical applications should create instances of the most specific subclass prefixed by Default instead. An exception to this rule may occur when it is not possible to identify the exact operation type.

Immutability and thread safety

This base class is immutable and thus thread-safe if the property values (not necessarily the map itself) given to the constructor are also immutable. Most SIS subclasses and related classes are immutable under similar conditions. This means that unless otherwise noted in the javadoc, CoordinateOperation instances created using only SIS factories and static constants can be shared by many objects and passed between threads without synchronization.
Since:
0.6
Version:
1.2
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    (package private) Collection<org.opengis.metadata.quality.PositionalAccuracy>
    Estimate(s) of the impact of this operation on point accuracy, or null if none.
    (package private) org.opengis.metadata.extent.Extent
    Area in which this operation is valid, or null if not available.
    private org.opengis.referencing.crs.CoordinateReferenceSystem
    The CRS which is neither the source CRS or target CRS but still required for performing the operation.
    private String
    Version of the coordinate transformation (i.e., instantiation due to the stochastic nature of the parameters).
    private org.opengis.util.InternationalString
    Description of domain of usage, or limitations of usage, for which this operation is valid.
    private static final long
    Serial number for inter-operability with different versions.
    (package private) org.opengis.referencing.crs.CoordinateReferenceSystem
    The source CRS, or null if not available.
    (package private) org.opengis.referencing.crs.CoordinateReferenceSystem
    The target CRS, or null if not available.
    (package private) org.opengis.referencing.operation.MathTransform
    Transform from positions in the source coordinate reference system to positions in the target coordinate reference system.
    private Set<Integer>
    Indices of target dimensions where "wrap around" may happen as a result of this coordinate operation.

    Fields inherited from class org.apache.sis.referencing.AbstractIdentifiedObject

    DEPRECATED_KEY, LOCALE_KEY

    Fields inherited from interface org.opengis.referencing.operation.CoordinateOperation

    COORDINATE_OPERATION_ACCURACY_KEY, DOMAIN_OF_VALIDITY_KEY, OPERATION_VERSION_KEY, SCOPE_KEY

    Fields inherited from interface org.opengis.referencing.IdentifiedObject

    ALIAS_KEY, IDENTIFIERS_KEY, NAME_KEY, REMARKS_KEY
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    (package private)
    Creates a new object in which every attributes are set to a null value.
    (package private)
    Creates a new coordinate operation initialized from the given properties.
     
    AbstractCoordinateOperation(Map<String,?> properties, org.opengis.referencing.crs.CoordinateReferenceSystem sourceCRS, org.opengis.referencing.crs.CoordinateReferenceSystem targetCRS, org.opengis.referencing.crs.CoordinateReferenceSystem interpolationCRS, org.opengis.referencing.operation.MathTransform transform)
    Creates a coordinate operation from the given properties.
    protected
    AbstractCoordinateOperation(org.opengis.referencing.operation.CoordinateOperation operation)
    Creates a new coordinate operation with the same values than the specified one.
  • Method Summary

    Modifier and Type
    Method
    Description
    (package private) void
    afterUnmarshal(Unmarshaller unmarshaller, Object parent)
    Invoked by JAXB after unmarshalling.
    private static void
    append(Formatter formatter, org.opengis.referencing.crs.CoordinateReferenceSystem crs, String type)
    Appends the given CRS (if non-null) wrapped in an element of the given name.
    castOrCopy(org.opengis.referencing.operation.CoordinateOperation object)
    Returns a SIS coordinate operation implementation with the values of the given arbitrary implementation.
    (package private) final void
    checkDimensions(Map<String,?> properties)
    Ensures that sourceCRS, targetCRS and interpolationCRS dimensions are consistent with transform input and output dimensions.
    protected long
    Invoked by hashCode() for computing the hash code when first needed.
    (package private) final void
    Computes the wrapAroundChanges field after we verified that the coordinate operation is valid.
    boolean
    equals(Object object, ComparisonMode mode)
    Compares this coordinate operation with the specified object for equality.
    protected String
    formatTo(Formatter formatter)
    Formats this coordinate operation in Well Known Text (WKT) version 2 format.
    private org.opengis.metadata.quality.PositionalAccuracy[]
    Invoked by JAXB only at marshalling time.
    Collection<org.opengis.metadata.quality.PositionalAccuracy>
    Returns an estimation of the impact of this operation on point accuracy.
    org.opengis.metadata.extent.Extent
    Returns the area or region or timeframe in which this coordinate operation is valid.
    Class<? extends org.opengis.referencing.operation.CoordinateOperation>
    Returns the GeoAPI interface implemented by this class.
    org.opengis.referencing.crs.CoordinateReferenceSystem
    Returns the CRS which is neither the source CRS or target CRS but still required for performing the operation.
    (package private) static org.opengis.referencing.crs.CoordinateReferenceSystem
    getInterpolationCRS(org.opengis.referencing.operation.CoordinateOperation operation)
    Returns the interpolation CRS of the given coordinate operation, or null if none.
    double
    Returns an estimation of positional accuracy in metres, or NaN if unknown.
    org.opengis.referencing.operation.MathTransform
    Returns the object for transforming coordinates in the source CRS to coordinates in the target CRS.
    (package private) org.opengis.referencing.operation.OperationMethod
    Returns the operation method.
    Returns the version of the coordinate operation.
    (package private) org.opengis.parameter.ParameterDescriptorGroup
    Returns the parameter descriptor.
    (package private) static org.opengis.parameter.ParameterDescriptorGroup
    getParameterDescriptors(org.opengis.referencing.operation.MathTransform transform)
    Returns the parameter descriptors for the given transform, or null if unknown.
    (package private) org.opengis.parameter.ParameterValueGroup
    Returns the parameter values.
    org.opengis.util.InternationalString
    Returns a description of domain of usage, or limitations of usage, for which this operation is valid.
    private org.opengis.referencing.crs.CoordinateReferenceSystem
    Invoked by JAXB for getting the source CRS to marshal.
    org.opengis.referencing.crs.CoordinateReferenceSystem
    Returns the source CRS, or null if unspecified.
    private org.opengis.referencing.crs.CoordinateReferenceSystem
    Invoked by JAXB for getting the target CRS to marshal.
    org.opengis.referencing.crs.CoordinateReferenceSystem
    Returns the target CRS, or null if unspecified.
    Returns the indices of target dimensions where "wrap around" may happen as a result of this coordinate operation.
    boolean
    Returns true if this coordinate operation is for the definition of a derived or projected CRS.
    private void
    Computes transient fields after deserialization.
    private void
    setAccuracy(org.opengis.metadata.quality.PositionalAccuracy[] values)
    Invoked by JAXB only at unmarshalling time.
    private void
    setDomainOfValidity(org.opengis.metadata.extent.Extent value)
    Invoked by JAXB only at unmarshalling time.
    private void
    Invoked by JAXB only at unmarshalling time.
    private void
    setScope(org.opengis.util.InternationalString value)
    Invoked by JAXB only at unmarshalling time.
    private void
    setSource(org.opengis.referencing.crs.CoordinateReferenceSystem crs)
    Invoked by JAXB at marshalling time for setting the source CRS.
    private void
    setTarget(org.opengis.referencing.crs.CoordinateReferenceSystem crs)
    Invoked by JAXB at unmarshalling time for setting the target CRS.

    Methods inherited from class org.apache.sis.io.wkt.FormattableObject

    print, toString, toString, toWKT

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.opengis.referencing.IdentifiedObject

    getAlias, getIdentifiers, getName, getRemarks, toWKT
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      Serial number for inter-operability with different versions.
      See Also:
    • sourceCRS

      org.opengis.referencing.crs.CoordinateReferenceSystem sourceCRS
      The source CRS, or null if not available.

      Consider this field as final! This field is non-final only for the convenience of constructors and for initialization at XML unmarshalling time by setSource(CoordinateReferenceSystem).

      See Also:
    • targetCRS

      org.opengis.referencing.crs.CoordinateReferenceSystem targetCRS
      The target CRS, or null if not available.

      Consider this field as final! This field is non-final only for the convenience of constructors and for initialization at XML unmarshalling time by setTarget(CoordinateReferenceSystem).

      See Also:
    • interpolationCRS

      private org.opengis.referencing.crs.CoordinateReferenceSystem interpolationCRS
      The CRS which is neither the source CRS or target CRS but still required for performing the operation.

      Consider this field as final! This field is non-final only for the convenience of constructors.

      See Also:
    • operationVersion

      private String operationVersion
      Version of the coordinate transformation (i.e., instantiation due to the stochastic nature of the parameters).

      Consider this field as final! This field is modified only at unmarshalling time by setOperationVersion(String).

      See Also:
    • coordinateOperationAccuracy

      Collection<org.opengis.metadata.quality.PositionalAccuracy> coordinateOperationAccuracy
      Estimate(s) of the impact of this operation on point accuracy, or null if none.

      Consider this field as final! This field is non-final only for the convenience of constructors and for initialization at XML unmarshalling time by setAccuracy(PositionalAccuracy[]).

      See Also:
    • domainOfValidity

      org.opengis.metadata.extent.Extent domainOfValidity
      Area in which this operation is valid, or null if not available.

      Consider this field as final! This field is non-final only for the convenience of constructors and for initialization at XML unmarshalling time by setDomainOfValidity(Extent).

      See Also:
    • scope

      private org.opengis.util.InternationalString scope
      Description of domain of usage, or limitations of usage, for which this operation is valid.

      Consider this field as final! This field is modified only at unmarshalling time by setScope(InternationalString).

      See Also:
    • transform

      org.opengis.referencing.operation.MathTransform transform
      Transform from positions in the source coordinate reference system to positions in the target coordinate reference system.

      Consider this field as final! This field is non-final only for the convenience of constructors and for initialization at XML unmarshalling time by AbstractSingleOperation.afterUnmarshal(Unmarshaller, Object).

    • wrapAroundChanges

      private transient Set<Integer> wrapAroundChanges
      Indices of target dimensions where "wrap around" may happen as a result of this coordinate operation. This is usually the longitude axis when the source CRS uses the [-180 … +180]° range and the target CRS uses the [0 … 360]° range, or the converse. If there is no change, then this is an empty set.
      See Also:
  • Constructor Details

    • AbstractCoordinateOperation

      AbstractCoordinateOperation(Map<String,?> properties)
      Creates a new coordinate operation initialized from the given properties. It is caller's responsibility to:
    • AbstractCoordinateOperation

      public AbstractCoordinateOperation(Map<String,?> properties, org.opengis.referencing.crs.CoordinateReferenceSystem sourceCRS, org.opengis.referencing.crs.CoordinateReferenceSystem targetCRS, org.opengis.referencing.crs.CoordinateReferenceSystem interpolationCRS, org.opengis.referencing.operation.MathTransform transform)
      Creates a coordinate operation from the given properties. The properties given in argument follow the same rules than for the super-class constructor. Additionally, the following properties are understood by this constructor:
      Recognized properties (non exhaustive list)
      Property name Value type Returned by
      "operationVersion" String getOperationVersion()
      "coordinateOperationAccuracy" PositionalAccuracy (optionally as array) getCoordinateOperationAccuracy()
      "domainOfValidity" Extent getDomainOfValidity()
      "scope" InternationalString or String getScope()
      Defined in parent class (reminder)
      "name" Identifier or String AbstractIdentifiedObject.getName()
      "alias" GenericName or CharSequence (optionally as array) AbstractIdentifiedObject.getAlias()
      "identifiers" Identifier (optionally as array) AbstractIdentifiedObject.getIdentifiers()
      "remarks" InternationalString or String AbstractIdentifiedObject.getRemarks()

      Constraints

      All arguments except properties can be null. If non-null, the dimension of CRS arguments shall be related to the transform argument as below:
      • Dimension of sourceCRS shall be equal to the transform source dimension minus the dimension of the interpolationCRS (if any).
      • Dimension of targetCRS shall be equal to the transform target dimension, minus the dimension of the interpolationCRS (if any).
      If the interpolationCRS is non-null, then the given transform shall expect input coordinates in the following order:
      1. Coordinates of the interpolation CRS. Example: (x,y) in a vertical transform.
      2. Coordinates of the source CRS. Example: (z) in a vertical transform.
      The math transform shall let the interpolation coordinates pass through the operation.
      Parameters:
      properties - the properties to be given to the identified object.
      sourceCRS - the source CRS, or null if unspecified.
      targetCRS - the target CRS, or null if unspecified.
      interpolationCRS - the CRS of additional coordinates needed for the operation, or null if none.
      transform - transform from positions in the source CRS to positions in the target CRS, or null if unspecified.
    • AbstractCoordinateOperation

      protected AbstractCoordinateOperation(org.opengis.referencing.operation.CoordinateOperation operation)
      Creates a new coordinate operation with the same values than the specified one. This copy constructor provides a way to convert an arbitrary implementation into a SIS one or a user-defined one (as a subclass), usually in order to leverage some implementation-specific API.

      This constructor performs a shallow copy, i.e. the properties are not cloned.

      Parameters:
      operation - the coordinate operation to copy.
      See Also:
    • AbstractCoordinateOperation

      AbstractCoordinateOperation()
      Creates a new object in which every attributes are set to a null value. This is not a valid object. This constructor is strictly reserved to JAXB, which will assign values to the fields using reflection.
  • Method Details

    • checkDimensions

      final void checkDimensions(Map<String,?> properties)
      Ensures that sourceCRS, targetCRS and interpolationCRS dimensions are consistent with transform input and output dimensions.
    • computeTransientFields

      final void computeTransientFields()
      Computes the wrapAroundChanges field after we verified that the coordinate operation is valid.
    • readObject

      private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
      Computes transient fields after deserialization.
      Parameters:
      in - the input stream from which to deserialize a coordinate operation.
      Throws:
      IOException - if an I/O error occurred while reading or if the stream contains invalid data.
      ClassNotFoundException - if the class serialized on the stream is not on the classpath.
    • castOrCopy

      public static AbstractCoordinateOperation castOrCopy(org.opengis.referencing.operation.CoordinateOperation object)
      Returns a SIS coordinate operation implementation with the values of the given arbitrary implementation. This method performs the first applicable action in the following choices:
      • If the given object is null, then this method returns null.
      • Otherwise if the given object is an instance of Transformation, Conversion, Projection, CylindricalProjection, ConicProjection, PlanarProjection, PassThroughOperation or ConcatenatedOperation, then this method delegates to the castOrCopy(…) method of the corresponding SIS subclass. Note that if the given object implements more than one of the above-cited interfaces, then the castOrCopy(…) method to be used is unspecified.
      • Otherwise if the given object is already an instance of AbstractCoordinateOperation, then it is returned unchanged.
      • Otherwise a new AbstractCoordinateOperation instance is created using the copy constructor and returned. Note that this is a shallow copy operation, because the other properties contained in the given object are not recursively copied.
      Parameters:
      object - the object to get as a SIS implementation, or null if none.
      Returns:
      a SIS implementation containing the values of the given object (may be the given object itself), or null if the argument was null.
    • getInterface

      public Class<? extends org.opengis.referencing.operation.CoordinateOperation> getInterface()
      Returns the GeoAPI interface implemented by this class. The default implementation returns CoordinateOperation.class. Subclasses implementing a more specific GeoAPI interface shall override this method.
      Overrides:
      getInterface in class AbstractIdentifiedObject
      Returns:
      the coordinate operation interface implemented by this class.
    • isDefiningConversion

      public boolean isDefiningConversion()
      Returns true if this coordinate operation is for the definition of a derived or projected CRS. The standard (ISO 19111) approach constructs defining conversion as an operation of type Conversion with null source and target CRS. But SIS supports also defining conversions with non-null CRS provided that:
      • GeneralDerivedCRS.getBaseCRS() is the source CRS of this operation, and
      • GeneralDerivedCRS.getConversionFromBase() is this operation instance.
      When this method returns true, the source and target CRS are not marshalled in XML documents.
      Returns:
      true if this coordinate operation is for the definition of a derived or projected CRS.
    • getSourceCRS

      public org.opengis.referencing.crs.CoordinateReferenceSystem getSourceCRS()
      Returns the source CRS, or null if unspecified. The source CRS is mandatory for transformations only. This information is optional for conversions according the ISO 19111 standard, but Apache SIS tries to provide that CRS in most cases anyway.
      Specified by:
      getSourceCRS in interface org.opengis.referencing.operation.CoordinateOperation
      Returns:
      the source CRS, or null if not available.
    • getTargetCRS

      public org.opengis.referencing.crs.CoordinateReferenceSystem getTargetCRS()
      Returns the target CRS, or null if unspecified. The target CRS is mandatory for transformations only. This information is optional for conversions according the ISO 19111 standard, but Apache SIS tries to provide that CRS in most cases anyway.
      Specified by:
      getTargetCRS in interface org.opengis.referencing.operation.CoordinateOperation
      Returns:
      the target CRS, or null if not available.
    • getInterpolationCRS

      public org.opengis.referencing.crs.CoordinateReferenceSystem getInterpolationCRS()
      Returns the CRS which is neither the source CRS or target CRS but still required for performing the operation.
      Example: some transformations of vertical coordinates (h) require the horizontal coordinates (φ,λ) in order to interpolate in a grid. This method returns the CRS of the grid where such interpolations are performed.
      Returns:
      the CRS (neither source or target CRS) required for interpolating the values, or null if none.
    • getInterpolationCRS

      static org.opengis.referencing.crs.CoordinateReferenceSystem getInterpolationCRS(org.opengis.referencing.operation.CoordinateOperation operation)
      Returns the interpolation CRS of the given coordinate operation, or null if none.
    • getOperationVersion

      public String getOperationVersion()
      Returns the version of the coordinate operation. Different versions of a coordinate transformation may exist because of the stochastic nature of the parameters. In principle this property is irrelevant to coordinate conversions, but Apache SIS accepts it anyway.
      Specified by:
      getOperationVersion in interface org.opengis.referencing.operation.CoordinateOperation
      Returns:
      the coordinate operation version, or null in none.
    • getCoordinateOperationAccuracy

      public Collection<org.opengis.metadata.quality.PositionalAccuracy> getCoordinateOperationAccuracy()
      Returns an estimation of the impact of this operation on point accuracy. The positional accuracy gives position error estimates for target coordinates of this coordinate operation, assuming no errors in source coordinates.
      Specified by:
      getCoordinateOperationAccuracy in interface org.opengis.referencing.operation.CoordinateOperation
      Returns:
      the position error estimations, or an empty collection if not available.
      See Also:
    • getLinearAccuracy

      public double getLinearAccuracy()
      Returns an estimation of positional accuracy in metres, or NaN if unknown. The default implementation tries to infer a value from the metadata returned by getCoordinateOperationAccuracy() using SIS-specific heuristics.

      Current implementation

      The current implementation uses the heuristic rules listed below. Note that those rules may change in any future SIS version.
      • If at least one quantitative result is found with a linear unit, then returns the largest result value converted to metres.
      • Otherwise if the operation is a conversion, then returns 0 since a conversion is by definition accurate up to rounding errors.
      • Otherwise if the operation is a transformation, then checks if the datum shift were applied with the help of Bursa-Wolf parameters. If a datum shift has been applied, returns 25 meters. If a datum shift should have been applied but has been omitted, returns 3000 meters.
        Note: the 3000 meters value is higher than the highest value (999 meters) found in the EPSG database version 6.7. The 25 meters value is the next highest value found in the EPSG database for a significant number of transformations.
      • Otherwise if the operation is a concatenated operation, returns the sum of the accuracy of all components. This is a conservative scenario where we assume that errors cumulate linearly.
        Note: this is not necessarily the "worst case" scenario since the accuracy could be worst if the math transforms are highly non-linear.
      Returns:
      the accuracy estimation (always in meters), or NaN if unknown.
      See Also:
    • getDomainOfValidity

      public org.opengis.metadata.extent.Extent getDomainOfValidity()
      Returns the area or region or timeframe in which this coordinate operation is valid.
      Specified by:
      getDomainOfValidity in interface org.opengis.referencing.operation.CoordinateOperation
      Returns:
      the coordinate operation valid domain, or null if not available.
    • getScope

      public org.opengis.util.InternationalString getScope()
      Returns a description of domain of usage, or limitations of usage, for which this operation is valid.
      Specified by:
      getScope in interface org.opengis.referencing.operation.CoordinateOperation
      Returns:
      a description of domain of usage, or null if none.
    • getMathTransform

      public org.opengis.referencing.operation.MathTransform getMathTransform()
      Returns the object for transforming coordinates in the source CRS to coordinates in the target CRS. The transform may be null if this coordinate operation is a defining conversion.
      Specified by:
      getMathTransform in interface org.opengis.referencing.operation.CoordinateOperation
      Returns:
      the transform from source to target CRS, or null if not applicable.
    • getMethod

      org.opengis.referencing.operation.OperationMethod getMethod()
      Returns the operation method. This apply only to AbstractSingleOperation subclasses, which will make this method public.
      Returns:
      the operation method, or null if none.
    • getParameterDescriptors

      org.opengis.parameter.ParameterDescriptorGroup getParameterDescriptors()
      Returns the parameter descriptor. The default implementation infers the descriptor from the transform, if possible. If no descriptor can be inferred from the math transform, then this method fallback on the OperationMethod parameters.
    • getParameterDescriptors

      static org.opengis.parameter.ParameterDescriptorGroup getParameterDescriptors(org.opengis.referencing.operation.MathTransform transform)
      Returns the parameter descriptors for the given transform, or null if unknown.
    • getParameterValues

      org.opengis.parameter.ParameterValueGroup getParameterValues() throws UnsupportedOperationException
      Returns the parameter values. The default implementation infers the parameter values from the transform, if possible.
      Returns:
      the parameter values (never null).
      Throws:
      UnsupportedOperationException - if the parameter values cannot be determined for the current math transform implementation.
    • getWrapAroundChanges

      public Set<Integer> getWrapAroundChanges()
      Returns the indices of target dimensions where "wrap around" may happen as a result of this coordinate operation. If such change exists, then this is usually the longitude axis when the source CRS uses the [-180 … +180]° range and the target CRS uses the [0 … 360]° range, or the converse. If there is no change, then this is an empty set.
      Inverse relationship: sometimes the target dimensions returned by this method can be mapped directly to wraparound axes in source CRS, but this is not always the case. For example, consider the following operation chain:
      source projected CRS ⟶ base CRS ⟶ target geographic CRS
      In this example, a wraparound axis in the target CRS (the longitude) can be mapped to a wraparound axis in the base CRS. But there is no corresponding wraparound axis in the source CRS because the easting axis in projected CRS does not have a wraparound range meaning. We could argue that axis directions match, but such matching is not guaranteed to exist since ProjectedCRS is a special case of GeneralDerivedCRS and derived CRS can have rotations.

      The default implementation infers this set by inspecting the source and target coordinate system axes. It returns the indices of all target axes having RangeMeaning.WRAPAROUND and for which the following condition holds: a colinear source axis exists with compatible unit of measurement, and the range (taking unit conversions in account) or range meaning of those source and target axes are not the same.

      Returns:
      indices of target dimensions where "wrap around" may happen as a result of this coordinate operation.
      Since:
      0.8
    • equals

      public boolean equals(Object object, ComparisonMode mode)
      Compares this coordinate operation with the specified object for equality. If the mode argument is ComparisonMode.STRICT or BY_CONTRACT, then all available properties are compared including the domain of validity and the scope.
      Specified by:
      equals in interface LenientComparable
      Overrides:
      equals in class AbstractIdentifiedObject
      Parameters:
      object - the object to compare to this.
      mode - STRICT for performing a strict comparison, or IGNORE_METADATA for ignoring properties that do not make a difference in the numerical results of coordinate operations.
      Returns:
      true if both objects are equal for the given comparison mode.
      See Also:
    • computeHashCode

      protected long computeHashCode()
      Invoked by hashCode() for computing the hash code when first needed. See AbstractIdentifiedObject.computeHashCode() for more information.
      Overrides:
      computeHashCode in class AbstractIdentifiedObject
      Returns:
      the hash code value. This value may change in any future Apache SIS version.
    • formatTo

      protected String formatTo(Formatter formatter)
      Formats this coordinate operation in Well Known Text (WKT) version 2 format.

      ESRI extension

      Coordinate operations cannot be formatted in standard WKT 1 format, but an ESRI variant of WKT 1 allows a subset of coordinate operations with the ESRI-specific GEOGTRAN keyword. To enabled this variant, WKTFormat can be configured as below:
      Overrides:
      formatTo in class AbstractIdentifiedObject
      Parameters:
      formatter - the formatter to use.
      Returns:
      "CoordinateOperation".
      See Also:
    • append

      private static void append(Formatter formatter, org.opengis.referencing.crs.CoordinateReferenceSystem crs, String type)
      Appends the given CRS (if non-null) wrapped in an element of the given name.
      Parameters:
      formatter - the formatter where to append the object name.
      crs - the object to append, or null if none.
      type - the keyword to write before the object.
    • getSource

      private org.opengis.referencing.crs.CoordinateReferenceSystem getSource()
      Invoked by JAXB for getting the source CRS to marshal.
    • setSource

      private void setSource(org.opengis.referencing.crs.CoordinateReferenceSystem crs)
      Invoked by JAXB at marshalling time for setting the source CRS.
    • getTarget

      private org.opengis.referencing.crs.CoordinateReferenceSystem getTarget()
      Invoked by JAXB for getting the target CRS to marshal.
    • setTarget

      private void setTarget(org.opengis.referencing.crs.CoordinateReferenceSystem crs)
      Invoked by JAXB at unmarshalling time for setting the target CRS.
    • getAccuracy

      private org.opengis.metadata.quality.PositionalAccuracy[] getAccuracy()
      Invoked by JAXB only at marshalling time.
    • setAccuracy

      private void setAccuracy(org.opengis.metadata.quality.PositionalAccuracy[] values)
      Invoked by JAXB only at unmarshalling time.
    • setOperationVersion

      private void setOperationVersion(String value)
      Invoked by JAXB only at unmarshalling time.
      See Also:
    • setDomainOfValidity

      private void setDomainOfValidity(org.opengis.metadata.extent.Extent value)
      Invoked by JAXB only at unmarshalling time.
      See Also:
    • setScope

      private void setScope(org.opengis.util.InternationalString value)
      Invoked by JAXB only at unmarshalling time.
      See Also:
    • afterUnmarshal

      void afterUnmarshal(Unmarshaller unmarshaller, Object parent)
      Invoked by JAXB after unmarshalling. May be overridden by subclasses.