/usr/include/terralib/kernel/TeDecoderDatabase.h is in libterralib-dev 4.3.0+dfsg.2-10.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | /************************************************************************************
TerraLib - a library for developing GIS applications.
Copyright © 2001-2007 INPE and Tecgraf/PUC-Rio.
This code is part of the TerraLib library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
You should have received a copy of the GNU Lesser General Public
License along with this library.
The authors reassure the license terms regarding the warranties.
They specifically disclaim any warranties, including, but not limited to,
the implied warranties of merchantability and fitness for a particular purpose.
The library provided hereunder is on an "as is" basis, and the authors have no
obligation to provide maintenance, support, updates, enhancements, or modifications.
In no event shall INPE and Tecgraf / PUC-Rio be held liable to any party for direct,
indirect, special, incidental, or consequential damages arising out of the use
of this library and its documentation.
*************************************************************************************/
/*! \file TeDecoderDatabase.h
\brief This file deals with decoding of raster structures stored in a TerraLib database
*/
#ifndef __TERRALIB_INTERNAL_DECODERDATADASE_H
#define __TERRALIB_INTERNAL_DECODERDATABASE_H
#include "TeDefines.h"
#include "TeDecoderVirtualMemory.h"
#include "TeDatabase.h"
//! A concrete class to manipulate raster data stored in a TerraLib database
/*
TeDecoderDatabase uses a virtual memory, to handle the raster blocks
(as proposed by the TerraLib data model to store raster data) traffic from
memory to database and vice versa.
\sa TeDatabase TeDecoderVirtualMemory
*/
class TL_DLL TeDecoderDatabase: public TeDecoderVirtualMemory
{
public:
//! Empty constructor
TeDecoderDatabase() :
db_(0),
blockPortal_(0),
memAux_(0),
nSelectedBlocks_(0)
{ params_.decoderIdentifier_ = "DB"; }
//! Constructor from parameters
TeDecoderDatabase( const TeRasterParams& par );
//! Destructor
~TeDecoderDatabase();
//! Sets the database pointer associated to this decoder
void setDB (TeDatabase* db)
{ db_ = db; }
//! Initializes the decoder
virtual void init();
//! Creates the decoder
virtual bool create();
//! Clears the decoder
virtual bool clear();
//! Gets the raster block with index identifier
/*!
\param index tile unique identifier
\param buf pointer to a raster tile in memory
*/
bool getRasterBlock(const string& index, void *buf);
//! Saves a raster tile from a virtual memory to permanent storage
/*!
\param index tile unique identifier
\param buf pointer to a raster tile in memory
\param bsize size of the block in bytes
*/
bool putRasterBlock(const string& index, void *buf, long bsize);
//! Codifiy the index for the block that contains an element
string codifyId(int col, int lin, int band, int res, int subb);
//! Decodify the parameters of the block that has an index
void decodifyId(const string& id, int& col,int& lin, int& band, int& res, int& subb);
//! Saves the lut table of the raster associated to this decoder
bool saveLUTTable();
//! Search for tiles of image that intersects a certain bounding box in a given resolution
/*
\param bb bounding box that should be filled
\param resFac resolution factor that identify a level of resolution
\param parBlock returns the basic parameters of the selected tiles
\note Resolution factor in decoder database is a multiplier of the original resolution
and assume integer multiples of two. Smaller resolution has resolution factor
of 1 and the higher resolution have multiple of two values (2,4,8, 16...)
*/
int bestResolution(TeBox& bb, int ncols, int nlines, TeProjection* proj);
//! Select the stored raster blocks with a certain resolution to fill a given bounding box
/*
\param bb bounding box that should be filled
\param the resolution factor desired
\param parBlock common parameters of the blocks selected
\returns TRUE if could select at least one block and FALSE otherwise
*/
bool selectBlocks(TeBox& bb, int resFac, TeRasterParams& parBlock);
//! Select the stored raster blocks with a certain resolution to fill a given bounding box
/*
\param bb bounding box that should be filled
\param the resolution factor desired
\param parBlock common parameters of the blocks selected
\param blockId to select a just one block in database
\returns TRUE if could select at least one block and FALSE otherwise
*/
bool selectBlocks(TeBox& bb, int resFac, TeRasterParams& parBlock, const std::string& blockId);
//! Gets current raster block an outputs it in a memory decoder
bool getSelectedRasterBlock(TeDecoderMemory* memDec);
//! Clears selected blocks portal
void clearBlockSelection();
//! Returns the number of selectd raster blocks
int numberOfSelectedBlocks()
{ return nSelectedBlocks_; }
//! Decodifies the position of a block within the raster from its index
virtual void blockIndexPos( const TeBlockIndex& index, int& ulCol, int& ulLin, int& band);
protected:
virtual TeBlockIndex blockIndex(int col, int lin, int band);
virtual string codifyId(const TeBlockIndex& idx, int res = 1, int subb = 0);
bool getRasterBlock(const TeBlockIndex& index, void *buf);
bool putRasterBlock(const TeBlockIndex& index, void *buf, long bsize);
private:
TeDatabase *db_;
TeDatabasePortal *blockPortal_;
unsigned char *memAux_;
int nSelectedBlocks_;
};
//! Implements a factory to build database decoders
class TL_DLL TeDecoderDatabaseFactory : public TeDecoderFactory
{
public:
//! Constructor
TeDecoderDatabaseFactory(const string& name) : TeDecoderFactory(name) {}
//! Builds a database decoder
virtual TeDecoder* build (const TeRasterParams& arg)
{ return new TeDecoderDatabase(arg); }
};
#endif
|