00001
00308 #ifndef INC_SPATMOD_IMAGETILESET_H
00309 #define INC_SPATMOD_IMAGETILESET_H
00310
00311 #ifndef INC_SPATMOD_IMAGEFORMAT_H
00312 #include <spatmod/imageformat.h>
00313 #endif
00314
00315 #ifndef INC_MI32_SPATREF_H
00316 #include <mi32/spatref.h>
00317 #endif
00318
00319 #ifndef INC_MI32_RECT_H
00320 #include <mi32/rect.h>
00321 #endif
00322
00323 #ifndef INC_MI32_XML_H
00324 #include <mi32/xml.h>
00325 #endif
00326
00327 #ifndef INC_MI32_MISTRINGLIST_H
00328 #include <mi32/mistringlist.h>
00329 #endif
00330
00331 #ifndef INC_MI32_BITSET_H
00332 #include <mi32/bitset.h>
00333 #endif
00334
00335 #ifndef INC_MI32_FILEPATH_H
00336 #include <mi32/filepath.h>
00337 #endif
00338
00339 #ifndef INC_MI32_ZIPFILE_H
00340 #include <mi32/zipfile.h>
00341 #endif
00342
00343 #ifndef INC_MI32_DATETIME_H
00344 #include <mi32/datetime.h>
00345 #endif
00346
00347 #ifndef INC_MI32_COLOR_H
00348 #include <mi32/color.h>
00349 #endif
00350
00351 #ifndef INC_MI32_POLYLINE_H
00352 #include <mi32/polyline.h>
00353 #endif
00354
00355 #ifndef INC_RVC_OBJITEM_H
00356 #include <rvc/objitem.h>
00357 #endif
00358
00359 #ifndef INC_MI32_MITHREAD_H
00360 #include <mi32/mithread.h>
00361 #endif
00362
00363 #ifndef INC_MI32_TEXTID_H
00364 #include <mi32/textid.h>
00365 #endif
00366
00367 #ifndef INC_MGUI_DLGGETOBJECTFILTER_H
00368 #include <mgui/dlggetobjectfilter.h>
00369 #endif
00370
00371
00372 #ifndef GENERATING_DOXYGEN_OUTPUT
00373 class REGION2D;
00374 class TRANS2D_AFFINE;
00375 class MISTATUSCONTEXT;
00376 namespace SPATMOD {
00377 class GEOREFERENCE;
00378 namespace IMAGE {
00379 class SAMPLEITERATOR;
00380 class SOURCE_TILESET;
00381 }
00382 }
00383 #endif
00384
00385 namespace SPATMOD {
00386 namespace IMAGE {
00387
00388 class PIXEL;
00389
00390
00391
00393 class TILESET {
00394 public:
00395
00396 static void TSDFileTypeGetDescription (MISTRING& description, const RVC::OBJITEM& objitem);
00397 static void TSDFileTypeGetProperties (MISTRING& properties, const FILEPATH& filepath);
00398 static void TSDFileTypeGetProperties (MISTRING& properties, const RVC::OBJITEM& objitem);
00399 static void TSDFileTypeGetProperties (MISTRING& properties, const RVC::OBJITEM& objitem, bool ShowExtents);
00400 static void RegisterTSDFileType ();
00401 static void SaveAs (const MISTRING& url, const FILEPATH& filepath);
00403 enum PROFILE {
00404 PROFILE_None = 0,
00405 PROFILE_Local = 1,
00406 PROFILE_Global_Geographic = 2,
00407 PROFILE_Global_WebMercator = 3
00408 };
00409
00410 enum STRUCTURE {
00411 STRUCTURE_Hierarchical = 0,
00412 STRUCTURE_Flat = 1,
00413 STRUCTURE_WorldWind = 2
00414 };
00415
00416 enum TARGET {
00417 TARGET_Undefined = 0,
00418 TARGET_GoogleMaps = 1,
00419 TARGET_GoogleEarth = 2,
00420 TARGET_BingMaps = 3,
00421 TARGET_NASAWorldWind = 4
00422 };
00423
00425 enum IMGFORMAT {
00426 IMGFORMAT_Invalid = 0x00000000,
00427 IMGFORMAT_8bit = 0x00000001,
00428 IMGFORMAT_16bit = 0x00000002,
00429 IMGFORMAT_16bitA = 0x00000004,
00430 IMGFORMAT_16bitOLD = 0x00000008,
00431 IMGFORMAT_24bit = 0x00000010,
00432 IMGFORMAT_32bit = 0x00000020,
00433 IMGFORMAT_Terrain = 0x00000040,
00434 IMGFORMAT_PNG = 0x00000080,
00435 IMGFORMAT_JPEG = 0x00000100,
00436 IMGFORMAT_TIFF = 0x00000200,
00437 IMGFORMAT_GIF = 0x00000400,
00438 IMGFORMAT_JP2 = 0x00000800,
00439 IMGFORMAT_SVG = 0x00001000,
00440 IMGFORMAT_SVGZ = (IMGFORMAT_SVG|1),
00441 IMGFORMAT_PNG8 = (IMGFORMAT_PNG|IMGFORMAT_8bit),
00442 IMGFORMAT_PNG24 = (IMGFORMAT_PNG|IMGFORMAT_24bit),
00443 IMGFORMAT_PNG16Terrain = (IMGFORMAT_PNG|IMGFORMAT_16bit|IMGFORMAT_Terrain),
00444 IMGFORMAT_PNG16TerrainA = (IMGFORMAT_PNG|IMGFORMAT_16bitA|IMGFORMAT_Terrain),
00445 IMGFORMAT_PNG16TerrainOLD = (IMGFORMAT_PNG|IMGFORMAT_16bitOLD|IMGFORMAT_Terrain),
00446 IMGFORMAT_PNG24Terrain = (IMGFORMAT_PNG|IMGFORMAT_24bit|IMGFORMAT_Terrain),
00447 IMGFORMAT_PNG32Terrain = (IMGFORMAT_PNG|IMGFORMAT_32bit|IMGFORMAT_Terrain),
00448 IMGFORMAT_TIFF8 = (IMGFORMAT_TIFF|IMGFORMAT_8bit),
00449 IMGFORMAT_TIFF24 = (IMGFORMAT_TIFF|IMGFORMAT_24bit),
00450 IMGFORMAT_Auto_PNG8_JPEG = (IMGFORMAT_PNG8|IMGFORMAT_JPEG),
00451 IMGFORMAT_Auto_PNG24_JPEG = (IMGFORMAT_PNG24|IMGFORMAT_JPEG)
00452 };
00453
00454 enum TYPE {
00455 TYPE_None = 0x0000,
00456 TYPE_Image = 0x0001,
00457 TYPE_Terrain = 0x0002,
00458 TYPE_KML = 0x0004,
00459 TYPE_SVG = 0x0008,
00460 TYPE_DAE = 0x0010
00461 };
00462
00464 struct TransparentColor {
00465 COLOR color;
00466 double distance;
00467 TransparentColor ()
00468 : distance(0) { }
00469 };
00470
00471 class FILTER : public MGUI::DLG_GETOBJECT_FILTER {
00472 public:
00473 FILTER ();
00474 ~FILTER ();
00475 void AddType(TYPE type);
00476 private:
00477 TYPE m_Types;
00478 virtual bool v_IsFileSelectable(const FILEPATH& filepath, int position) const;
00479 };
00480
00482 class LIST {
00483 public:
00484 enum GROUP {
00485 GROUP_Image = 0,
00486 GROUP_Terrain,
00487 GROUP_Server,
00488 GROUP_Mashup
00489 };
00490
00491 enum ITEM {
00492 ITEM_Image = 0,
00493 ITEM_Terrain,
00494 ITEM_TerrainA,
00495 ITEM_KML,
00496 ITEM_Server
00497 };
00498
00500 LIST ();
00501
00503 ~LIST ();
00504
00506 bool IsRead (
00507 ) const { return (m_bIsRead); }
00508
00510 ERRVALUE Read (
00511 bool bIncludeArcIMS = false,
00512 bool bIncludeWMS = false,
00513 bool bIncludeProprietary = false
00514 );
00515
00517 XMLNODE* FindGroup (
00518 const XMLNODE* node = 0
00519 ) const;
00520
00522 XMLNODE* FindGroup (
00523 const char* id,
00524 const XMLNODE* node = 0
00525 ) const;
00526
00528 XMLNODE* FindGroup (
00529 GROUP group,
00530 const XMLNODE* node = 0
00531 ) const;
00532
00534 XMLNODE* FindNextGroup (
00535 const XMLNODE* node
00536 ) const;
00537
00539 XMLNODE* FindNextGroup (
00540 const char* id,
00541 const XMLNODE* node
00542 ) const;
00543
00545 XMLNODE* FindNextGroup (
00546 GROUP group,
00547 const XMLNODE* node
00548 ) const;
00549
00551 XMLNODE* FindItem (
00552 const XMLNODE* node = 0
00553 ) const;
00554
00556 XMLNODE* FindItem (
00557 const char* id,
00558 const XMLNODE* node = 0
00559 ) const;
00560
00562 XMLNODE* FindItem (
00563 ITEM item,
00564 const XMLNODE* node = 0
00565 ) const;
00566
00568 XMLNODE* FindNextItem (
00569 const XMLNODE* node
00570 ) const;
00571
00573 XMLNODE* FindNextItem (
00574 const char* id,
00575 const XMLNODE* node
00576 ) const;
00577
00579 XMLNODE* FindNextItem (
00580 ITEM item,
00581 const XMLNODE* node
00582 ) const;
00583
00586 XMLNODE* FindItem (
00587 const REGION2D& region,
00588 const XMLNODE* node
00589 ) const;
00590
00593 XMLNODE* FindItem (
00594 const char* id,
00595 const REGION2D& region,
00596 const XMLNODE* node
00597 ) const;
00598
00601 XMLNODE* FindItem (
00602 ITEM item,
00603 const REGION2D& region,
00604 const XMLNODE* node
00605 ) const;
00606
00609 XMLNODE* FindItem (
00610 ITEM item,
00611 const REGION2D& region
00612 ) const;
00613
00615 XMLNODE* GetRootNode (
00616 ) { return (m_doc.GetRootNode()); }
00617
00618 XMLDOC& GetDoc (
00619 ) { return (m_doc); }
00620
00622 static INT32 GetMaxLevel (
00623 const XMLNODE* node
00624 );
00625
00627 static MISTRING GetURL (
00628 const XMLNODE* node
00629 );
00630
00632 static void GetObjItem (
00633 RVC::OBJITEM& objitem,
00634 const XMLNODE* node
00635 );
00636
00637 private:
00638 #ifndef GENERATING_DOXYGEN_OUTPUT
00639 bool m_bIsRead;
00640 XMLDOC m_doc;
00641 bool TestNode(const XMLNODE* node, const REGION2D& region) const;
00642 void IMAGE::TILESET::LIST::FindItem(
00643 ITEM item,
00644 const REGION2D& region,
00645 XMLNODE*& retnode,
00646 const XMLNODE* parentnode
00647 ) const;
00648 #endif
00649 };
00650
00652 class POSN {
00653 public:
00655 POSN ();
00657 const LPOINT2D& GetTileIdx (
00658 ) const { return (m_TileIdx); }
00660 const LPOINT2D& GetPixelInTile (
00661 ) const { return (m_PixelInTile); }
00663 void Set (
00664 const LPOINT2D& TileIdx,
00665 const LPOINT2D& PixelInTile
00666 );
00667
00668 private:
00669 #ifndef GENERATING_DOXYGEN_OUTPUT
00670 LPOINT2D m_TileIdx;
00671 LPOINT2D m_PixelInTile;
00672 #endif
00673 };
00674
00676 class RANGE {
00677 public:
00679 RANGE ();
00681 INT32 ComputeNumPixelsX (INT32 TileSize) const;
00683 INT32 ComputeNumPixelsY (INT32 TileSize) const;
00685 INT32 ComputeNumTilesX (
00686 ) const { return (m_BottomRight.GetTileIdx().x - m_TopLeft.GetTileIdx().x + 1); }
00688 INT32 ComputeNumTilesY (
00689 ) const { return (m_BottomRight.GetTileIdx().y - m_TopLeft.GetTileIdx().y + 1); }
00691 bool Contains (
00692 const LPOINT2D& TileIdx
00693 ) const;
00695 const POSN& GetBottomRight (
00696 ) const { return (m_BottomRight); }
00698 const POSN& GetTopLeft (
00699 ) const { return (m_TopLeft); }
00701 ERRVALUE Set (
00702 const POSN& TopLeft,
00703 const POSN& BottomRight
00704 );
00705 private:
00706 #ifndef GENERATING_DOXYGEN_OUTPUT
00707 POSN m_TopLeft;
00708 POSN m_BottomRight;
00709 #endif
00710 };
00711
00713 TILESET ();
00714
00716 ~TILESET ();
00717
00720 void AddTileFormat (
00721 const IMAGE::FORMAT& format
00722 );
00723
00724
00725 void Clear ();
00726
00728 void CloseZipFiles();
00729
00732 double ComputeCellSize (
00733 INT32 level,
00734 bool UseExtents = false
00735 ) const;
00736
00738 ERRVALUE ComputeExtents (
00739 DRECT2D& Extents,
00740 INT32 level
00741 ) const;
00742
00744 ERRVALUE ComputeExtents (
00745 DRECT2D& Extents,
00746 const LPOINT3D& TileIdx
00747 ) const { return (ComputeExtents(Extents,TileIdx.z,TileIdx.x,TileIdx.y,TileIdx.x,TileIdx.y)); }
00748
00750 ERRVALUE ComputeExtents (
00751 DRECT2D& Extents,
00752 INT32 level,
00753 INT32 TileColumn,
00754 INT32 TileRow
00755 ) const { return (ComputeExtents(Extents,level,TileColumn,TileRow,TileColumn,TileRow)); }
00756
00758 ERRVALUE ComputeExtents (
00759 DRECT2D& Extents,
00760 INT32 level,
00761 INT32 TileColumn1,
00762 INT32 TileRow1,
00763 INT32 TileColumn2,
00764 INT32 TileRow2
00765 ) const;
00766
00768 ERRVALUE ComputeGeoreference (
00769 INT32 level,
00770 GEOREFERENCE& Georeference
00771 ) const;
00772
00774 INT32 ComputeMaxLevel (
00775 const LPOINT2D& SrcImageSize,
00776 const GEOREFERENCE& SrcGeoreference
00777 ) const;
00778
00781 INT32 ComputeMinLevel (
00782 const REGION2D& MapRegion,
00783 INT32 MaxLevel = -1
00784 ) const;
00785
00787 ERRVALUE ComputeTileRange (
00788 const DRECT2D& Extents,
00789 INT32 level,
00790 TILESET::RANGE& TileRange,
00791 bool IsOnBorder = false
00792 ) const;
00793
00795 ERRVALUE ComputeTileRangeGeog (
00796 const DRECT2D& GeogExtents,
00797 INT32 level,
00798 TILESET::RANGE& TileRange,
00799 bool IsOnBorder = false
00800 ) const;
00801
00803 ERRVALUE Create (
00804 PROFILE profile,
00805 INT32 TileSize
00806 );
00807
00809 ERRVALUE Create (
00810 const SPATREF::COORDREFSYS& crs,
00811 INT32 TileSize,
00812 double CellSize = 0
00813 );
00814
00816 ERRVALUE CreateAuxiliaryFiles (
00817 bool bOverwriteExisting = true,
00818 TILESET::TARGET Target = TILESET::TARGET_Undefined,
00819 INT32 MinLevel = -1
00820 );
00821
00823 ERRVALUE CreateAuxiliaryFiles (
00824 const MISTRING& BaseURL,
00825 bool bOverwriteExisting = true,
00826 TILESET::TARGET Target = TILESET::TARGET_Undefined,
00827 INT32 MinLevel = -1
00828 );
00829
00831 ERRVALUE CreateReducedLevel (
00832 INT32 level,
00833 IMGFORMAT ImgFormat = IMGFORMAT_Invalid,
00834 UINT16 QualityJPEG = 75,
00835 TILESET::TARGET Target = TILESET::TARGET_Undefined,
00836 MISTRING message = TEXTID_Creating_ResolutionLevelN,
00837 bool bZipOutput = false
00838 );
00839
00841 ERRVALUE CreateReducedLevel (
00842 const FILEPATH& SourcePath,
00843 const FILEPATH& TargetPath,
00844 INT32 level,
00845 IMGFORMAT ImgFormat = IMGFORMAT_Invalid,
00846 UINT16 QualityJPEG = 75,
00847 TILESET::TARGET Target = TILESET::TARGET_Undefined,
00848 MISTRING message = TEXTID_Creating_ResolutionLevelN,
00849 bool bZipOutput = false
00850 );
00851
00854 bool FindKMLFile (
00855 const FILEPATH& PathBaseFolder,
00856 INT32 level,
00857 const LPOINT2D& TileIdx,
00858 FILEPATH& PathTileFile,
00859 MISTRING& TileName
00860 );
00861
00864 const FORMAT* FindTileFile (
00865 const FILEPATH& PathBaseFolder,
00866 INT32 level,
00867 const LPOINT2D& TileIdx,
00868 FILEPATH& PathTileFile
00869 ) const;
00870
00873 const FORMAT* FindTileFile (
00874 INT32 level,
00875 const LPOINT2D& TileIdx,
00876 FILEPATH& PathTileFile
00877 );
00878
00881 const FORMAT* FindTileFile (
00882 const FILEPATH& PathBaseFolder,
00883 INT32 level,
00884 const LPOINT2D& TileIdx,
00885 FILEPATH& PathTileFile,
00886 MISTRING& TileName
00887 );
00888
00891 const FORMAT* FindTileFile (
00892 INT32 level,
00893 const LPOINT2D& TileIdx,
00894 FILEPATH& PathTileFile,
00895 MISTRING& TileName
00896 );
00897
00899 ERRVALUE GenerateTileFilePath (
00900 const FILEPATH& PathBaseFolder,
00901 INT32 level,
00902 const LPOINT2D& TileIdx,
00903 FILEPATH& PathTileFile,
00904 const FORMAT *pFormat = 0,
00905 bool MakeFolder = false
00906 ) const;
00907
00909 ERRVALUE GeneratePixelRangeMap (
00910 INT32 level = -1
00911 );
00912
00914 ERRVALUE GenerateRegionTileMap (
00915 );
00916
00918 ERRVALUE GenerateTileMap (
00919 INT32 level = -1
00920 );
00921
00923 ERRVALUE GenerateTilesetTest ();
00924
00926 ERRVALUE ScanTilesetTest ();
00927
00929 ERRVALUE GenerateTerrainXML (
00930 );
00931
00934 double GetBaseCellSize (
00935 ) const { return (m_BaseCellSize); }
00936
00939 INT32 GetBaseLevel (
00940 ) const { return (m_BaseLevel); }
00941
00943 INT32 GetBaseTileCount (
00944 ) const { return (m_BaseTileCount); }
00945
00947 MISTRING GetCellSizeDisplayStr (
00948 INT32 level
00949 ) const;
00950
00952 const SPATREF::COORDREFSYS& GetCRS (
00953 ) const { return (m_crs); }
00954
00956 XMLNODE* GetDateList () const { return (m_DateList); }
00957
00959 XMLNODE* GetDateRange () const { return (m_DateRange); }
00960
00962 const DRECT2D& GetExtentsInCRS (
00963 ) const { return (m_ExtentsInCRS); }
00964
00966 void GetCacheLocationPath (
00967 FILEPATH& CacheLocationPath
00968 );
00969
00971 void GetImgFormat (
00972 IMGFORMAT& ImgFormat
00973 );
00974
00976 void GetImgFormat (
00977 IMGFORMAT& ImgFormat,
00978 PIXEL& PixelProperties
00979 );
00980
00984 MISTRING GetLocalLocationString (
00985 INT32 level = -1
00986 );
00987
00989 const MISTRINGLIST& GetLocalLocationStrings () const {return m_LocalLocationStrings;}
00990
00993 const MISTRINGLIST& GetLocalLocationLevelStrings () const {return m_LocalLocationLevelStrings;}
00994
00998 void GetLocalLocationPath (
00999 FILEPATH& LocationPath,
01000 INT32 level = -1
01001 );
01002
01004 double GetMargin (
01005 ) const { return m_Margin; }
01006
01010 MISTRING GetRemoteLocationString (
01011 INT32 level = -1
01012 );
01013
01015 const MISTRINGLIST& GetRemoteLocationStrings () const {return m_RemoteLocationStrings;}
01016
01019 const MISTRINGLIST& GetRemoteLocationLevelStrings () const {return m_RemoteLocationLevelStrings;}
01020
01022 INT32 GetMaxLevel (
01023 ) const { return (m_MaxLevel); }
01024
01026 INT32 GetMinLevel (
01027 ) const { return (m_MinLevel); }
01028
01030 MISTRING GetMetadata (
01031 ) const { return (m_metadata); }
01032
01034 const RVC::OBJITEM& GetObjItem() {return m_objitem;}
01035
01037 void GetPath (
01038 FILEPATH& path
01039 ) { path = m_TSDPath; }
01040
01041 double GetPixelValueMin (
01042 ) const { return (m_PixelValueMin); }
01043
01044 double GetPixelValueMax (
01045 ) const { return (m_PixelValueMax); }
01046
01048 PROFILE GetProfile (
01049 ) const { return (m_profile); }
01050
01052 void GetProperties (
01053 MISTRING& properties,
01054 bool ShowExtents = true
01055 );
01056
01058 MISTRING GetReferenceLocation (
01059 ) const { return (m_Reference); }
01060
01062 double GetScale (
01063 ) const { return (m_Scale); }
01064
01065 INT32 GetScaleNumerator (
01066 ) const { return (m_ScaleNumerator); }
01067
01068 INT32 GetScaleDenominator (
01069 ) const { return (m_ScaleDenominator); }
01070
01072 INT64 GetPrescaleOffset (
01073 ) const { return (m_PrescaleOffset); }
01074
01076 INT64 GetPostscaleOffset (
01077 ) const { return (m_PostscaleOffset); }
01078
01080 STRUCTURE GetStructure ();
01081
01083 TARGET GetTarget ();
01084
01086 TYPE GetType () {return m_type;}
01087
01089 const FORMAT& GetTileFormat (
01090 bool HasNullCells
01091 ) const;
01092
01094 const MILIST<FORMAT>& GetTileFormatList (
01095 ) const { return (m_TileFormatList); }
01096
01098 ERRVALUE GetTileRange (
01099 INT32 level,
01100 TILESET::RANGE& TileRange
01101 ) const;
01102
01104 INT32 GetTileSize (
01105 ) const { return (m_TileSize); }
01106
01108 MISTRING GetTitle (
01109 ) const { return (m_title); }
01110
01112 ERRVALUE GetTopLeftTile (
01113 INT32 level,
01114 LPOINT2D& TileIdx
01115 ) const;
01116
01118 void GetTransparentColorList(MILIST<TransparentColor>& TransparentColors) {TransparentColors = m_TransparentColorsList;}
01119
01121 const DATETIME& GetTSDLastMod () {return m_TSDLastMod;}
01122
01127 INT32 HasDate () const;
01128
01130 bool HasSourceTiles (
01131 const FILEPATH& PathBaseFolder,
01132 INT32 level,
01133 const LPOINT2D& TileIdx
01134 );
01135
01137 bool HasSourceTiles (
01138 INT32 level,
01139 const LPOINT2D& TileIdx
01140 );
01141
01143 bool HasSourceTiles (
01144 const FILEPATH& PathBaseFolder,
01145 INT32 level,
01146 INT32 row
01147 );
01148
01150 bool HasSourceTiles (
01151 INT32 level,
01152 INT32 row
01153 );
01154
01156 bool HasTile (
01157 const FILEPATH& PathBaseFolder,
01158 INT32 level,
01159 const LPOINT2D& TileIdx
01160 );
01161
01163 bool HasTile (
01164 INT32 level,
01165 const LPOINT2D& TileIdx
01166 );
01167
01169 bool HasTiles (
01170 const FILEPATH& PathBaseFolder,
01171 INT32 level,
01172 INT32 row,
01173 bool bClear = false
01174 );
01175
01177 bool HasTiles (
01178 INT32 level,
01179 INT32 row,
01180 bool bClear = false
01181 );
01182
01184 ERRVALUE ReadTSD (
01185 const RVC::OBJITEM& objitem
01186 );
01187
01189 ERRVALUE ReadTSD (
01190 const FILEPATH& filepath
01191 );
01192
01194 ERRVALUE ReadTSD (
01195 const MISTRING& URL
01196 );
01197
01199 ERRVALUE ReadTSD (
01200 const XMLDOC& doc
01201 );
01202
01204 void SetBaseCellSize (
01205 double BaseCellSize
01206 ) { m_BaseCellSize = BaseCellSize; }
01207
01211 void SetBaseTileCount (
01212 INT32 TileCount
01213 ) { m_BaseTileCount = TileCount; }
01214
01216 ERRVALUE SetExtents (
01217 const DRECT2D& ExtentsInCRS,
01218 INT32 MinLevel,
01219 INT32 MaxLevel,
01220 bool IsOnBorder = false
01221 );
01222
01224 void SetMargin (
01225 double margin
01226 ) { m_Margin = margin; }
01227
01229 ERRVALUE SetMaxTileRange (
01230 const TILESET::RANGE& TileRange
01231 );
01232
01234 void SetMetadata (
01235 const MISTRING& metadata
01236 ) { m_metadata = metadata; }
01237
01239 void SetPath (
01240 const FILEPATH& path
01241 ) { m_TSDPath = path; }
01242
01244 void SetPixelValueRange(
01245 double PixelValueMin,
01246 double PixelValueMax
01247 ) { m_PixelValueMin = PixelValueMin; m_PixelValueMax = PixelValueMax; }
01248
01250 void SetRemoteLocationStrings (const MISTRINGLIST& RemoteLocationStrings) {m_RemoteLocationStrings = RemoteLocationStrings;}
01251
01253 void SetScale (
01254 double Scale
01255 ) { m_Scale = Scale; }
01256
01257 void SetScaleRational (
01258 INT32 Numerator,
01259 INT32 Denominator
01260 ) { m_ScaleNumerator = Numerator; m_ScaleDenominator = Denominator; m_Scale = (double)Numerator/(double)Denominator; }
01261
01263 void SetPrescaleOffset (
01264 INT64 offset
01265 ) { m_PrescaleOffset = offset; }
01266
01268 void SetPostscaleOffset (
01269 INT64 offset
01270 ) { m_PostscaleOffset = offset; }
01271
01274 void SetTileFormat (
01275 const IMAGE::FORMAT& format
01276 );
01277
01279 void SetTileSize (
01280 INT32 TileSize
01281 ) { m_TileSize = TileSize; }
01282
01284 void SetTitle (
01285 const MISTRING& title
01286 ) { m_title = title; }
01287
01289 void SetType (
01290 TYPE type
01291 ) { m_type = type; }
01292
01294 void SetURL (
01295 const MISTRING& URL
01296 ) { m_TSDURL = URL; }
01297
01299 ERRVALUE WriteKML (
01300 const FILEPATH& PathBaseFolder,
01301 INT32 level,
01302 const LPOINT2D& TileIdx
01303 );
01304
01306 ERRVALUE WriteTSD (
01307 const FILEPATH& filepath,
01308 const FILEPATH& PathBaseFolder,
01309 INT32 MinLevel = -1
01310 );
01311
01313 ERRVALUE WriteTSD (
01314 const FILEPATH& filepath,
01315 const MISTRINGLIST& LocationList,
01316 INT32 MinLevel = -1
01317 );
01318
01320 ERRVALUE WriteTSD (
01321 const FILEPATH& filepath,
01322 const FILEPATH& PathBaseFolder,
01323 const MISTRINGLIST& LocalLevelLocationList,
01324 const MISTRINGLIST& RemoteLevelLocationList,
01325 INT32 MinLevel = -1
01326 );
01327
01329 ERRVALUE WriteTSD (
01330 const FILEPATH& filepath,
01331 const MISTRINGLIST& LocationList,
01332 const MISTRINGLIST& LocalLevelLocationList,
01333 const MISTRINGLIST& RemoteLevelLocationList,
01334 INT32 MinLevel = -1
01335 );
01336
01338 ERRVALUE WriteTSD (
01339 const FILEPATH& filepath,
01340 INT32 MinLevel = -1
01341 );
01342
01344 ERRVALUE Unzip (
01345 const FILEPATH& TileFolderBasePath,
01346 bool bDeleteAfterUnzip = false
01347 );
01348
01350 ERRVALUE Unzip (
01351 const FILEPATH& TileFolderBasePath,
01352 const FILEPATH& TargetPath,
01353 bool bDeleteAfterUnzip = false
01354 );
01355
01357 ERRVALUE Zip (
01358 const FILEPATH& TileFolderBasePath,
01359 bool bDeleteAfterZip = false
01360 );
01361
01363 ERRVALUE Zip (
01364 const FILEPATH& TileFolderBasePath,
01365 const FILEPATH& TargetPath,
01366 bool bDeleteAfterZip = false
01367 );
01368
01370 ERRVALUE ZipLevel (
01371 const FILEPATH& TileFolderBasePath,
01372 INT32 level,
01373 bool bDeleteAfterZip = false
01374 );
01375
01377 ERRVALUE ZipLevel (
01378 const FILEPATH& TileFolderBasePath,
01379 const FILEPATH& TargetPath,
01380 INT32 level,
01381 bool bDeleteAfterZip = false,
01382 MITHREAD::QUEUE* Queue = NULL
01383 );
01384
01385 private:
01386 #ifndef GENERATING_DOXYGEN_OUTPUT
01387 RVC::OBJITEM m_objitem;
01388 PROFILE m_profile;
01389 TYPE m_type;
01390 INT32 m_TileSize;
01391 SPATREF::COORDREFSYS m_crs;
01392 double m_BaseCellSize;
01393 INT32 m_BaseLevel;
01394 INT32 m_BaseTileCount;
01395 INT32 m_MaxLevel;
01396 INT32 m_MinLevel;
01397 INT32 m_BitsetTargetLevel;
01398 INT32 m_BitsetSourceLevel;
01399 INT32 m_BitsetTargetRow;
01400 INT32 m_BitsetSourceRow;
01401 INT32 m_LastLocationIndex;
01402 double m_PixelValueMin;
01403 double m_PixelValueMax;
01404 double m_Scale;
01405 INT32 m_ScaleNumerator;
01406 INT32 m_ScaleDenominator;
01407 INT64 m_PrescaleOffset;
01408 INT64 m_PostscaleOffset;
01409 MISTRING m_title;
01410 MISTRING m_metadata;
01411 MISTRING m_Reference;
01412 DRECT2D m_ExtentsInCRS;
01413 DRECT2D m_GeogExtents;
01414 XMLNODE* m_DateList;
01415 XMLNODE* m_DateRange;
01416 XMLDOC m_DateDoc;
01417 MILIST<TransparentColor> m_TransparentColorsList;
01418 FILEPATH m_TSDPath;
01419 MISTRING m_TSDURL;
01420 DATETIME m_TSDLastMod;
01421
01422 MISTATUSCONTEXT *m_Context;
01423 INT32 m_JobCount;
01424
01425 MISTRINGLIST m_RemoteLocationStrings;
01426 MISTRINGLIST m_LocalLocationStrings;
01427 MISTRINGLIST m_RemoteLocationLevelStrings;
01428 MISTRINGLIST m_LocalLocationLevelStrings;
01429 MISTRING m_CacheLocationString;
01430
01431 MILIST<IMAGE::FORMAT> m_TileFormatList;
01432 TILESET::RANGE *m_TileRangeArray;
01433 BITSET m_TargetTileExistsBitset;
01434 BITSET m_SourceTilesExistBitset;
01435
01436 ZIPFILE m_LastZipFile;
01437 FILEPATH m_LastZipFilePath;
01438
01439 double m_Margin;
01440
01441 ERRVALUE ComputeTileValues (
01442 const DPOINT2D& pt,
01443 INT32 level,
01444 TILESET::POSN& TilePosn,
01445 bool IsBottomRight,
01446 bool IsOnBorder
01447 ) const;
01448
01449 ERRVALUE ComputeTileValuesGeog (
01450 const DPOINT2D& ptGeog,
01451 INT32 level,
01452 TILESET::POSN& TilePosn,
01453 bool IsBottomRight,
01454 bool IsOnBorder
01455 ) const;
01456
01457 ERRVALUE CreateTilesetMap (
01458 const RVC::OBJITEM& objitem,
01459 INT32 level,
01460 const TRANS2D_AFFINE& SrcTransAffine,
01461 const MISTRING& name,
01462 const MISTRING& description,
01463 const IMGFORMAT& ImgFormat
01464 );
01465
01466 bool FilterDelegate16ToRGBA (
01467 const SPATMOD::IMAGE::SAMPLEITERATOR *ittgt,
01468 const SPATMOD::IMAGE::SAMPLEITERATOR *itsrc,
01469 bool valid
01470 );
01471
01472 MISTRING GetRelativePathString (
01473 const FILEPATH& TSDPath,
01474 const FILEPATH& PathBaseFolder
01475 ) const;
01476
01477 MISTRING GetNextLocationString (
01478 const MISTRINGLIST& LocationList
01479 );
01480
01481 MISTRING GetLocationString (
01482 INT32 level,
01483 const MISTRINGLIST& LocationStrings,
01484 const MISTRINGLIST& LocationLevelStrings
01485 );
01486
01487 void OnJobDone (MITHREAD::ID id);
01488 void SetupTargetBitsets (const FILEPATH& PathBaseFolder, INT32 level, INT32 row, bool bClearRow = false);
01489 void SetupSourcesBitsets (const FILEPATH& PathBaseFolder, INT32 level, INT32 row);
01490 MISTRING GetPathStructureComment (const MISTRING& BasePath) const;
01491 ERRVALUE WriteTSDBase (MISTRING& string);
01492 ERRVALUE WriteTSDZoomLevels (MISTRING& string, INT32 MinLevel);
01493 ERRVALUE WriteTSDZoomLevels (MISTRING& string, INT32 MinLevel, const MISTRINGLIST& LocalLevelLocationList, const MISTRINGLIST& RemoteLevelLocationList);
01494 ERRVALUE WriteTSDLocations (MISTRING& string, const FILEPATH& filepath, const FILEPATH& PathBaseFolder) const;
01495 ERRVALUE WriteTSDLocations (MISTRING& string, const MISTRINGLIST& LocationList) const;
01496
01497 #endif // GENERATING_DOXYGEN_OUTPUT
01498
01499 };
01500
01501 #ifndef GENERATING_DOXYGEN_OUTPUT
01502 DEFINE_ENUM_OP_BITWISE(TILESET::TYPE)
01503 #endif
01504
01505
01506
01507 }
01508 }
01509
01510 #endif // INC_SPATMOD_IMAGETILESET_H