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
mgrs
MGRS.h
Go to the documentation of this file.
1
// CLASSIFICATION: UNCLASSIFIED
2
3
#ifndef MGRS_H
4
#define MGRS_H
5
6
/***************************************************************************/
7
/* RSC IDENTIFIER: MGRS
8
*
9
* ABSTRACT
10
*
11
* This component converts between geodetic coordinates (latitude and
12
* longitude) and Military Grid Reference System (MGRS) coordinates.
13
*
14
* ERROR HANDLING
15
*
16
* This component checks parameters for valid values. If an invalid value
17
* is found, the error code is combined with the current error code using
18
* the bitwise or. This combining allows multiple error codes to be
19
* returned. The possible error codes are:
20
*
21
* MGRS_NO_ERROR : No errors occurred in function
22
* MGRS_LAT_ERROR : Latitude outside of valid range
23
* (-90 to 90 degrees)
24
* MGRS_LON_ERROR : Longitude outside of valid range
25
* (-180 to 360 degrees)
26
* MGRS_STR_ERROR : An MGRS string error: string too long,
27
* too short, or badly formed
28
* MGRS_PRECISION_ERROR : The precision must be between 0 and 5
29
* inclusive.
30
* MGRS_A_ERROR : Semi-major axis less than or equal to zero
31
* MGRS_INV_F_ERROR : Inverse flattening outside of valid range
32
* (250 to 350)
33
* MGRS_EASTING_ERROR : Easting outside of valid range
34
* (100,000 to 900,000 meters for UTM)
35
* (0 to 4,000,000 meters for UPS)
36
* MGRS_NORTHING_ERROR : Northing outside of valid range
37
* (0 to 10,000,000 meters for UTM)
38
* (0 to 4,000,000 meters for UPS)
39
* MGRS_ZONE_ERROR : Zone outside of valid range (1 to 60)
40
* MGRS_HEMISPHERE_ERROR : Invalid hemisphere ('N' or 'S')
41
*
42
* REUSE NOTES
43
*
44
* MGRS is intended for reuse by any application that does conversions
45
* between geodetic coordinates and MGRS coordinates.
46
*
47
* REFERENCES
48
*
49
* Further information on MGRS can be found in the Reuse Manual.
50
*
51
* MGRS originated from : U.S. Army Topographic Engineering Center
52
* Geospatial Information Division
53
* 7701 Telegraph Road
54
* Alexandria, VA 22310-3864
55
*
56
* LICENSES
57
*
58
* None apply to this component.
59
*
60
* RESTRICTIONS
61
*
62
*
63
* ENVIRONMENT
64
*
65
* MGRS was tested and certified in the following environments:
66
*
67
* 1. Solaris 2.5 with GCC version 2.8.1
68
* 2. Windows 95 with MS Visual C++ version 6
69
*
70
* MODIFICATIONS
71
*
72
* Date Description
73
* ---- -----------
74
* 2-27-07 Original Code
75
*/
76
77
78
#include "
CoordinateSystem.h
"
79
80
81
namespace
MSP
82
{
83
namespace
CCS
84
{
85
class
UPS;
86
class
UTM;
87
class
EllipsoidParameters;
88
class
MGRSorUSNGCoordinates;
89
class
GeodeticCoordinates;
90
class
UPSCoordinates;
91
class
UTMCoordinates;
92
93
#define MGRS_LETTERS 3
94
95
/**********************************************************************/
96
/*
97
* DEFINES
98
*/
99
100
class
MSP_DTCC_API
MGRS
:
public
CoordinateSystem
101
{
102
public
:
103
104
/*
105
* The constructor receives the ellipsoid parameters and sets
106
* the corresponding state variables. If any errors occur,
107
* an exception is thrown with a description of the error.
108
*
109
* ellipsoidSemiMajorAxis : Semi-major axis of ellipsoid (m) (input)
110
* ellipsoidFlattening : Flattening of ellipsoid (input)
111
* ellipsoid_Code : 2-letter code for ellipsoid (input)
112
*/
113
114
MGRS
(
115
double
ellipsoidSemiMajorAxis,
116
double
ellipsoidFlattening,
117
char
* ellipsoidCode );
118
119
120
MGRS
(
const
MGRS
&m );
121
122
123
~
MGRS
(
void
);
124
125
126
MGRS
& operator=(
const
MGRS
&m );
127
128
129
/*
130
* The function getParameters returns the current ellipsoid
131
* parameters.
132
*
133
* ellipsoidSemiMajorAxis : Semi-major axis of ellipsoid, (m) (output)
134
* ellipsoidFlattening : Flattening of ellipsoid (output)
135
* ellipsoidCode : 2-letter code for ellipsoid (output)
136
*/
137
138
EllipsoidParameters
* getParameters()
const
;
139
140
141
/*
142
* The function convertFromGeodetic converts Geodetic (latitude and
143
* longitude) coordinates to an MGRS coordinate string, according to the
144
* current ellipsoid parameters. If any errors occur,
145
* an exception is thrown with a description of the error.
146
*
147
* latitude : Latitude in radians (input)
148
* longitude : Longitude in radians (input)
149
* precision : Precision level of MGRS string (input)
150
* MGRSString : MGRS coordinate string (output)
151
*
152
*/
153
154
MSP::CCS::MGRSorUSNGCoordinates
* convertFromGeodetic(
155
MSP::CCS::GeodeticCoordinates
* geodeticCoordinates,
156
long
precision );
157
158
/*
159
* The function convertToGeodetic converts an MGRS coordinate string
160
* to Geodetic (latitude and longitude) coordinates
161
* according to the current ellipsoid parameters. If any errors occur,
162
* an exception is thrown with a description of the error.
163
*
164
* MGRS : MGRS coordinate string (input)
165
* latitude : Latitude in radians (output)
166
* longitude : Longitude in radians (output)
167
*
168
*/
169
170
MSP::CCS::GeodeticCoordinates
* convertToGeodetic(
171
MSP::CCS::MGRSorUSNGCoordinates
* mgrsCoordinates );
172
173
174
/*
175
* The function convertFromUTM converts UTM (zone, easting, and
176
* northing) coordinates to an MGRS coordinate string, according to the
177
* current ellipsoid parameters. If any errors occur,
178
* an exception is thrown with a description of the error.
179
*
180
* zone : UTM zone (input)
181
* hemisphere : North or South hemisphere (input)
182
* easting : Easting (X) in meters (input)
183
* northing : Northing (Y) in meters (input)
184
* precision : Precision level of MGRS string (input)
185
* MGRSString : MGRS coordinate string (output)
186
*/
187
188
MSP::CCS::MGRSorUSNGCoordinates
* convertFromUTM(
189
UTMCoordinates
* utmCoordinates,
long
precision );
190
191
192
/*
193
* The function convertToUTM converts an MGRS coordinate string
194
* to UTM projection (zone, hemisphere, easting and northing) coordinates
195
* according to the current ellipsoid parameters. If any errors occur,
196
* an exception is thrown with a description of the error.
197
*
198
* MGRSString : MGRS coordinate string (input)
199
* zone : UTM zone (output)
200
* hemisphere : North or South hemisphere (output)
201
* easting : Easting (X) in meters (output)
202
* northing : Northing (Y) in meters (output)
203
*/
204
205
MSP::CCS::UTMCoordinates
* convertToUTM(
206
MSP::CCS::MGRSorUSNGCoordinates
* mgrsorUSNGCoordinates );
207
208
/*
209
* The function convertFromUPS converts UPS (hemisphere, easting,
210
* and northing) coordinates to an MGRS coordinate string according to
211
* the current ellipsoid parameters. If any errors occur,
212
* an exception is thrown with a description of the error.
213
*
214
* hemisphere : Hemisphere either 'N' or 'S' (input)
215
* easting : Easting/X in meters (input)
216
* northing : Northing/Y in meters (input)
217
* precision : Precision level of MGRS string (input)
218
* MGRSString : MGRS coordinate string (output)
219
*/
220
221
MSP::CCS::MGRSorUSNGCoordinates
* convertFromUPS(
222
MSP::CCS::UPSCoordinates
* upsCoordinates,
long
precision );
223
224
225
/*
226
* The function convertToUPS converts an MGRS coordinate string
227
* to UPS (hemisphere, easting, and northing) coordinates, according
228
* to the current ellipsoid parameters. If any errors occur,
229
* an exception is thrown with a description of the error.
230
*
231
* MGRSString : MGRS coordinate string (input)
232
* hemisphere : Hemisphere either 'N' or 'S' (output)
233
* easting : Easting/X in meters (output)
234
* northing : Northing/Y in meters (output)
235
*/
236
237
MSP::CCS::UPSCoordinates
* convertToUPS(
238
MSP::CCS::MGRSorUSNGCoordinates
* mgrsorUSNGCoordinates );
239
240
private
:
241
242
UPS
* ups;
243
UTM
* utm;
244
245
char
MGRSEllipsoidCode[3];
246
247
248
/*
249
* The function fromUTM calculates an MGRS coordinate string
250
* based on the zone, latitude, easting and northing.
251
*
252
* zone : Zone number (input)
253
* hemisphere : Hemisphere (input)
254
* longitude : Longitude in radians (input)
255
* latitude : Latitude in radians (input)
256
* easting : Easting (input)
257
* northing : Northing (input)
258
* precision : Precision (input)
259
* MGRSString : MGRS coordinate string (output)
260
*/
261
262
MSP::CCS::MGRSorUSNGCoordinates
* fromUTM(
263
MSP::CCS::UTMCoordinates
* utmCoordinates,
264
double
longitude,
265
double
latitude,
266
long
precision );
267
268
/*
269
* The function toUTM converts an MGRS coordinate string
270
* to UTM projection (zone, hemisphere, easting and northing) coordinates
271
* according to the current ellipsoid parameters. If any errors occur,
272
* an exception is thrown with a description of the error.
273
*
274
* MGRSString : MGRS coordinate string (input)
275
* zone : UTM zone (output)
276
* hemisphere : North or South hemisphere (output)
277
* easting : Easting (X) in meters (output)
278
* northing : Northing (Y) in meters (output)
279
*/
280
281
MSP::CCS::UTMCoordinates
* toUTM(
282
long
zone,
283
long
letters[
MGRS_LETTERS
],
284
double
easting,
285
double
northing,
286
long
in_precision );
287
288
289
/*
290
* The function fromUPS converts UPS (hemisphere, easting,
291
* and northing) coordinates to an MGRS coordinate string according to
292
* the current ellipsoid parameters.
293
*
294
* hemisphere : Hemisphere either 'N' or 'S' (input)
295
* easting : Easting/X in meters (input)
296
* northing : Northing/Y in meters (input)
297
* precision : Precision level of MGRS string (input)
298
* MGRSString : MGRS coordinate string (output)
299
*/
300
301
MSP::CCS::MGRSorUSNGCoordinates
* fromUPS(
302
MSP::CCS::UPSCoordinates
* upsCoordinates,
303
long
precision );
304
305
/*
306
* The function toUPS converts an MGRS coordinate string
307
* to UPS (hemisphere, easting, and northing) coordinates, according
308
* to the current ellipsoid parameters. If any errors occur, an
309
* exception is thrown with a description of the error.
310
*
311
* MGRSString : MGRS coordinate string (input)
312
* hemisphere : Hemisphere either 'N' or 'S' (output)
313
* easting : Easting/X in meters (output)
314
* northing : Northing/Y in meters (output)
315
*/
316
317
MSP::CCS::UPSCoordinates
* toUPS(
318
long
letters[MGRS_LETTERS],
319
double
easting,
double
northing );
320
321
/*
322
* The function getGridValues sets the letter range used for
323
* the 2nd letter in the MGRS coordinate string, based on the set
324
* number of the utm zone. It also sets the pattern offset using a
325
* value of A for the second letter of the grid square, based on
326
* the grid pattern and set number of the utm zone.
327
*
328
* zone : Zone number (input)
329
* ltr2_low_value : 2nd letter low number (output)
330
* ltr2_high_value : 2nd letter high number (output)
331
* pattern_offset : Pattern offset (output)
332
*/
333
334
void
getGridValues(
335
long
zone,
336
long
* ltr2_low_value,
337
long
* ltr2_high_value,
338
double
* pattern_offset );
339
340
341
/*
342
* The function getLatitudeBandMinNorthing receives a latitude band
343
* letter and uses the Latitude_Band_Table to determine the
344
* minimum northing and northing offset for that latitude band letter.
345
*
346
* letter : Latitude band letter (input)
347
* min_northing : Minimum northing for that letter (output)
348
* northing_offset : Latitude band northing offset (output)
349
*/
350
351
void
getLatitudeBandMinNorthing(
352
long
letter,
double
* min_northing,
double
* northing_offset );
353
354
355
/*
356
* The function inLatitudeRange receives a latitude band letter
357
* and uses the Latitude_Band_Table to determine if the latitude
358
* falls within the band boundaries for that latitude band letter.
359
*
360
* letter : Latitude band letter (input)
361
* latitude : Latitude to test (input)
362
* border : Border added to band in radians (input)
363
*/
364
365
bool
inLatitudeRange(
long
letter,
double
latitude,
double
border );
366
367
368
/*
369
* The function getLatitudeLetter receives a latitude value
370
* and uses the Latitude_Band_Table to determine the latitude band
371
* letter for that latitude.
372
*
373
* latitude : Latitude (input)
374
* letter : Latitude band letter (output)
375
*/
376
377
void
getLatitudeLetter(
double
latitude,
int
* letter );
378
};
379
}
380
}
381
382
#endif
383
384
385
// CLASSIFICATION: UNCLASSIFIED
Generated on Tue Feb 16 2016 14:54:02 for GeographicTranslator by doxygen 1.8.2