UNCLASSIFIED
GeographicTranslator
Main Page
Namespaces
Classes
Files
File List
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Enumerations
Enumerator
Friends
Macros
master
geotrans3.7
CCS
src
dtcc
CoordinateSystems
omerc
ObliqueMercator.h
Go to the documentation of this file.
1
// CLASSIFICATION: UNCLASSIFIED
2
3
#ifndef ObliqueMercator_H
4
#define ObliqueMercator_H
5
6
/***************************************************************************/
7
/* RSC IDENTIFIER: OBLIQUE MERCATOR
8
*
9
* ABSTRACT
10
*
11
* This component provides conversions between Geodetic coordinates
12
* (latitude and longitude in radians) and Oblique Mercator
13
* projection coordinates (easting and northing in meters).
14
*
15
* ERROR HANDLING
16
*
17
* This component checks parameters for valid values. If an invalid value
18
* is found the error code is combined with the current error code using
19
* the bitwise or. This combining allows multiple error codes to be
20
* returned. The possible error codes are:
21
*
22
* OMERC_NO_ERROR : No errors occurred in function
23
* OMERC_LAT_ERROR : Latitude outside of valid range
24
* (-90 to 90 degrees)
25
* OMERC_LON_ERROR : Longitude outside of valid range
26
* (-180 to 360 degrees)
27
* OMERC_ORIGIN_LAT_ERROR : Origin latitude outside of valid range
28
* (-89 to 89 degrees)
29
* OMERC_LAT1_ERROR : First latitude outside of valid range
30
* (-89 to 89 degrees, excluding 0)
31
* OMERC_LAT2_ERROR : First latitude outside of valid range
32
* (-89 to 89 degrees)
33
* OMERC_LON1_ERROR : First longitude outside of valid range
34
* (-180 to 360 degrees)
35
* OMERC_LON2_ERROR : Second longitude outside of valid range
36
* (-180 to 360 degrees)
37
* OMERC_LAT1_LAT2_ERROR : First and second latitudes can not be equal
38
* OMERC_DIFF_HEMISPHERE_ERROR: First and second latitudes can not be
39
* in different hemispheres
40
* OMERC_EASTING_ERROR : Easting outside of valid range
41
* (depends on ellipsoid and projection
42
* parameters)
43
* OMERC_NORTHING_ERROR : Northing outside of valid range
44
* (depends on ellipsoid and projection
45
* parameters)
46
* OMERC_A_ERROR : Semi-major axis less than or equal to zero
47
* OMERC_INV_F_ERROR : Inverse flattening outside of valid range
48
* (250 to 350)
49
* OMERC_SCALE_FACTOR_ERROR : Scale factor outside of valid
50
* range (0.3 to 3.0)
51
* OMERC_LON_WARNING : Distortion will result if longitude is 90 degrees or more
52
* from the Central Meridian
53
*
54
* REUSE NOTES
55
*
56
* OBLIQUE MERCATOR is intended for reuse by any application that
57
* performs an Oblique Mercator projection or its inverse.
58
*
59
* REFERENCES
60
*
61
* Further information on OBLIQUE MERCATOR can be found in the Reuse Manual.
62
*
63
* OBLIQUE MERCATOR originated from: U.S. Army Topographic Engineering Center
64
* Geospatial Information Division
65
* 7701 Telegraph Road
66
* Alexandria, VA 22310-3864
67
*
68
* LICENSES
69
*
70
* None apply to this component.
71
*
72
* RESTRICTIONS
73
*
74
* OBLIQUE MERCATOR has no restrictions.
75
*
76
* ENVIRONMENT
77
*
78
* OBLIQUE MERCATOR was tested and certified in the following environments:
79
*
80
* 1. Solaris 2.5 with GCC, version 2.8.1
81
* 2. MSDOS with MS Visual C++, version 6
82
*
83
* MODIFICATIONS
84
*
85
* Date Description
86
* ---- -----------
87
* 06-07-00 Original Code
88
* 03-02-07 Original C++ Code
89
*
90
*
91
*/
92
93
94
#include "
CoordinateSystem.h
"
95
96
97
namespace
MSP
98
{
99
namespace
CCS
100
{
101
class
ObliqueMercatorParameters;
102
class
MapProjectionCoordinates;
103
class
GeodeticCoordinates;
104
105
106
/***************************************************************************/
107
/*
108
* DEFINES
109
*/
110
111
class
ObliqueMercator
:
public
CoordinateSystem
112
{
113
public
:
114
115
/*
116
* The constructor receives the ellipsoid parameters and
117
* projection parameters as inputs, and sets the corresponding state
118
* variables. If any errors occur, an exception is thrown with a description
119
* of the error.
120
*
121
* ellipsoidSemiMajorAxis : Semi-major axis of ellipsoid, in meters (input)
122
* ellipsoidFlattening : Flattening of ellipsoid (input)
123
* originLatitude : Latitude, in radians, at which the (input)
124
* point scale factor is 1.0
125
* longitude1 : Longitude, in radians, of first point lying on
126
* central line (input)
127
* latitude1 : Latitude, in radians, of first point lying on
128
* central line (input)
129
* longitude2 : Longitude, in radians, of second point lying on
130
* central line (input)
131
* latitude2 : Latitude, in radians, of second point lying on
132
* central line (input)
133
* falseEasting : A coordinate value, in meters, assigned to the
134
* central meridian of the projection (input)
135
* falseNorthing : A coordinate value, in meters, assigned to the
136
* origin latitude of the projection (input)
137
* scaleFactor : Multiplier which reduces distances in the
138
* projection to the actual distance on the
139
* ellipsoid (input)
140
* errorStatus : Error status (output)
141
*/
142
143
ObliqueMercator
(
double
ellipsoidSemiMajorAxis,
double
ellipsoidFlattening,
double
originLatitude,
double
longitude1,
double
latitude1,
double
longitude2,
double
latitude2,
double
falseEasting,
double
falseNorthing,
double
scaleFactor );
144
145
146
ObliqueMercator
(
const
ObliqueMercator
&om );
147
148
149
~ObliqueMercator
(
void
);
150
151
152
ObliqueMercator
&
operator=
(
const
ObliqueMercator
&om );
153
154
155
/*
156
* The function getParameters returns the current ellipsoid
157
* parameters and Oblique Mercator projection parameters.
158
*
159
* ellipsoidSemiMajorAxis : Semi-major axis of ellipsoid, in meters (output)
160
* ellipsoidFlattening : Flattening of ellipsoid (output)
161
* originLatitude : Latitude, in radians, at which the (output)
162
* point scale factor is 1.0
163
* longitude1 : Longitude, in radians, of first point lying on
164
* central line (output)
165
* latitude1 : Latitude, in radians, of first point lying on
166
* central line (output)
167
* longitude2 : Longitude, in radians, of second point lying on
168
* central line (output)
169
* latitude2 : Latitude, in radians, of second point lying on
170
* central line (output)
171
* falseEasting : A coordinate value, in meters, assigned to the
172
* central meridian of the projection (output)
173
* falseNorthing : A coordinate value, in meters, assigned to the
174
* origin latitude of the projection (output)
175
* scaleFactor : Multiplier which reduces distances in the
176
* projection to the actual distance on the
177
* ellipsoid (output)
178
*/
179
180
ObliqueMercatorParameters
*
getParameters
()
const
;
181
182
183
/*
184
* The function convertFromGeodetic converts geodetic (latitude and
185
* longitude) coordinates to Oblique Mercator projection (easting and
186
* northing) coordinates, according to the current ellipsoid and Oblique Mercator
187
* projection parameters. If any errors occur, an exception is thrown with a description
188
* of the error.
189
*
190
* longitude : Longitude (lambda), in radians (input)
191
* latitude : Latitude (phi), in radians (input)
192
* easting : Easting (X), in meters (output)
193
* northing : Northing (Y), in meters (output)
194
*/
195
196
MSP::CCS::MapProjectionCoordinates
*
convertFromGeodetic
(
MSP::CCS::GeodeticCoordinates
* geodeticCoordinates );
197
198
199
/*
200
* The function convertToGeodetic converts Oblique Mercator projection
201
* (easting and northing) coordinates to geodetic (latitude and longitude)
202
* coordinates, according to the current ellipsoid and Oblique Mercator projection
203
* coordinates. If any errors occur, an exception is thrown with a description
204
* of the error.
205
*
206
* easting : Easting (X), in meters (input)
207
* northing : Northing (Y), in meters (input)
208
* longitude : Longitude (lambda), in radians (output)
209
* latitude : Latitude (phi), in radians (output)
210
*/
211
212
MSP::CCS::GeodeticCoordinates
*
convertToGeodetic
(
MSP::CCS::MapProjectionCoordinates
* mapProjectionCoordinates );
213
214
private
:
215
216
/* Ellipsoid Parameters, default to WGS 84 */
217
double
es;
218
double
es_OVER_2;
219
double
OMerc_A;
220
double
OMerc_B;
221
double
OMerc_E;
222
double
OMerc_gamma;
223
double
OMerc_azimuth;
/* Azimuth of central line as it crosses origin lat */
224
double
OMerc_Origin_Long;
/* Longitude at center of projection */
225
double
cos_gamma;
226
double
sin_gamma;
227
double
sin_azimuth;
228
double
cos_azimuth;
229
double
A_over_B;
230
double
B_over_A;
231
double
OMerc_u;
/* Coordinates for center point (uc , vc), vc = 0 */
232
/* at center lat and lon */
233
/* Oblique Mercator projection Parameters */
234
double
OMerc_Origin_Lat;
/* Latitude of projection center, in radians */
235
double
OMerc_Lat_1;
/* Latitude of first point lying on central line */
236
double
OMerc_Lon_1;
/* Longitude of first point lying on central line */
237
double
OMerc_Lat_2;
/* Latitude of second point lying on central line */
238
double
OMerc_Lon_2;
/* Longitude of second point lying on central line */
239
double
OMerc_Scale_Factor;
/* Scale factor at projection center */
240
double
OMerc_False_Northing;
/* False northing, in meters, at projection center */
241
double
OMerc_False_Easting;
/* False easting, in meters, at projection center */
242
243
double
OMerc_Delta_Northing;
244
double
OMerc_Delta_Easting;
245
246
247
double
omercT(
double
lat,
double
e_sinlat,
double
e_over_2 );
248
249
};
250
}
251
}
252
253
#endif
254
255
256
// CLASSIFICATION: UNCLASSIFIED
Generated on Tue Feb 16 2016 14:54:02 for GeographicTranslator by doxygen 1.8.2