38 #ifdef OSSIM_ID_ENABLED 39 static const char OSSIM_ID[] =
"$Id: ossimImageCacheTileSource.cpp 2644 2011-05-26 15:20:11Z oscar.kramer $";
57 if(m_imageHandler.valid())
98 if (m_fileNames.size() == 0 && m_frameEntryArray.size() == 0)
100 if (buildFrameEntryArray(imageFile) ==
false)
110 setActualImageRect();
113 theImageFile = imageFile;
129 static const char MODULE[] =
"ossimImageCacheTileSource::buildFrameEntryArray";
147 std::vector<ossimString> box_lat_lon;
148 tmpStr.
split(box_lat_lon,
"|");
149 if (box_lat_lon.size() == 4)
151 std::vector<ossimString> pixelInfos = box_lat_lon[3].split(
",");
152 if (pixelInfos.size() == 3)
162 std::vector<ossimString> frame_lat_lon = tmpStr.
split(
"|");
167 if (m_imageHandler.valid())
170 frameHeight = m_imageHandler->getBoundingRect().height();
194 if ( getTile( m_tile.get(), resLevel ) ==
false )
196 if (m_tile->getDataObjectStatus() !=
OSSIM_NULL)
215 if( isOpen() && isSourceEnabled() && isValidRLevel(resLevel) &&
220 status = getOverviewTile(resLevel, result);
239 vector<ossimFrameEntryData> frames = getIntersectingEntries(rect);
240 if(frames.size() > 0)
247 fillTile(rect, frames, result);
264 const vector<ossimFrameEntryData>& framesInvolved,
268 for(idx = 0; idx < framesInvolved.size(); ++idx)
270 if (m_imageHandler.valid())
272 if (m_imageHandler->getFilename() != framesInvolved[idx].theFrameEntry.getFullPath())
283 if (m_imageHandler.valid())
285 if (m_imageHandler->isOpen() ==
false)
287 m_imageHandler->
open(framesInvolved[idx].theFrameEntry.getFullPath());
290 ossimIrect frameRect(framesInvolved[idx].thePixelCol,
291 framesInvolved[idx].thePixelRow,
292 framesInvolved[idx].thePixelCol + m_frame_width - 1,
293 framesInvolved[idx].thePixelRow + m_frame_height - 1);
297 ossimIpt tempDelta(clipRect.
ul().
x - framesInvolved[idx].thePixelCol,
298 clipRect.
ul().
y - framesInvolved[idx].thePixelRow);
302 tempDelta.x + clipRect.
width()-1,
303 tempDelta.y + clipRect.
height()-1);
306 if ( ( m_imageHandler->getBoundingRect().width() != m_frame_width ) ||
307 ( m_imageHandler->getBoundingRect().height() != m_frame_height ) )
311 ossim_float64 widthRatio =
static_cast<ossim_float64>(m_imageHandler->getBoundingRect().width())/static_cast<ossim_float64>(m_frame_width);
312 ossim_float64 heightRatio =
static_cast<ossim_float64>(m_imageHandler->getBoundingRect().height())/static_cast<ossim_float64>(m_frame_height);
315 ossimDpt ul(offsetRect.ul().x*widthRatio, offsetRect.ul().y*heightRatio);
316 ossimDpt lr(offsetRect.lr().x*widthRatio, offsetRect.lr().y*heightRatio);
322 ossimIrect actualOffsetRect(static_cast<ossim_int32>(std::floor(ul.x)),
323 static_cast<ossim_int32>(std::floor(ul.y)),
324 static_cast<ossim_int32>(std::ceil(lr.x)),
325 static_cast<ossim_int32>(std::ceil(lr.y)));
328 actualOffsetRect = actualOffsetRect.clipToRect(m_imageHandler->getBoundingRect());
331 if (imageData.
valid())
335 double denominatorY = 1.0;
336 double denominatorX = 1.0;
339 denominatorY = clipRect.
height()-1.0;
341 if(clipRect.
width() > 2)
343 denominatorX = clipRect.
width()-1.0;
351 ossimDpt deltaUl(((actualOffsetRect.ll().x - actualOffsetRect.ul().x)/denominatorX),
352 ((actualOffsetRect.ll().y - actualOffsetRect.ul().y)/denominatorY));
353 ossimDpt deltaUr(((actualOffsetRect.lr().x - actualOffsetRect.ur().x)/denominatorX),
354 ((actualOffsetRect.lr().y - actualOffsetRect.ur().y)/denominatorY));
355 ossimDpt length(offsetRect.width(),offsetRect.height());
360 actualOffsetRect.ul(),
361 actualOffsetRect.ur(),
376 if (imageData.
valid())
387 if (m_imageHandler.valid())
389 return m_imageHandler->getOutputScalarType();
400 return m_minPixelValue;
409 return m_maxPixelValue;
418 return m_nullPixelValue;
423 if (m_imageHandler.valid())
425 return m_imageHandler->getNumberOfInputBands();
427 return m_numberOfBands;
432 if (m_imageHandler.valid())
434 return m_imageHandler->getNumberOfInputBands();
436 return m_numberOfBands;
virtual bool open()=0
Pure virtual open.
void fillTile(const ossimIrect &tileRect, const vector< ossimFrameEntryData > &framesInvolved, ossimImageData *tile)
virtual double getMaxPixelValue(ossim_uint32 band=0) const
Returns the max pixel of the band.
virtual ossim_uint32 getNumberOfBands() const
bool buildFrameEntryArray(ossimFilename imageFile)
virtual void setImageRectangle(const ossimIrect &rect)
virtual ossimImageHandler * open(const ossimFilename &fileName, bool trySuffixFirst=true, bool openOverview=true) const
open that takes a filename.
std::basic_ifstream< char > ifstream
Class for char input file streams.
double nan()
Method to return ieee floating point double precision NAN.
This code was derived from https://gist.github.com/mshockwave.
virtual ossimRefPtr< ossimImageData > getTile(const ossimIrect &rect, ossim_uint32 resLevel=0)
Returns a pointer to an ossimImageDataObject given a rectangluar region of interest.
ossim_uint32 height() const
const ossimIpt & ul() const
void split(std::vector< ossimString > &result, const ossimString &separatorList, bool skipBlankFields=false) const
Splits this string into a vector of strings (fields) using the delimiter list specified.
virtual ossimString getShortName() const
This method is defined in the base class ossimObject.
static const ossimErrorCode OSSIM_ERROR
std::istream & getline(std::istream &is, ossimString &str, char delim)
bool intersects(const ossimIrect &rect) const
virtual ossim_uint32 getNumberOfInputBands() const
This method allows you to query the number of input bands.
virtual ~ossimImageCacheTileSource()
Destructor.
virtual ossimString getLongName() const
This method is defined in the base class ossimObject.
virtual ossimScalarType getOutputScalarType() const
This method allows you to query the scalar type of the output data.
virtual void initialize()
Initialize the data buffer.
virtual ossimObject * dup() const
virtual bool open()
Pure virtual open.
virtual double getMinPixelValue(ossim_uint32 band=0) const
Retuns the min pixel value.
virtual double getMinPixelValue(ossim_uint32 band=0) const
Retuns the min pixel value.
virtual double getNullPixelValue(ossim_uint32 band=0) const
Each band has a null pixel associated with it.
virtual void loadTile(const void *src, const ossimIrect &src_rect, ossimInterleaveType il_type)
static ossimImageDataFactory * instance()
virtual ossimDataObjectStatus validate() const
unsigned int ossim_uint32
ossim_float64 toFloat64() const
virtual ossimIrect getImageRectangle() const
virtual ossimRefPtr< ossimImageData > create(ossimSource *owner, ossimScalarType scalar, ossim_uint32 bands=1) const
virtual ossim_uint32 getNumberOfOutputBands() const
This method allows one to query the number of output bands.
ossim_uint32 width() const
ossimIrect clipToRect(const ossimIrect &rect) const
virtual void makeBlank()
Initializes data to null pixel values.
bool buildFrameEntryArray(ossimFilename imageFile, ossim_uint32 frameWidth, ossim_uint32 frameHeight)
virtual const void * getBuf() const
virtual void resample(const ossimRefPtr< ossimImageData > &input, ossimRefPtr< ossimImageData > &output, const ossimDpt &ul, const ossimDpt &ur, const ossimDpt &deltaUl, const ossimDpt &deltaUr, const ossimDpt &length)
static ossimImageHandlerRegistry * instance()
virtual ossimIrect getBoundingRect(ossim_uint32 resLevel=0) const
Returns zero-based bounding rectangle of the image.
virtual double getMaxPixelValue(ossim_uint32 band=0) const
Returns the max pixel of the band.
#define RTTI_DEF1(cls, name, b1)
virtual void close()
Closes this image handler and deletes any allocated data.
virtual double getNullPixelValue(ossim_uint32 band=0) const
Each band has a null pixel associated with it.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.