OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
ossimUsgsQuad Class Reference

#include <ossimUsgsQuad.h>

Public Member Functions

 ossimUsgsQuad (const ossimGpt &lrGpt)
 
 ossimUsgsQuad (const ossimString &name, const ossimDatum *datum)
 
void setQuadName (const ossimString &name)
 
ossimGrect quarterQuadSegRect (char seg)
 
ossimString quarterQuadSegKwRect (char seg)
 
ossimGrect quarterQuadRect () const
 
ossimString quarterQuadKwRect () const
 
ossimGrect quadRect () const
 
ossimString quadKwRect () const
 
ossimString quarterQuadName () const
 
ossimString quarterQuadSegName () const
 
ossimGpt lrQuadCorner () const
 
ossimGpt lrQuarterQuadCorner () const
 

Static Public Member Functions

static void getQuadList (std::vector< ossimUsgsQuad > &result, const ossimGrect &rect)
 

Protected Attributes

ossimString theName
 
ossimGpt theQuadLowerRightCorner
 
ossimGpt theQuarterQuadLowerRightCorner
 
char theQuarterQuadSegment
 

Detailed Description

Definition at line 20 of file ossimUsgsQuad.h.

Constructor & Destructor Documentation

◆ ossimUsgsQuad() [1/2]

ossimUsgsQuad::ossimUsgsQuad ( const ossimGpt lrGpt)

Definition at line 34 of file ossimUsgsQuad.cpp.

Referenced by getQuadList().

35  :
36  theQuadLowerRightCorner(0.0, 0.0, 0.0, lrGpt.datum()),
37  theQuarterQuadLowerRightCorner(0.0, 0.0, 0.0, lrGpt.datum())
38 // thePaddingInDegrees(0.0, 0.0),
39 
40 {
41  const char* MODULE = "ImgOutput::quadBasename";
42 
43  //***
44  // NOTE:
45  // This method computes a file name from the lower right corner of the
46  // image. The format is derived from USGS Digital Raster Graphic(DRG)
47  // program for standardized data set names for DRG products. Due to
48  // customer requirements there is one deviation: The first digit of the
49  // name is converted to a letter with 1 being = A, 2 being = B,
50  // 3 being = C, ....
51  // This was done to allow the name to be used on a pc.
52  //***
53 
54  const double QUAD_SIZE_IN_DEGREES = 0.125;
55 
56  ossimString baseString;
57  int tmpInt;
58  double tmpDbl;
59  char quadChar = 'A';
60  char quadNum = '1';
61 
62  ostringstream os;
63  os << setiosflags(ios::right)
64  << setiosflags(ios::fixed)
65  << setfill('0');
66 
67  tmpInt = static_cast<int>(abs(lrGpt.lat)); // Cast away the fractional part.
68  os << tmpInt; // latitude
69 
70  //***
71  // Get the quadrant charactor in the latitude direction. (A - H)
72  //***
73  tmpDbl = fabs(lrGpt.lat) - (double)tmpInt;
74  quadChar += static_cast<int>(tmpDbl / QUAD_SIZE_IN_DEGREES);
75 
76  tmpInt = static_cast<int>(abs(lrGpt.lon)); // longitude
77  os << setw(3) << tmpInt;
78 
79  tmpDbl = fabs(lrGpt.lon) - (double)tmpInt;
80 
81  quadNum += static_cast<char>(tmpDbl / QUAD_SIZE_IN_DEGREES);
82 
83  os << quadChar << quadNum;
84 
85  double latFraction = (lrGpt.lat / QUAD_SIZE_IN_DEGREES) -
86  ossim::round<int>((lrGpt.lat) / QUAD_SIZE_IN_DEGREES);
87  double lonFraction = (lrGpt.lon / QUAD_SIZE_IN_DEGREES) -
88  ossim::round<int>((lrGpt.lon) / QUAD_SIZE_IN_DEGREES);
89 
90  // Black & White
91 // if(theRectsStandardFlag &&
92 // theChipSource->radiometry().numberOfBands() == 1)
93 // {
94 // char quarterQuadChar = '4';
95 // if (latFraction && lonFraction)
96 // {
97 // quarterQuadChar = '1';
98 // }
99 // else if (latFraction && !lonFraction)
100 // {
101 // quarterQuadChar = '2';
102 // }
103 // else if (!latFraction && lonFraction)
104 // {
105 // quarterQuadChar = '3';
106 // }
107 // os << quarterQuadChar << ends;
108 // }
109 // // Color
110 // else if(theRectsStandardFlag &&
111 // theChipSource->radiometry().numberOfBands() > 1)
112 // {
113 // char quarterQuadChar = '8';
114 // if (latFraction && lonFraction)
115 // {
116 // quarterQuadChar = '5';
117 // }
118 // else if (latFraction && !lonFraction)
119 // {
120 // quarterQuadChar = '6';
121 // }
122 // else if (!latFraction && lonFraction)
123 // {
124 // quarterQuadChar = '7';
125 // }
126 // os << quarterQuadChar << ends;
127 // }
128 // else
129 // {
130  char quarterQuadChar = 'D';
131  if (latFraction && lonFraction)
132  {
133  quarterQuadChar = 'A';
134  }
135  else if (latFraction && !lonFraction)
136  {
137  quarterQuadChar = 'B';
138  }
139  else if (!latFraction && lonFraction)
140  {
141  quarterQuadChar = 'C';
142  }
143  os << quarterQuadChar << ends;
144 // }
145 
146 
147  baseString = os.str().c_str();
148 
149  if (traceDebug())
150  {
152  << " DEBUG: " << MODULE
153  << "\nbaseString: " << baseString << std::endl;
154  }
155 
156  setQuadName(baseString);
157 }
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
Definition: ossimIosFwd.h:35
void setQuadName(const ossimString &name)
ossimGpt theQuadLowerRightCorner
Definition: ossimUsgsQuad.h:98
#define abs(a)
Definition: auxiliary.h:74
const ossimDatum * datum() const
datum().
Definition: ossimGpt.h:196
ossim_float64 lon
Definition: ossimGpt.h:266
ossimGpt theQuarterQuadLowerRightCorner
Definition: ossimUsgsQuad.h:99
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
ossim_float64 lat
Definition: ossimGpt.h:265
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ ossimUsgsQuad() [2/2]

