/*$************************************************************************************************
**
** $Id: CRSFactory.java 831 2006-05-01 00:27:23Z Desruisseaux $
**
** $URL: http://svn.code.sf.net/p/geoapi/code/branches/2.0.x/geoapi/src/main/java/org/opengis/referencing/crs/CRSFactory.java $
**
** Copyright (C) 2003-2005 Open GIS Consortium, Inc.
** All Rights Reserved. http://www.opengis.org/legal/
**
*************************************************************************************************/
package org.opengis.referencing.crs;
// J2SE direct dependencies
import java.util.Map;
import java.util.Set;
// OpenGIS dependencies
import org.opengis.referencing.ObjectFactory;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.NoSuchIdentifierException;
import org.opengis.referencing.cs.AffineCS;
import org.opengis.referencing.cs.CartesianCS;
import org.opengis.referencing.cs.SphericalCS;
import org.opengis.referencing.cs.EllipsoidalCS;
import org.opengis.referencing.cs.VerticalCS;
import org.opengis.referencing.cs.TimeCS;
import org.opengis.referencing.cs.CoordinateSystem;
import org.opengis.referencing.cs.CoordinateSystemAxis;
import org.opengis.referencing.datum.EngineeringDatum;
import org.opengis.referencing.datum.GeodeticDatum;
import org.opengis.referencing.datum.ImageDatum;
import org.opengis.referencing.datum.TemporalDatum;
import org.opengis.referencing.datum.VerticalDatum;
import org.opengis.referencing.operation.Conversion;
import org.opengis.referencing.operation.Projection;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.MathTransformFactory;
import org.opengis.referencing.operation.OperationMethod;
import org.opengis.parameter.GeneralParameterValue;
import org.opengis.parameter.ParameterValueGroup;
import org.opengis.parameter.ParameterDescriptorGroup; // For javadoc
// Annotations
import org.opengis.annotation.UML;
import org.opengis.annotation.Extension;
import static org.opengis.annotation.Obligation.*;
import static org.opengis.annotation.Specification.*;
/**
* Builds up complex {@linkplain CoordinateReferenceSystem coordinate reference systems}
* from simpler objects or values. {@code CRSFactory} allows applications to make
* {@linkplain CoordinateReferenceSystem coordinate reference systems} that cannot be
* created by a {@link CRSAuthorityFactory}. This factory is very flexible, whereas the
* authority factory is easier to use.
*
* So {@link CRSAuthorityFactory} can be used to make "standard" coordinate reference systems,
* and {@code CRSFactory} can be used to make "special" coordinate reference systems.
*
* For example, the EPSG authority has codes for USA state plane coordinate systems
* using the NAD83 datum, but these coordinate systems always use meters. EPSG does
* not have codes for NAD83 state plane coordinate systems that use feet units. This
* factory lets an application create such a hybrid coordinate system.
*
* @version Implementation specification 1.0
* @author Open Geospatial Consortium
* @author Martin Desruisseaux (IRD)
* @since GeoAPI 1.0
*
* @see org.opengis.referencing.cs.CSFactory
* @see org.opengis.referencing.datum.DatumFactory
*/
@UML(identifier="CS_CoordinateSystemFactory", specification=OGC_01009)
public interface CRSFactory extends ObjectFactory {
/**
* Creates a compound coordinate reference system from an ordered
* list of {@code CoordinateReferenceSystem} objects.
*
* @param properties Name and other properties to give to the new object.
* Available properties are {@linkplain ObjectFactory listed there}.
* @param elements ordered array of {@code CoordinateReferenceSystem} objects.
* @throws FactoryException if the object creation failed.
*/
@UML(identifier="createCompoundCoordinateSystem", specification=OGC_01009)
CompoundCRS createCompoundCRS(Map properties,
CoordinateReferenceSystem[] elements) throws FactoryException;
/**
* Creates a engineering coordinate reference system.
*
* @param properties Name and other properties to give to the new object.
* Available properties are {@linkplain ObjectFactory listed there}.
* @param datum Engineering datum to use in created CRS.
* @param cs The coordinate system for the created CRS.
* @throws FactoryException if the object creation failed.
*/
@UML(identifier="createLocalCoordinateSystem", specification=OGC_01009)
EngineeringCRS createEngineeringCRS(Map properties,
EngineeringDatum datum,
CoordinateSystem cs) throws FactoryException;
/**
* Creates an image coordinate reference system.
*
* @param properties Name and other properties to give to the new object.
* Available properties are {@linkplain ObjectFactory listed there}.
* @param datum Image datum to use in created CRS.
* @param cs The Cartesian or Oblique Cartesian coordinate system for the created CRS.
* @throws FactoryException if the object creation failed.
*/
ImageCRS createImageCRS(Map properties,
ImageDatum datum,
AffineCS cs) throws FactoryException;
/**
* Creates a temporal coordinate reference system.
*
* @param properties Name and other properties to give to the new object.
* Available properties are {@linkplain ObjectFactory listed there}.
* @param datum Temporal datum to use in created CRS.
* @param cs The Temporal coordinate system for the created CRS.
* @throws FactoryException if the object creation failed.
*/
TemporalCRS createTemporalCRS(Map properties,
TemporalDatum datum,
TimeCS cs) throws FactoryException;
/**
* Creates a vertical coordinate reference system.
*
* @param properties Name and other properties to give to the new object.
* Available properties are {@linkplain ObjectFactory listed there}.
* @param datum Vertical datum to use in created CRS.
* @param cs The Vertical coordinate system for the created CRS.
* @throws FactoryException if the object creation failed.
*/
@UML(identifier="createVerticalCoordinateSystem", specification=OGC_01009)
VerticalCRS createVerticalCRS(Map properties,
VerticalDatum datum,
VerticalCS cs) throws FactoryException;
/**
* Creates a geocentric coordinate reference system from a {@linkplain CartesianCS
* cartesian coordinate system}.
*
* @param properties Name and other properties to give to the new object.
* Available properties are {@linkplain ObjectFactory listed there}.
* @param datum Geodetic datum to use in created CRS.
* @param cs The cartesian coordinate system for the created CRS.
* @throws FactoryException if the object creation failed.
*/
GeocentricCRS createGeocentricCRS(Map properties,
GeodeticDatum datum,
CartesianCS cs) throws FactoryException;
/**
* Creates a geocentric coordinate reference system from a {@linkplain SphericalCS
* spherical coordinate system}.
*
* @param properties Name and other properties to give to the new object.
* Available properties are {@linkplain ObjectFactory listed there}.
* @param datum Geodetic datum to use in created CRS.
* @param cs The spherical coordinate system for the created CRS.
* @throws FactoryException if the object creation failed.
*/
GeocentricCRS createGeocentricCRS(Map properties,
GeodeticDatum datum,
SphericalCS cs) throws FactoryException;
/**
* Creates a geographic coordinate reference system.
* It could be Latitude/Longitude or
* Longitude/Latitude.
*
* @param properties Name and other properties to give to the new object.
* Available properties are {@linkplain ObjectFactory listed there}.
* @param datum Geodetic datum to use in created CRS.
* @param cs The ellipsoidal coordinate system for the created CRS.
* @throws FactoryException if the object creation failed.
*/
@UML(identifier="createGeographicCoordinateSystem", specification=OGC_01009)
GeographicCRS createGeographicCRS(Map properties,
GeodeticDatum datum,
EllipsoidalCS cs) throws FactoryException;
/**
* Creates a derived coordinate reference system. If the transformation is an affine
* map performing a rotation, then any mixed axes must have identical units.
* For example, a (lat_deg, lon_deg, height_feet)
* system can be rotated in the (lat, lon) plane, since both
* affected axes are in degrees. But you should not rotate this coordinate system
* in any other plane.
*
* It is the user's responsability to ensure that the {@code baseToDerived} transform performs
* all required steps, including {@linkplain CoordinateSystemAxis#getUnit unit} conversions and
* change of {@linkplain CoordinateSystem#getAxis axis} order, if needed.
*
* @param properties Name and other properties to give to the new object.
* Available properties are {@linkplain ObjectFactory listed there}.
* Properties for the {@link Conversion} object to be created can be specified
* with the "conversion." prefix added in front of property names
* (example: "conversion.name").
* @param method A description of the {@linkplain Conversion#getMethod method for the conversion}.
* @param base Coordinate reference system to base the derived CRS on. The number of axes
* must matches the {@linkplain MathTransform#getSourceDimensions source dimentions}
* of the transform {@code baseToDerived}.
* @param baseToDerived The transform from the base CRS to the newly created CRS.
* @param derivedCS The coordinate system for the derived CRS. The number of axes must matches
* the {@linkplain MathTransform#getTargetDimensions target dimensions} of the transform
* {@code baseToDerived}.
* @throws FactoryException if the object creation failed.
*/
@UML(identifier="createFittedCoordinateSystem", specification=OGC_01009)
DerivedCRS createDerivedCRS(Map properties,
OperationMethod method,
CoordinateReferenceSystem base,
MathTransform baseToDerived,
CoordinateSystem derivedCS) throws FactoryException;
/**
* Creates a projected coordinate reference system from a transform.
*
* It is the user's responsability to ensure that the {@code baseToDerived} transform performs
* all required steps, including {@linkplain CoordinateSystemAxis#getUnit unit} conversions and
* change of {@linkplain CoordinateSystem#getAxis axis} order, if needed.
*
* @param properties Name and other properties to give to the new object.
* Available properties are {@linkplain ObjectFactory listed there}.
* Properties for the {@link Projection} object to be created can be specified
* with the "conversion." prefix added in front of property names
* (example: "conversion.name").
* @param method A description of the {@linkplain Conversion#getMethod method for the projection}.
* @param base Geographic coordinate reference system to base the projection on. The number of axes
* must matches the {@linkplain MathTransform#getSourceDimensions source dimentions}
* of the transform {@code baseToDerived}.
* @param baseToDerived The transform from the geographic to the projected CRS.
* @param derivedCS The coordinate system for the projected CRS. The number of axes must matches
* the {@linkplain MathTransform#getTargetDimensions target dimensions} of the transform
* {@code baseToDerived}.
* @throws FactoryException if the object creation failed.
*/
@UML(identifier="createProjectedCoordinateSystem", specification=OGC_01009)
ProjectedCRS createProjectedCRS(Map properties,
OperationMethod method,
GeographicCRS base,
MathTransform baseToDerived,
CartesianCS derivedCS) throws FactoryException;
/**
* Creates a coordinate reference system object from a XML string.
*
* @param xml Coordinate reference system encoded in XML format.
* @throws FactoryException if the object creation failed.
*/
@UML(identifier="createFromXML", specification=OGC_01009)
CoordinateReferenceSystem createFromXML(String xml) throws FactoryException;
/**
* Creates a coordinate reference system object from a string.
* The definition for WKT
* is shown using Extended Backus Naur Form (EBNF).
*
* @param wkt Coordinate system encoded in Well-Known Text format.
* @throws FactoryException if the object creation failed.
*/
@UML(identifier="createFromWKT", specification=OGC_01009)
CoordinateReferenceSystem createFromWKT(String wkt) throws FactoryException;
}
Ads help maintain this website.