00001
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165 #ifndef INC_RVC_GEOSPATL_H
00166 #define INC_RVC_GEOSPATL_H
00167
00168 #ifndef INC_RVC_OBJECT_H
00169 #include <rvc/object.h>
00170 #endif
00171
00172 #ifndef INC_RVC_GETOBJFILTER_H
00173 #include <rvc/getobjfilter.h>
00174 #endif
00175
00176 #ifndef INC_MI32_TRANS2DMAPGEN_H
00177 #include <mi32/trans2dmapgen.h>
00178 #endif
00179
00180 #ifndef INC_MI32_RECT_H
00181 #include <mi32/rect.h>
00182 #endif
00183
00184
00185 #ifndef GENERATING_DOXYGEN_OUTPUT
00186
00187 class REGION2D;
00188 namespace RVC {
00189 class GEOREFERENCE;
00190 }
00191 #endif
00192
00193
00194 namespace RVC {
00195
00196 class GEOSPATIAL : public RVC::OBJECT {
00197 public:
00198
00199 #ifndef GENERATING_DOXYGEN_OUTPUT
00200 class GETOBJFILTER_ISSELECTABLE;
00201 class GETOBJFILTER_ISOVERLAPPING;
00202 class GETOBJFILTER_HASGEOREFERENCE;
00203 class GETOBJFILTER_HASNOGEOREFERENCE;
00204 class GETOBJFILTER_HASNONLOCALGEOREFERENCE;
00205 #endif // GENERATING_DOXYGEN_OUTPUT
00206
00207 enum CAPABILITY {
00208 CAPABILITY_None = 0,
00209 CAPABILITY_RandomAccess = 256,
00210 CAPABILITY_CanBeModified,
00211 CAPABILITY_LoginRequired,
00212 CAPABILITY_PreferKeepOpen,
00213 CAPABILITY_CanGenerateRegion,
00214 CAPABILITY_NeedScanAutoLink,
00215 CAPABILITY_ScanDoesGenerateRegion,
00216 CAPABILITY_ScanDoesBuildIndex,
00217 };
00218
00219 enum MAKELINKFLAGS {
00220 MAKELINKFLAG_None = 0x0000,
00221 MAKELINKFLAG_NoGeoreference = 0x0001,
00222 MAKELINKFLAG_NoPyramidLinks = 0x0002,
00223 MAKELINKFLAG_BuildHistograms = 0x0004,
00224 MAKELINKFLAG_BuildPyramids = 0x0008,
00225 MAKELINKFLAG_NoContrastTables = 0x0010,
00226 MAKELINKFLAG_ColorComposite = 0x0020,
00227 MAKELINKFLAG_ColorSeparate = 0x0040
00228 };
00229
00230 enum OBJECTREGIONFLAGS {
00231 OBJECTREGION_Default = 0x0000,
00232 OBJECTREGION_UseGeorefModel = 0x0001,
00233 OBJECTREGION_ForceArbitrary = 0x0002
00234 };
00235
00238 static RVC::GEOSPATIAL* GetGeospatial (
00239 const RVC::OBJECT& obj
00240 );
00241
00244 static RVC::GEOSPATIAL* GetGeospatial (
00245 const RVC::OBJITEM& ObjItem
00246 );
00247
00250 static RVC::OBJTYPESET GetObjTypeSet (
00251 );
00252
00254 static bool IsGeospatial (
00255 RVC::OBJTYPE ObjType
00256 );
00257
00259 GEOSPATIAL (
00260 );
00261
00263 GEOSPATIAL (
00264 const RVC::GEOSPATIAL& rhs
00265 );
00266
00268 virtual ~GEOSPATIAL (
00269 ) = 0;
00270
00273 ERRVALUE CheckGeorefName (
00274 RVC::OBJECTNAME& GeorefName
00275 );
00276
00280 INT32 ComputeObjectScale (
00281 RVC::GEOREFERENCE& ObjGeoref,
00282 double& xscale,
00283 double& yscale,
00284 bool ConvertToMeters
00285 ) const;
00286
00290 ERRVALUE ComputeObjectTranslation (
00291 const RVC::GEOSPATIAL& ObjTarget,
00292 TRANS2D_MAPGEN& SrcToDest
00293 );
00294
00297 ERRVALUE ComputeScaleFromGeoref (
00298 const RVC::GEOREFERENCE& DftGeoref,
00299 double& xscale,
00300 double& yscale,
00301 bool ConvertToMeters
00302 ) const;
00303
00310 ERRVALUE CopyGeorefTo (
00311 const RVC::GEOSPATIAL& DestObj
00312 );
00313
00318 ERRVALUE CopyGeorefTo (
00319 const RVC::GEOSPATIAL& DestObj,
00320 const TRANS2D_AFFINE& SrcToDest
00321 );
00322
00327 ERRVALUE CopyGeorefTo (
00328 const RVC::GEOSPATIAL& DestObj,
00329 const TRANS2D_MAPGEN& SrcToDest
00330 );
00331
00335 bool HasCapability (
00336 int Capability
00337 ) const;
00338
00343 int GetDefaultGeoref (
00344 RVC::GEOREFERENCE& GeorefObj
00345 ) const;
00346
00348 void GetExtents (
00349 DRECT3D& extents
00350 ) const { v_GetExtents(extents); }
00351
00353 ERRVALUE GetObjectMapRegion (
00354 RVC::GEOREFERENCE& GeorefObj,
00355 REGION2D& region,
00356 OBJECTREGIONFLAGS flags = OBJECTREGION_Default
00357 ) const;
00358
00360 ERRVALUE GetObjectRegion (
00361 RVC::GEOREFERENCE& GeorefObj,
00362 REGION2D& region,
00363 TRANS2D_MAPGEN& ObjectToMap,
00364 OBJECTREGIONFLAGS flags = OBJECTREGION_Default
00365 ) const;
00366
00368 void GetScale (
00369 double& xscale,
00370 double& yscale
00371 ) const { v_GetScale(xscale, yscale); }
00372
00375 double GetZOffset (
00376 ) const { return (v_GetZOffset()); }
00377
00380 double GetZScale (
00381 ) const { return (v_GetZScale()); }
00382
00384 ERRVALUE ScanAutoLink (
00385 ) { return (v_ScanAutoLink()); }
00386
00388 ERRVALUE SetObjectScale (
00389 double xscale,
00390 double yscale,
00391 bool onlyifzero
00392 );
00393
00395 ERRVALUE SetScaleFromGeoref (
00396 RVC::GEOREFERENCE& GeorefObj,
00397 bool onlyifzero
00398 );
00399
00401 void SetZOffset (
00402 double zoffset
00403 ) { v_SetZOffset(zoffset); }
00404
00406 void SetZScale (
00407 double zscale
00408 ) { v_SetZScale(zscale); }
00409
00410 private:
00411 #ifndef GENERATING_DOXYGEN_OUTPUT
00412 virtual void v_GetExtents (DRECT3D& extents) const = 0;
00413 virtual void v_GetScale (double& xscale, double& yscale) const = 0;
00414 virtual double v_GetZScale () const = 0;
00415 virtual double v_GetZOffset () const = 0;
00416 virtual bool v_HasCapability (int Capability) const = 0;
00417 virtual ERRVALUE v_ScanAutoLink ();
00418 virtual void v_SetZScale (double zscale) = 0;
00419 virtual void v_SetZOffset (double zoffset) = 0;
00420 virtual void v_SetScale (double xscale, double yscale) = 0;
00421 #endif // GENERATING_DOXYGEN_OUTPUT
00422
00423 };
00424
00425 #ifndef GENERATING_DOXYGEN_OUTPUT
00426 DEFINE_ENUM_OP_BITWISE(GEOSPATIAL::MAKELINKFLAGS)
00427 DEFINE_ENUM_OP_BITWISE(GEOSPATIAL::OBJECTREGIONFLAGS)
00428 #endif
00429
00431 class GEOSPATIAL::GETOBJFILTER_ISSELECTABLE : public GETOBJFILTER {
00432 public:
00433 GETOBJFILTER_ISSELECTABLE () {}
00434 private:
00435 #ifndef GENERATING_DOXYGEN_OUTPUT
00436 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00437 #endif // GENERATING_DOXYGEN_OUTPUT
00438 };
00439
00441 class GEOSPATIAL::GETOBJFILTER_ISOVERLAPPING : public GETOBJFILTER {
00442 public:
00443
00444 GETOBJFILTER_ISOVERLAPPING (
00445 const RVC::OBJITEM& ObjItemRef
00446 );
00447
00448 virtual ~GETOBJFILTER_ISOVERLAPPING () {}
00449
00451 void SetObjItemRef (
00452 const RVC::OBJITEM& ObjItemRef
00453 );
00454
00455 private:
00456 #ifndef GENERATING_DOXYGEN_OUTPUT
00457 OBJITEM m_ObjItemRef;
00458 TRANS2D_MAPGEN m_RefToSelected;
00459 DRECT3D m_RefExtents;
00460 bool m_RefHasLocalCRS;
00461
00462 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00463 #endif // GENERATING_DOXYGEN_OUTPUT
00464 };
00465
00467 class GEOSPATIAL::GETOBJFILTER_HASGEOREFERENCE : public GETOBJFILTER {
00468 public:
00469 GETOBJFILTER_HASGEOREFERENCE () {}
00470 private:
00471 #ifndef GENERATING_DOXYGEN_OUTPUT
00472 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00473 #endif // GENERATING_DOXYGEN_OUTPUT
00474 };
00475
00477 class GEOSPATIAL::GETOBJFILTER_HASNONLOCALGEOREFERENCE : public GETOBJFILTER {
00478 public:
00479 GETOBJFILTER_HASNONLOCALGEOREFERENCE () {}
00480 private:
00481 #ifndef GENERATING_DOXYGEN_OUTPUT
00482 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00483 #endif // GENERATING_DOXYGEN_OUTPUT
00484 };
00485
00487 class GEOSPATIAL::GETOBJFILTER_HASNOGEOREFERENCE : public GETOBJFILTER {
00488 public:
00489 GETOBJFILTER_HASNOGEOREFERENCE () {}
00490 private:
00491 #ifndef GENERATING_DOXYGEN_OUTPUT
00492 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00493 #endif // GENERATING_DOXYGEN_OUTPUT
00494 };
00495
00496 }
00497
00498 #endif