OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimGeoPdfReader.h
Go to the documentation of this file.
1 //----------------------------------------------------------------------------
2 //
3 // License: LGPL
4 //
5 // See LICENSE.txt file in the top level directory for more details.
6 //
7 // Author: Mingjie Su
8 //
9 // Description: Class declaration GeoPdf reader.
10 //
11 // Specification: ISO/IEC 15444
12 //
13 //----------------------------------------------------------------------------
14 // $Id: ossimGeoPdfReader.h 21634 2012-09-06 18:15:26Z dburken $
15 
16 #ifndef ossimGeoPdfReader_HEADER
17 #define ossimGeoPdfReader_HEADER 1
18 
19 #include <iosfwd>
20 #include <fstream>
21 #include <vector>
22 
23 //PoDoFo includes
24 #include <podofo/podofo.h>
25 
26 //ossim includes
28 #include <ossim/base/ossimIpt.h>
29 #include <ossim/base/ossimIrect.h>
33 
34 // Forward class declarations.
35 class ossimImageData;
36 class ossimDpt;
37 class ossimProjection;
38 class PdfMemDocument;
39 class PdfObject;
41 
43 {
44 public:
45 
48 
50  virtual ~ossimGeoPdfReader();
51 
56  virtual ossimString getShortName() const;
57 
62  virtual ossimString getLongName() const;
63 
68  virtual ossimString getClassName() const;
69 
80  ossim_uint32 resLevel=0);
81 
94  virtual bool getTile(ossimImageData* result, ossim_uint32 resLevel=0);
95 
100  virtual ossim_uint32 getNumberOfInputBands() const;
101 
107  virtual ossim_uint32 getNumberOfOutputBands()const;
114  virtual ossim_uint32 getImageTileWidth() const;
115 
122  virtual ossim_uint32 getImageTileHeight() const;
123 
127  virtual ossimScalarType getOutputScalarType() const;
128 
137  virtual ossim_uint32 getNumberOfLines(ossim_uint32 resLevel = 0) const;
138 
147  virtual ossim_uint32 getNumberOfSamples(ossim_uint32 resLevel = 0) const;
148 
153  virtual bool open();
154 
160  virtual bool isOpen()const;
161 
169  virtual void closeEntry();
170 
177 
182 
187  virtual bool loadState(const ossimKeywordlist& kwl,
188  const char* prefix=0);
189 
190  virtual bool setCurrentEntry(ossim_uint32 entryIdx);
191 
195  virtual ossim_uint32 getNumberOfEntries()const;
196 
202  virtual void getEntryList(std::vector<ossim_uint32>& entryList) const;
203 
208  virtual bool saveState(ossimKeywordlist& kwl,
209  const char* prefix=0)const;
210 
211 protected:
212 
214  {
216  :theRow(-1),
217  theCol(-1),
218  thePixelRow(-1),
219  thePixelCol(-1)
220  {}
222  ossim_int32 col,
223  ossim_int32 pixelRow,
224  ossim_int32 pixelCol,
225  std::vector<PoDoFo::PdfObject*> entry)
226  :theRow(row),
227  theCol(col),
228  thePixelRow(pixelRow),
229  thePixelCol(pixelCol),
230  theFrameEntry(entry)
231  {}
233  :theRow(rhs.theRow),
234  theCol(rhs.theCol),
235  thePixelRow(rhs.thePixelRow),
236  thePixelCol(rhs.thePixelCol),
237  theFrameEntry(rhs.theFrameEntry)
238  {}
243  std::vector<PoDoFo::PdfObject*> theFrameEntry;
244  };
245 
257  std::vector<ossimFrameEntryData> getIntersectingEntries(const ossimIrect& rect);
258 
259 private:
260 
261  ossimProjection* getGeoProjection();
262 
263  ossimProjection* getVPGeoProjection();
264 
265  ossimProjection* getLGIDictGeoProjection();
266 
267  ossimProjection* getProjectionFromStr(ossimString projContents);
268 
269  ossimDrect computeBoundingRect(ossimRefPtr<ossimImageGeometry> geoImage);
270 
271  void setPodofoInfo(PoDoFo::PdfObject* object);
272 
273  void setPodofoRefInfo(PoDoFo::PdfObject* object);
274 
275  void setPodofoArrayInfo(PoDoFo::PdfObject* object);
276 
277  void setPodofoDictInfo(PoDoFo::PdfObject* object);
278 
279  void parseTileStructure(std::vector<ossimString> tileInfo);
280 
281  void setPodofoImageInfo();
282 
283  void buildFrameEntryArray();
284 
285  void buildTileInfo(ossimString tileInfo);
286 
287  void resetCacheBuffer(ossimFrameEntryData entry);
288 
293  template <class T>
294  void fillTile(T, // dummy template variable
295  const ossimIrect& clip_rect,
296  ossimImageData* tile);
297 
306  std::map<ossim_int32, ossim_int32> m_frameWidthVector;
307  std::map<ossim_int32, ossim_int32> m_frameHeightVector;
310 
311  std::map<ossimString, ossimString, ossimStringLtstr> m_podofoProjInfo;
312 
313  //std::map<tileIndex, std::map<row, column> >
314  std::map<ossim_int32, std::pair<ossim_int32, ossim_int32> > m_podofoTileInfo;
315  std::map<ossim_int32, PoDoFo::PdfObject*> m_podofoImageObjs;
316  PoDoFo::PdfMemDocument* m_pdfMemDocument;
318  bool m_isJpeg;
319  std::vector<ossimGeoPdfVectorPageNode*> m_pageVector;
320 
324  std::vector<std::vector< std::vector<PoDoFo::PdfObject*> > > m_frameEntryArray;
325 TYPE_DATA
326 };
327 
328 #endif /* #ifndef ossimGeoPdfReader_HEADER */
virtual bool open()=0
Pure virtual open.
PoDoFo::PdfMemDocument * m_pdfMemDocument
ossimScalarType m_scalarType
std::map< ossim_int32, ossim_int32 > m_frameWidthVector
Represents serializable keyword/value map.
ossimFrameEntryData(const ossimFrameEntryData &rhs)
virtual ossim_uint32 getNumberOfOutputBands() const
Returns the number of bands in a tile returned from this TileSource.
ossim_int32 m_currentRow
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of an object from a keyword list.
std::vector< std::vector< std::vector< PoDoFo::PdfObject * > > > m_frameEntryArray
virtual ossim_uint32 getNumberOfLines(ossim_uint32 resLevel=0) const =0
Pure virtual, derived classes must implement.
ossim_uint32 m_numberOfSamples
virtual ossimString getClassName() const
Definition: ossimObject.cpp:64
ossim_int32 m_currentCol
ossim_uint32 m_numberOfBands
Has sub image offset.
ossimAppFixedTileCache::ossimAppFixedCacheId m_cacheId
virtual ossimString getShortName() const
Definition: ossimObject.cpp:48
std::map< ossim_int32, PoDoFo::PdfObject * > m_podofoImageObjs
virtual bool isOpen() const =0
Derived classes must implement this method to be concrete.
std::vector< PoDoFo::PdfObject * > theFrameEntry
virtual ossimRefPtr< ossimImageGeometry > getImageGeometry()
Returns the image geometry object associated with this tile source or NULL if non defined...
#define TYPE_DATA
Definition: ossimRtti.h:339
virtual ossim_uint32 getImageTileHeight() const =0
Returns the tile width of the image or 0 if the image is not tiled.
unsigned int ossim_uint32
ossimFrameEntryData(ossim_int32 row, ossim_int32 col, ossim_int32 pixelRow, ossim_int32 pixelCol, std::vector< PoDoFo::PdfObject *> entry)
virtual ossimString getLongName() const
Definition: ossimObject.cpp:53
std::map< ossim_int32, ossim_int32 > m_frameHeightVector
virtual ossim_uint32 getNumberOfEntries() const
#define OSSIM_PLUGINS_DLL
virtual void getEntryList(std::vector< ossim_uint32 > &entryList) const
std::map< ossim_int32, std::pair< ossim_int32, ossim_int32 > > m_podofoTileInfo
virtual ossimRefPtr< ossimImageGeometry > getInternalImageGeometry() const
ossimScalarType
ossimRefPtr< ossimImageData > m_cacheTile
std::vector< ossimGeoPdfVectorPageNode * > m_pageVector
virtual ossim_uint32 getImageTileWidth() const =0
Returns the tile width of the image or 0 if the image is not tiled.
std::map< ossimString, ossimString, ossimStringLtstr > m_podofoProjInfo
virtual ossimScalarType getOutputScalarType() const
This will be used to query the output pixel type of the tile source.
This class defines an abstract Handler which all image handlers(loaders) should derive from...
virtual ossim_uint32 getNumberOfSamples(ossim_uint32 resLevel=0) const =0
Pure virtual, derived classes must implement.
ossim_int32 m_numOfFramesVertical
virtual ossim_uint32 getNumberOfInputBands() const =0
virtual bool setCurrentEntry(ossim_uint32 entryIdx)
ossim_uint32 m_numberOfLines
ossim_int32 m_numOfFramesHorizontal
ossimRefPtr< ossimImageData > m_tile
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save the state of an object to a keyword list.
int ossim_int32
virtual ossimRefPtr< ossimImageData > getTile(const ossimIpt &origin, ossim_uint32 resLevel=0)