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
usng
USNG.h
Go to the documentation of this file.
1
// CLASSIFICATION: UNCLASSIFIED
2
3
#ifndef USNG_H
4
#define USNG_H
5
6
/***************************************************************************/
7
/* RSC IDENTIFIER: USNG
8
*
9
* ABSTRACT
10
*
11
* This component converts between geodetic coordinates (latitude and
12
* longitude) and United States National Grid (USNG) 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
* USNG_NO_ERROR : No errors occurred in function
22
* USNG_LAT_ERROR : Latitude outside of valid range
23
* (-90 to 90 degrees)
24
* USNG_LON_ERROR : Longitude outside of valid range
25
* (-180 to 360 degrees)
26
* USNG_STR_ERROR : An USNG string error: string too long,
27
* too short, or badly formed
28
* USNG_PRECISION_ERROR : The precision must be between 0 and 5
29
* inclusive.
30
* USNG_A_ERROR : Semi-major axis less than or equal to zero
31
* USNG_INV_F_ERROR : Inverse flattening outside of valid range
32
* (250 to 350)
33
* USNG_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
* USNG_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
* USNG_ZONE_ERROR : Zone outside of valid range (1 to 60)
40
* USNG_HEMISPHERE_ERROR : Invalid hemisphere ('N' or 'S')
41
*
42
* REUSE NOTES
43
*
44
* USNG is intended for reuse by any application that does conversions
45
* between geodetic coordinates and USNG coordinates.
46
*
47
* REFERENCES
48
*
49
* Further information on USNG can be found in the Reuse Manual.
50
*
51
* USNG originated from : Federal Geographic Data Committee
52
* 590 National Center
53
* 12201 Sunrise Valley Drive
54
* Reston, VA 22092
55
*
56
* LICENSES
57
*
58
* None apply to this component.
59
*
60
* RESTRICTIONS
61
*
62
*
63
* ENVIRONMENT
64
*
65
* USNG was tested and certified in the following environments:
66
*
67
* 1. Solaris 2.5 with GCC version 2.8.1
68
* 2. Windows XP with MS Visual C++ version 6
69
*
70
* MODIFICATIONS
71
*
72
* Date Description
73
* ---- -----------
74
* 3-1-07 Original Code (cloned from MGRS)
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 USNG_LETTERS 3
94
95
/**********************************************************************/
96
/*
97
* DEFINES
98
*/
99
100
class
USNG
:
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, an exception
107
* is thrown with a description of the error.
108
*
109
* ellipsoidSemiMajorAxis : Semi-major axis of ellipsoid in meters (input)
110
* ellipsoidFlattening : Flattening of ellipsoid (input)
111
* ellipsoid_Code : 2-letter code for ellipsoid (input)
112
*/
113
114
USNG
(
double
ellipsoidSemiMajorAxis,
double
ellipsoidFlattening,
char
* ellipsoidCode );
115
116
117
USNG
(
const
USNG
&u );
118
119
120
~USNG
(
void
);
121
122
123
USNG
&
operator=
(
const
USNG
&u );
124
125
126
/*
127
* The function getParameters returns the current ellipsoid
128
* parameters.
129
*
130
* ellipsoidSemiMajorAxis : Semi-major axis of ellipsoid, in meters (output)
131
* ellipsoidFlattening : Flattening of ellipsoid (output)
132
* ellipsoidCode : 2-letter code for ellipsoid (output)
133
*/
134
135
EllipsoidParameters
*
getParameters
()
const
;
136
137
138
/*
139
* The function convertFromGeodetic converts Geodetic (latitude and
140
* longitude) coordinates to an USNG coordinate string, according to the
141
* current ellipsoid parameters. If any errors occur, an exception is
142
* thrown with a description of the error.
143
*
144
* latitude : Latitude in radians (input)
145
* longitude : Longitude in radians (input)
146
* precision : Precision level of USNG string (input)
147
* USNGString : USNG coordinate string (output)
148
*
149
*/
150
151
MSP::CCS::MGRSorUSNGCoordinates
*
convertFromGeodetic
(
MSP::CCS::GeodeticCoordinates
* geodeticCoordinates,
long
precision );
152
153
154
/*
155
* The function convertToGeodetic converts an USNG coordinate string
156
* to Geodetic (latitude and longitude) coordinates
157
* according to the current ellipsoid parameters. If any errors occur,
158
* an exception is thrown with a description of the error.
159
*
160
* USNG : USNG coordinate string (input)
161
* latitude : Latitude in radians (output)
162
* longitude : Longitude in radians (output)
163
*
164
*/
165
166
MSP::CCS::GeodeticCoordinates
*
convertToGeodetic
(
MSP::CCS::MGRSorUSNGCoordinates
* mgrsCoordinates );
167
168
169
/*
170
* The function convertFromUTM converts UTM (zone, easting, and
171
* northing) coordinates to an USNG coordinate string, according to the
172
* current ellipsoid parameters. If any errors occur, an exception is
173
* thrown with a description of the error.
174
*
175
* zone : UTM zone (input)
176
* hemisphere : North or South hemisphere (input)
177
* easting : Easting (X) in meters (input)
178
* northing : Northing (Y) in meters (input)
179
* precision : Precision level of USNG string (input)
180
* USNGString : USNG coordinate string (output)
181
*/
182
183
MSP::CCS::MGRSorUSNGCoordinates
*
convertFromUTM
(
UTMCoordinates
* utmCoordinates,
long
precision );
184
185
186
/*
187
* The function convertToUTM converts an USNG coordinate string
188
* to UTM projection (zone, hemisphere, easting and northing) coordinates
189
* according to the current ellipsoid parameters. If any errors occur, an
190
* exception is thrown with a description of the error.
191
*
192
* USNGString : USNG coordinate string (input)
193
* zone : UTM zone (output)
194
* hemisphere : North or South hemisphere (output)
195
* easting : Easting (X) in meters (output)
196
* northing : Northing (Y) in meters (output)
197
*/
198
199
MSP::CCS::UTMCoordinates
*
convertToUTM
(
MSP::CCS::MGRSorUSNGCoordinates
* mgrsorUSNGCoordinates );
200
201
202
/*
203
* The function convertFromUPS converts UPS (hemisphere, easting,
204
* and northing) coordinates to an USNG coordinate string according to
205
* the current ellipsoid parameters. If any errors occur, an exception
206
* is thrown with a description of the error.
207
*
208
* hemisphere : Hemisphere either 'N' or 'S' (input)
209
* easting : Easting/X in meters (input)
210
* northing : Northing/Y in meters (input)
211
* precision : Precision level of USNG string (input)
212
* USNGString : USNG coordinate string (output)
213
*/
214
215
MSP::CCS::MGRSorUSNGCoordinates
*
convertFromUPS
(
MSP::CCS::UPSCoordinates
* upsCoordinates,
long
precision );
216
217
218
/*
219
* The function convertToUPS converts an USNG coordinate string
220
* to UPS (hemisphere, easting, and northing) coordinates, according
221
* to the current ellipsoid parameters. If any errors occur, an
222
* exception is thrown with a description of the error.
223
*
224
* USNGString : USNG coordinate string (input)
225
* hemisphere : Hemisphere either 'N' or 'S' (output)
226
* easting : Easting/X in meters (output)
227
* northing : Northing/Y in meters (output)
228
*/
229
230
MSP::CCS::UPSCoordinates
*
convertToUPS
(
MSP::CCS::MGRSorUSNGCoordinates
* mgrsorUSNGCoordinates );
231
232
private
:
233
234
UPS
* ups;
235
UTM
* utm;
236
237
char
USNGEllipsoidCode[3];
238
239
240
/*
241
* The function fromUTM calculates an USNG coordinate string
242
* based on the zone, latitude, easting and northing.
243
*
244
* zone : Zone number (input)
245
* latitude : Latitude in radians (input)
246
* easting : Easting (input)
247
* northing : Northing (input)
248
* precision : Precision (input)
249
* USNGString : USNG coordinate string (output)
250
*/
251
252
MSP::CCS::MGRSorUSNGCoordinates
* fromUTM(
MSP::CCS::UTMCoordinates
* utmCoordinates,
double
longitude,
double
latitude,
long
precision );
253
254
255
/*
256
* The function toUTM converts an USNG coordinate string
257
* to UTM projection (zone, hemisphere, easting and northing) coordinates
258
* according to the current ellipsoid parameters. If any errors occur,
259
* an exception is thrown with a description of the error.
260
*
261
* USNGString : USNG coordinate string (input)
262
* zone : UTM zone (output)
263
* hemisphere : North or South hemisphere (output)
264
* easting : Easting (X) in meters (output)
265
* northing : Northing (Y) in meters (output)
266
*/
267
268
UTMCoordinates
* toUTM(
long
zone,
long
letters[
USNG_LETTERS
],
double
easting,
double
northing,
long
in_precision );
269
270
271
/*
272
* The function fromUPS converts UPS (hemisphere, easting,
273
* and northing) coordinates to an USNG coordinate string according to
274
* the current ellipsoid parameters.
275
*
276
* hemisphere : Hemisphere either 'N' or 'S' (input)
277
* easting : Easting/X in meters (input)
278
* northing : Northing/Y in meters (input)
279
* precision : Precision level of USNG string (input)
280
* USNGString : USNG coordinate string (output)
281
*/
282
283
MSP::CCS::MGRSorUSNGCoordinates
* fromUPS(
MSP::CCS::UPSCoordinates
* upsCoordinates,
long
precision );
284
285
/*
286
* The function toUPS converts an USNG coordinate string
287
* to UPS (hemisphere, easting, and northing) coordinates, according
288
* to the current ellipsoid parameters. If any errors occur, an
289
* exception is thrown with a description of the error.
290
*
291
* USNGString : USNG coordinate string (input)
292
* hemisphere : Hemisphere either 'N' or 'S' (output)
293
* easting : Easting/X in meters (output)
294
* northing : Northing/Y in meters (output)
295
*/
296
297
MSP::CCS::UPSCoordinates
* toUPS(
long
letters[USNG_LETTERS],
double
easting,
double
northing );
298
299
300
/*
301
* The function getGridValues sets the letter range used for
302
* the 2nd letter in the USNG coordinate string, based on the set
303
* number of the utm zone. It also sets the pattern offset using a
304
* value of A for the second letter of the grid square, based on
305
* the grid pattern and set number of the utm zone.
306
*
307
* zone : Zone number (input)
308
* ltr2_low_value : 2nd letter low number (output)
309
* ltr2_high_value : 2nd letter high number (output)
310
* pattern_offset : Pattern offset (output)
311
*/
312
313
void
getGridValues(
long
zone,
long
* ltr2_low_value,
long
* ltr2_high_value,
double
* pattern_offset );
314
315
316
/*
317
* The function getLatitudeBandMinNorthing receives a latitude band letter
318
* and uses the Latitude_Band_Table to determine the minimum northing and northing offset
319
* for that latitude band letter.
320
*
321
* letter : Latitude band letter (input)
322
* min_northing : Minimum northing for that letter (output)
323
* northing_offset : Latitude band northing offset (output)
324
*/
325
326
void
getLatitudeBandMinNorthing(
long
letter,
double
* min_northing,
double
* northing_offset );
327
328
329
/*
330
* The function getLatitudeRange receives a latitude band letter
331
* and uses the Latitude_Band_Table to determine the latitude band
332
* boundaries for that latitude band letter.
333
*
334
* letter : Latitude band letter (input)
335
* north : Northern latitude boundary for that letter (output)
336
* north : Southern latitude boundary for that letter (output)
337
*/
338
339
void
getLatitudeRange(
long
letter,
double
* north,
double
* south );
340
341
342
/*
343
* The function getLatitudeLetter receives a latitude value
344
* and uses the Latitude_Band_Table to determine the latitude band
345
* letter for that latitude.
346
*
347
* latitude : Latitude (input)
348
* letter : Latitude band letter (output)
349
*/
350
351
void
getLatitudeLetter(
double
latitude,
int
* letter );
352
};
353
}
354
}
355
356
#endif
357
358
359
// CLASSIFICATION: UNCLASSIFIED
Generated on Tue Feb 16 2016 14:54:02 for GeographicTranslator by doxygen 1.8.2