00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef INC_MI32_RPCMODEL_H
00037 #define INC_MI32_RPCMODEL_H
00038
00039 #ifndef INC_MI32_SIMPLEAR_H
00040 #include <mi32/simplear.h>
00041 #endif
00042
00043 #ifndef INC_MI32_CTRLPT_H
00044 #include <mi32/ctrlpt.h>
00045 #endif
00046
00047 #ifndef INC_MI32_MISTRING_H
00048 #include <mi32/mistring.h>
00049 #endif
00050
00051 #ifndef GENERATING_DOXYGEN_OUTPUT
00052 class BITSET;
00053 class FILEPATH;
00054 class TRANS2D_MAPGEN;
00055 namespace RVC {
00056 class OBJITEM;
00057 class RASTER;
00058 class GEOREFERENCE;
00059 }
00060 #endif
00061
00062 class RPCMODEL {
00063 public:
00064
00065 enum INTERPOLATION {
00066 INTERPOLATION_NearestNeighbor = 0,
00067 INTERPOLATION_Bilinear,
00068 INTERPOLATION_Bicubic
00069 };
00070
00072 RPCMODEL (
00073 );
00074
00076 RPCMODEL (
00077 const RPCMODEL& model
00078 );
00079
00081 RPCMODEL& operator= (
00082 const RPCMODEL& model
00083 );
00084
00086 void Clear (
00087 ) { m_Init = false; }
00088
00090 void ClearEnhancement (
00091 ) { m_Enhancement = ENHANCEMENT_None; }
00092
00094 INT32 ComputeControlPoints (
00095 const TRANS2D_MAPGEN& TransSrcToMap,
00096 const SIMPLE_ARRAY<CTRLPOINT3>& InputPoints,
00097 const RVC::RASTER& ObjRasterElev,
00098 const TRANS2D_MAPGEN& TransTgtToMap,
00099 SIMPLE_ARRAY<CTRLPOINT3>& OutputPoints,
00100 BITSET& bitset
00101 ) const;
00102
00105 bool Convert (
00106 const DPOINT3D& ptGeogH,
00107 DPOINT2D& ptImage
00108 ) const;
00109
00112 bool Enhance (
00113 const RVC::GEOREFERENCE& ObjGeoref
00114 );
00115
00118 bool Enhance (
00119 const SIMPLE_ARRAY<CTRLPOINT3>& ControlPoints,
00120 const TRANS2D_MAPGEN& Transformation,
00121 const BITSET& Selection
00122 );
00123
00126 const MISTRING& GetRPCModelString (
00127 ) const { return m_RPCModelString; };
00128
00131 bool Init (
00132 const FILEPATH& filepath
00133 );
00134
00137 bool Init (
00138 const RVC::OBJITEM& objitem
00139 );
00140
00143 bool Init (
00144 const RVC::GEOREFERENCE& ObjGeoref
00145 );
00146
00149 bool IsInit () const { return m_Init; };
00150
00153 ERRVALUE Resample (
00154 const RVC::RASTER& ObjRasterSrc,
00155 const RVC::RASTER& ObjRasterElev,
00156 const INTERPOLATION interpolation,
00157 const TRANS2D_MAPGEN& TransTgtToMap,
00158 RVC::RASTER& ObjRasterTgt
00159 ) const;
00160
00163 ERRVALUE Resample (
00164 const RVC::RASTER& ObjRasterSrc,
00165 const RVC::GEOREFERENCE& ObjGeorefSrc,
00166 const RVC::RASTER& ObjRasterElev,
00167 const INTERPOLATION interpolation,
00168 const TRANS2D_MAPGEN& TransTgtToMap,
00169 RVC::RASTER& ObjRasterTgt
00170 ) const;
00171
00173 void SetGeoidHeight (
00174 const double height
00175 ) { m_GeoidHeight = height; }
00176
00177 private:
00178 #ifndef GENERATING_DOXYGEN_OUTPUT
00179
00180 enum ENHANCEMENT {
00181 ENHANCEMENT_None,
00182 ENHANCEMENT_Constant,
00183 ENHANCEMENT_Linear,
00184 ENHANCEMENT_Affine,
00185 ENHANCEMENT_LeastSquares
00186 };
00187
00188 bool m_Init;
00189
00190 double m_RowOffset;
00191 double m_ColumnOffset;
00192 double m_LatitudeOffset;
00193 double m_LongitudeOffset;
00194 double m_HeightOffset;
00195
00196 double m_RowScale;
00197 double m_ColumnScale;
00198 double m_LatitudeScale;
00199 double m_LongitudeScale;
00200 double m_HeightScale;
00201
00202 double m_RowNum[20];
00203 double m_RowDen[20];
00204
00205 double m_ColumnNum[20];
00206 double m_ColumnDen[20];
00207
00208 ENHANCEMENT m_Enhancement;
00209 double m_A[3];
00210 double m_B[3];
00211
00212 double m_GeoidHeight;
00213 MISTRING m_RPCModelString;
00214
00215 void Copy (const RPCMODEL& rhs);
00216
00217 bool GetDerivatives (const DPOINT3D& dpoint, double derivatives[2][3]) const;
00218
00219 bool Parse (const MISTRING& string);
00220 ERRVALUE ParseALOSPrism (const MISTRING& string);
00221 ERRVALUE ParseIKONOS (const MISTRING& string);
00222 ERRVALUE ParseQuickBird (const MISTRING& string);
00223
00224 ERRVALUE ReadRPCModel (const FILEPATH& filepath);
00225 ERRVALUE ReadRPCModel (const RVC::OBJITEM& objitem);
00226
00227 #endif // GENERATING_DOXYGEN_OUTPUT
00228
00229 };
00230
00231 #endif // INC_MI32_RPCMODEL_H