Class DefaultCoordinateOperationFactory

    • Constructor Detail

      • DefaultCoordinateOperationFactory

        public DefaultCoordinateOperationFactory()
        Constructs a coordinate operation factory using the default factories.
      • DefaultCoordinateOperationFactory

        public DefaultCoordinateOperationFactory​(Hints userHints)
        Constructs a coordinate operation factory using the specified hints. This constructor recognizes the CRS, CS, DATUM and MATH_TRANSFORM FACTORY hints.
        Parameters:
        userHints - The hints, or null if none.
      • DefaultCoordinateOperationFactory

        public DefaultCoordinateOperationFactory​(Hints userHints,
                                                 int priority)
        Constructs a coordinate operation factory using the specified hints and priority. This constructor recognizes the CRS, CS, DATUM and MATH_TRANSFORM FACTORY hints.
        Parameters:
        userHints - The hints, or null if none.
        priority - The priority for this factory, as a number between MINIMUM_PRIORITY and MAXIMUM_PRIORITY inclusive.
        Since:
        2.2
    • Method Detail

      • createOperation

        public CoordinateOperation createOperation​(CoordinateReferenceSystem sourceCRS,
                                                   CoordinateReferenceSystem targetCRS)
                                            throws OperationNotFoundException,
                                                   FactoryException
        Returns an operation for conversion or transformation between two coordinate reference systems. If an operation exists, it is returned. If more than one operation exists, the default is returned. If no operation exists, then the exception is thrown.

        The default implementation inspects the CRS and delegates the work to one or many createOperationStep(...) methods. This method fails if no path between the CRS is found.

        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        OperationNotFoundException - if no operation path was found from sourceCRS to targetCRS.
        FactoryException - if the operation creation failed for some other reason.
      • findOperations

        public Set<CoordinateOperation> findOperations​(CoordinateReferenceSystem sourceCRS,
                                                       CoordinateReferenceSystem targetCRS)
                                                throws FactoryException
        Returns all the available operations for conversion or transformation between two coordinate reference systems. If no operation exists, then an empty set is returned.

        The default implementation inspects the CRS and delegates the work to one or many createOperationStep(...) methods. This method fails if no path between the CRSs is found.

        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A Set of coordinate operations from sourceCRS to targetCRS.
        Throws:
        FactoryException - if the operation creation failed for some other reason.
      • findOperations

        protected Set<CoordinateOperation> findOperations​(CoordinateReferenceSystem sourceCRS,
                                                          CoordinateReferenceSystem targetCRS,
                                                          int limit)
                                                   throws FactoryException
        Returns all the available operations for conversion or transformation between two coordinate reference systems. If no operation exists, then an empty set is returned.

        The default implementation inspects the CRS and delegates the work to one or many createOperationStep(...) methods. This method fails if no path between the CRSs is found.

        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        limit - The maximum number of operations to be returned. Use -1 to return all the available operations. Use 1 to return just one operations. Currently, the behavior for other values of limit is undefined.
        Returns:
        A Set of coordinate operations from sourceCRS to targetCRS.
        Throws:
        FactoryException - if the operation creation failed for some other reason.
      • createOperation

        public CoordinateOperation createOperation​(CoordinateReferenceSystem sourceCRS,
                                                   CoordinateReferenceSystem targetCRS,
                                                   OperationMethod method)
                                            throws OperationNotFoundException,
                                                   FactoryException
        Returns an operation using a particular method for conversion or transformation between two coordinate reference systems. If the operation exists on the implementation, then it is returned. If the operation does not exist on the implementation, then the implementation has the option of inferring the operation from the argument objects. If for whatever reason the specified operation will not be returned, then the exception is thrown.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        method - the algorithmic method for conversion or transformation
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        OperationNotFoundException - if no operation path was found from sourceCRS to targetCRS.
        FactoryException - if the operation creation failed for some other reason.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(TemporalCRS sourceCRS,
                                                          TemporalCRS targetCRS)
                                                   throws FactoryException
        Creates an operation between two temporal coordinate reference systems. The default implementation checks if both CRS use the same datum, and then adjusts for axis direction, units and epoch.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(VerticalCRS sourceCRS,
                                                          VerticalCRS targetCRS)
                                                   throws FactoryException
        Creates an operation between two vertical coordinate reference systems. The default implementation checks if both CRS use the same datum, and then adjusts for axis direction and units.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(GeographicCRS sourceCRS,
                                                          VerticalCRS targetCRS)
                                                   throws FactoryException
        Creates an operation between a geographic and a vertical coordinate reference systems. The default implementation accepts the conversion only if the geographic CRS is a tri dimensional one and the vertical CRS is for height above the ellipsoid. More elaborated operation, like transformation from ellipsoidal to geoidal height, should be implemented here.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(GeographicCRS sourceCRS,
                                                          GeographicCRS targetCRS)
                                                   throws FactoryException
        Creates an operation between two geographic coordinate reference systems. The default implementation can adjust axis order and orientation (e.g. transforming from (NORTH,WEST) to (EAST,NORTH)), performs units conversion and apply datum shifts if needed.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(ProjectedCRS sourceCRS,
                                                          ProjectedCRS targetCRS)
                                                   throws FactoryException
        Creates an operation between two projected coordinate reference systems. The default implementation can adjust axis order and orientation. It also performs units conversion if it is the only extra change needed. Otherwise, it performs three steps:
        • Unproject from sourceCRS to its base geographic CRS.
        • Convert the source to target base geographic CRS.
        • Project from the base geographic CRS to the targetCRS.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • findOperationSteps

        protected Set<CoordinateOperation> findOperationSteps​(ProjectedCRS sourceCRS,
                                                              ProjectedCRS targetCRS,
                                                              int limit)
                                                       throws FactoryException
        Returns all available operations between two projected coordinate reference systems. The default implementation can adjust axis order and orientation. It also performs units conversion if it is the only extra change needed. Otherwise, it performs three steps:
        • Unproject from sourceCRS to its base geographic CRS.
        • Convert the source to target base geographic CRS.
        • Project from the base geographic CRS to the targetCRS.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        limit - The maximum number of operations to be returned. Use -1 to return all the available operations. Use 1 to return just one operation. Currently, the behavior for other values of limit is undefined.
        Returns:
        A Set of coordinate operations from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(GeographicCRS sourceCRS,
                                                          ProjectedCRS targetCRS)
                                                   throws FactoryException
        Creates an operation from a geographic to a projected coordinate reference system. The default implementation constructs the following operation chain:
         sourceCRS  →  baseCRS  →  targetCRS
         
        where the conversion from baseCRS to targetCRS is obtained from targetCRS.getConversionFromBase().
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • findOperationSteps

        protected Set<CoordinateOperation> findOperationSteps​(GeographicCRS sourceCRS,
                                                              ProjectedCRS targetCRS,
                                                              int limit)
                                                       throws FactoryException
        Returns all available operations from a geographic to a projected coordinate reference system. The default implementation constructs the following operation chain:
         sourceCRS  →  baseCRS  →  targetCRS
         
        where the conversion from baseCRS to targetCRS is obtained from targetCRS.getConversionFromBase().
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        limit - The maximum number of operations to be returned. Use -1 to return all the available operations. Use 1 to return just one operations. Currently, the behavior for other values of limit is undefined.
        Returns:
        A Set of coordinate operations from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(ProjectedCRS sourceCRS,
                                                          GeographicCRS targetCRS)
                                                   throws FactoryException
        Creates an operation from a projected to a geographic coordinate reference system. The default implementation constructs the following operation chain:
         sourceCRS  →  baseCRS  →  targetCRS
         
        where the conversion from sourceCRS to baseCRS is obtained from the inverse of sourceCRS.getConversionFromBase().
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • findOperationSteps

        protected Set<CoordinateOperation> findOperationSteps​(ProjectedCRS sourceCRS,
                                                              GeographicCRS targetCRS,
                                                              int limit)
                                                       throws FactoryException
        Returns all available operations from a projected to a geographic coordinate reference system. The default implementation constructs the following operation chain:
         sourceCRS  →  baseCRS  →  targetCRS
         
        where the conversion from sourceCRS to baseCRS is obtained from the inverse of sourceCRS.getConversionFromBase().
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        limit - The maximum number of operations to be returned. Use -1 to return all the available operations. Use 1 to return just one operations. Currently, the behavior for other values of limit is undefined.
        Returns:
        A Set of coordinate operations from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(GeocentricCRS sourceCRS,
                                                          GeocentricCRS targetCRS)
                                                   throws FactoryException
        Creates an operation between two geocentric coordinate reference systems. The default implementation can adjust for axis order and orientation, performs units conversion and apply Bursa Wolf transformation if needed.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(GeographicCRS sourceCRS,
                                                          GeocentricCRS targetCRS)
                                                   throws FactoryException
        Creates an operation from a geographic to a geocentric coordinate reference systems. If the source CRS doesn't have a vertical axis, height above the ellipsoid will be assumed equals to zero everywhere. The default implementation uses the "Ellipsoid_To_Geocentric" math transform.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(GeocentricCRS sourceCRS,
                                                          GeographicCRS targetCRS)
                                                   throws FactoryException
        Creates an operation from a geocentric to a geographic coordinate reference systems. The default implementation use the "Geocentric_To_Ellipsoid" math transform.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(CompoundCRS sourceCRS,
                                                          SingleCRS targetCRS)
                                                   throws FactoryException
        Creates an operation from a compound to a single coordinate reference systems.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • findOperationSteps

        protected Set<CoordinateOperation> findOperationSteps​(CompoundCRS sourceCRS,
                                                              SingleCRS targetCRS,
                                                              int limit)
                                                       throws FactoryException
        Returns all available operations from a compound to a single coordinate reference system.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        limit - The maximum number of operations to be returned. Use -1 to return all the available operations. Use 1 to return just one operations. Currently, the behavior for other values of limit is undefined.
        Returns:
        A Set of coordinate operations from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(SingleCRS sourceCRS,
                                                          CompoundCRS targetCRS)
                                                   throws FactoryException
        Creates an operation from a single to a compound coordinate reference system.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • findOperationSteps

        protected Set<CoordinateOperation> findOperationSteps​(SingleCRS sourceCRS,
                                                              CompoundCRS targetCRS,
                                                              int limit)
                                                       throws FactoryException
        Returns all available operations from a single to a compound coordinate reference system.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        limit - The maximum number of operations to be returned. Use -1 to return all the available operations. Use 1 to return just one operations. Currently, the behavior for other values of limit is undefined.
        Returns:
        A Set of coordinate operations from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createOperationStep

        protected CoordinateOperation createOperationStep​(CompoundCRS sourceCRS,
                                                          CompoundCRS targetCRS)
                                                   throws FactoryException
        Creates an operation between two compound coordinate reference systems.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • findOperationSteps

        protected Set<CoordinateOperation> findOperationSteps​(CompoundCRS sourceCRS,
                                                              CompoundCRS targetCRS,
                                                              int limit)
                                                       throws FactoryException
        Returns all available operations between two compound coordinate reference systems.
        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        limit - The maximum number of operations to be returned. Use -1 to return all the available operations. Use 1 to return just one operations. Currently, the behavior for other values of limit is undefined.
        Returns:
        A Set of coordinate operations from sourceCRS to targetCRS.
        Throws:
        FactoryException - If the operation can't be constructed.
      • createFromDatabase

        protected CoordinateOperation createFromDatabase​(CoordinateReferenceSystem sourceCRS,
                                                         CoordinateReferenceSystem targetCRS)
        If the coordinate operation is explicitly defined in some database (typically EPSG), returns it. Otherwise (if there is no database, or if the database doesn't contains an explicit operation from sourceCRS to targetCRS, or if this method failed to create an operation from the database), returns null.

        The default implementation always returns null, since there is no database connected to a DefaultCoordinateOperationFactory instance. In other words, the default implementation is "standalone": it tries to figure out transformation paths by itself. Subclasses should override this method if they can fetch a more accurate operation from some database. The mean subclass doing so is AuthorityBackedFactory.

        This method is invoked by createOperation(sourceCRS, targetCRS) before to try to figure out a transformation path by itself. It is also invoked by various createOperationStep(...) methods when an intermediate CRS was obtained by GeneralDerivedCRS.getBaseCRS() (this case occurs especially during geographic from/to projected CRS operations). This method is not invoked for synthetic CRS generated by createOperationStep(...), since those temporary CRS are not expected to exist in a database.

        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        Returns:
        A coordinate operation from sourceCRS to targetCRS if and only if one is explicitly defined in some underlying database, or null otherwise.
        Since:
        2.3
      • findFromDatabase

        protected Set<CoordinateOperation> findFromDatabase​(CoordinateReferenceSystem sourceCRS,
                                                            CoordinateReferenceSystem targetCRS,
                                                            int limit)
        Returns a list of available coordinate operations explicitly defined in some database (typically EPSG), for the provided CRS pair. Otherwise (if there is no database, or if the database doesn't contains any explicit operation from sourceCRS to targetCRS, or if this method failed to create the operations from the database), returns an empty Set.

        The default implementation always returns an empty Set, since there is no database connected to a DefaultCoordinateOperationFactory instance. In other words, the default implementation is "standalone": it tries to figure out transformation paths by itself. Subclasses should override this method if they can fetch a more accurate operation from some database. The mean subclass doing so is AuthorityBackedFactory.

        This method is invoked by findOperations(sourceCRS, targetCRS) before to try to figure out a transformation path by itself. It is also invoked by various findOperationSteps(...) methods when an intermediate CRS was obtained by GeneralDerivedCRS.getBaseCRS() (this case occurs especially during geographic from/to projected CRS operations). This method is not invoked for synthetic CRS generated by createOperationStep(...), since those temporary CRS are not expected to exist in a database.

        Parameters:
        sourceCRS - Input coordinate reference system.
        targetCRS - Output coordinate reference system.
        limit - The maximum number of operations to be returned. Use -1 to return all the available operations. Use 1 to return just one operations. Currently, the behavior for other values of limit is undefined.
        Returns:
        A set of coordinate operations from sourceCRS to targetCRS if and only if one is explicitly defined in some underlying database, or an empty Set otherwise.
        Since:
        2.3