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
webmerc
WebMercator.cpp
Go to the documentation of this file.
1
// CLASSIFICATION: UNCLASSIFIED
2
/***************************************************************************/
3
/* RSC IDENTIFIER: Web Mercator
4
*
5
* ABSTRACT
6
*
7
* This component provides conversions between Geodetic coordinates
8
* (latitude and longitude) and Web Mercator coordinates
9
* (easting and northing).
10
*
11
* REFERENCES
12
*
13
* Further information on Web Mercator can be found in the NGA document
14
* "Implementation Practice Web Mercator Map Projection", 2014-02-18.
15
*
16
* LICENSES
17
*
18
* None apply to this component.
19
*
20
* MODIFICATIONS
21
*
22
* Date Description
23
* ---- -----------
24
* 06-14-14 Original Code
25
*
26
*/
27
28
#include <string.h>
29
#include <math.h>
30
#include "
WebMercator.h
"
31
#include "
EllipsoidParameters.h
"
32
#include "
MapProjectionCoordinates.h
"
33
#include "
GeodeticCoordinates.h
"
34
#include "
CoordinateConversionException.h
"
35
#include "
ErrorMessages.h
"
36
37
/*
38
* string.h - Standard C string handling library
39
* math.h - Standard C math library
40
* NZMG.h - Is for prototype error checking
41
* MapProjectionCoordinates.h - defines map projection coordinates
42
* GeodeticCoordinates.h - defines geodetic coordinates
43
* CoordinateConversionException.h - Exception handler
44
* ErrorMessages.h - Contains exception messages
45
*/
46
47
48
using namespace
MSP::CCS;
49
50
51
// DEFINES
52
const
double
PI
= 3.14159265358979323e0;
53
54
55
WebMercator::WebMercator
(
char
* ellipsoidCode ) :
56
CoordinateSystem
( 6378137.0, 0.0 )
57
{
58
/*
59
* The constructor receives the ellipsoid code which must be "WE"
60
*
61
* ellipsoidCode : 2-letter code for ellipsoid (input)
62
*/
63
64
if
(strcmp(ellipsoidCode,
"WE"
) != 0)
65
{
/* Ellipsoid must be WGS84 */
66
throw
CoordinateConversionException
(
ErrorMessages::webmEllipsoid
);
67
}
68
}
69
70
71
EllipsoidParameters
*
WebMercator::getParameters
()
const
72
{
73
/*
74
* The function getParameters returns the current ellipsoid code.
75
*
76
* ellipsoidCode : 2-letter code for ellipsoid (output)
77
*/
78
79
return
new
EllipsoidParameters
(
80
semiMajorAxis
,
flattening
,
"WE"
);
// Always WGS84 radius
81
}
82
83
MSP::CCS::MapProjectionCoordinates
*
WebMercator::convertFromGeodetic
(
84
MSP::CCS::GeodeticCoordinates
* geodeticCoordinates )
85
{
86
double
longitude = geodeticCoordinates->
longitude
();
87
double
latitude = geodeticCoordinates->
latitude
();
88
89
double
easting = longitude *
semiMajorAxis
;
90
double
northing = semiMajorAxis * log( tan(
PI
/4.0 + latitude / 2.0 ) );
91
92
// Always throw an error because NGA does not want to allow
93
// conversions to Web Mecator
94
throw
CoordinateConversionException
(
ErrorMessages::webmConversionTo
);
95
96
return
new
MapProjectionCoordinates
(
97
CoordinateType::webMercator
, easting, northing );
98
}
99
100
MSP::CCS::GeodeticCoordinates
*
WebMercator::convertToGeodetic
(
101
MSP::CCS::MapProjectionCoordinates
* mapProjectionCoordinates )
102
{
103
double
easting = mapProjectionCoordinates->
easting
();
104
double
northing = mapProjectionCoordinates->
northing
();
105
106
double
longitude = easting /
semiMajorAxis
;
107
double
latitude = 2.0 * atan( exp( northing /
semiMajorAxis
) ) -
PI
/2.0;
108
109
return
new
GeodeticCoordinates
(
110
CoordinateType::geodetic
, longitude, latitude );
111
}
112
113
// CLASSIFICATION: UNCLASSIFIED
Generated on Tue Feb 16 2016 14:54:02 for GeographicTranslator by doxygen 1.8.2