ossimUsgsQuad::ossimUsgsQuad ( const ossimString name,
const ossimDatum datum 
)

Definition at line 163 of file ossimUsgsQuad.cpp.

References setQuadName().

166  :
167  theQuadLowerRightCorner(0.0, 0.0, 0.0, datum),
168  theQuarterQuadLowerRightCorner(0.0, 0.0, 0.0, datum)
169 // thePaddingInDegrees(0.0, 0.0),
170 {
171  static const char MODULE[] = "ossimUsgsQuad::ossimUsgsQuad";
172 
173  setQuadName(name);
174  if (!datum)
175  {
176  if (traceDebug())
177  {
179  << "FATAL: " << MODULE << "\n"
180  << "ossimDatum pointer passed in is null. Returning...\n";
181  }
182  return;
183  }
184 
185 
186  //***
187  // Initialize the padding.
188  //***
189 // ossimGpt metersPerDegree = theQuadLowerRightCorner.metersPerDegree();
190 
191 // thePaddingInDegrees.u = paddingInMeters / metersPerDegree.u;
192 // thePaddingInDegrees.v = paddingInMeters / metersPerDegree.v;
193 
194 }
void setQuadName(const ossimString &name)
ossimGpt theQuadLowerRightCorner
Definition: ossimUsgsQuad.h:98
ossimGpt theQuarterQuadLowerRightCorner
Definition: ossimUsgsQuad.h:99
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

Member Function Documentation

◆ getQuadList()

void ossimUsgsQuad::getQuadList ( std::vector< ossimUsgsQuad > &  result,
const ossimGrect rect 
)
static

Definition at line 441 of file ossimUsgsQuad.cpp.

References ossimGpt::lond(), ossimUsgsQuad(), ossimGrect::pointWithin(), and ossimGrect::ul().

