23 static ossimTrace traceDebug(
"ossimTiling:debug");
28 :theTilingDistance(0,0),
31 theDeltaType(ossimTilingDeltaType_TOTAL_PIXELS),
32 theOutputSizeInBytes(0),
34 theNumberOfBytesPerPixelPerBand(1),
35 thePaddingSizeInPixels(0.0, 0.0),
40 theTotalHorizontalTiles(0),
41 theTotalVerticalTiles(0),
44 theEdgeToEdgeFlag(false)
54 <<
"ossimTiling::initialize DEBUG: Entered..." 55 <<
"\nBounding rect === " << boundingRect
99 <<
"DEBUG: Geographic input bounds = " 109 <<
"DEBUG: Geographic input bounds stretched = " 118 <<
"DEBUG: Geographic input bounds clamped = " 183 <<
"\nossimTiling::initialize DEBUG: Leaving..." << std::endl;
241 origin.
lon + (deltaPerPixel.
x/2.0),
262 origin.
y - (deltaPerPixel.
y/2.0) ) );
278 if(traceDebug()&&resultProjection.
valid())
284 <<
"ossimTiling::next DEBUG: rect = " << resultingBounds
285 <<
"\nproj = " << projKwl
286 <<
"\ntileName = " << resultingName
287 <<
"\norigin = " << origin << std::endl;
340 <<
"ossimTiling::validate()\n" 341 <<
"Map projeciton requires tiling in angular units but the" 342 <<
"\nspacing is in non angular" << std::endl;
364 <<
"ossimTiling::validate()" 365 <<
"\nMap projeciton requires tiling using linear spacing" 366 <<
" but the spacing is in non linear" << std::endl;
376 <<
"ossimTiling::validate()" 377 <<
"\nthe image projection is null and so not valid" 384 <<
"ossimTiling::validate() the delta is too small or is negative" 385 <<
"value = " <<
theDelta << std::endl;
392 <<
"ossimTiling::validate()" 393 <<
"\nthe tiling distance is too small or is negative" 400 <<
"ossimTiling::validate() the image rect has nans" 507 bool result =
getRowCol(row, col, tileId);
568 unitConverter.setValue(result.
y,
574 unitConverter.setValue(result.
x,
578 unitConverter.setValue(result.
y,
615 latString << setfill(
'0') << setw(2) << fabs(origin.
lat);
616 lonString << setfill(
'0') << setw(3) << fabs(origin.
lon);
620 resultingName +=
"S";
624 resultingName +=
"N";
626 resultingName += latString.str().
c_str();
629 resultingName +=
"W";
633 resultingName +=
"E";
635 resultingName += lonString.str().
c_str();
636 resultingName +=
".hgt";
656 resultingName = resultingName.
substitute(
"%r%",
657 rowString.str().c_str());
658 resultingName = resultingName.
substitute(
"%c%",
659 colString.str().c_str());
660 resultingName = resultingName.
substitute(
"%i%",
661 idString.str().c_str());
662 resultingName = resultingName.
substitute(
"%oc",
663 oColString.str().c_str());
664 resultingName = resultingName.
substitute(
"%or",
665 oRowString.str().c_str());
674 if(ul.
lat > 90) ul.
lat = 90.0;
675 if(lr.
lat < -90.0) lr.
lat = -90.0;
677 if(ul.
lon < -180) ul.
lon = -180;
678 if(lr.
lon > 180) lr.
lon = 180;
684 const char* prefix)
const 692 tilingDistance.str().c_str(),
697 "tiling_distance_type",
726 "padding_size_in_pixels",
727 padding.str().c_str(),
738 "output_size_in_bytes",
746 "output_bytes_per_pixel_per_band",
769 const char* paddingSizeInPixels = kwl.
find(prefix,
770 "padding_size_in_pixels");
771 if (paddingSizeInPixels)
782 if (kwl.
numberOf(prefix,
"output_size_in_"))
784 lookup = kwl.
find(prefix,
"output_size_in_bytes");
789 lookup = kwl.
find(prefix,
"output_size_in_kilo_bytes");
794 lookup = kwl.
find(prefix,
"output_size_in_mega_bytes");
804 lookup = kwl.
find(prefix,
"output_bands");
809 lookup = kwl.
find(prefix,
"output_bytes_per_pixel_per_band");
819 static_cast<ossim_int32>(floor(sqrt((
double)pixelsPerBand)));
839 const char* tilingDistance = kwl.
find(prefix,
841 const char* tilingDistanceType = kwl.
find(prefix,
842 "tiling_distance_type");
843 const char* delta = kwl.
find(prefix,
846 const char* deltaType = kwl.
find(prefix,
849 result = tilingDistance&&tilingDistanceType&&delta&&deltaType&&paddingSizeInPixels;
874 deltaValues >>
x >>
y;
888 if(
ossimString(deltaType).downcase().contains(
"total"))
898 lookup = kwl.
find(prefix,
"edge_to_edge");
928 <<
"\ntheNumberOfBytesPerPixelPerBand: " <<
935 out <<
"\ntheMapProjection:\n";
940 out <<
"theMapProjection is not set.";
958 <<
"ossimTiling::getConvertedTilingDistance WARNING" 959 <<
" projection not set!" << endl;
RTTI_DEF1(ossimTiling, "ossimTiling", ossimObject)
ossimTilingDeltaType theDeltaType
bool isAngularUnit(ossimUnitType unitType) const
virtual ossimObject * dup() const =0
bool isLinearUnit(ossimUnitType unitType) const
ossimString substitute(const ossimString &searchKey, const ossimString &replacementValue, bool replaceAll=false) const
Substitutes searchKey string with replacementValue and returns a string.
ossim_uint32 numberOf(const char *str) const
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
ossimUnitType theTilingDistanceUnitType
The unit type for "theDelta", and "theTilingDistance".
std::basic_stringstream< char > stringstream
Class for char mixed input and output memory streams.
Represents serializable keyword/value map.
const char * find(const char *key) const
const ossimDpt & ul() const
ossim_uint32 height() const
bool contains(char aChar) const
static ossimString toString(bool aValue)
Numeric to string methods.
ossimRefPtr< ossimMapProjection > theMapProjection
virtual bool isGeographic() const
const ossimIpt & ul() const
bool initialize(const ossimMapProjection &proj, const ossimIrect &boundingRect)
ossim_int64 theTotalVerticalTiles
virtual ossim_int32 getEntryNumber(const char *entry_string, bool case_insensitive=true) const
virtual void setDecimalDegreesPerPixel(const ossimDpt &gsd)
void getTileName(ossimString &resultingName, ossim_int64 row, ossim_int64 col, ossim_int64 id) const
const ossimIpt & ll() const
void setTilingDistance(const ossimDpt &tilingDistance, ossimUnitType unitType)
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
void getConvertedTilingDistance(ossimDpt &pt) const
ossimCoordSysOrientMode orientMode() const
virtual void setMetersPerPixel(const ossimDpt &gsd)
const ossimDatum * datum() const
datum().
void clampGeographic(ossimDrect &rect) const
ossim_int32 toInt32() const
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
ossimDpt getDeltaPerPixel() const
virtual ossimGpt lineSampleToWorld(const ossimDpt &projectedPoint) const
ossimDpt theDelta
If (theDeltaType == ossimTilingDeltaType_TOTAL_PIXELS) then this is the size of the tile in pixels li...
void setTileNameMask(const ossimString &mask)
This sets the tilename mask.
virtual void lineSampleToEastingNorthing(const ossimDpt &liineSample, ossimDpt &eastingNorthing) const
bool toBool() const
String to numeric methods.
virtual ossimGpt origin() const
ossim_int64 theTotalTiles
ossimString getTileNameMask() const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save the state of an object to a keyword list.
ossim_uint32 theNumberOfBytesPerPixelPerBand
Output number of bytes per pixel.
ossim_int64 theOutputSizeInBytes
If set tiling size is controlled by the desired output size in bytes.
const ossimIpt & lr() const
bool getOrigin(ossimDpt &origin, ossim_int64 tileId) const
bool getRowCol(ossim_int64 &row, ossim_int64 &col, ossim_int64 tileId) const
ossim_uint32 width() const
ossim_int64 theTotalHorizontalTiles
virtual std::ostream & print(std::ostream &out) const
Generic print method.
const ossimIpt & ur() const
ossim_uint32 theNumberOfBands
Output number of bands.
ossimString theTileNameMask
ossimDpt theTilingDistance
The size of a tile in theTilingDistanceUnitType.
void stretchToTileBoundary(const ossimDpt &widthHeight)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
ossimDpt thePaddingSizeInPixels
const ossimDpt & ur() const
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string's contents...
ossim_int64 toInt64() const
virtual void setUlTiePoints(const ossimGpt &gpt)
std::basic_istringstream< char > istringstream
Class for char input memory streams.
bool next(ossimRefPtr< ossimMapProjection > &resultProjection, ossimIrect &resultingBounds, ossimString &resultingName) const
float distance(double lat1, double lon1, double lat2, double lon2, int units)
static ossimUnitTypeLut * instance()
Returns the static instance of an ossimUnitTypeLut object.
const ossimDpt & lr() const
bool theEdgeToEdgeFlag
This flags the code to shift the tie point so that the edge of the pixel falls on the tile boundary...
virtual std::ostream & print(std::ostream &out) const
Prints data members to stream.
void setDelta(const ossimDpt &delta, ossimTilingDeltaType deltaType)
This sets the pixel delta.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
std::basic_ostream< char > ostream
Base class for char output streams.