001 /*
002 * GeoAPI - Java interfaces for OGC/ISO standards
003 * http://www.geoapi.org
004 *
005 * Copyright (C) 2004-2012 Open Geospatial Consortium, Inc.
006 * All Rights Reserved. http://www.opengeospatial.org/ogc/legal
007 *
008 * Permission to use, copy, and modify this software and its documentation, with
009 * or without modification, for any purpose and without fee or royalty is hereby
010 * granted, provided that you include the following on ALL copies of the software
011 * and documentation or portions thereof, including modifications, that you make:
012 *
013 * 1. The full text of this NOTICE in a location viewable to users of the
014 * redistributed or derivative work.
015 * 2. Notice of any changes or modifications to the OGC files, including the
016 * date changes were made.
017 *
018 * THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
019 * NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
020 * TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
021 * THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
022 * PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
023 *
024 * COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
025 * CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
026 *
027 * The name and trademarks of copyright holders may NOT be used in advertising or
028 * publicity pertaining to the software without specific, written prior permission.
029 * Title to copyright in this software and any associated documentation will at all
030 * times remain with copyright holders.
031 */
032 package org.opengis.referencing.cs;
033
034 import java.util.Map;
035 import javax.measure.unit.Unit;
036 import org.opengis.referencing.ObjectFactory;
037 import org.opengis.util.FactoryException;
038
039
040 /**
041 * Builds up complex {@linkplain CoordinateSystem coordinate systems} from simpler
042 * objects or values. {@code CSFactory} allows applications to make {@linkplain
043 * CoordinateSystem coordinate systems} that cannot be created by a {@link CSAuthorityFactory}.
044 * This factory is very flexible, whereas the authority factory is easier to use.
045 *
046 * So {@link CSAuthorityFactory} can be used to make "standard" coordinate systems,
047 * and {@code CSFactory} can be used to make "special" coordinate systems.
048 *
049 * @author Martin Desruisseaux (IRD)
050 * @version 3.0
051 * @since 1.0
052 *
053 * @departure historic
054 * Added for consistency with CRS and datum factories. This CS factory was not defined in the
055 * OGC specification because OGC 01-009 was created before ISO 19111 and had no equivalent of
056 * the ISO <cite>Coordinate System</cite> types.
057 *
058 * @see org.opengis.referencing.crs.CRSFactory
059 * @see org.opengis.referencing.datum.DatumFactory
060 */
061 public interface CSFactory extends ObjectFactory {
062 /**
063 * Creates a coordinate system axis from an abbreviation and a unit.
064 *
065 * @param properties Name and other properties to give to the new object.
066 * Available properties are {@linkplain ObjectFactory listed there}.
067 * @param abbreviation The coordinate axis abbreviation.
068 * @param direction The axis direction.
069 * @param unit The coordinate axis unit.
070 * @return The axis for the given properties.
071 * @throws FactoryException if the object creation failed.
072 */
073 CoordinateSystemAxis createCoordinateSystemAxis(Map<String,?> properties,
074 String abbreviation,
075 AxisDirection direction,
076 Unit<?> unit) throws FactoryException;
077
078 /**
079 * Creates a two dimensional cartesian coordinate system from the given pair of axis.
080 *
081 * @param properties Name and other properties to give to the new object.
082 * Available properties are {@linkplain ObjectFactory listed there}.
083 * @param axis0 The first axis.
084 * @param axis1 The second axis.
085 * @return The coordinate system for the given properties and axes.
086 * @throws FactoryException if the object creation failed.
087 */
088 CartesianCS createCartesianCS(Map<String, ?> properties,
089 CoordinateSystemAxis axis0,
090 CoordinateSystemAxis axis1) throws FactoryException;
091
092 /**
093 * Creates a three dimensional cartesian coordinate system from the given set of axis.
094 *
095 * @param properties Name and other properties to give to the new object.
096 * Available properties are {@linkplain ObjectFactory listed there}.
097 * @param axis0 The first axis.
098 * @param axis1 The second axis.
099 * @param axis2 The third axis.
100 * @return The coordinate system for the given properties and axes.
101 * @throws FactoryException if the object creation failed.
102 */
103 CartesianCS createCartesianCS(Map<String, ?> properties,
104 CoordinateSystemAxis axis0,
105 CoordinateSystemAxis axis1,
106 CoordinateSystemAxis axis2) throws FactoryException;
107
108 /**
109 * Creates a two dimensional coordinate system from the given pair of axis.
110 *
111 * @param properties Name and other properties to give to the new object.
112 * Available properties are {@linkplain ObjectFactory listed there}.
113 * @param axis0 The first axis.
114 * @param axis1 The second axis.
115 * @return The coordinate system for the given properties and axes.
116 * @throws FactoryException if the object creation failed.
117 */
118 AffineCS createAffineCS(Map<String, ?> properties,
119 CoordinateSystemAxis axis0,
120 CoordinateSystemAxis axis1) throws FactoryException;
121
122 /**
123 * Creates a three dimensional coordinate system from the given set of axis.
124 *
125 * @param properties Name and other properties to give to the new object.
126 * Available properties are {@linkplain ObjectFactory listed there}.
127 * @param axis0 The first axis.
128 * @param axis1 The second axis.
129 * @param axis2 The third axis.
130 * @return The coordinate system for the given properties and axes.
131 * @throws FactoryException if the object creation failed.
132 */
133 AffineCS createAffineCS(Map<String, ?> properties,
134 CoordinateSystemAxis axis0,
135 CoordinateSystemAxis axis1,
136 CoordinateSystemAxis axis2) throws FactoryException;
137
138 /**
139 * Creates a polar coordinate system from the given pair of axis.
140 *
141 * @param properties Name and other properties to give to the new object.
142 * Available properties are {@linkplain ObjectFactory listed there}.
143 * @param axis0 The first axis.
144 * @param axis1 The second axis.
145 * @return The coordinate system for the given properties and axes.
146 * @throws FactoryException if the object creation failed.
147 */
148 PolarCS createPolarCS(Map<String, ?> properties,
149 CoordinateSystemAxis axis0,
150 CoordinateSystemAxis axis1) throws FactoryException;
151
152 /**
153 * Creates a cylindrical coordinate system from the given set of axis.
154 *
155 * @param properties Name and other properties to give to the new object.
156 * Available properties are {@linkplain ObjectFactory listed there}.
157 * @param axis0 The first axis.
158 * @param axis1 The second axis.
159 * @param axis2 The third axis.
160 * @return The coordinate system for the given properties and axes.
161 * @throws FactoryException if the object creation failed.
162 */
163 CylindricalCS createCylindricalCS(Map<String, ?> properties,
164 CoordinateSystemAxis axis0,
165 CoordinateSystemAxis axis1,
166 CoordinateSystemAxis axis2) throws FactoryException;
167
168 /**
169 * Creates a spherical coordinate system from the given set of axis.
170 *
171 * @param properties Name and other properties to give to the new object.
172 * Available properties are {@linkplain ObjectFactory listed there}.
173 * @param axis0 The first axis.
174 * @param axis1 The second axis.
175 * @param axis2 The third axis.
176 * @return The coordinate system for the given properties and axes.
177 * @throws FactoryException if the object creation failed.
178 */
179 SphericalCS createSphericalCS(Map<String, ?> properties,
180 CoordinateSystemAxis axis0,
181 CoordinateSystemAxis axis1,
182 CoordinateSystemAxis axis2) throws FactoryException;
183
184 /**
185 * Creates an ellipsoidal coordinate system without ellipsoidal height.
186 *
187 * @param properties Name and other properties to give to the new object.
188 * Available properties are {@linkplain ObjectFactory listed there}.
189 * @param axis0 The first axis.
190 * @param axis1 The second axis.
191 * @return The coordinate system for the given properties and axes.
192 * @throws FactoryException if the object creation failed.
193 */
194 EllipsoidalCS createEllipsoidalCS(Map<String, ?> properties,
195 CoordinateSystemAxis axis0,
196 CoordinateSystemAxis axis1) throws FactoryException;
197
198 /**
199 * Creates an ellipsoidal coordinate system with ellipsoidal height.
200 *
201 * @param properties Name and other properties to give to the new object.
202 * Available properties are {@linkplain ObjectFactory listed there}.
203 * @param axis0 The first axis.
204 * @param axis1 The second axis.
205 * @param axis2 The third axis.
206 * @return The coordinate system for the given properties and axes.
207 * @throws FactoryException if the object creation failed.
208 */
209 EllipsoidalCS createEllipsoidalCS(Map<String, ?> properties,
210 CoordinateSystemAxis axis0,
211 CoordinateSystemAxis axis1,
212 CoordinateSystemAxis axis2) throws FactoryException;
213
214 /**
215 * Creates a vertical coordinate system.
216 *
217 * @param properties Name and other properties to give to the new object.
218 * Available properties are {@linkplain ObjectFactory listed there}.
219 * @param axis The axis.
220 * @return The coordinate system for the given properties and axes.
221 * @throws FactoryException if the object creation failed.
222 */
223 VerticalCS createVerticalCS(Map<String, ?> properties,
224 CoordinateSystemAxis axis) throws FactoryException;
225
226 /**
227 * Creates a time coordinate system.
228 *
229 * @param properties Name and other properties to give to the new object.
230 * Available properties are {@linkplain ObjectFactory listed there}.
231 * @param axis The axis.
232 * @return The coordinate system for the given properties and axes.
233 * @throws FactoryException if the object creation failed.
234 */
235 TimeCS createTimeCS(Map<String, ?> properties,
236 CoordinateSystemAxis axis) throws FactoryException;
237
238 /**
239 * Creates a linear coordinate system.
240 *
241 * @param properties Name and other properties to give to the new object.
242 * Available properties are {@linkplain ObjectFactory listed there}.
243 * @param axis The axis.
244 * @return The coordinate system for the given properties and axes.
245 * @throws FactoryException if the object creation failed.
246 */
247 LinearCS createLinearCS(Map<String, ?> properties,
248 CoordinateSystemAxis axis) throws FactoryException;
249
250 /**
251 * Creates a two-dimensional user defined coordinate system.
252 *
253 * @param properties Name and other properties to give to the new object.
254 * Available properties are {@linkplain ObjectFactory listed there}.
255 * @param axis0 The first axis.
256 * @param axis1 The second axis.
257 * @return The coordinate system for the given properties and axes.
258 * @throws FactoryException if the object creation failed.
259 */
260 UserDefinedCS createUserDefinedCS(Map<String, ?> properties,
261 CoordinateSystemAxis axis0,
262 CoordinateSystemAxis axis1) throws FactoryException;
263
264 /**
265 * Creates a three-dimensional user defined coordinate system.
266 *
267 * @param properties Name and other properties to give to the new object.
268 * Available properties are {@linkplain ObjectFactory listed there}.
269 * @param axis0 The first axis.
270 * @param axis1 The second axis.
271 * @param axis2 The third axis.
272 * @return The coordinate system for the given properties and axes.
273 * @throws FactoryException if the object creation failed.
274 */
275 UserDefinedCS createUserDefinedCS(Map<String, ?> properties,
276 CoordinateSystemAxis axis0,
277 CoordinateSystemAxis axis1,
278 CoordinateSystemAxis axis2) throws FactoryException;
279 }