443 {
444  result.clear();
445 // QUAD_SIZE_IN_DEGREES;
446 
447  ossimGpt point = rect.ul();
448 
449  while(rect.pointWithin(point))
450  {
451  while(rect.pointWithin(point))
452  {
453  result.push_back(ossimUsgsQuad(point));
454 
455  point.lond(point.lond()+QUAD_SIZE_IN_DEGREES);
456  }
457  point.lond(rect.ul().lond());
458  point.latd(point.latd()-QUAD_SIZE_IN_DEGREES);
459  }
460 }
double lond() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:97
double latd() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:87
bool pointWithin(const ossimGpt &gpt, bool considerHgt=false) const
METHOD: pointWithin(ossimGpt)
Definition: ossimGrect.h:232
const ossimGpt & ul() const
Definition: ossimGrect.h:252
ossimUsgsQuad(const ossimGpt &lrGpt)

◆ lrQuadCorner()

ossimGpt ossimUsgsQuad::lrQuadCorner ( ) const
inline

Returns the lower right hand corner of quad with no padding.

Definition at line 85 of file ossimUsgsQuad.h.

85 { return theQuadLowerRightCorner ; }
ossimGpt theQuadLowerRightCorner
Definition: ossimUsgsQuad.h:98

◆ lrQuarterQuadCorner()

ossimGpt ossimUsgsQuad::lrQuarterQuadCorner ( ) const
inline

Returns the lower right hand corner of quarter quad with no padding.

Definition at line 90 of file ossimUsgsQuad.h.

ossimGpt theQuarterQuadLowerRightCorner
Definition: ossimUsgsQuad.h:99

◆ quadKwRect()

ossimString ossimUsgsQuad::quadKwRect ( ) const

Returns the bounding rectangle of the quarter quad (7.5 minutes) in the "area.lat_lon" keyword format: start_lat, start_lon, stop_lat, stop_lon NOTE: padding is added in.

Definition at line 739 of file ossimUsgsQuad.cpp.

References ossimString::c_str(), ossimGpt::lat, ossimGrect::ll(), ossimGpt::lon, quadRect(), ossimGrect::ul(), and ossimGrect::ur().

740 {
741 // static const char MODULE[] = "ossimUsgsQuad::quadKwRect";
742 
743  ossimGrect rect = quadRect();
744 
745  ostringstream os;
746 
747  os << setprecision(12)
748  << rect.ll().lat << " "
749  << rect.ul().lon << " "
750  << rect.ul().lat << " "
751  << rect.ur().lon << ends;
752 // os << setprecision(12)
753 // << rect.stop.lat << " "
754 // << rect.start.lon << " "
755 // << rect.start.lat << " "
756 // << rect.stop.lon << ends;
757 
758  ossimString tmp = os.str().c_str();
759 
760  return tmp;
761 }
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
Definition: ossimIosFwd.h:35
ossim_float64 lon
Definition: ossimGpt.h:266
const ossimGpt & ul() const
Definition: ossimGrect.h:252
ossimGpt ur() const
Definition: ossimGrect.h:257
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
ossim_float64 lat
Definition: ossimGpt.h:265
ossimGrect quadRect() const
ossimGpt ll() const
Definition: ossimGrect.h:263

◆ quadRect()

ossimGrect ossimUsgsQuad::quadRect ( ) const

Returns the bounding rectangle of the quarter quad (7.5 minutes).
NOTE: padding is added in.

Definition at line 626 of file ossimUsgsQuad.cpp.

References ossimGpt::lat, ossimGpt::lon, and theQuadLowerRightCorner.

Referenced by quadKwRect().

