OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimGpkgWriter.h
Go to the documentation of this file.
1 //----------------------------------------------------------------------------
2 //
3 // File: ossimGpkgWriter.h
4 //
5 // Author: David Burken
6 //
7 // License: LGPL
8 //
9 // See LICENSE.txt file in the top level directory for more details.
10 //
11 // Description: OSSIM Geo Package writer.
12 //
13 //----------------------------------------------------------------------------
14 // $Id$
15 #ifndef ossimGpkgWriter_HEADER
16 #define ossimGpkgWriter_HEADER 1
17 
20 #include <ossim/base/ossimIpt.h>
22 #include <ossim/base/ossimRefPtr.h>
24 #include <vector>
25 
26 // Forward class declarations.
27 class ossimDpt;
28 class ossimImageData;
29 class ossimIrect;
30 struct jpeg_compress_struct;
31 struct sqlite3;
32 struct sqlite3_stmt;
33 
39 {
40 public:
41 
42  // Anonymous enums:
43  enum
44  {
46  };
47 
49  {
51  OSSIM_GPGK_WRITER_MODE_JPEG = 1, // RGB, 8-bit, JPEG compressed
53  OSSIM_GPGK_WRITER_MODE_PNGA = 3, // PNG with alpha
54  OSSIM_GPGK_WRITER_MODE_MIXED = 4 // full tiles=jpeg, partials=pnga
55  };
56 
57  /* default constructor */
59 
60  /* virtual destructor */
61  virtual ~ossimGpkgWriter();
62 
64  virtual ossimString getShortName() const;
65 
67  virtual ossimString getLongName() const;
68 
70  virtual ossimString getClassName() const;
71 
80  virtual ossimString getExtension() const;
81 
91  virtual void getImageTypeList(std::vector<ossimString>& imageTypeList)const;
92 
96  virtual bool saveState(ossimKeywordlist& kwl,
97  const char* prefix=0)const;
98 
103  virtual bool loadState(const ossimKeywordlist& kwl,
104  const char* prefix=0);
105 
112  virtual void setProperty(ossimRefPtr<ossimProperty> property);
113 
119  virtual ossimRefPtr<ossimProperty> getProperty(const ossimString& name)const;
120 
126  virtual void getPropertyNames(std::vector<ossimString>& propertyNames)const;
127 
128  bool hasImageType(const ossimString& imageType) const;
129 
140 
152  bool setCompressionLevel(const ossimString& level);
153 
154 
155  virtual bool isOpen()const;
156 
157  virtual bool open();
158 
173  virtual bool openFile( const ossimKeywordlist& options );
174 
175  virtual void close();
176 
190 
203  std::string getWriterModeString( ossimGpkgWriterMode mode ) const;
204 
205  void setCompressionQuality( const std::string& quality );
206 
216 
223 
233  virtual bool writeTile( ossimRefPtr<ossimImageData>& tile,
234  ossim_int32 zoomLevel,
235  ossim_int64 row,
236  ossim_int64 col);
237 
248  virtual bool writeCodecTile( ossim_uint8* codecTile,
249  ossim_int32 codecTileSize,
250  ossim_int32 zoomLevel,
251  ossim_int64 row,
252  ossim_int64 col);
253 
257  virtual void finalizeTileProcessing();
258 
259 private:
260 
265  virtual bool writeFile();
266 
272  bool writeEntry();
273 
278  bool addLevels();
279 
280  bool createTables( sqlite3* db );
281 
287  sqlite3* db, const ossimMapProjection* proj );
288 
289  bool writeGpkgContentsTable( sqlite3* db,
290  const ossimDrect& boundingRect );
291 
292  bool writeGpkgTileMatrixSetTable( sqlite3* db,
293  const ossimDrect& boundingRect );
294 
304  bool writeGpkgTileMatrixTable( sqlite3* db,
305  ossim_int32 zoom_level,
306  const ossimIpt& matrixSize,
307  const ossimDpt& gsd );
308 
309 
310  bool writeGpkgNsgTileMatrixExtentTable( sqlite3* db,
311  ossim_int32 zoom_level,
312  const ossimIrect& expandedAoi,
313  const ossimIrect& clippedAoi);
314 
315  void writeZoomLevels( sqlite3* db,
316  ossimMapProjection* proj,
317  const std::vector<ossim_int32>& zoomLevels );
318 
319  void writeTiles( sqlite3* db,
320  const ossimIrect& aoi,
321  ossim_int32 zoomLevel,
322  const ossim_float64& totalTiles,
323  ossim_float64& tilesWritten );
324 
325  void writeTile( sqlite3_stmt* pStmt,
326  sqlite3* db,
328  ossim_int32 zoomLevel,
329  ossim_int64 row,
330  ossim_int64 col);
331  void writeCodecTile( sqlite3_stmt* pStmt,
332  sqlite3* db,
333  ossim_uint8* codecTile,
334  ossim_int32 codecTileSize,
335  ossim_int32 zoomLevel,
336  ossim_int64 row,
337  ossim_int64 col);
338 
339 /*
340  void writeJpegTiles( sqlite3* db,
341  const ossimIrect& aoi,
342  ossim_int32 zoomLevel,
343  ossim_uint32 quality,
344  const ossim_float64& totalTiles,
345  ossim_float64& tilesWritten );
346 
347  void writeJpegTile( sqlite3_stmt* pStmt,
348  sqlite3* db,
349  const ossimRefPtr<ossimImageData>& tile,
350  ossim_int32 zoomLevel,
351  ossim_uint32 row,
352  ossim_uint32 col,
353  ossim_uint32 quality );
354 */
355  void getGsd( const ossimDpt& fullResGsd,
356  ossim_int32 fullResZoomLevel,
357  ossim_int32 currentZoomLevel,
358  ossimDpt& gsd );
359 
369  void getGsd( const ossimMapProjection* proj,
370  ossimDpt& gsd ) const;
371 
381  void getGsd( const ossimImageGeometry* geom,
382  ossimDpt& gsd ) const;
383 
397  void getGsd( const ossimMapProjection* proj,
398  ossim_int32 zoomLevel,
399  ossimDpt& gsd ) const;
400 
402  bool alignToGrid() const;
403 
411  bool append() const;
412 
414  bool addLevels() const;
415 
417  bool addEntry() const;
418 
429  ossimImageGeometry* geom ) const;
430 
433 
435 
437 
438  // Propagates view to all resamplers.
439  void setView( ossimMapProjection* proj );
440 
445  void reInitializeCombiners();
446 
451  void reInitializeCutters( const ossimMapProjection* proj );
452 
454  bool keyIsTrue( const std::string& key ) const;
455 
456  void getTileSize( ossimIpt& tileSize ) const;
457 
462  ossim_uint64 getBatchSize() const;
463 
468  ossim_int32 getNumberOfZoomLevels( const ossimIrect& aoi ) const;
469 
484  void getZoomLevels( std::vector<ossim_int32>& zoomLevels ) const;
485 
486 
499  void getZoomLevels( const ossimMapProjection* proj,
500  const ossimIrect& aoi,
501  const ossimDpt& sourceGsd,
502  std::vector<ossim_int32>& zoomLevels,
503  ossimDpt& fullResGsd ) const;
504 
508  void getAoiFromRect( const ossimMapProjection* proj,
509  const ossimDrect& rect,
510  ossimIrect& aoi );
511 
520  void getExpandedAoi( const ossimIrect& aoi, ossimIrect& expandedAoi ) const;
521 
522  void getMatrixSize( const ossimIrect& rect,
523  ossimIpt& matrixSize ) const;
524 
525  void setProjectionTie( ossimMapProjection* proj ) const;
526 
527  bool requiresEightBit() const;
528 
529  ossim_uint32 getEpsgCode() const;
530 
537  const ossimMapProjection* proj, ossimDpt& dims ) const;
538 
539 #if 0
540  void clipToProjectionBounds(
541  const ossimMapProjection* proj,
542  const ossimGpt& inUlGpt, const ossimGpt& inLrGpt,
543  ossimGpt& outUlGpt, ossimGpt& outLrGpt ) const;
544 #endif
545 
546  void initializeProjectionRect( const ossimMapProjection* productProj );
547 
548  void initializeRect( const ossimMapProjection* proj,
549  const ossimIrect& aoi,
550  ossimDrect& rect );
551 
560  void getTileTableName( std::string& tileTableName ) const;
561 
562  bool getFilename( ossimFilename& file ) const;
563 
567  void initializeCodec();
568 
577  bool initializeGpkg();
578 
587  bool getWmsCutBox( ossimDrect& rect ) const;
588 
599  bool getClipExtents( ossimDrect& rect, bool& alignToGridFlag ) const;
600 
601 
611  bool getRect( const std::string& key, ossimDrect& rect ) const;
612 
620  void checkLevels( const std::vector<ossim_int32>& currentZoomLevels,
621  const std::vector<ossim_int32>& newZoomLevels ) const;
622 
631  ossim_int32 row,
632  ossim_int32 col ) const;
633 
641  const ossimDpt& desiredGsd ) const;
642 
644  sqlite3* m_db;
645 
648 
651 
658 
665 
668 
674 
676 
677  std::string m_tileTableName;
678 
680 
683 
691 
695 
697  std::vector<ossim_int32> m_zoomLevels;
698 
700  std::vector<ossimIpt> m_zoomLevelMatrixSizes;
701 
706  sqlite3_stmt* m_pStmt;
707 
710 
711  TYPE_DATA
712 };
713 
714 #endif /* #ifndef ossimGpkgWriter_HEADER */
ossimGpkgWriterMode getWriterMode() const
Gets the writer mode.
virtual ~ossimGpkgWriter()
void checkLevels(const std::vector< ossim_int32 > &currentZoomLevels, const std::vector< ossim_int32 > &newZoomLevels) const
Checks for: new level lower then existing.
void getTileSize(ossimIpt &tileSize) const
void initializeCodec()
Initializes m_fullTileCodec and m_partialTileCodec.
virtual bool writeTile(ossimRefPtr< ossimImageData > &tile, ossim_int32 zoomLevel, ossim_int64 row, ossim_int64 col)
Direct interface to writing a tile to database.
std::vector< ossim_int32 > m_zoomLevels
Holds zoom level indexes for connectionless write tile.
bool append() const
Check if file is to be open new or appended.
bool writeGpkgTileMatrixSetTable(sqlite3 *db, const ossimDrect &boundingRect)
ossimRefPtr< ossimCodecBase > m_partialTileCodec
virtual void finalizeTileProcessing()
Calls sqlite3_finalize(pStmt) terminating tile processing.
ossimRefPtr< ossimMapProjection > getNewWorldMercatorProjection() const
virtual void getImageTypeList(std::vector< ossimString > &imageTypeList) const
void getImageTypeList(std::vector<ossimString>& imageTypeList)const
Represents serializable keyword/value map.
virtual bool isOpen() const
ossim_int32 m_srs_id
ossim_int32 writeGpkgSpatialRefSysTable(sqlite3 *db, const ossimMapProjection *proj)
void setProjectionTie(ossimMapProjection *proj) const
bool initializeGpkg()
Initializes the output gpkg file.
ossim_int32 getNumberOfZoomLevels(const ossimIrect &aoi) const
Zoom levels needed to get AOI down to one tile.
void getGsd(const ossimDpt &fullResGsd, ossim_int32 fullResZoomLevel, ossim_int32 currentZoomLevel, ossimDpt &gsd)
bool requiresEightBit() const
Pure virtual base class for image file writers.
void getMatrixSize(const ossimIrect &rect, ossimIpt &matrixSize) const
virtual void getPropertyNames(std::vector< ossimString > &propertyNames) const
Pushes this&#39;s names onto the list of property names.
ossimRefPtr< ossimKeywordlist > m_kwl
Hold all options.
std::string getWriterModeString(ossimGpkgWriterMode mode) const
Gets the writer mode as string.
bool isValidZoomLevelRowCol(ossim_int32 level, ossim_int32 row, ossim_int32 col) const
Checks to see if level, row, column are within range of existing gpkg.
void getAoiFromRect(const ossimMapProjection *proj, const ossimDrect &rect, ossimIrect &aoi)
Get the view coordinates for edge to edge rect.
virtual ossimString getExtension() const
Returns a 3-letter extension from the image type descriptor (theOutputImageType) that can be used for...
ossimDrect m_clipRect
AOI clipped to projection rect.
virtual ossimString getClassName() const
double ossim_float64
void writeTiles(sqlite3 *db, const ossimIrect &aoi, ossim_int32 zoomLevel, const ossim_float64 &totalTiles, ossim_float64 &tilesWritten)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of an object from a keyword list.
ossim_uint64 m_batchSize
Number of transactions batched before being executed.
virtual void setProperty(ossimRefPtr< ossimProperty > property)
Will set the property whose name matches the argument "property->getName()".
ossimRefPtr< ossimMapProjection > getNewGeographicProjection() const
std::vector< ossimIpt > m_zoomLevelMatrixSizes
Hold zoom level matrix sizes for connectionless write tile.
#define TYPE_DATA
Definition: ossimRtti.h:339
void setView(ossimMapProjection *proj)
void setCompressionQuality(const std::string &quality)
virtual bool openFile(const ossimKeywordlist &options)
Opens file for writing, appending, merging without an input connection.
bool getRect(const std::string &key, ossimDrect &rect) const
Gets rectangle.
bool m_writeBlanks
Controlled by option key: "include_blank_tiles".
bool hasImageType(const ossimString &imageType) const
bool hasImageType(const ossimString& imageType) const
unsigned long long ossim_uint64
unsigned int ossim_uint32
sqlite3_stmt * m_pStmt
Holds Statement handle from sqlite3_prepare_v2(...) for connectionless write tile.
std::string m_tileTableName
bool createTables(sqlite3 *db)
void initializeRect(const ossimMapProjection *proj, const ossimIrect &aoi, ossimDrect &rect)
ossimRefPtr< ossimCodecBase > m_fullTileCodec
Will cache and hold the allocated codecs to use for the encoding.
void applyScaleToProjection(ossimMapProjection *proj, const ossimDpt &desiredGsd) const
Get the current gsd from projection.
bool addEntry() const
ossim_uint32 getCompressionQuality() const
Gets the compression quality.
Container class that holds both 2D transform and 3D projection information for an image Only one inst...
ossim_uint32 getEpsgCode() const
virtual ossimString getLongName() const
void getTileTableName(std::string &tileTableName) const
Gets the tile table name.
bool alignToGrid() const
virtual ossimString getShortName() const
bool writeGpkgTileMatrixTable(sqlite3 *db, ossim_int32 zoom_level, const ossimIpt &matrixSize, const ossimDpt &gsd)
Initialize method.
virtual const ossimFilename & getFilename() const
virtual ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
ossim_uint64 getBatchSize() const
This is the number of transactions batched before being executed.
void getZoomLevels(std::vector< ossim_int32 > &zoomLevels) const
Gets zoom levels from options keyword list if set.
bool writeGpkgContentsTable(sqlite3 *db, const ossimDrect &boundingRect)
void reInitializeCutters(const ossimMapProjection *proj)
Finds all ossimRectangleCutter and calls setRectangle with a nan rect to reset the bounding box after...
bool writeEntry()
Writes an entry to gpkg.
ossimDrect m_sceneBoundingRect
Holds the bounding rect of the scene edges either in decimal degrees for geographic projection or Eas...
ossimDrect m_outputRect
Expanded(final) AOI clipped to projection rect.
void initializeProjectionRect(const ossimMapProjection *productProj)
ossimRefPtr< ossimMapProjection > getNewOutputProjection() const
Gets projection from "epsg" code if in options list.
void reInitializeCombiners()
Finds all combiners and calls initialize to reset the bounding box after a view change.
ossimString getCompressionLevel() const
Get the gpkg compression level as a string.
virtual bool writeCodecTile(ossim_uint8 *codecTile, ossim_int32 codecTileSize, ossim_int32 zoomLevel, ossim_int64 row, ossim_int64 col)
Direct interface to writing a Codec tile to database.
long long ossim_int64
void writeZoomLevels(sqlite3 *db, ossimMapProjection *proj, const std::vector< ossim_int32 > &zoomLevels)
bool writeGpkgNsgTileMatrixExtentTable(sqlite3 *db, ossim_int32 zoom_level, const ossimIrect &expandedAoi, const ossimIrect &clippedAoi)
sqlite3 * m_db
database connection
virtual void close()
bool getWmsCutBox(ossimDrect &rect) const
Get rectangle in projected space from key: cut_wms_bbox key:value form: cut_wms_bbox: <minx>...
bool getClipExtents(ossimDrect &rect, bool &alignToGridFlag) const
Get clip rectangle in projected space from key: clip_extents key:value form: clip_extents: <minx>...
bool keyIsTrue(const std::string &key) const
virtual bool writeFile()
Writes the file to disk or a stream.
virtual ossim_int32 beginTileProcessing()
Calls initial sqlite3_prepare_v2 statement.
ossimDrect m_projectionBoundingRect
Holds the bounding rect of the output projection edges either in decimal degrees for geographic proje...
bool addLevels()
Adds levels to an existing an gpkg.
bool setCompressionLevel(const ossimString &level)
Set the gpkg compression level from a string.
unsigned char ossim_uint8
void getExpandedAoi(const ossimIrect &aoi, ossimIrect &expandedAoi) const
Gets aoi expanded to tile boundaries.
virtual bool open()
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
saves the state of the object.
int ossim_int32
void getProjectionDimensionsInMeters(const ossimMapProjection *proj, ossimDpt &dims) const
Gets the projection dimensions in meters.
ossim_uint64 m_batchCount
Working variable for holding the current batch count.
bool m_fullTileCodecAlpha
true if codec requires alpha channel.