NAVTOR SDK  v.3.0
Software Development Kit for fast and efficient development of ECDIS, ECS and generic marine applications
crs_wgs84_impl.h
Go to the documentation of this file.
1 #ifndef SDK_CRS_WGS84_IMPL_H_
10 #define SDK_CRS_WGS84_IMPL_H_
11 
12 #include <base/inc/platform.h>
13 #include <base/inc/base_types.h>
15 #include <base/inc/sdk_component_base.h>
19 
20 namespace sdk {
21 namespace crs {
22 
23 FWD_DECL_INTERFACE(GeographicCoordinateSystemWGS84)
24 FWD_DECL_INTERFACE(EllipsoidWGS84)
25 
26 class EllipsoidWGS84 : public SDKComponentBaseI< IEllipsoid > {
27  public:
28  EllipsoidWGS84() {}
29 
31  HorizontalDatum SDK_CALLTYPE GetHorizontalDatum() const throw() {
32  return kHorDat_WGS84;
33  }
34  SDKResult SDK_CALLTYPE SetHorizontalDatum(HorizontalDatum hordat) throw()
35  { return Err_NotImpl; }
38  double SDK_CALLTYPE GetInverseFlattening() const throw()
39  { return kWGS84_INVERSE_FLATTENING; }
40  SDKResult SDK_CALLTYPE SetInverseFlattening(double inv_flat) throw()
41  { return Err_NotImpl; }
43  double SDK_CALLTYPE GetSemiMajorAxis() const throw() {
44  return kWGS84_SEMIMAJOR;
45  }
46  SDKResult SDK_CALLTYPE SetSemiMajorAxis(double semi_major_axis) throw()
47  { return Err_NotImpl; }
49  double SDK_CALLTYPE GetSemiMinorAxis() const throw() {
50  return kWGS84_SEMIMINOR;
51  }
52  SDKResult SDK_CALLTYPE SetSemiMinorAxis(double semi_minor_axis) throw()
53  { return Err_NotImpl; }
55  LinearUnit SDK_CALLTYPE GetAxisUnit() const throw() {
56  return 1.0;
57  }
58  SDKResult SDK_CALLTYPE SetAxisUnit(LinearUnit axis_unit) throw() {
59  return Err_NotImpl;
60  }
61 };
62 
63 class GeographicCoordinateSystemWGS84 : public SDKComponentRef,
64  public IGeographicCoordinateSystem {
65 public:
66 BEGIN_GET_INTERFACE(SDKComponentRef)
67  GET_INTERFACE_ENTRY(IGeographicCoordinateSystem)
68  GET_INTERFACE_ENTRY(IHorizontalCoordinateSystem)
69  GET_INTERFACE_ENTRY(ICoordinateSystem)
70 END_GET_INTERFACE(SDKComponentRef)
71 
72  GeographicCoordinateSystemWGS84(
73  AngularUnitType angular_unit_type = kAngularUnitTypeGeoInt) throw()
74  : m_angular_unit_type(angular_unit_type), m_dim(2) {}
75 
78  HorizontalDatum SDK_CALLTYPE GetDatum() const throw() {
79  return kHorDat_WGS84;
80  }
81  SDKResult SDK_CALLTYPE SetDatum(HorizontalDatum datum) throw() {
82  return Err_NotImpl;
83  }
84 
86  SDKResult SDK_CALLTYPE GetEllipsoid(IEllipsoid** ellipsoid) const throw() {
87  if (!ellipsoid) return Err_InvalidArg;
88  *ellipsoid = new EllipsoidWGS84();
89  (*ellipsoid)->AddRef();
90  return Ok;
91  }
92  SDKResult SDK_CALLTYPE SetEllipsoid(IEllipsoid* ellipsoid) throw() {
93  return Err_NotImpl;
94  }
95 
98  AngularUnit SDK_CALLTYPE GetAngularUnit() const throw() { return 1.0; }
99  SDKResult SDK_CALLTYPE SetAngularUnit(AngularUnit angular_unit) throw()
100  { return Err_NotImpl; }
101 
103  AngularUnitType SDK_CALLTYPE GetAngularUnitType() const throw()
104  { return m_angular_unit_type; }
105  SDKResult SDK_CALLTYPE SetAngularUnitType(
106  AngularUnitType angular_unit_type) throw()
107  { m_angular_unit_type = angular_unit_type; return Ok; }
108 
112  double SDK_CALLTYPE GetPrimeMeridian() const throw() { return 0.0; }
113  SDKResult SDK_CALLTYPE SetPrimeMeridian(double longitude) throw()
114  { return Err_NotImpl; }
115 
117  SDKResult SDK_CALLTYPE GetName(SDKString& name) const throw()
118  { name = ScopedString(m_name).Detach(); return Ok;}
119  SDKResult SDK_CALLTYPE SetName(const SDKString& name) throw()
120  { m_name = name; return Ok; }
121 
123  SDKUInt8 SDK_CALLTYPE GetDimension() const throw() { return m_dim; }
124  SDKResult SDK_CALLTYPE SetDimension(SDKUInt8 dim) throw() {
125  m_dim = dim; return Ok;}
126 
128  SDKResult SDK_CALLTYPE GetParameter(SDKUInt32 parameter,
129  SDKAny& value) const throw() { return Err_NotImpl; }
130  SDKResult SDK_CALLTYPE SetParameter(SDKUInt32 parameter,
131  const SDKAny& value) throw() { return Err_NotImpl; }
132 
133 private:
134  AngularUnitType m_angular_unit_type;
135  SDKUInt8 m_dim;
136  ScopedString m_name;
137 };
138 
139 } // namespace gdb
140 } // namespace sdk
141 
142 #endif // SDK_CRS_WGS84_IMPL_H_
kAngularUnitTypeGeoInt
@ kAngularUnitTypeGeoInt
GeoInt.
Definition: crs_const.h:139
crs_geographic_coordinate_system.h
Describes the interface that manages a geographic coordinate system parameters.
base_types.h
SDK base types.
AngularUnitType
AngularUnitType
Describes the angular unit type for the geographic coordinate system.
Definition: crs_const.h:137
crs_ellipsoid.h
Describes interface that manages an ellipsoid parameters.
sdk::crs::kHorDat_WGS84
@ kHorDat_WGS84
2 : WGS 84
Definition: crs_horizontal_coordinate_system.h:44
AngularUnit
double AngularUnit
Defines the angular unit. The value is the number of degrees per angular unit.
Definition: crs_const.h:133
sdk::crs::HorizontalDatum
HorizontalDatum
The horizontal datums.
Definition: crs_horizontal_coordinate_system.h:41
sdk::Ok
@ Ok
Operation completed successfully.
Definition: sdk_results_enum.h:22
SDKResult
SDKInt32 SDKResult
Type of all error or return codes which SDK functions can end with.
Definition: sdk_results.h:17
sdk::Err_InvalidArg
@ Err_InvalidArg
Wrong argument passed to function.
Definition: sdk_results_enum.h:27
platform.h
Describes the platform constants.
sdk::ScopedString
sdk::SDKStringHandler ScopedString
Synonym for the SDKStringHandler.
Definition: sdk_string_handler.h:347
crs_const.h
Defines constants for the coordinate systems.
sdk::SDKStringHandler::Detach
SDKString Detach()
Detaches existing value.
Definition: sdk_string_handler.h:282
kWGS84_INVERSE_FLATTENING
#define kWGS84_INVERSE_FLATTENING
Inverse flattening.
Definition: crs_const.h:93
kWGS84_SEMIMINOR
#define kWGS84_SEMIMINOR
Semi-minor axis in meters.
Definition: crs_const.h:101
kWGS84_SEMIMAJOR
#define kWGS84_SEMIMAJOR
Semi-major axis in meters.
Definition: crs_const.h:97
sdk_results_enum.h
SDK return values synonyms in the sdk namespace.
FWD_DECL_INTERFACE
FWD_DECL_INTERFACE(ILWEParserWrapper)
Provides a wrapper around the message parser to get, add or remove the.
LinearUnit
SDK_CRS_BEGIN_NAMESPACE typedef double LinearUnit
Defines the linear unit. The value is the number of meters per linear unit.
Definition: crs_const.h:128