627 {
628  static const char MODULE[] = "ossimUsgsQuad::quadRect";
629 
630  double startLat = theQuadLowerRightCorner.lat;// -
631 // thePaddingInDegrees.u; // SouthWest corner lat.
632 
633  double startLon = theQuadLowerRightCorner.lon -
634  QUAD_SIZE_IN_DEGREES;// -
635 // thePaddingInDegrees.v; // SouthWest corner lon.
636 
637  double stopLat = theQuadLowerRightCorner.lat +
638  QUAD_SIZE_IN_DEGREES;// +
639 // thePaddingInDegrees.u; // NorthEast corner lat.
640 
641  double stopLon = theQuadLowerRightCorner.lon;// +
642 // thePaddingInDegrees.v; // NorthEast corner lon.
643 
644  ossimGrect
645  rect(ossimGpt(startLat,
646  startLon,
649  ossimGpt(stopLat,
650  stopLon,
653 
654  if (traceDebug())
655  {
657  << "DEBUG: " << MODULE
658  << "\nQuarter quad rect: " << rect << "\n";
659  }
660 
661  return rect;
662 }
ossimGpt theQuadLowerRightCorner
Definition: ossimUsgsQuad.h:98
const ossimDatum * datum() const
datum().
Definition: ossimGpt.h:196
ossim_float64 lon
Definition: ossimGpt.h:266
double height() const
Definition: ossimGpt.h:107
ossimGpt theQuarterQuadLowerRightCorner
Definition: ossimUsgsQuad.h:99
ossim_float64 lat
Definition: ossimGpt.h:265
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ quarterQuadKwRect()

ossimString ossimUsgsQuad::quarterQuadKwRect ( ) const

Returns the bounding rectangle of the quarter quad (3.75 minutes)
in the "area.lat_lon" keyword format: start_lat, start_lon, stop_lat, stop_lon NOTE: padding is added in.

Definition at line 710 of file ossimUsgsQuad.cpp.

References ossimString::c_str(), ossimGpt::lat, ossimGrect::ll(), ossimGpt::lon, quarterQuadRect(), ossimGrect::ul(), and ossimGrect::ur().

711 {
712 // static const char MODULE[] = "ossimUsgsQuad::quarterQuadKwRect";
713 
714  ossimGrect rect = quarterQuadRect();
715 
716  ostringstream os;
717 
718  os << setprecision(12)
719  << rect.ll().lat << " "
720  << rect.ul().lon << " "
721  << rect.ul().lat << " "
722  << rect.ur().lon << ends;
723 // os << setprecision(12)
724 // << rect.stop.lat << " "
725 // << rect.start.lon << " "
726 // << rect.start.lat << " "
727 // << rect.stop.lon << ends;
728 
729  ossimString tmp = os.str().c_str();
730 
731 
732 
733  return tmp;
734 }
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
Definition: ossimIosFwd.h:35
ossim_float64 lon
Definition: ossimGpt.h:266
const ossimGpt & ul() const
Definition: ossimGrect.h:252
ossimGpt ur() const
Definition: ossimGrect.h:257
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
ossim_float64 lat
Definition: ossimGpt.h:265
ossimGpt ll() const
Definition: ossimGrect.h:263
ossimGrect quarterQuadRect() const

◆ quarterQuadName()

ossimString ossimUsgsQuad::quarterQuadName ( ) const
inline

Returns the USGS quarter quad name.

Definition at line 70 of file ossimUsgsQuad.h.

Referenced by ossimIgenGenerator::generateGeoTiledSpecList().

71  {
72  return ossimString(theName.begin(),
73  theName.begin()+7);
74  }
ossimString theName
Definition: ossimUsgsQuad.h:97
std::string::iterator begin()
Definition: ossimString.h:420

◆ quarterQuadRect()

ossimGrect ossimUsgsQuad::quarterQuadRect ( ) const

Returns the bounding rectangle of the quarter quad (3.75 minutes).
NOTE: padding is added in.

Definition at line 584 of file ossimUsgsQuad.cpp.

References ossimGpt::lat, ossimGpt::lon, and theQuarterQuadLowerRightCorner.

Referenced by quarterQuadKwRect().

585 {
586  static const char MODULE[] = "ossimUsgsQuad::quarterQuadRect";
587 
588  double startLat = theQuarterQuadLowerRightCorner.lat;// -
589 // thePaddingInDegrees.u; // SouthWest corner lat.
590 
591  double startLon = theQuarterQuadLowerRightCorner.lon -
592  QUARTER_QUAD_SIZE_IN_DEGREES;// -
593 // thePaddingInDegrees.v; // SouthWest corner lon.
594 
595  double stopLat = theQuarterQuadLowerRightCorner.lat +
596  QUARTER_QUAD_SIZE_IN_DEGREES;// +
597 // thePaddingInDegrees.u; // NorthEast corner lat.
598 
599  double stopLon = theQuarterQuadLowerRightCorner.lon;// +
600 // thePaddingInDegrees.v; // NorthEast corner lon.
601 
602  ossimGrect
603  rect(ossimGpt(startLat,
604  startLon,
607  ossimGpt(stopLat,
608  stopLon,
611 
612  if (traceDebug())
613  {
615  << "DEBUG: " << MODULE
616  << "\nQuarter quad rect: " << rect <<"\n";
617  }
618 
619 
620  return rect;
621 }
const ossimDatum * datum() const
datum().
Definition: ossimGpt.h:196
ossim_float64 lon
Definition: ossimGpt.h:266
double height() const
Definition: ossimGpt.h:107
ossimGpt theQuarterQuadLowerRightCorner
Definition: ossimUsgsQuad.h:99
ossim_float64 lat
Definition: ossimGpt.h:265
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ quarterQuadSegKwRect()

ossimString ossimUsgsQuad::quarterQuadSegKwRect ( char  seg)

Returns the bounding rectangle of the quarter quad segment in the "area.lat_lon" keyword format: start_lat, start_lon, stop_lat, stop_lon NOTE: padding is added in.

Definition at line 667 of file ossimUsgsQuad.cpp.

668 {
669  static const char MODULE[] = "ossimUsgsQuad::quarterQuadSegKwRect";
670 
671  ossimString tmp;
672 
673  //***
674  // Check the range of the segment, must be A, B, C or D.
675  //***
676  if ( (seg < 65) || (seg > 68) )
677  {
678  if (traceDebug())
679  {
681  << "FATAL:" << MODULE << "\n"
682  << seg << " out of range!\n"
683  << "Possible values: A, B, C, or D\n";
684  }
685  return tmp;
686  }
687 
688  ossimGrect rect = quarterQuadSegRect(seg);
689 
690  ostringstream os;
691 
692  os << setprecision(12)
693  << rect.ll().lat << " "
694  << rect.ul().lon << " "
695  << rect.ul().lat << " "
696  << rect.ur().lon << ends;
697 // << rect.stop.lat << " "
698 // << rect.start.lon << " "
699 // << rect.start.lat << " "
700 // << rect.stop.lon << ends;
701 
702  tmp = os.str().c_str();
703 
704  return tmp;
705 }
ossimGrect quarterQuadSegRect(char seg)
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
Definition: ossimIosFwd.h:35
ossim_float64 lon
Definition: ossimGpt.h:266
const ossimGpt & ul() const
Definition: ossimGrect.h:252
ossimGpt ur() const
Definition: ossimGrect.h:257
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
ossim_float64 lat
Definition: ossimGpt.h:265
ossimGpt ll() const
Definition: ossimGrect.h:263
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ quarterQuadSegName()

ossimString ossimUsgsQuad::quarterQuadSegName ( ) const
inline

Definition at line 76 of file ossimUsgsQuad.h.

Referenced by ossimIgenGenerator::generateGeoTiledSpecList().

77  {
78  return theName;
79  }
ossimString theName
Definition: ossimUsgsQuad.h:97

◆ quarterQuadSegRect()

ossimGrect ossimUsgsQuad::quarterQuadSegRect ( char  seg)

Returns the bounding rectangle of the quarter quad segment. A segment is 1/4 of a quarter quad. Segment assingments: upper_left=A, upper_right=B, lower_left=C, lower_right=D NOTE: padding is added in.

Definition at line 466 of file ossimUsgsQuad.cpp.

References ossimGpt::lat, and theQuarterQuadLowerRightCorner.

467 {
468  static const char MODULE[] = "ossimUsgsQuad::quarterQuadSegRect";
469 
470  double startLat=0.0;
471  double startLon=0.0;
472  double stopLat=0.0;
473  double stopLon=0.0;
474 
475  //***
476  // Get the segment and add to "lat" and "lon".
477  //***
478  switch (seg)
479  {
480  case 'A': // Upper left segment of quarter quad.
482  QUARTER_QUAD_SEG_SIZE_IN_DEGREES;// -
483 // thePaddingInDegrees.u;
484 
486  QUARTER_QUAD_SIZE_IN_DEGREES;// -
487  //thePaddingInDegrees.v;
488 
490  QUARTER_QUAD_SIZE_IN_DEGREES;// +
491  //thePaddingInDegrees.u;
492 
494  QUARTER_QUAD_SEG_SIZE_IN_DEGREES; // +
495  //thePaddingInDegrees.v;
496  break;
497 
498  case 'B': // Upper right segment of the quarter quad.
500  QUARTER_QUAD_SEG_SIZE_IN_DEGREES; //-
501 // thePaddingInDegrees.u;
502 
504  QUARTER_QUAD_SEG_SIZE_IN_DEGREES;// -
505 // thePaddingInDegrees.v;
506 
508  QUARTER_QUAD_SIZE_IN_DEGREES;// +
509 // thePaddingInDegrees.u;
510 
511  stopLon = theQuarterQuadLowerRightCorner.lon;// +
512 // thePaddingInDegrees.v;
513  break;
514 
515  case 'C': // Lower left segment of the quarter quad.
516  startLat = theQuarterQuadLowerRightCorner.lat;// -
517 // thePaddingInDegrees.u;
518 
520  QUARTER_QUAD_SIZE_IN_DEGREES;// -
521 // thePaddingInDegrees.v;
522 
524  QUARTER_QUAD_SEG_SIZE_IN_DEGREES;// +
525 // thePaddingInDegrees.u;
526 
528  QUARTER_QUAD_SEG_SIZE_IN_DEGREES;// +
529 // thePaddingInDegrees.v;
530 
531  break;
532 
533  case 'D':
534  startLat = theQuarterQuadLowerRightCorner.lat;// -
535 // thePaddingInDegrees.u;
536 
538  QUARTER_QUAD_SEG_SIZE_IN_DEGREES;// -
539 // thePaddingInDegrees.v;
540 
542  QUARTER_QUAD_SEG_SIZE_IN_DEGREES;// +
543 // thePaddingInDegrees.u;
544 
545  stopLon = theQuarterQuadLowerRightCorner.lon;// +
546 // thePaddingInDegrees.v;
547  break; // At the corner of a quad so nothing to do here.
548 
549  default:
550  if (traceDebug())
551  {
553  << "FATAL:" << MODULE << "\n"
554  << "Quarter quad segment range error.\n"
555  << "Quarter quad segment extracted: " << seg
556  << "Range: A to D\n";
557  }
558  break;
559  }
560 
561  ossimGrect
562  rect(ossimGpt(startLat,
563  startLon,
566  ossimGpt(stopLat,
567  stopLon,
570 
571  if (traceDebug())
572  {
574  << "DEBUG: " << MODULE
575  << "\nQuarter quad segment " << seg << " rect: " << rect << "\n";
576  }
577 
578  return rect;
579 }
const ossimDatum * datum() const
datum().
Definition: ossimGpt.h:196
ossim_float64 lon
Definition: ossimGpt.h:266
double height() const
Definition: ossimGpt.h:107
ossimGpt theQuarterQuadLowerRightCorner
Definition: ossimUsgsQuad.h:99
ossim_float64 lat
Definition: ossimGpt.h:265
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ setQuadName()

void ossimUsgsQuad::setQuadName ( const ossimString name)

Definition at line 196 of file ossimUsgsQuad.cpp.

References ossimString::length().

Referenced by ossimUsgsQuad().

197 {
198  const char* MODULE = "ossimUsgsQuad::setQuadName";
199  ossimString qqName = name;
200 
201  //***
202  // Check the length of "name" to see if it's correct.
203  //***
204  if (name.length() < 7)
205  {
206  if (traceDebug())
207  {
209  << "FATAL: " << MODULE << "\n"
210  << "Quarder quad name length incorrect.\n"
211  << "Name: " << name << "\n"
212  << "Expected length: 7 or 8 Name length: " << name.length()
213  << "\nExample of valid quad: 30089C6B\n"
214  << "Represents lower right corner of "
215  << "30 deg. 15 min. N., 89 deg. 37.5 min. W.\n"
216  << "Breakdown:\n"
217  << "30 = latitude on even degree boundary "
218  << "(Northern Hemisphere implied)\n"
219  << "089 = longitude on even degree boundary "
220  << "(Western Hemisphere implied)\n"
221  << "C = Third quad section in latitude direction\n"
222  << "6 = Sixth quad section in longitude direction\n"
223  << "B = Quarter quad segment within the quad\n"
224  << " (A=upper left, B=upper right, C=lower left, D=lower right)\n"
225  << "Quad size 7.5 minute square, quarter quad size 3.75 "
226  << "minute square.\n";
227  }
228 
229  return;
230  }
231 
232  qqName.upcase();
233 
234  char latChars[3];
235  char lonChars[4];
236  char latQuad;
237  char lonQuad;
238 // char segment;
239 
240  //***
241  // Get the latitude.
242  //***
243  latChars[0] = qqName.c_str()[0];
244  latChars[1] = qqName.c_str()[1];
245  latChars[2] = '\0';
246 
247  //***
248  // Get the longitude.
249  //***
250  lonChars[0] = qqName.c_str()[2];
251  lonChars[1] = qqName.c_str()[3];
252  lonChars[2] = qqName.c_str()[4];
253  lonChars[3] = '\0';
254 
255  //***
256  // Get the latitude quad.
257  //***
258  latQuad = qqName.c_str()[5];
259 
260  //***
261  // Get the longitude quad.
262  //***
263  lonQuad = qqName.c_str()[6];
264 
265  //***
266  // Get the segment within the quad.
267  //***
268  if (name.length() == 8)
269  {
270  theQuarterQuadSegment = qqName.c_str()[7];
271  }
272  else
273  {
274  theQuarterQuadSegment = 'D';
275  if (traceDebug())
276  {
278  << MODULE << ":\n"
279  << "No quarter quad segment entered. Defaulting to D segment."
280  << std::endl;
281  }
282  }
283 
284  //***
285  // Build up the lower right corner from the extracted parts.
286  //***
287 
288  //***
289  // Get the latitude and check the range.
290  //***
291  double lat = atof(latChars);
292  if ( (lat < 0.0) || (lat > 90.0) )
293  {
294  if (traceDebug())
295  {
297  << "FATAL: " << MODULE << "\n"
298  << "Latitude range error. Latitude extracted: " << lat
299  << "\nRange: 0 to 90\n";
300  }
301  return;
302  }
303 
304  //***
305  // Get the longitude and check the range.
306  //***
307  double lon = atof(lonChars);
308  if ( (lon < 0.0) || (lon > 180) )
309  {
310  if (traceDebug())
311  {
313  << "FATAL: " << MODULE << "\n"
314  << "Longitud range error. Longitude extracted: " << lon
315  << "\nRange: 0 to 180\n";
316  }
317  return;
318  }
319 
320  //***
321  // Get the latitude quad and add this to "lat". The quad are letters from
322  // A - H with A being on an even degree boundary, B being 7.5 minute up
323  // and so on.
324  //***
325  double tmp = latQuad - 65; // Ascii decimal value for A = 65.
326 
327  if (tmp)
328  {
329  //***
330  // Check the range. The are eight quads within one degree.
331  //***
332  if (tmp > 7.0)
333  {
334  if (traceDebug())
335  {
337  << "FATAL:" << MODULE << "\n"
338  << "Latitude quad range error. Quad extracted: " << latQuad
339  << "\nRange: A to H\n";
340  }
341  return;
342  }
343 
344  tmp *= 7.5; // Convert the quad to minutes.
345 
346  lat += tmp/60.0; // Conver minutes to degrees and add to "lat".
347  }
348 
349  //***
350  // Get the longitude quad and add this to "lat". The quad are letters from
351  // A - H with A being on an even degree boundary, B being 7.5 minute up
352  // and so on.
353  //***
354  tmp = lonQuad - 49; // Ascii decimal value for 1 = 49.
355 
356  if (tmp)
357  {
358  //***
359  // Check the range. The are eight quads within one degree.
360  //***
361  if (tmp > 7.0)
362  {
363  if (traceDebug())
364  {
366  << "FATAL:" << MODULE << "\n"
367  << "Longitude quad range error. Quad extracted: " << latQuad
368  << "\nRange: 1 to 8\n";
369  }
370  return;
371  }
372 
373  tmp *= 7.5; // Convert the quad to minutes.
374 
375  lon += tmp/60.0; // Conver minutes to degrees and add to "lon".
376  }
377 
378  //***
379  // Currently this naming convention assumes Northern and Western hemisphere.
380  //***
381  lon = -lon; // Make negative for Western hemisphere.
382 
383  //***
384  // Initialize "theQuadLowerRightCorner".
385  //***
388 
389  //***
390  // Get the segment and add to "lat" and "lon".
391  //***
392  switch (theQuarterQuadSegment)
393  {
394  case 'A':
395  lat += QUARTER_QUAD_SIZE_IN_DEGREES;
396  lon -= QUARTER_QUAD_SIZE_IN_DEGREES;
397  break;
398 
399  case 'B':
400  lat += QUARTER_QUAD_SIZE_IN_DEGREES;
401  break;
402 
403  case 'C':
404  lon -= QUARTER_QUAD_SIZE_IN_DEGREES;
405  break;
406 
407  case 'D':
408  break; // At the corner of a quad so nothing to do here.
409 
410  default:
411  if (traceDebug())
412  {
414  << "FATAL:" << MODULE << "\n"
415  << "Quarter quad segment range error.\n"
416  << "Quarter quad segment extracted: " << theQuarterQuadSegment
417  << "Range: A to D\n";
418  }
419  return;
420  }
421 
422  //***
423  // Initialize "theQuarterQuadLowerRightCorner".
424  //***
427 
428  if (traceDebug())
429  {
431  << "DEBUG: " << MODULE << ", "
432  << qqName << " lower right quad corner: "
433  << theQuadLowerRightCorner << "\n"
434  << "Quarter quad segment: " << theQuarterQuadSegment << "\n"
435  << qqName << " lower right quarter quad corner: "
437  }
438  theName = qqName;
439 }
char theQuarterQuadSegment
static ossimString upcase(const ossimString &aString)
Definition: ossimString.cpp:34
ossimGpt theQuadLowerRightCorner
Definition: ossimUsgsQuad.h:98
ossimString theName
Definition: ossimUsgsQuad.h:97
ossim_float64 lon
Definition: ossimGpt.h:266
std::string::size_type length() const
Definition: ossimString.h:408
ossimGpt theQuarterQuadLowerRightCorner
Definition: ossimUsgsQuad.h:99
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
ossim_float64 lat
Definition: ossimGpt.h:265
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

Member Data Documentation

◆ theName

ossimString ossimUsgsQuad::theName
protected

Definition at line 97 of file ossimUsgsQuad.h.

◆ theQuadLowerRightCorner

ossimGpt ossimUsgsQuad::theQuadLowerRightCorner
protected

Definition at line 98 of file ossimUsgsQuad.h.

Referenced by quadRect().

◆ theQuarterQuadLowerRightCorner

ossimGpt ossimUsgsQuad::theQuarterQuadLowerRightCorner
protected

Definition at line 99 of file ossimUsgsQuad.h.

Referenced by quarterQuadRect(), and quarterQuadSegRect().

◆ theQuarterQuadSegment

char ossimUsgsQuad::theQuarterQuadSegment
protected

Definition at line 101 of file ossimUsgsQuad.h.


The documentation for this class was generated from the following files: