00001
00056 #ifndef INC_RVC_GEOREFER_H
00057 #define INC_RVC_GEOREFER_H
00058
00059 #ifndef INC_RVC_SIMPLE_H
00060 #include <rvc/simple.h>
00061 #endif
00062
00063 #ifndef INC_MI32_TRANS2DAFFINE_H
00064 #include <mi32/trans2daffine.h>
00065 #endif
00066
00067 #ifndef INC_MI32_TRANSMOD_H
00068 #include <mi32/transmod.h>
00069 #endif
00070
00071 #ifndef INC_MI32_SPATREF_H
00072 #include <mi32/spatref.h>
00073 #endif
00074
00075
00076 #ifndef GENERATING_DOXYGEN_OUTPUT
00077 class TRANS2D_MAPGEN;
00078 namespace RVC {
00079 class GEOREFHANDLE;
00080 }
00081 #endif
00082
00083
00084 namespace RVC {
00085
00099 class GEOREFERENCE : public SIMPLE {
00100 public:
00101
00103 enum GEOREFTYPE {
00104 GEOREFTYPE_Implied = 5,
00105 GEOREFTYPE_AffineMatrix = 6,
00106 GEOREFTYPE_Matrix = GEOREFTYPE_AffineMatrix,
00107 GEOREFTYPE_CtrlPoint = 7,
00108 GEOREFTYPE_Manifold = 8
00109 };
00110
00111 struct CTRLPTEDGE {
00112 INT32 m_StartCtrlPtID;
00113 INT32 m_EndCtrlPtID;
00114 };
00115
00117 GEOREFERENCE ();
00118
00120 GEOREFERENCE (
00121 const RVC::GEOREFERENCE& rhs
00122 );
00123
00125 virtual ~GEOREFERENCE ();
00126
00128 RVC::GEOREFERENCE& operator= (
00129 const RVC::GEOREFERENCE& rhs
00130 );
00131
00135 INT32 AddBoundary (
00136 const SIMPLE_ARRAY<INT32>& Boundary
00137 );
00138
00142 INT32 AddCtrlPoint (
00143 const CTRLPOINT3& CtrlPoint
00144 );
00145
00149 INT32 AddCtrlPointEdge (
00150 const CTRLPTEDGE& CtrlPtEdge
00151 );
00152
00155 ERRVALUE ClearBoundaries (
00156 );
00157
00160 ERRVALUE ClearCtrlPoints (
00161 );
00162
00165 ERRVALUE ClearCtrlPointEdges (
00166 );
00167
00170 ERRVALUE ConvertForward (
00171 const TRANS2D_AFFINE& Affine
00172 );
00173
00176 ERRVALUE ConvertInverse (
00177 const TRANS2D_AFFINE& Affine
00178 );
00179
00182 ERRVALUE ConvertForward (
00183 const TRANS2D_MAPGEN& tmg
00184 );
00185
00188 ERRVALUE ConvertInverse (
00189 const TRANS2D_MAPGEN& tmg
00190 );
00191
00194 ERRVALUE ConvertToExtended (
00195 );
00196
00200 ERRVALUE DeleteCtrlPoint (
00201 INT32 CtrlPointNum
00202 );
00203
00207 ERRVALUE DeleteCtrlPointEdge (
00208 INT32 CtrlPointEdgeNum
00209 );
00210
00213 const TRANS2D_AFFINE& GetAffineMatrix (
00214 ) const;
00215
00218 TRANSMODEL GetCalibModel (
00219 ) const;
00220
00223 const SPATREF::COORDREFSYS& GetCoordRefSys (
00224 ) const;
00225
00228 GEOREFTYPE GetGeorefType (
00229 ) const;
00230
00232 ERRVALUE GetMapTrans (
00233 TRANS2D_MAPGEN& tmg,
00234 bool DoOutput = false,
00235 TRANSMODEL model = 0
00236 ) const;
00237
00241 INT32 GetNumBoundaries (
00242 );
00243
00247 INT32 GetNumCtrlPoints (
00248 );
00249
00253 INT32 GetNumCtrlPointEdges (
00254 );
00255
00258 ERRVALUE GetPointList (
00259 SIMPLE_ARRAY<CTRLPOINT3>& CtrlList
00260 ) const;
00261
00265 ERRVALUE InsertCtrlPoint (
00266 INT32 CtrlPointNum,
00267 const CTRLPOINT3& CtrlPoint
00268 );
00269
00273 ERRVALUE InsertCtrlPointEdge (
00274 INT32 CtrlPointEdgeNum,
00275 const CTRLPTEDGE& CtrlPtEdge
00276 );
00277
00280 bool IsBasicFormat (
00281 );
00282
00286 bool IsCtrlPointEnabled (
00287 INT32 CtrlPointIndex
00288 );
00289
00292 bool IsEquivalentTo (
00293 const RVC::GEOREFERENCE& GeorefObj
00294 ) const;
00295
00298 ERRVALUE ReadBoundary (
00299 INT32 BoundaryIndex,
00300 SIMPLE_ARRAY<INT32>& Boundary
00301 );
00302
00305 ERRVALUE ReadCtrlPoint (
00306 INT32 CtrlPointIndex,
00307 CTRLPOINT3& CtrlPoint
00308 );
00309
00312 ERRVALUE ReadCtrlPointEdge (
00313 INT32 CtrlPointEdgeIndex,
00314 CTRLPTEDGE& CtrlPtEdge
00315 );
00316
00320 INT32 ReadCtrlPointID (
00321 INT32 CtrlPointIndex
00322 );
00323
00327 ERRVALUE ReadCtrlPointName (
00328 INT32 CtrlPointIndex,
00329 MISTRING& CtrlPointName
00330 );
00331
00334 ERRVALUE ResizeCtrlPointEdges (
00335 INT32 NumCtrlPointEdges
00336 );
00337
00340 ERRVALUE ResizeCtrlPoints (
00341 INT32 NumCtrlPoints
00342 );
00343
00345 void SetManifold (
00346 );
00347
00349 void SetAffine (
00350 const TRANS2D_AFFINE& taf
00351 );
00352
00354 void SetCalibModel (
00355 const TRANSMODEL& model
00356 );
00357
00359 ERRVALUE SetCoordRefSys (
00360 const SPATREF::COORDREFSYS& CoordRefSys
00361 );
00362
00365 ERRVALUE SetCtrlPointEnabled (
00366 INT32 CtrlPointIndex,
00367 bool IsEnabled
00368 );
00369
00371 void SetImplied (
00372 );
00373
00375 ERRVALUE SetPointList (
00376 const SIMPLE_ARRAY<CTRLPOINT3>& CtrlList
00377 );
00378
00380 ERRVALUE SetPointList (
00381 const CTRLPOINT3 *CtrlPtList,
00382 int NumCtrlPts
00383 );
00384
00387 ERRVALUE WriteBoundary (
00388 INT32 BoundaryIndex,
00389 const SIMPLE_ARRAY<INT32>& Boundary
00390 );
00391
00394 ERRVALUE WriteCtrlPoint (
00395 INT32 CtrlPointIndex,
00396 const CTRLPOINT3& CtrlPoint
00397 );
00398
00401 ERRVALUE WriteCtrlPointEdge (
00402 INT32 CtrlPointEdgeIndex,
00403 const CTRLPTEDGE& CtrlPtEdge
00404 );
00405
00409 ERRVALUE WriteCtrlPointID (
00410 INT32 CtrlPointIndex,
00411 INT32 CtrlPointID
00412 );
00413
00417 ERRVALUE WriteCtrlPointName (
00418 INT32 CtrlPointIndex,
00419 const MISTRING& CtrlPointName
00420 );
00421
00422 private:
00423 #ifndef GENERATING_DOXYGEN_OUTPUT
00424
00426 virtual ERRVALUE v_CloseObject ();
00427 virtual RVC::OBJTYPE v_GetDftObjectType () const;
00428 virtual bool v_IsObjectOpen () const;
00429 virtual ERRVALUE v_OpenObject (OPENMODE OpenMode, MDLGPARENT parent, const CREDENTIALS* Credentials);
00430
00432 virtual ERRVALUE v_GetDftNameDesc (const OBJECT& parent, DESCRIPTOR& Descriptor);
00433 virtual ERRVALUE v_MakeData (RVC::OBJMAKEPARMS& ObjMakeParms);
00434 virtual ERRVALUE v_ReadData (RVC::OBJOPENPARMS& ObjOpenParms);
00435 virtual ERRVALUE v_WriteData (RVC::OBJOPENPARMS& ObjOpenParms);
00436
00437 ERRVALUE ReadStandardGeorefData ();
00438 ERRVALUE UpdateHeader ();
00439
00440 GEOREFTYPE m_GeorefType;
00441 TRANSMODEL m_CalibModel;
00442 SPATREF::COORDREFSYS m_CoordRefSys;
00443 SIMPLE_ARRAY<CTRLPOINT3> m_CtrlList;
00444 TRANS2D_AFFINE m_Affine;
00445 bool m_ChangedType;
00446 GEOREFHANDLE* m_GeorefHandle;
00447
00448 #endif // GENERATING_DOXYGEN_OUTPUT
00449 };
00450
00451 }
00452
00453 #endif // INC_RVC_GEOREFER_H