00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef GCL_PROJECTION_INCLUDED
00022 #define GCL_PROJECTION_INCLUDED
00023
00024 #include "ellipsoid.h"
00025
00026 namespace GCL
00027 {
00028
00036 class Projection : public Ellipsoid
00037 {
00038 public:
00040 enum ecode
00041 {
00042 UNKNOWN,
00043 GKK,
00044 UTM,
00045 LAMBERT1,
00046 LAMBERT2,
00047 SLK,
00048 SPK,
00049 SPKLV03,
00050 SPKLV95,
00051 END_OF_MAP
00052 };
00053
00057
00058 Projection() : Ellipsoid() { init(); }
00059
00063 Projection(const string& ell_name) : Ellipsoid(ell_name)
00064 { init(); }
00065
00067 virtual ~Projection() {}
00069
00071 virtual const char* map_name() const;
00072
00076
00077 void b0(double b0) { _b0 = b0; }
00078
00080 double b0() const { return _b0; }
00082
00086
00087 void l0(double l0) { _l0 = l0; }
00088
00090 double l0() const { return _l0; }
00092
00096
00097 void m0(double m0) { _m0 = m0; }
00098
00100 double m0() const { return _m0; }
00102
00106
00107 void x0(double x0) { _x0 = x0; }
00108
00110 double x0() const { return _x0; }
00112
00116
00117 void y0(double y0) { _y0 = y0; }
00118
00120 double y0() const { return _y0; }
00122
00126 virtual void print(ostream& os) const;
00127
00136 virtual void geo_to_map(double b, double l,
00137 double& x, double& y) const = 0;
00138
00143 virtual void map_to_geo(double x, double y,
00144 double& b, double& l) const = 0;
00146
00151 static ecode code(const char* map_name);
00152
00153 protected:
00155 double _b0;
00156
00158 double _l0;
00159
00161 double _m0;
00162
00164 double _x0;
00165
00167 double _y0;
00168
00170 struct map_t
00171 {
00173 int code;
00174
00176 const char* name;
00177 };
00178
00180 static map_t _map[];
00181
00182 private:
00184 void init()
00185 {
00186 _b0 = _l0 = 0.;
00187 _m0 = 1.;
00188 _x0 = _y0 = 0.;
00189 }
00190 };
00191
00192 }
00193
00194 #endif