00001
00042 #ifndef INC_SPATMOD_GEOREFERENCE_H
00043 #define INC_SPATMOD_GEOREFERENCE_H
00044
00045 #ifndef INC_MI32_TRANS2DMAPGEN_H
00046 #include <mi32/trans2dmapgen.h>
00047 #endif
00048
00049 #ifndef GENERATING_DOXYGEN_OUTPUT
00050
00051 class TRANS2D_AFFINE;
00052 #endif
00053
00054 namespace SPATMOD {
00055
00056
00058 class GEOREFERENCE {
00059 public:
00060
00062
00063 enum MODEL {
00064 MODEL_Invalid = 0,
00065 MODEL_Conformal = 0x0700,
00066 MODEL_Affine = 0x0100,
00067 MODEL_PlaneProjective = 0x0200,
00068 MODEL_Bilinear = 0x0300,
00069 MODEL_PolynomialOrder2 = 0x0402,
00070 MODEL_PolynomialOrder3 = 0x0403,
00071 MODEL_PolynomialOrder4 = 0x0404,
00072 MODEL_PiecewiseAffine = 0x8100,
00073 };
00074
00076
00077 enum AXISORIENTATION {
00078 AXISORIENTATION_Same = 0,
00079 AXISORIENTATION_Flip = 0x4000
00080 };
00081
00083 GEOREFERENCE ();
00084
00086 GEOREFERENCE (
00087 const GEOREFERENCE& rhs
00088 );
00089
00092 GEOREFERENCE (
00093 const TRANS2D_MAPGEN& Trans
00094 );
00095
00097 ~GEOREFERENCE ();
00098
00100 GEOREFERENCE& operator= (
00101 const GEOREFERENCE& rhs
00102 );
00103
00105 ERRVALUE ApplyTransInput (
00106 const TRANS2D_AFFINE& Trans
00107 );
00108
00111 ERRVALUE ComputeScale (
00112 const DPOINT2D& point,
00113 DPOINT2D& scale,
00114 bool ConvertToMeters
00115 ) const;
00116
00118 AXISORIENTATION GetAxisOrientation () const;
00119
00121 const SPATREF::COORDREFSYS& GetCRS (
00122 ) const { return (m_TransGen.GetInputMapCoordRefSys()); }
00123
00125 const DOUBLE_ARRAY<CTRLPOINT3>& GetCtrlPoints (
00126 ) const { return (m_TransGen.GetInputCtrlPoints()); }
00127
00129 MODEL GetModel (
00130 ) const;
00131
00133 ERRVALUE GetTransAffine (
00134 TRANS2D_AFFINE& TransAffine,
00135 const DRECT2D& extent,
00136 double accuracy = 1.0
00137 ) const;
00138
00140 const TRANS2D_MAPGEN& GetTransGen (
00141 ) const { return (m_TransGen); }
00142
00144 bool HasCtrlPoints (
00145 ) const { return (GetCtrlPoints().GetNumItems() > 0); }
00146
00148 ERRVALUE SetCtrlPoints (
00149 const SPATREF::COORDREFSYS& CoordRefSys,
00150 const DOUBLE_ARRAY<CTRLPOINT3>& CtrlPoints,
00151 AXISORIENTATION AxisOrient,
00152 MODEL Model = MODEL_Affine
00153 ) { return (SetCtrlPoints(CoordRefSys,CtrlPoints,CtrlPoints.GetNumItems(),AxisOrient,Model)); }
00154
00156 ERRVALUE SetCtrlPoints (
00157 const SPATREF::COORDREFSYS& CoordRefSys,
00158 const CTRLPOINT3 *CtrlPoints,
00159 int NumCtrlPoints,
00160 AXISORIENTATION AxisOrient,
00161 MODEL Model = MODEL_Affine
00162 );
00163
00166 void SetTransAffine (
00167 const SPATREF::COORDREFSYS& CoordRefSys,
00168 const TRANS2D_AFFINE& TransAffine
00169 );
00170
00174 void SetTransGen (
00175 const TRANS2D_MAPGEN& TransGen
00176 );
00177
00178 private:
00179 #ifndef GENERATING_DOXYGEN_OUTPUT
00180 TRANS2D_MAPGEN m_TransGen;
00181 #endif // GENERATING_DOXYGEN_OUTPUT
00182 };
00183
00184
00185 }
00186
00187 #endif // INC_SPATMOD_GEOREFERENCE_H