svn-gvsig-desktop / tags / v1_0_2_Build_916 / libraries / libjni-gdal / include / ogr_spatialref.h @ 12327
History | View | Annotate | Download (21.3 KB)
1 | 879 | igbrotru | /******************************************************************************
|
---|---|---|---|
2 | * $Id$
|
||
3 | *
|
||
4 | * Project: OpenGIS Simple Features Reference Implementation
|
||
5 | * Purpose: Classes for manipulating spatial reference systems in a
|
||
6 | * platform non-specific manner.
|
||
7 | * Author: Frank Warmerdam, warmerdam@pobox.com
|
||
8 | *
|
||
9 | ******************************************************************************
|
||
10 | * Copyright (c) 1999, Les Technologies SoftMap Inc.
|
||
11 | *
|
||
12 | * Permission is hereby granted, free of charge, to any person obtaining a
|
||
13 | * copy of this software and associated documentation files (the "Software"),
|
||
14 | * to deal in the Software without restriction, including without limitation
|
||
15 | * the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||
16 | * and/or sell copies of the Software, and to permit persons to whom the
|
||
17 | * Software is furnished to do so, subject to the following conditions:
|
||
18 | *
|
||
19 | * The above copyright notice and this permission notice shall be included
|
||
20 | * in all copies or substantial portions of the Software.
|
||
21 | *
|
||
22 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||
23 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
24 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||
25 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
26 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||
27 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||
28 | * DEALINGS IN THE SOFTWARE.
|
||
29 | ******************************************************************************
|
||
30 | *
|
||
31 | * $Log$
|
||
32 | 7765 | nacho | * Revision 1.3 2006-10-03 07:05:18 nacho
|
33 | 879 | igbrotru | * *** empty log message ***
|
34 | *
|
||
35 | 7765 | nacho | * Revision 1.1 2006/07/18 16:21:00 nacho
|
36 | * *** empty log message ***
|
||
37 | *
|
||
38 | * Revision 1.1 2006/06/29 16:23:27 nacho
|
||
39 | * *** empty log message ***
|
||
40 | *
|
||
41 | * Revision 1.2 2006/01/09 12:50:13 nacho
|
||
42 | * *** empty log message ***
|
||
43 | *
|
||
44 | 3540 | nacho | * Revision 1.1 2005/07/27 08:22:55 igbrotru
|
45 | * *** empty log message ***
|
||
46 | *
|
||
47 | * Revision 1.1 2005/01/11 15:23:01 igbrotru
|
||
48 | * *** empty log message ***
|
||
49 | *
|
||
50 | 879 | igbrotru | * Revision 1.61 2004/05/10 17:05:14 warmerda
|
51 | * added AutoIdentifyEPSG()
|
||
52 | *
|
||
53 | * Revision 1.60 2004/03/04 18:04:45 warmerda
|
||
54 | * added importFromDict() support
|
||
55 | *
|
||
56 | * Revision 1.59 2004/02/07 17:31:21 dron
|
||
57 | * Added OSRExportToUSGS() method.
|
||
58 | *
|
||
59 | * Revision 1.58 2004/02/05 17:07:59 dron
|
||
60 | * Support for HOM projection, specified by two points on centerline.
|
||
61 | *
|
||
62 | * Revision 1.57 2004/02/01 14:24:09 dron
|
||
63 | * Added OGRSpatialReference::importFromUSGS().
|
||
64 | *
|
||
65 | * Revision 1.56 2004/01/24 09:34:59 warmerda
|
||
66 | * added TransformEx support to capture per point reprojection failure
|
||
67 | *
|
||
68 | * Revision 1.55 2003/10/07 04:20:50 warmerda
|
||
69 | * added WMS AUTO: support
|
||
70 | *
|
||
71 | * Revision 1.54 2003/09/09 07:49:19 dron
|
||
72 | * Added exportToPCI() method.
|
||
73 | *
|
||
74 | * Revision 1.53 2003/08/31 14:51:30 dron
|
||
75 | * Added importFromPCI() method.
|
||
76 | *
|
||
77 | * Revision 1.52 2003/08/18 13:26:01 warmerda
|
||
78 | * added SetTMVariant() and related definitions
|
||
79 | *
|
||
80 | * Revision 1.51 2003/05/30 15:39:53 warmerda
|
||
81 | * Added override units capability for SetStatePlane()
|
||
82 | *
|
||
83 | * Revision 1.50 2003/05/28 19:16:42 warmerda
|
||
84 | * fixed up argument names and stuff for docs
|
||
85 | *
|
||
86 | * Revision 1.49 2003/03/12 14:25:01 warmerda
|
||
87 | * added NeedsQuoting() method
|
||
88 | *
|
||
89 | * Revision 1.48 2003/02/25 04:53:51 warmerda
|
||
90 | * added CopyGeogCSFrom() method
|
||
91 | *
|
||
92 | * Revision 1.47 2003/02/06 04:53:12 warmerda
|
||
93 | * added Fixup() method
|
||
94 | *
|
||
95 | * Revision 1.46 2003/01/08 18:14:28 warmerda
|
||
96 | * added FixupOrdering()
|
||
97 | */
|
||
98 | |||
99 | #ifndef _OGR_SPATIALREF_H_INCLUDED
|
||
100 | #define _OGR_SPATIALREF_H_INCLUDED
|
||
101 | |||
102 | #include "ogr_srs_api.h" |
||
103 | |||
104 | /**
|
||
105 | * \file ogr_spatialref.h
|
||
106 | *
|
||
107 | * Coordinate systems services.
|
||
108 | */
|
||
109 | |||
110 | /************************************************************************/
|
||
111 | /* OGR_SRSNode */
|
||
112 | /************************************************************************/
|
||
113 | |||
114 | /**
|
||
115 | * Objects of this class are used to represent value nodes in the parsed
|
||
116 | * representation of the WKT SRS format. For instance UNIT["METER",1]
|
||
117 | * would be rendered into three OGR_SRSNodes. The root node would have a
|
||
118 | * value of UNIT, and two children, the first with a value of METER, and the
|
||
119 | * second with a value of 1.
|
||
120 | *
|
||
121 | * Normally application code just interacts with the OGRSpatialReference
|
||
122 | * object, which uses the OGR_SRSNode to implement it's data structure;
|
||
123 | * however, this class is user accessable for detailed access to components
|
||
124 | * of an SRS definition.
|
||
125 | */
|
||
126 | |||
127 | class CPL_DLL OGR_SRSNode |
||
128 | { |
||
129 | char *pszValue;
|
||
130 | |||
131 | int nChildren;
|
||
132 | OGR_SRSNode **papoChildNodes; |
||
133 | |||
134 | OGR_SRSNode *poParent; |
||
135 | |||
136 | void ClearChildren();
|
||
137 | int NeedsQuoting() const; |
||
138 | |||
139 | public:
|
||
140 | OGR_SRSNode(const char * = NULL); |
||
141 | ~OGR_SRSNode(); |
||
142 | |||
143 | int IsLeafNode() const { return nChildren == 0; } |
||
144 | |||
145 | int GetChildCount() const { return nChildren; } |
||
146 | OGR_SRSNode *GetChild( int );
|
||
147 | const OGR_SRSNode *GetChild( int ) const; |
||
148 | |||
149 | OGR_SRSNode *GetNode( const char * ); |
||
150 | const OGR_SRSNode *GetNode( const char * ) const; |
||
151 | |||
152 | void InsertChild( OGR_SRSNode *, int ); |
||
153 | void AddChild( OGR_SRSNode * );
|
||
154 | int FindChild( const char * ) const; |
||
155 | void DestroyChild( int ); |
||
156 | void StripNodes( const char * ); |
||
157 | |||
158 | const char *GetValue() const { return pszValue; } |
||
159 | void SetValue( const char * ); |
||
160 | |||
161 | void MakeValueSafe();
|
||
162 | OGRErr FixupOrdering(); |
||
163 | |||
164 | OGR_SRSNode *Clone() const;
|
||
165 | |||
166 | OGRErr importFromWkt( char ** );
|
||
167 | OGRErr exportToWkt( char ** ) const; |
||
168 | OGRErr exportToPrettyWkt( char **, int = 1) const; |
||
169 | |||
170 | OGRErr applyRemapper( const char *pszNode, |
||
171 | char **papszSrcValues,
|
||
172 | char **papszDstValues,
|
||
173 | int nStepSize = 1, |
||
174 | int bChildOfHit = FALSE );
|
||
175 | }; |
||
176 | |||
177 | /************************************************************************/
|
||
178 | /* OGRSpatialReference */
|
||
179 | /************************************************************************/
|
||
180 | |||
181 | /**
|
||
182 | * This class respresents a OpenGIS Spatial Reference System, and contains
|
||
183 | * methods for converting between this object organization and well known
|
||
184 | * text (WKT) format. This object is reference counted as one instance of
|
||
185 | * the object is normally shared between many OGRGeometry objects.
|
||
186 | *
|
||
187 | * Normally application code can fetch needed parameter values for this
|
||
188 | * SRS using GetAttrValue(), but in special cases the underlying parse tree
|
||
189 | * (or OGR_SRSNode objects) can be accessed more directly.
|
||
190 | *
|
||
191 | * See <a href="osr_tutorial.html">the tutorial</a> for more information on
|
||
192 | * how to use this class.
|
||
193 | */
|
||
194 | |||
195 | class CPL_DLL OGRSpatialReference |
||
196 | { |
||
197 | int nRefCount;
|
||
198 | |||
199 | OGR_SRSNode *poRoot; |
||
200 | |||
201 | int bNormInfoSet;
|
||
202 | double dfFromGreenwich;
|
||
203 | double dfToMeter;
|
||
204 | double dfToDegrees;
|
||
205 | |||
206 | OGRErr ValidateProjection(); |
||
207 | int IsAliasFor( const char *, const char * ); |
||
208 | void GetNormInfo() const; |
||
209 | |||
210 | public:
|
||
211 | OGRSpatialReference(const OGRSpatialReference&);
|
||
212 | OGRSpatialReference(const char * = NULL); |
||
213 | |||
214 | virtual ~OGRSpatialReference(); |
||
215 | |||
216 | OGRSpatialReference &operator=(const OGRSpatialReference&);
|
||
217 | |||
218 | int Reference();
|
||
219 | int Dereference();
|
||
220 | int GetReferenceCount() const { return nRefCount; } |
||
221 | |||
222 | OGRSpatialReference *Clone() const;
|
||
223 | OGRSpatialReference *CloneGeogCS() const;
|
||
224 | |||
225 | OGRErr exportToWkt( char ** );
|
||
226 | OGRErr exportToPrettyWkt( char **, int = FALSE) const; |
||
227 | OGRErr exportToProj4( char ** ) const; |
||
228 | OGRErr exportToPCI( char **, char **, double ** ) const; |
||
229 | OGRErr exportToUSGS( long *, long *, double **, long * ) const; |
||
230 | OGRErr exportToXML( char **, const char * = NULL ) const; |
||
231 | OGRErr importFromWkt( char ** );
|
||
232 | OGRErr importFromProj4( const char * ); |
||
233 | OGRErr importFromEPSG( int );
|
||
234 | OGRErr importFromESRI( char ** );
|
||
235 | OGRErr importFromPCI( const char *pszProj, |
||
236 | const char *pszUnits = NULL, |
||
237 | double *padfPrjParams = NULL ); |
||
238 | OGRErr importFromUSGS( long iProjsys, long iZone, |
||
239 | double *padfPrjParams, long iDatum ); |
||
240 | OGRErr importFromWMSAUTO( const char *pszAutoDef ); |
||
241 | OGRErr importFromXML( const char * ); |
||
242 | OGRErr importFromDict( const char *pszDict, const char *pszCode ); |
||
243 | |||
244 | OGRErr morphToESRI(); |
||
245 | OGRErr morphFromESRI(); |
||
246 | |||
247 | OGRErr Validate(); |
||
248 | OGRErr StripCTParms( OGR_SRSNode * = NULL );
|
||
249 | OGRErr FixupOrdering(); |
||
250 | OGRErr Fixup(); |
||
251 | |||
252 | // Machinary for accessing parse nodes
|
||
253 | OGR_SRSNode *GetRoot() { return poRoot; }
|
||
254 | const OGR_SRSNode *GetRoot() const { return poRoot; } |
||
255 | void SetRoot( OGR_SRSNode * );
|
||
256 | |||
257 | OGR_SRSNode *GetAttrNode(const char *); |
||
258 | const OGR_SRSNode *GetAttrNode(const char *) const; |
||
259 | const char *GetAttrValue(const char *, int = 0) const; |
||
260 | |||
261 | OGRErr SetNode( const char *, const char * ); |
||
262 | OGRErr SetNode( const char *, double ); |
||
263 | |||
264 | OGRErr SetLinearUnits( const char *pszName, double dfInMeters ); |
||
265 | double GetLinearUnits( char ** = NULL ) const; |
||
266 | |||
267 | OGRErr SetAngularUnits( const char *pszName, double dfInRadians ); |
||
268 | double GetAngularUnits( char ** = NULL ) const; |
||
269 | |||
270 | double GetPrimeMeridian( char ** = NULL ) const; |
||
271 | |||
272 | int IsGeographic() const; |
||
273 | int IsProjected() const; |
||
274 | int IsLocal() const; |
||
275 | int IsSameGeogCS( const OGRSpatialReference * ) const; |
||
276 | int IsSame( const OGRSpatialReference * ) const; |
||
277 | |||
278 | void Clear();
|
||
279 | OGRErr SetLocalCS( const char * ); |
||
280 | OGRErr SetProjCS( const char * ); |
||
281 | OGRErr SetProjection( const char * ); |
||
282 | OGRErr SetGeogCS( const char * pszGeogName, |
||
283 | const char * pszDatumName, |
||
284 | const char * pszEllipsoidName, |
||
285 | double dfSemiMajor, double dfInvFlattening, |
||
286 | const char * pszPMName = NULL, |
||
287 | double dfPMOffset = 0.0, |
||
288 | const char * pszUnits = NULL, |
||
289 | double dfConvertToRadians = 0.0 ); |
||
290 | OGRErr SetWellKnownGeogCS( const char * ); |
||
291 | OGRErr CopyGeogCSFrom( const OGRSpatialReference * poSrcSRS );
|
||
292 | |||
293 | OGRErr SetFromUserInput( const char * ); |
||
294 | |||
295 | OGRErr SetTOWGS84( double, double, double, |
||
296 | double = 0.0, double = 0.0, double = 0.0, |
||
297 | double = 0.0 ); |
||
298 | OGRErr GetTOWGS84( double *padfCoef, int nCoeff = 7 ) const; |
||
299 | |||
300 | double GetSemiMajor( OGRErr * = NULL ) const; |
||
301 | double GetSemiMinor( OGRErr * = NULL ) const; |
||
302 | double GetInvFlattening( OGRErr * = NULL ) const; |
||
303 | |||
304 | OGRErr SetAuthority( const char * pszTargetKey, |
||
305 | const char * pszAuthority, |
||
306 | int nCode );
|
||
307 | |||
308 | OGRErr AutoIdentifyEPSG(); |
||
309 | |||
310 | const char *GetAuthorityCode( const char * pszTargetKey ) const; |
||
311 | const char *GetAuthorityName( const char * pszTargetKey ) const; |
||
312 | |||
313 | OGRErr SetProjParm( const char *, double ); |
||
314 | double GetProjParm( const char *, double =0.0, OGRErr* = NULL ) const; |
||
315 | |||
316 | OGRErr SetNormProjParm( const char *, double ); |
||
317 | double GetNormProjParm( const char *, double=0.0, OGRErr* =NULL)const; |
||
318 | |||
319 | static int IsAngularParameter( const char * ); |
||
320 | static int IsLongitudeParameter( const char * ); |
||
321 | static int IsLinearParameter( const char * ); |
||
322 | |||
323 | /** Albers Conic Equal Area */
|
||
324 | OGRErr SetACEA( double dfStdP1, double dfStdP2, |
||
325 | double dfCenterLat, double dfCenterLong, |
||
326 | double dfFalseEasting, double dfFalseNorthing ); |
||
327 | |||
328 | /** Azimuthal Equidistant */
|
||
329 | OGRErr SetAE( double dfCenterLat, double dfCenterLong, |
||
330 | double dfFalseEasting, double dfFalseNorthing ); |
||
331 | |||
332 | /** Cylindrical Equal Area */
|
||
333 | OGRErr SetCEA( double dfStdP1, double dfCentralMeridian, |
||
334 | double dfFalseEasting, double dfFalseNorthing ); |
||
335 | |||
336 | /** Cassini-Soldner */
|
||
337 | OGRErr SetCS( double dfCenterLat, double dfCenterLong, |
||
338 | double dfFalseEasting, double dfFalseNorthing ); |
||
339 | |||
340 | /** Equidistant Conic */
|
||
341 | OGRErr SetEC( double dfStdP1, double dfStdP2, |
||
342 | double dfCenterLat, double dfCenterLong, |
||
343 | double dfFalseEasting, double dfFalseNorthing ); |
||
344 | |||
345 | /** Eckert IV */
|
||
346 | OGRErr SetEckertIV( double dfCentralMeridian,
|
||
347 | double dfFalseEasting, double dfFalseNorthing ); |
||
348 | |||
349 | /** Eckert VI */
|
||
350 | OGRErr SetEckertVI( double dfCentralMeridian,
|
||
351 | double dfFalseEasting, double dfFalseNorthing ); |
||
352 | |||
353 | /** Equirectangular */
|
||
354 | OGRErr SetEquirectangular(double dfCenterLat, double dfCenterLong, |
||
355 | double dfFalseEasting, double dfFalseNorthing ); |
||
356 | |||
357 | /** Gall Stereograpic */
|
||
358 | OGRErr SetGS( double dfCentralMeridian,
|
||
359 | double dfFalseEasting, double dfFalseNorthing ); |
||
360 | |||
361 | /** Gnomonic */
|
||
362 | OGRErr SetGnomonic(double dfCenterLat, double dfCenterLong, |
||
363 | double dfFalseEasting, double dfFalseNorthing ); |
||
364 | |||
365 | OGRErr SetHOM( double dfCenterLat, double dfCenterLong, |
||
366 | double dfAzimuth, double dfRectToSkew, |
||
367 | double dfScale,
|
||
368 | double dfFalseEasting, double dfFalseNorthing ); |
||
369 | |||
370 | OGRErr SetHOM2PNO( double dfCenterLat,
|
||
371 | double dfLat1, double dfLong1, |
||
372 | double dfLat2, double dfLong2, |
||
373 | double dfScale,
|
||
374 | double dfFalseEasting, double dfFalseNorthing ); |
||
375 | |||
376 | /** Krovak Oblique Conic Conformal */
|
||
377 | OGRErr SetKrovak( double dfCenterLat, double dfCenterLong, |
||
378 | double dfAzimuth, double dfPseudoStdParallelLat, |
||
379 | double dfScale,
|
||
380 | double dfFalseEasting, double dfFalseNorthing ); |
||
381 | |||
382 | /** Lambert Azimuthal Equal-Area */
|
||
383 | OGRErr SetLAEA( double dfCenterLat, double dfCenterLong, |
||
384 | double dfFalseEasting, double dfFalseNorthing ); |
||
385 | |||
386 | /** Lambert Conformal Conic */
|
||
387 | OGRErr SetLCC( double dfStdP1, double dfStdP2, |
||
388 | double dfCenterLat, double dfCenterLong, |
||
389 | double dfFalseEasting, double dfFalseNorthing ); |
||
390 | |||
391 | /** Lambert Conformal Conic 1SP */
|
||
392 | OGRErr SetLCC1SP( double dfCenterLat, double dfCenterLong, |
||
393 | double dfScale,
|
||
394 | double dfFalseEasting, double dfFalseNorthing ); |
||
395 | |||
396 | /** Lambert Conformal Conic (Belgium) */
|
||
397 | OGRErr SetLCCB( double dfStdP1, double dfStdP2, |
||
398 | double dfCenterLat, double dfCenterLong, |
||
399 | double dfFalseEasting, double dfFalseNorthing ); |
||
400 | |||
401 | /** Miller Cylindrical */
|
||
402 | OGRErr SetMC( double dfCenterLat, double dfCenterLong, |
||
403 | double dfFalseEasting, double dfFalseNorthing ); |
||
404 | |||
405 | /** Mercator */
|
||
406 | OGRErr SetMercator( double dfCenterLat, double dfCenterLong, |
||
407 | double dfScale,
|
||
408 | double dfFalseEasting, double dfFalseNorthing ); |
||
409 | |||
410 | /** Mollweide */
|
||
411 | OGRErr SetMollweide( double dfCentralMeridian,
|
||
412 | double dfFalseEasting, double dfFalseNorthing ); |
||
413 | |||
414 | /** New Zealand Map Grid */
|
||
415 | OGRErr SetNZMG( double dfCenterLat, double dfCenterLong, |
||
416 | double dfFalseEasting, double dfFalseNorthing ); |
||
417 | |||
418 | /** Oblique Stereographic */
|
||
419 | OGRErr SetOS( double dfOriginLat, double dfCMeridian, |
||
420 | double dfScale,
|
||
421 | double dfFalseEasting,double dfFalseNorthing); |
||
422 | |||
423 | /** Orthographic */
|
||
424 | OGRErr SetOrthographic( double dfCenterLat, double dfCenterLong, |
||
425 | double dfFalseEasting,double dfFalseNorthing); |
||
426 | |||
427 | /** Polyconic */
|
||
428 | OGRErr SetPolyconic( double dfCenterLat, double dfCenterLong, |
||
429 | double dfFalseEasting, double dfFalseNorthing ); |
||
430 | |||
431 | /** Polar Stereographic */
|
||
432 | OGRErr SetPS( double dfCenterLat, double dfCenterLong, |
||
433 | double dfScale,
|
||
434 | double dfFalseEasting, double dfFalseNorthing); |
||
435 | |||
436 | /** Robinson */
|
||
437 | OGRErr SetRobinson( double dfCenterLong,
|
||
438 | double dfFalseEasting, double dfFalseNorthing ); |
||
439 | |||
440 | /** Sinusoidal */
|
||
441 | OGRErr SetSinusoidal( double dfCenterLong,
|
||
442 | double dfFalseEasting, double dfFalseNorthing ); |
||
443 | |||
444 | /** Stereographic */
|
||
445 | OGRErr SetStereographic( double dfCenterLat, double dfCenterLong, |
||
446 | double dfScale,
|
||
447 | double dfFalseEasting,double dfFalseNorthing); |
||
448 | |||
449 | /** Swiss Oblique Cylindrical */
|
||
450 | OGRErr SetSOC( double dfLatitudeOfOrigin, double dfCentralMeridian, |
||
451 | double dfFalseEasting, double dfFalseNorthing ); |
||
452 | |||
453 | /** Transverse Mercator */
|
||
454 | OGRErr SetTM( double dfCenterLat, double dfCenterLong, |
||
455 | double dfScale,
|
||
456 | double dfFalseEasting, double dfFalseNorthing ); |
||
457 | |||
458 | /** Transverse Mercator variants. */
|
||
459 | OGRErr SetTMVariant( const char *pszVariantName, |
||
460 | double dfCenterLat, double dfCenterLong, |
||
461 | double dfScale,
|
||
462 | double dfFalseEasting, double dfFalseNorthing ); |
||
463 | |||
464 | /** Tunesia Mining Grid */
|
||
465 | OGRErr SetTMG( double dfCenterLat, double dfCenterLong, |
||
466 | double dfFalseEasting, double dfFalseNorthing ); |
||
467 | |||
468 | /** Transverse Mercator (South Oriented) */
|
||
469 | OGRErr SetTMSO( double dfCenterLat, double dfCenterLong, |
||
470 | double dfScale,
|
||
471 | double dfFalseEasting, double dfFalseNorthing ); |
||
472 | |||
473 | /** VanDerGrinten */
|
||
474 | OGRErr SetVDG( double dfCenterLong,
|
||
475 | double dfFalseEasting, double dfFalseNorthing ); |
||
476 | |||
477 | /** Universal Transverse Mercator */
|
||
478 | OGRErr SetUTM( int nZone, int bNorth = TRUE ); |
||
479 | int GetUTMZone( int *pbNorth = NULL ) const; |
||
480 | |||
481 | /** State Plane */
|
||
482 | OGRErr SetStatePlane( int nZone, int bNAD83 = TRUE, |
||
483 | const char *pszOverrideUnitName = NULL, |
||
484 | double dfOverrideUnit = 0.0 ); |
||
485 | }; |
||
486 | |||
487 | /************************************************************************/
|
||
488 | /* OGRCoordinateTransformation */
|
||
489 | /* */
|
||
490 | /* This is really just used as a base class for a private */
|
||
491 | /* implementation. */
|
||
492 | /************************************************************************/
|
||
493 | |||
494 | /**
|
||
495 | * Object for transforming between coordinate systems.
|
||
496 | *
|
||
497 | * Also, see OGRCreateSpatialReference() for creating transformations.
|
||
498 | */
|
||
499 | |||
500 | class CPL_DLL OGRCoordinateTransformation |
||
501 | { |
||
502 | public:
|
||
503 | virtual ~OGRCoordinateTransformation() {} |
||
504 | |||
505 | // From CT_CoordinateTransformation
|
||
506 | |||
507 | /** Fetch internal source coordinate system. */
|
||
508 | virtual OGRSpatialReference *GetSourceCS() = 0;
|
||
509 | |||
510 | /** Fetch internal target coordinate system. */
|
||
511 | virtual OGRSpatialReference *GetTargetCS() = 0;
|
||
512 | |||
513 | // From CT_MathTransform
|
||
514 | |||
515 | /**
|
||
516 | * Transform points from source to destination space.
|
||
517 | *
|
||
518 | * This method is the same as the C function OCTTransform().
|
||
519 | *
|
||
520 | * The method TransformEx() allows extended success information to
|
||
521 | * be captured indicating which points failed to transform.
|
||
522 | *
|
||
523 | * @param nCount number of points to transform.
|
||
524 | * @param x array of nCount X vertices, modified in place.
|
||
525 | * @param y array of nCount Y vertices, modified in place.
|
||
526 | * @param z array of nCount Z vertices, modified in place.
|
||
527 | * @return TRUE on success, or FALSE if some or all points fail to
|
||
528 | * transform.
|
||
529 | */
|
||
530 | virtual int Transform( int nCount, |
||
531 | double *x, double *y, double *z = NULL ) = 0; |
||
532 | |||
533 | /**
|
||
534 | * Transform points from source to destination space.
|
||
535 | *
|
||
536 | * This method is the same as the C function OCTTransformEx().
|
||
537 | *
|
||
538 | * @param nCount number of points to transform.
|
||
539 | * @param x array of nCount X vertices, modified in place.
|
||
540 | * @param y array of nCount Y vertices, modified in place.
|
||
541 | * @param z array of nCount Z vertices, modified in place.
|
||
542 | * @param pabSuccess array of per-point flags set to TRUE if that point
|
||
543 | * transforms, or FALSE if it does not.
|
||
544 | *
|
||
545 | * @return TRUE if some or all points transform successfully, or FALSE if
|
||
546 | * if none transform.
|
||
547 | */
|
||
548 | virtual int TransformEx( int nCount, |
||
549 | double *x, double *y, double *z = NULL, |
||
550 | int *pabSuccess = NULL ) = 0; |
||
551 | |||
552 | }; |
||
553 | |||
554 | OGRCoordinateTransformation CPL_DLL * |
||
555 | OGRCreateCoordinateTransformation( OGRSpatialReference *poSource, |
||
556 | OGRSpatialReference *poTarget ); |
||
557 | |||
558 | #endif /* ndef _OGR_SPATIALREF_H_INCLUDED */ |