00001
00137 #ifndef INC_SPATMOD_IMAGESOURCETILESET_H
00138 #define INC_SPATMOD_IMAGESOURCETILESET_H
00139
00140 #ifndef INC_SPATMOD_IMAGESOURCE_H
00141 #include <spatmod/imagesource.h>
00142 #endif
00143
00144 #ifndef INC_SPATMOD_IMAGESAMPLEITERATOR_H
00145 #include <spatmod/imagesampleiterator.h>
00146 #endif
00147
00148 #ifndef INC_SPATMOD_IMAGESTAGEAUTOPTR_H
00149 #include <spatmod/imagestageautoptr.h>
00150 #endif
00151
00152 #ifndef INC_SPATMOD_IMAGETILESET_H
00153 #include <spatmod/imagetileset.h>
00154 #endif
00155
00156 #ifndef INC_MI32_RECT_H
00157 #include <mi32/rect.h>
00158 #endif
00159
00160 #ifndef INC_MI32_DATETIME_H
00161 #include <mi32/datetime.h>
00162 #endif
00163
00164 #ifndef INC_MI32_CRITSEC_H
00165 #include <mi32/critsec.h>
00166 #endif
00167
00168 #ifndef INC_MI32_ZIPFILE_H
00169 #include <mi32/zipfile.h>
00170 #endif
00171
00172 #ifndef INC_RVC_OBJITEM_H
00173 #include <rvc/objitem.h>
00174 #endif
00175
00176
00177 #ifndef GENERATING_DOXYGEN_OUTPUT
00178
00179 class HTTPMESSAGE;
00180 namespace GRE {
00181 class LAYERDC;
00182 }
00183 #endif
00184
00185
00186 namespace SPATMOD {
00187 namespace IMAGE {
00188
00189
00190
00191 class SOURCE_TILESET : public SOURCE {
00192 public:
00193
00195 static void CacheClear ();
00196
00198 enum DATATIPFLAG {
00199 DATATIPFLAG_None = 0x0000,
00200 DATATIPFLAG_TileInfo = 0x0001,
00201 DATATIPFLAG_ImageValue = 0x0002,
00202 DATATIPFLAG_Date = 0x0008,
00203 };
00204
00206 SOURCE_TILESET (
00207 const RVC::OBJITEM& objitem
00208 );
00209
00211 SOURCE_TILESET (
00212 );
00213
00214
00215 virtual ~SOURCE_TILESET ();
00216
00218 ERRVALUE AddTileLabels (
00219 INT32 ZoomLevelToUse,
00220 const LRECT2D& ObjRect,
00221 const GRE::LAYERDC& layerdc
00222 );
00224 ERRVALUE FindTileFile (
00225 INT32 ZoomLevelToUse,
00226 const LPOINT2D& TileIdx,
00227 FILEPATH& PathTileFile
00228 );
00230 ERRVALUE GetDatatip (
00231 const DPOINT2D& point,
00232 MISTRING& string,
00233 INT32 ZoomLevelToUse,
00234 DATATIPFLAG flags
00235 ) { return (v_GetDatatip(point, string, ZoomLevelToUse, flags)); }
00237 ERRVALUE GetDatatipObjectNames (
00238 const DPOINT2D& point,
00239 MISTRING& string,
00240 INT32 ZoomLevelToUse,
00241 int indent = 0
00242 ) { return (v_GetDatatipObjectNames(point, string, ZoomLevelToUse, indent)); }
00244 const MISTRING& GetDateString () const
00245 { return (m_DateString); }
00247 INT32 GetMaxLevel () const
00248 { return (m_TileSet.GetMaxLevel()); }
00250 INT32 GetMinLevel () const
00251 { return (m_TileSet.GetMinLevel()); }
00253 double GetMaxLevelCellSize () const;
00255 double GetMinLevelCellSize () const;
00257 double GetMaxScaleVisible (
00258 double PixelSizeMM
00259 ) const;
00261 ERRVALUE GetTileIdx (
00262 LPOINT2D& TileIdx,
00263 const DPOINT2D& point,
00264 INT32 ZoomLevel
00265 );
00267 ERRVALUE GetTileIdx (
00268 LPOINT2D& TileIdx,
00269 LPOINT2D& PixelInTile,
00270 const DPOINT2D& point,
00271 INT32 ZoomLevel
00272 );
00274 SPATMOD::IMAGE::TILESET& GetTileSet ()
00275 { return (m_TileSet); }
00277 bool HasTileMap ();
00279 FORMAT::SPEC FindTileInTileMap (
00280 const SPATMOD::IMAGE::BUFFER& Buffer,
00281 INT32 ZoomLevel,
00282 const LPOINT2D& TopLeftTileIdx,
00283 const LPOINT2D& TileIdx
00284 );
00286 ERRVALUE ReadTileMap (
00287 SPATMOD::IMAGE::BUFFER& Buffer,
00288 INT32 level,
00289 const LPOINT2D& TopLeftTileIdx,
00290 const LPOINT2D& BottomRightTileIdx,
00291 bool bIsMaxRangeTileMap = false
00292 );
00294 ERRVALUE MakeGeoreference (
00295 STAGE_AUTOPTR& StagePtr,
00296 double ZoomUsed
00297 );
00300 void SetDateString (const MISTRING& DateString)
00301 { m_DateString = DateString; }
00303 ERRVALUE SetMaxLevelToUse (INT32 MaxLevel);
00305 void SetUseMultithreaded (bool bUseMultithreaded) {m_bUseMultithreaded = bUseMultithreaded;}
00306
00307 protected:
00308
00309
00311 void ComputePosition (INT32 TileSize, INT32 RowsToAdd, INT32 ColsToAdd, const LPOINT2D& BaseTopLeftTileIdx, LPOINT2D& TileIdx, LPOINT2D& PixelInTile);
00313 ERRVALUE FindSource (const MISTRING& RemotePathString, INT32 TileMapLevel, INT32 ZoomLevelToUse, const LPOINT2D& TileIdx, SPATMOD::IMAGE::STAGE*& source, bool bDownloadIfNeeded = false, MISTRING* PathString = 0, bool bReturnOnlyString = false);
00315 ERRVALUE FindSource (INT32 ZoomLevelToUse, const LPOINT2D& TileIdx, SPATMOD::IMAGE::STAGE*& source, bool bDownloadIfNeeded = false, MISTRING* PathString = 0, bool bReturnOnlyString = false);
00317 ERRVALUE FinishInitialize ();
00319 void SetUseTileMap (bool bUseTileMap) {m_bUseTilemap = bUseTileMap;}
00321 virtual ERRVALUE v_GetDatatip (const DPOINT2D& point, MISTRING& string, INT32 ZoomLevelToUse, DATATIPFLAG flags);
00322
00323 private:
00324 #ifndef GENERATING_DOXYGEN_OUTPUT
00325
00326
00329 static void CheckContentType (SPATMOD::IMAGE::FORMAT& ImgFormat, FILEPATH& PathTileFile, const HTTPMESSAGE& reply, const SPATMOD::IMAGE::TILESET& TileSet);
00331 ERRVALUE AddSectionToDownload(const SPATMOD::IMAGE::SECTION& section);
00333 void CheckCache ();
00335 ERRVALUE CheckDownloadTile (const LPOINT3D& TileIdx);
00337 bool FilterDelegate (
00338 const SPATMOD::IMAGE::SAMPLEITERATOR *ittgt,
00339 const SPATMOD::IMAGE::SAMPLEITERATOR *itsrc,
00340 bool valid
00341 );
00343 const FILEPATH& GetCacheBasePath () const
00344 { return (m_TempCacheBasePath); }
00346 MISTRING GetCacheFileName (const LPOINT2D& TileIdx, INT32 ZoomLevel, INT32 TileMapLevel = -1);
00348 INT32 GetZoomLevel (INT32 MaxLevel, double zoom) const;
00350 void OnJobDone (MITHREAD::ID id);
00352 void QueueNextTileJob (int ServerPos);
00353
00355 ERRVALUE PullTiles (
00356 const SECTION& SubSection,
00357 BUFFER& buffer,
00358 const SPATMOD::IMAGE::PIXEL& PixelProperties,
00359 bool &bFoundTiles
00360 );
00362 ERRVALUE PullTiles (
00363 const MISTRING& RemotePathString,
00364 INT32 TileMapLevel,
00365 INT32 ZoomLevelToUse,
00366 const SECTION& SubSection,
00367 BUFFER& buffer,
00368 const SPATMOD::IMAGE::PIXEL& PixelProperties,
00369 bool &bFoundTiles
00370 );
00372 void GetMinimumPixelInMap (
00373 const SPATMOD::IMAGE::BUFFER& Buffer,
00374 INT32 ZoomLevel,
00375 const LPOINT2D& TopLeftTileIdx,
00376 const LPOINT2D& TileIdx,
00377 double& MinValue
00378 );
00380 void GetMaximumPixelInMap (
00381 const SPATMOD::IMAGE::BUFFER& Buffer,
00382 INT32 ZoomLevel,
00383 const LPOINT2D& TopLeftTileIdx,
00384 const LPOINT2D& TileIdx,
00385 double& MaxValue
00386 );
00387
00388 ERRVALUE ReadPixelRange (
00389 INT32 level,
00390 const LPOINT2D& TileIdx,
00391 double& MinValue,
00392 double& MaxValue
00393 );
00394
00395
00396 virtual void v_GetCacheName (MISTRING& CacheName);
00397 virtual ERRVALUE v_GetDatatipObjectNames (const DPOINT2D& point, MISTRING& string, INT32 ZoomLevelToUse, int indent);
00398 virtual ERRVALUE v_ProcessBottomTile (SPATMOD::IMAGE::STAGE*& source, INT32 ZoomLevelToUse, const LPOINT2D& TileIdx);
00399
00400
00401 virtual ERRVALUE v_GetDimensions (DIMENSIONS& dimensions, double zoom) const;
00402 virtual ERRVALUE v_GetGeoreference (GEOREFERENCE& georeference, double zoom) const;
00403 virtual const char* v_GetTypeName () const;
00404 virtual ZOOMABILITY v_GetZoomAbility (SIMPLE_ARRAY<double>& ZoomsAllowed) const;
00405
00406
00407 virtual ERRVALUE v_ComputePixelRange (
00408 const SECTION& section,
00409 PIXEL& PixelValueMin,
00410 PIXEL& PixelValueMax,
00411 RANGETYPE accuracy
00412 );
00413 virtual ERRVALUE v_Initialize ();
00414 virtual ERRVALUE v_PullBegin (const SECTION_ITERATOR& iterator);
00415 virtual ERRVALUE v_PullEnd ();
00416 virtual ERRVALUE v_PullSubSection (const SECTION& SubSection, BUFFER& buffer);
00417 virtual float v_QueryIterator (const SECTION_ITERATOR& iterator) const;
00418
00419
00420 SOURCE_TILESET (const SOURCE_TILESET&);
00421 SOURCE_TILESET& operator= (const SOURCE_TILESET&);
00422
00423
00424 class TILEJOB;
00425 class TILETODOWNLOAD;
00426
00427 bool m_bUseTilemap;
00428 INT32 m_NumTiles;
00429 MISTRING m_DateString;
00430 MISTRING m_TempCacheName;
00431 FILEPATH m_TempCacheBasePath;
00432 FILEPATH m_LastZipFilePath;
00433 ZIPFILE m_LastZipFile;
00434 RVC::OBJITEM m_objitem;
00435 SPATMOD::IMAGE::TILESET m_TileSet;
00436 SPATMOD::IMAGE::TILESET m_TileMapTileset;
00437 SPATMOD::IMAGE::TILESET::IMGFORMAT m_ImgFormat;
00438 SPATMOD::IMAGE::PIXEL::TYPE m_SrcPixelType;
00439 MILIST<TILEJOB*> m_TileJobPtrs;
00440 MILIST<TILETODOWNLOAD> m_TilesToDownload;
00441 MITHREAD::QUEUE m_Queue;
00442 MITHREAD::POOL* m_Pool;
00443 MITHREAD::CRITICALSECTION m_TileListSync;
00444 bool m_bUseMultithreaded;
00445
00446 #endif // GENERATING_DOXYGEN_OUTPUT
00447
00448 };
00449
00450 #ifndef GENERATING_DOXYGEN_OUTPUT
00451 DEFINE_ENUM_OP_BITWISE(SOURCE_TILESET::DATATIPFLAG)
00452 #endif
00453
00454
00455
00456 }
00457 }
00458
00459 #endif // INC_SPATMOD_IMAGESOURCEGOOGLEMAPS_H
00460