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