OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimTerraSarProductDoc.cpp
Go to the documentation of this file.
1 //----------------------------------------------------------------------------
2 //
3 // License: LGPL
4 //
5 // See LICENSE.txt file in the top level directory for more details.
6 //
7 // Description: Utility class to encapsulate parsing TerraSAR-X product.xml
8 // file.
9 //
10 //----------------------------------------------------------------------------
11 // $Id$
12 
14 #include <ossimPluginCommon.h>
15 #include <otb/Ephemeris.h>
17 #include <otb/JSDDateTime.h>
18 #include <otb/CivilDateTime.h>
19 #include <otb/PlatformPosition.h>
20 #include <otb/SarSensor.h>
21 #include <otb/SensorParams.h>
22 #include <otb/RefPoint.h>
23 #include <otb/Noise.h>
24 #include <otb/ImageNoise.h>
25 #include <otb/SceneCoord.h>
26 #include <otb/InfoSceneCoord.h>
27 #include <ossim/base/ossimDpt.h>
29 #include <ossim/base/ossimGpt.h>
30 #include <ossim/base/ossimIpt.h>
31 #include <ossim/base/ossimNotify.h>
32 #include <ossim/base/ossimRefPtr.h>
33 #include <ossim/base/ossimString.h>
34 #include <ossim/base/ossimTrace.h>
37 
38 // Static trace for debugging
39 static ossimTrace traceDebug("ossimTerraSarProductDoc:debug");
40 
41 
43 {
44 }
45 
47 {
48 }
49 
51  const ossimXmlDocument* xdoc) const
52 {
53  bool result = false;
54  if (xdoc)
55  {
56  ossimString s;
57  getMission(xdoc, s);
58  s.upcase();
59  if ( (s == "TSX-1") || (s == "TDX-1") )
60  {
61  result = true;
62  }
63  }
64  return result;
65 }
66 
68  const ossimXmlDocument* xdoc, ossimplugins::PlatformPosition* pos) const
69 {
70  static const char MODULE[] =
71  "ossimplugins::ossimTerraSarProductDoc::initPlatformPosition";
72  if (traceDebug())
73  {
74  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
75  }
76 
77  bool result = true;
78 
79  if ( xdoc && pos )
80  {
81  // Get all the stateVector nodes.
82  ossimString path =
83  "/level1Product/platform/orbit/stateVec";
84  std::vector<ossimRefPtr<ossimXmlNode> > xnodes;
85  xdoc->findNodes(path, xnodes);
86  if ( xnodes.size() )
87  {
88  const std::vector<ossimRefPtr<ossimXmlNode> >::size_type COUNT =
89  xnodes.size();
90 
91  std::vector<Ephemeris*> ev;
92 
93  int nbrData = 0; // to keep track of good stateVector count.
94 
95  ossimRefPtr<ossimXmlNode> svNode = 0; // stateVector node
96 
97  for (ossim_uint32 i = 0 ; i < COUNT; ++i)
98  {
99  svNode = xnodes[i];
100  if ( !svNode )
101  {
102  result = false;
103  break;
104  }
105 
106  ossimString s;
107 
108  // TSX ephemerisis quality indicator (1:good, 0: wrong)
109  svNode->getAttributeValue(s, "qualInd");
110 
111  if (s == "1")
112  {
113  double pos[3];
114  double vit[3];
115  CivilDateTime eph_civil_date;
116 
117  path = "timeUTC";
118  result = ossim::findFirstNode(path, svNode, s);
119  if (result)
120  {
121  ossim::iso8601TimeStringToCivilDate(s, eph_civil_date);
122  }
123  else
124  {
125  result = false;
127  << MODULE << " ERROR:\nNode not found: " << path
128  << std::endl;
129  break;
130  }
131 
132  path = "posX";
133  result = ossim::findFirstNode(path, svNode, s);
134  if (result)
135  {
136  pos[0] = s.toDouble();
137  }
138  else
139  {
140  result = false;
142  << MODULE << " ERROR:\nNode not found: " << path
143  << std::endl;
144  break;
145  }
146 
147  path = "posY";
148  result = ossim::findFirstNode(path, svNode, s);
149  if (result)
150  {
151  pos[1] = s.toDouble();
152  }
153  else
154  {
155  result = false;
157  << MODULE << " ERROR:\nNode not found: " << path
158  << std::endl;
159  break;
160  }
161 
162  path = "posZ";
163  result = ossim::findFirstNode(path, svNode, s);
164  if (result)
165  {
166  pos[2] = s.toDouble();
167  }
168  else
169  {
170  result = false;
172  << MODULE << " ERROR:\nNode not found: " << path
173  << std::endl;
174  break;
175  }
176 
177  path = "velX";
178  result = ossim::findFirstNode(path, svNode, s);
179  if (result)
180  {
181  vit[0] = s.toDouble();
182  }
183  else
184  {
185  result = false;
187  << MODULE << " ERROR:\nNode not found: " << path
188  << std::endl;
189  break;
190  }
191 
192  path = "velY";
193  result = ossim::findFirstNode(path, svNode, s);
194  if (result)
195  {
196  vit[1] = s.toDouble();
197  }
198  else
199  {
200  result = false;
202  << MODULE << " ERROR:\nNode not found: " << path
203  << std::endl;
204  break;
205  }
206 
207  path = "velZ";
208  result = ossim::findFirstNode(path, svNode, s);
209  if (result)
210  {
211  vit[2] = s.toDouble();
212  }
213  else
214  {
215  result = false;
217  << MODULE << " ERROR:\nNode not found: " << path
218  << std::endl;
219  break;
220  }
221 
222  JSDDateTime eph_jsd_date(eph_civil_date);
223  GeographicEphemeris* eph =
224  new GeographicEphemeris(eph_jsd_date, pos, vit);
225  ev.push_back(eph);
226  ++nbrData;
227  } // matches: if (s == "1")
228 
229  } // matches: for (ossim_uint32 i = 0 ; i < COUNT; ++i)
230 
231  if (result && ev.size())
232  {
233  Ephemeris** ephemeris = new Ephemeris*[ev.size()];
234  for ( std::vector<Ephemeris*>::size_type evIdx = 0;
235  evIdx < ev.size();
236  ++evIdx )
237  {
238  ephemeris[evIdx] = ev[evIdx];
239  }
240  if (traceDebug())
241  {
243  << " DEBUG\nnbrData: " << nbrData << "\n";
244  }
245  pos->setData(ephemeris, nbrData);
246  }
247  else
248  {
249  std::vector<Ephemeris*>::iterator evIdx = ev.begin();
250  while (evIdx != ev.end())
251  {
252  delete (*evIdx);
253  (*evIdx) = 0;
254  }
255  ev.clear();
256  }
257 
258  } // matches: if ( xnodes.size() )
259  else
260  {
261  result = false;
263  << MODULE << " ERROR:\nNodes not found: " << path << std::endl;
264  }
265 
266  } // matches: if (xdoc && pos)
267  else
268  {
269  result = false;
270  }
271 
272  if (traceDebug())
273  {
275  << MODULE << " exit status = " << (result?"true\n":"false\n");
276  }
277 
278  return result;
279 }
280 
282  const ossimXmlDocument* xdoc, SensorParams* sp) const
283 {
284  bool result = true;
285 
286  if (xdoc && sp)
287  {
288  ossimString s;
289 
290  // Get the number of azimuth looks.
291  if ( getNumberOfAzimuthLooks(xdoc, s) )
292  {
293  sp->set_nAzimuthLook(s.toDouble());
294  }
295  else
296  {
297  result = false;
298  }
299 
300  // Get the number of range looks.
301  if ( getNumberOfRangeLooks(xdoc, s) )
302  {
303  sp->set_nRangeLook(s.toDouble());
304  }
305  else
306  {
307  result = false;
308  }
309 
310  // Get the nominal PRF
311  if ( getCommonPrf(xdoc, s) )
312  {
313  sp->set_prf(s.toDouble());
314  }
315  else
316  {
317  result = false;
318  }
319 
320  // Get the radar wave length.
321  if ( getRadarCenterFrequency(xdoc, s) )
322  {
323  const double CLUM = 2.99792458e+8 ;
324  double waveLength = CLUM / s.toDouble();
325  sp->set_rwl(waveLength);
326  }
327  else
328  {
329  result = false;
330  }
331 
332  if ( getLookDirection(xdoc, s) )
333  {
334  if (s.upcase() == "RIGHT")
335  {
337  }
338  else
339  {
341  }
342  }
343  else
344  {
345  result = false;
346  }
347 
348  // Get the Sampling frequency.
349  if ( getCommonRsf(xdoc, s) )
350  {
351  sp->set_sf(s.toDouble());
352  }
353  else
354  {
355  result = false;
356  }
357 
358  // Ellipsoid hard coded to WGS84.
359  const double SEMI_MAJOR = 6378137.0;
360  const double SEMI_MINOR = 6356752.3142;
361  sp->set_semiMajorAxis(SEMI_MAJOR);
362  sp->set_semiMinorAxis(SEMI_MINOR);
363 
364  if ( isProductGeoreferenced(xdoc) )
365  {
366  if ( getOrbitDirection(xdoc, s) )
367  {
368  int orbitDirectionSign;
369  if ( s.upcase() == "DESCENDING" )
370  {
371  orbitDirectionSign = 1 ;
372  }
373  else
374  {
375  orbitDirectionSign = -1 ;
376  }
377 
378  if ( getImageDataStrartWith(xdoc, s) )
379  {
380  if (s=="EARLYAZNEARRG")
381  {
382  sp->set_col_direction(orbitDirectionSign);
383  sp->set_lin_direction(orbitDirectionSign);
384  }
385  else if (s=="EARLYAZFARRG")
386  {
387  sp->set_col_direction(-orbitDirectionSign);
388  sp->set_lin_direction(orbitDirectionSign);
389  }
390  else if (s=="LATEAZNEARRG")
391  {
392  sp->set_col_direction(orbitDirectionSign);
393  sp->set_lin_direction(-orbitDirectionSign);
394  }
395  else if (s=="LATEAZFARRG") {
396  sp->set_col_direction(-orbitDirectionSign);
397  sp->set_lin_direction(-orbitDirectionSign);
398  }
399  else
400  {
401  //---
402  // COSAR Files are stored ing with early azimuth,
403  // near range
404  //---
405  sp->set_col_direction(orbitDirectionSign);
406  sp->set_lin_direction(orbitDirectionSign);
407  }
408  }
409  else
410  {
411  result = false;
412  }
413  }
414  else
415  {
416  result = false;
417  }
418 
419  } // matches: if ( isProductGeoreferenced(xdoc) )
420  else
421  {
422  sp->set_col_direction(1);
423  sp->set_lin_direction(1);
424  }
425 
426  } // matches: if (xdoc && sp)
427  else
428  {
429  result = false;
430  }
431 
432  return result;
433 }
434 
436  const ossimXmlDocument* xdoc, ossimIpt& imageSize) const
437 {
438  bool result = true;
439 
440  if (xdoc)
441  {
442  ossimString s;
443  if ( getNumberOfColumns(xdoc, s) )
444  {
445  imageSize.x = static_cast<ossim_int32>(s.toFloat64());
446  }
447  else
448  {
449  result = false;
450  }
451  if ( getNumberOfRows(xdoc, s) )
452  {
453  imageSize.y = static_cast<ossim_int32>(s.toFloat64());
454  }
455  else
456  {
457  result = false;
458  }
459  }
460  else
461  {
462  result = false;
463  }
464 
465  if (traceDebug())
466  {
468  << "ossimplugins::ossimTerraSarProductDoc::initImageSize DEBUG:\nimage size: "
469  << imageSize
470  << "\nexit status = " << (result?"true":"false")
471  << std::endl;
472  }
473 
474  return result;
475 }
476 
478 const ossimXmlDocument* xdoc, ossimDpt& gsd) const
479 {
480  bool result = true;
481 
482  if (xdoc)
483  {
484  ossimString s;
485 
486  if ( getProductVariant(xdoc, s) )
487  {
488  if (s == "SSC")
489  {
490  if ( getProjectedSpacingSlantRange(xdoc, s) )
491  {
492  gsd.x = s.toFloat64();
493  }
494  else
495  {
496  result = false;
497  }
498  if ( getProjectedSpacingAzimuth(xdoc, s) )
499  {
500  gsd.y = s.toFloat64();
501  }
502  else
503  {
504  result = false;
505  }
506  }
507  else
508  {
509  if ( getRowSpacing(xdoc, s) )
510  {
511  gsd.x = s.toFloat64(s);
512  }
513  else
514  {
515  result = false;
516  }
517  if ( getColumnSpacing(xdoc, s) )
518  {
519  gsd.y = s.toFloat64();
520  }
521  else
522  {
523  result = false;
524  }
525  }
526  }
527  else
528  {
529  result = false;
530  }
531  }
532  else
533  {
534  result = false;
535  }
536 
537  if (traceDebug())
538  {
540  << "ossimplugins::ossimTerraSarProductDoc::initGsd DEBUG:\ngsd: "
541  << gsd
542  << "\nexit status = " << (result?"true":"false")
543  << std::endl;
544  }
545 
546  return result;
547 }
548 
550  const ossimXmlDocument* xdoc,
551  std::list<ossimGpt>& gcp,
552  std::list<ossimDpt>& icp) const
553 {
554  static const char MODULE[] = "ossimplugins::ossimTerraSarProductDoc::initTiePoints";
555 
556  bool result = true;
557 
558  if (traceDebug())
559  {
560  ossimNotify(ossimNotifyLevel_DEBUG) << MODULE << " DEBUG:\n";
561  }
562 
563  if (xdoc)
564  {
565  ossimString s;
566  ossimDpt dpt;
567  ossimGpt gpt;
568 
569  // Get the height.
570  result = getSceneAverageHeight(xdoc, s);
571  if (result)
572  {
573  gpt.hgt = s.toFloat64();
574  }
575 
576  // Get the scene center.
577  result = getSceneCenterRefColumn(xdoc, s);
578  if (result)
579  {
580  dpt.x = s.toFloat64() - 1.0;
581  }
582  result = getSceneCenterRefRow(xdoc, s);
583  if (result)
584  {
585  dpt.y = s.toFloat64() - 1.0;
586  }
587  icp.push_back(dpt);
588 
589  result = getSceneCenterLat(xdoc, s);
590  if (result)
591  {
592  gpt.lat = s.toFloat64();
593  }
594  result = getSceneCenterLon(xdoc, s);
595  if (result)
596  {
597  gpt.lon = s.toFloat64();
598  }
599  gcp.push_back(gpt);
600 
601  ossimString path =
602  "/level1Product/productInfo/sceneInfo/sceneCornerCoord";
603  std::vector<ossimRefPtr<ossimXmlNode> > xnodes;
604  xdoc->findNodes(path, xnodes);
605  if ( xnodes.size() )
606  {
607  for (ossim_uint32 i = 0; i < xnodes.size(); ++i)
608  {
609  if (xnodes[i].valid())
610  {
611  result = ossim::findFirstNode(ossimString("refRow"),
612  xnodes[i], s);
613  if (result)
614  {
615  dpt.y = s.toDouble() - 1.0;
616  }
617  result = ossim::findFirstNode(ossimString("refColumn"),
618  xnodes[i], s);
619  if (result)
620  {
621  dpt.x = s.toDouble() - 1.0;
622  }
623  icp.push_back(dpt);
624 
625  if (traceDebug())
626  {
628  << "dpt" << i << ": " << dpt
629  << "\n";
630  }
631 
632  result = ossim::findFirstNode(ossimString("lat"),
633  xnodes[i], s);
634  if (result)
635  {
636  gpt.lat = s.toFloat64();
637  }
638  result = ossim::findFirstNode(ossimString("lon"),
639  xnodes[i], s);
640  if (result)
641  {
642  gpt.lon = s.toDouble();
643  }
644  gcp.push_back(gpt);
645 
646  if (traceDebug())
647  {
649  << "gpt" << i << ": " << gpt
650  << "\n";
651  }
652 
653  } // matches: if (xnodes[i].valid())
654  else
655  {
656  result = false;
657  }
658 
659  } // mathches: for (ossim_uint32 i = 0; i < xnodes.size(); ++i)
660 
661  } // matches: if ( xnodes.size() )
662  else
663  {
664  result = false; // No nodes found.
665  }
666  } // matches: if (xdoc)
667  else
668  {
669  result = false; // Null pointer passed in.
670  }
671 
672  if (traceDebug())
673  {
675  << MODULE << " DEBUG: exit status = " << (result?"true":"false")
676  << std::endl;
677  }
678 
679  return result;
680 }
681 
683  const ossimXmlDocument* xdoc) const
684 {
685  bool result = false;
686 
687  ossimString s;
688  if ( getProjection(xdoc, s) )
689  {
690  result = (s == "GROUNDRANGE");
691  }
692 
693  return result;
694 }
695 
697  const ossimXmlDocument* xdoc, ossimString& s) const
698 {
699  ossimString path = "/level1Product/generalHeader/mission";
700  ossim::getPath(path, xdoc, s);
701 
702  return ossim::getPath(path, xdoc, s);
703 }
704 
706  const ossimXmlDocument* xdoc, ossimString& s) const
707 {
708  ossimString path = "/level1Product/productInfo/imageDataInfo/numberOfLayers";
709  ossim::getPath(path, xdoc, s);
710 
711  return ossim::getPath(path, xdoc, s);
712 }
713 
714 
716  const ossimXmlDocument* xdoc, ossimString& s) const
717 {
718  bool result = false;
719  ossimString subDir;
720  ossimString fileName;
721 
722  ossimString path = "/level1Product/productComponents/imageData/file/location/path";
723 
724  if ( ossim::getPath(path, xdoc, subDir) )
725  {
726  path = "/level1Product/productComponents/imageData/file/location/filename";
727  if ( ossim::getPath(path, xdoc, fileName) )
728  {
729  result = true;
730  s = subDir;
731  s += "/";
732  s += fileName;
733  }
734  }
735  return result;
736 }
737 
739  const ossimXmlDocument* xdoc, ossimString& s) const
740 {
741  ossimString path = "/level1Product/productInfo/sceneInfo/sceneID";
742  return ossim::getPath(path, xdoc, s);
743 }
744 
746  const ossimXmlDocument* xdoc, ossimString& s) const
747 {
748  ossimString path = "/level1Product/productInfo/productVariantInfo/projection";
749  return ossim::getPath(path, xdoc, s);
750 }
751 
753  const ossimXmlDocument* xdoc, ossimString& s) const
754 {
755  ossimString path = "/level1Product/productInfo/productVariantInfo/productType";
756  return ossim::getPath(path, xdoc, s);
757 }
758 
760 const ossimXmlDocument* xdoc, ossimString& s) const
761 {
762  ossimString path = "/level1Product/productInfo/productVariantInfo/productVariant";
763  return ossim::getPath(path, xdoc, s);
764 }
765 
767  const ossimXmlDocument* xdoc, ossimString& s) const
768 {
769  ossimString path = "/level1Product/productInfo/productVariantInfo/radiometricCorrection";
770  return ossim::getPath(path, xdoc, s);
771 }
772 
773 
775  const ossimXmlDocument* xdoc, ossimString& s) const
776  {
777  ossimString path = "/level1Product/productSpecific/projectedImageInfo/slantToGroundRangeProjection/referencePoint";
778  return ossim::getPath(path, xdoc, s);
779  }
780 
782  const ossimXmlDocument* xdoc, ossimString& s) const
783 {
784  bool result = true;
785  ossimString path = "/level1Product/productSpecific/complexImageInfo";
786  std::vector<ossimRefPtr<ossimXmlNode> > xnodes;
787  xdoc->findNodes(path, xnodes);
788  if ( xnodes.size() )
789  {
790  for (ossim_uint32 i = 0; i < xnodes.size(); ++i)
791  {
792  if (xnodes[i].valid())
793  {
794  result = ossim::findFirstNode(ossimString("imageDataStartWith"),
795  xnodes[i], s);
796  }
797  }
798  }
799  else
800  {
801  result=false;
802  }
803  return result;
804 }
805 
807  const ossimXmlDocument* xdoc, ossimString& s) const
808 {
809  ossimString path = "/level1Product/productInfo/missionInfo/orbitDirection";
810  return ossim::getPath(path, xdoc, s);
811 }
812 
814  const ossimXmlDocument* xdoc, ossimString& s) const
815 {
816  ossimString path =
817  "/level1Product/productInfo/acquisitionInfo/lookDirection";
818  return ossim::getPath(path, xdoc, s);
819 }
820 
822  const ossimXmlDocument* xdoc, ossimString& s) const
823 {
824  ossimString path =
825  "/level1Product/generalHeader/generationTime";
826  return ossim::getPath(path, xdoc, s);
827 }
828 
830  const ossimXmlDocument* xdoc, ossimString& s) const
831 {
832  ossimString path = "/level1Product/productInfo/sceneInfo/rangeTime/firstPixel";
833  return ossim::getPath(path, xdoc, s);
834 }
835 
837  const ossimXmlDocument* xdoc, ossimString& s) const
838 {
839  ossimString path = "/level1Product/productInfo/sceneInfo/rangeTime/lastPixel";
840  return ossim::getPath(path, xdoc, s);
841 }
842 
844  const ossimXmlDocument* xdoc, ossimString& s) const
845 {
846  ossimString path = "/level1Product/productInfo/sceneInfo/sceneCenterCoord/azimuthTimeUTC";
847  return ossim::getPath(path, xdoc, s);
848 }
849 
851  const ossimXmlDocument* xdoc, ossimString& s) const
852 {
853  ossimString path = "/level1Product/productInfo/sceneInfo/sceneCenterCoord/rangeTime";
854  return ossim::getPath(path, xdoc, s);
855 }
856 
858  const ossimXmlDocument* xdoc, ossimString& s) const
859 {
860  ossimString path = "/level1Product/productInfo/sceneInfo/sceneCenterCoord/refColumn";
861  return ossim::getPath(path, xdoc, s);
862 }
863 
865  const ossimXmlDocument* xdoc, ossimString& s) const
866 {
867  ossimString path = "/level1Product/productInfo/sceneInfo/sceneCenterCoord/refRow";
868  return ossim::getPath(path, xdoc, s);
869 }
870 
872  const ossimXmlDocument* xdoc, ossimString& s) const
873 {
874  ossimString path = "/level1Product/productInfo/sceneInfo/sceneCenterCoord/lat";
875  return ossim::getPath(path, xdoc, s);
876 }
877 
879  const ossimXmlDocument* xdoc, ossimString& s) const
880 {
881  ossimString path = "/level1Product/productInfo/sceneInfo/sceneCenterCoord/lon";
882  return ossim::getPath(path, xdoc, s);
883 }
884 
886  const ossimXmlDocument* xdoc, ossimString& s) const
887 {
888  ossimString path =
889  "/level1Product/productInfo/sceneInfo/sceneAverageHeight";
890  return ossim::getPath(path, xdoc, s);
891 }
892 
894  const ossimXmlDocument* xdoc, ossimString& s) const
895 {
896  ossimString path =
897  "/level1Product/instrument/radarParameters/centerFrequency";
898  return ossim::getPath(path, xdoc, s);
899 }
900 
902  const ossimXmlDocument* xdoc, ossimString& s) const
903 {
904  ossimString path =
905  "/level1Product/productInfo/sceneInfo/start/timeUTC";
906 
907  bool res = ossim::getPath(path, xdoc, s);
908 
909  if(!res)
910  {
911  if (traceDebug())
912  {
913  ossimNotify(ossimNotifyLevel_DEBUG)<< "Node \"/level1Product/productInfo/sceneInfo/start/timeUTC\" invalid, trying \"/level1Product/instrument/settings/rxGainSetting/startTimeUTC\"...\n";
914  }
915  path = "/level1Product/instrument/settings/rxGainSetting/startTimeUTC";
916  res = ossim::getPath(path, xdoc, s);
917  }
918 
919  return res;
920 }
921 
923  const ossimXmlDocument* xdoc, ossimString& s) const
924 {
925  ossimString path =
926  "/level1Product/productInfo/sceneInfo/stop/timeUTC";
927 
928  bool res = ossim::getPath(path, xdoc, s);
929 
930  if(!res)
931  {
932  if (traceDebug())
933  {
934  ossimNotify(ossimNotifyLevel_DEBUG)<< "Node \"/level1Product/productInfo/sceneInfo/stop/timeUTC\" invalid, trying \"/level1Product/instrument/settings/rxGainSetting/stopTimeUTC\"...\n";
935  }
936  path = "/level1Product/instrument/settings/settingRecord/dataSegment segmentID/stopTimeUTC";
937  res = ossim::getPath(path, xdoc, s);
938  }
939 
940  return res;
941 
942 }
943 
945  const ossimXmlDocument* xdoc, ossimString& s) const
946 {
947  ossimString path =
948  "/level1Product/productInfo/sceneInfo/rangeTime/firstPixel";
949 
950  bool res = ossim::getPath(path, xdoc, s);
951 
952  return res;
953 }
954 
956  const ossimXmlDocument* xdoc, ossimString& s) const
957 {
958  ossimString path =
959  "/level1Product/productInfo/sceneInfo/rangeTime/lastPixel";
960 
961  bool res = ossim::getPath(path, xdoc, s);
962 
963  return res;
964 }
965 
966 
967 
969  const ossimXmlDocument* xdoc, ossimString& s) const
970 {
971  bool result = true;
972  ossimString path = "/level1Product/productSpecific/complexImageInfo";
973  std::vector<ossimRefPtr<ossimXmlNode> > xnodes;
974  xdoc->findNodes(path, xnodes);
975  if ( xnodes.size() )
976  {
977  for (ossim_uint32 i = 0; i < xnodes.size(); ++i)
978  {
979  if (xnodes[i].valid())
980  {
981  result = ossim::findFirstNode(ossimString("commonPRF"),
982  xnodes[i], s);
983  }
984  }
985  }
986  else
987  {
988  result=false;
989  }
990  return result;
991 }
992 
994  const ossimXmlDocument* xdoc, ossimString& s) const
995 {
996  bool result = true;
997  ossimString path = "/level1Product/productSpecific/complexImageInfo";
998  std::vector<ossimRefPtr<ossimXmlNode> > xnodes;
999  xdoc->findNodes(path, xnodes);
1000  if ( xnodes.size() )
1001  {
1002  for (ossim_uint32 i = 0; i < xnodes.size(); ++i)
1003  {
1004  if (xnodes[i].valid())
1005  {
1006  result = ossim::findFirstNode(ossimString("commonRSF"),
1007  xnodes[i], s);
1008  }
1009  }
1010  }
1011  else
1012  {
1013  result=false;
1014  }
1015  return result;
1016 }
1017 
1019  const ossimXmlDocument* xdoc, ossimString& s) const
1020 {
1021  bool result = true;
1022  ossimString path = "/level1Product/processing/processingParameter";
1023  std::vector<ossimRefPtr<ossimXmlNode> > xnodes;
1024  xdoc->findNodes(path, xnodes);
1025  if ( xnodes.size() )
1026  {
1027  for (ossim_uint32 i = 0; i < xnodes.size(); ++i)
1028  {
1029  if (xnodes[i].valid())
1030  {
1031  result = ossim::findFirstNode(ossimString("rangeLooks"),
1032  xnodes[i], s);
1033  }
1034  }
1035  }
1036  else
1037  {
1038  result=false;
1039  }
1040  return result;
1041 }
1042 
1044  const ossimXmlDocument* xdoc, ossimString& s) const
1045 {
1046  bool result = true;
1047  ossimString path = "/level1Product/processing/processingParameter";
1048  std::vector<ossimRefPtr<ossimXmlNode> > xnodes;
1049  xdoc->findNodes(path, xnodes);
1050  if ( xnodes.size() )
1051  {
1052  for (ossim_uint32 i = 0; i < xnodes.size(); ++i)
1053  {
1054  if (xnodes[i].valid())
1055  {
1056  result = ossim::findFirstNode(ossimString("azimuthLooks"),
1057  xnodes[i], s);
1058  }
1059  }
1060  }
1061  else
1062  {
1063  result=false;
1064  }
1065  return result;
1066 }
1067 
1069  const ossimXmlDocument* xdoc, ossimString& s) const
1070 {
1071  ossimString path =
1072  "/level1Product/productInfo/imageDataInfo/imageRaster/numberOfColumns";
1073  return ossim::getPath(path, xdoc, s);
1074 }
1075 
1077  const ossimXmlDocument* xdoc, ossimString& s) const
1078 {
1079  ossimString path =
1080  "/level1Product/productInfo/imageDataInfo/imageRaster/numberOfRows";
1081  return ossim::getPath(path, xdoc, s);
1082 }
1083 
1085  const ossimXmlDocument* xdoc, ossimString& s) const
1086 {
1087  ossimString path =
1088  "/level1Product/productInfo/imageDataInfo/imageRaster/columnSpacing";
1089  return ossim::getPath(path, xdoc, s);
1090 }
1091 
1093  const ossimXmlDocument* xdoc, ossimString& s) const
1094 {
1095  ossimString path =
1096  "/level1Product/productInfo/imageDataInfo/imageRaster/rowSpacing";
1097  return ossim::getPath(path, xdoc, s);
1098 }
1099 
1101 const ossimXmlDocument* xdoc, ossimString& s) const
1102 {
1103  ossimString path =
1104  "/level1Product/productSpecific/complexImageInfo/projectedSpacingRange/slantRange";
1105  return ossim::getPath(path, xdoc, s);
1106 }
1107 
1109 const ossimXmlDocument* xdoc, ossimString& s) const
1110 {
1111  ossimString path =
1112  "/level1Product/productSpecific/complexImageInfo/projectedSpacingAzimuth";
1113  return ossim::getPath(path, xdoc, s);
1114 }
1115 
1117  const ossimXmlDocument* xdoc, ossimString& s) const
1118 {
1119  ossimString path =
1120  "/level1Product/productInfo/acquisitionInfo/imagingMode";
1121  return ossim::getPath(path, xdoc, s);
1122 }
1123 
1125  const ossimXmlDocument* xdoc, ossimString& s) const
1126 {
1127  ossimString path =
1128  "/level1Product/productInfo/acquisitionInfo/sensor";
1129  return ossim::getPath(path, xdoc, s);
1130 }
1132  const ossimXmlDocument* xdoc, ossimString& s) const
1133 {
1134  ossimString path =
1135  "/level1Product/productInfo/acquisitionInfo/polarisationMode";
1136  return ossim::getPath(path, xdoc, s);
1137 }
1139  const ossimXmlDocument* xdoc, std::vector<ossimString>& s) const
1140 {
1141  ossimString path =
1142  "/level1Product/productInfo/acquisitionInfo/polarisationList/polLayer";
1143  return ossim::getPath(path, xdoc, s);
1144 }
1146  const ossimXmlDocument* xdoc, std::vector<ossimString>& s) const
1147 {
1148  ossimString path =
1149  "/level1Product/calibration/calibrationConstant/calFactor";
1150  return ossim::getPath(path, xdoc, s);
1151 }
1153  const ossimXmlDocument* xdoc, ossimString& s) const
1154 {
1155  ossimString path =
1156  "/level1Product/instrument/radarParameters/centerFrequency";
1157  return ossim::getPath(path, xdoc, s);
1158 }
1159 /*bool ossimplugins::ossimTerraSarProductDoc::getCenterIncidenceAngle(
1160  const ossimXmlDocument* xdoc, ossimString& s) const
1161 {
1162  ossimString path =
1163  "/level1Product/productInfo/sceneInfo/sceneCenterCoord/incidenceAngle";
1164  return ossim::getPath(path, xdoc, s);
1165 }
1166 bool ossimplugins::ossimTerraSarProductDoc::getCornerIncidenceAngles(
1167  const ossimXmlDocument* xdoc, std::vector<ossimString>& s) const
1168 {
1169  bool result = true;
1170  ossim_uint32 refRow = 0;
1171  ossim_uint32 refColumn = 0;
1172  double incidenceAngle = 0.;
1173  ossimString stmp;
1174  ossimString path = "/level1Product/productInfo/sceneInfo/sceneCornerCoord";
1175  std::vector<ossimRefPtr<ossimXmlNode> > xnodes;
1176  xdoc->findNodes(path, xnodes);
1177  if (( xnodes.size() ) && (xnodes.size() == 4))
1178  {
1179  for (ossim_uint32 i = 0; i < xnodes.size(); ++i)
1180  {
1181  if (xnodes[i].valid())
1182  {
1183  result = ossim::findFirstNode(ossimString("refRow"), xnodes[i], stmp);
1184  refRow = stmp.toUInt32();
1185  result = ossim::findFirstNode(ossimString("refColumn"), xnodes[i], stmp);
1186  refColumn = stmp.toUInt32();
1187  result = ossim::findFirstNode(ossimString("incidenceAngle"), xnodes[i], stmp);
1188  // values in vector are indexed with this order
1189  // 0 -> lower left
1190  // 1 -> upper left
1191  // 2 -> upper right
1192  // 3 -> lower right
1193 
1194  if (refRow == 1)
1195  {
1196  if (refColumn == 1)
1197  {
1198  s[0] = stmp;
1199  }
1200  else
1201  {
1202  s[3] = stmp;
1203  }
1204  }
1205  else
1206  {
1207  if (refColumn == 1)
1208  {
1209  s[1] = stmp;
1210  }
1211  else
1212  {
1213  s[2] = stmp;
1214  }
1215  }
1216  }
1217  }
1218  }
1219  else
1220  {
1221  result = false;
1222  }
1223 
1224  return result;
1225 }*/
1227 {
1228  static const char MODULE[] = "ossimplugins::ossimTerraSarProductDoc::initSceneCoord";
1229  if (traceDebug())
1230  {
1231  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
1232  }
1233 
1234  bool result = true;
1235 
1236  if ( xdoc && sceneCoord )
1237  {
1238  ossimString stmp;
1239 
1240  ossimString path = "/level1Product/productInfo/sceneInfo/sceneCenterCoord";
1241  std::vector<ossimRefPtr<ossimXmlNode> > xnodes;
1242  xdoc->findNodes(path, xnodes);
1243 
1244  if ( (xnodes.size() == 1) && (xnodes[0].valid()) )
1245  {
1246  InfoSceneCoord isc;
1247 
1248  result = ossim::findFirstNode(ossimString("refRow"), xnodes[0], stmp);
1249  isc.set_refRow( stmp.toUInt32() );
1250  result = ossim::findFirstNode(ossimString("refColumn"), xnodes[0], stmp);
1251  isc.set_refColumn( stmp.toUInt32() );
1252  result = ossim::findFirstNode(ossimString("lat"), xnodes[0], stmp);
1253  isc.set_lat( stmp.toDouble() );
1254  result = ossim::findFirstNode(ossimString("lon"), xnodes[0], stmp);
1255  isc.set_lon( stmp.toDouble() );
1256  result = ossim::findFirstNode(ossimString("azimuthTimeUTC"), xnodes[0], stmp);
1257  isc.set_azimuthTimeUTC( stmp );
1258  result = ossim::findFirstNode(ossimString("rangeTime"), xnodes[0], stmp);
1259  isc.set_rangeTime( stmp.toDouble() );
1260  result = ossim::findFirstNode(ossimString("incidenceAngle"), xnodes[0], stmp);
1261  isc.set_incidenceAngle( stmp.toDouble() );
1262 
1263  sceneCoord->set_centerSceneCoord(isc);
1264 
1265  ossimString path2 = "/level1Product/productInfo/sceneInfo/sceneCornerCoord";
1266  std::vector<ossimRefPtr<ossimXmlNode> > xnodes2;
1267 
1268  xdoc->findNodes(path2, xnodes2);
1269  if ( xnodes2.size() )
1270  {
1271  std::vector<InfoSceneCoord> tabIsc;
1272 
1273  for (ossim_uint32 i = 0; i < xnodes2.size(); ++i)
1274  {
1275  if (xnodes2[i].valid())
1276  {
1277  InfoSceneCoord isc2;
1278 
1279  result = ossim::findFirstNode(ossimString("refRow"), xnodes2[i], stmp);
1280  isc2.set_refRow( stmp.toUInt32() );
1281  result = ossim::findFirstNode(ossimString("refColumn"), xnodes2[i], stmp);
1282  isc2.set_refColumn( stmp.toUInt32() );
1283  result = ossim::findFirstNode(ossimString("lat"), xnodes[0], stmp);
1284  isc2.set_lat( stmp.toDouble() );
1285  result = ossim::findFirstNode(ossimString("lon"), xnodes[0], stmp);
1286  isc2.set_lon( stmp.toDouble() );
1287  result = ossim::findFirstNode(ossimString("azimuthTimeUTC"), xnodes[0], stmp);
1288  isc2.set_azimuthTimeUTC( stmp );
1289  result = ossim::findFirstNode(ossimString("rangeTime"), xnodes[0], stmp);
1290  isc2.set_rangeTime( stmp.toDouble() );
1291  result = ossim::findFirstNode(ossimString("incidenceAngle"), xnodes2[i], stmp);
1292  isc2.set_incidenceAngle( stmp.toDouble() );
1293 
1294  tabIsc.push_back(isc2);
1295  }
1296  }
1297 
1298  sceneCoord->set_cornersSceneCoord( tabIsc );
1299  sceneCoord->set_numberOfSceneCoord( tabIsc.size() );
1300  }
1301  }
1302  else
1303  {
1304  result = false;
1305  }
1306  }
1307 
1308  return result;
1309 }
1310 
1312  const ossimXmlDocument* xdoc, ossimplugins::Noise* noise) const
1313 {
1314  static const char MODULE[] =
1315  "ossimplugins::ossimTerraSarProductDoc::initImageNoise";
1316  if (traceDebug())
1317  {
1318  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
1319  }
1320 
1321  bool result = true;
1322 
1323  if ( xdoc && noise )
1324  {
1325  ossimString path =
1326  "/level1Product/noise/numberOfNoiseRecords";
1327  ossimString s;
1328  ossim::getPath(path, xdoc, s);
1329  std::vector<ImageNoise> tabImageNoise;
1330  tabImageNoise.clear();
1331  noise->set_numberOfNoiseRecords(s.toInt32());
1332 
1333  // Get all the stateVector nodes.
1334  path =
1335  "/level1Product/noise/imageNoise";
1336  std::vector<ossimRefPtr<ossimXmlNode> > xnodes;
1337  xdoc->findNodes(path, xnodes);
1338  if ( xnodes.size() )
1339  {
1340  const std::vector<ossimRefPtr<ossimXmlNode> >::size_type COUNT =
1341  xnodes.size();
1342 // ossim::iso8601TimeStringToCivilDate(
1343 
1344  int nbrData = 0; // to keep track of good stateVector count.
1345 
1346  ossimRefPtr<ossimXmlNode> svNode = 0; // stateVector node
1347 
1348  for (ossim_uint32 i = 0 ; i < COUNT; ++i)
1349  {
1350  ImageNoise ev;
1351  svNode = xnodes[i];
1352  if ( !svNode )
1353  {
1354  result = false;
1355  break;
1356  }
1357 
1358  ossimString s;
1359 
1360  path = "timeUTC";
1361  result = ossim::findFirstNode(path, svNode, s);
1362  if (result)
1363  {
1364  ev.set_timeUTC(s);
1365  }
1366  else
1367  {
1368  result = false;
1370  << MODULE << " ERROR:\nNode not found: " << path
1371  << std::endl;
1372  break;
1373  }
1374 
1375  path = "noiseEstimate/validityRangeMin";
1376  result = ossim::findFirstNode(path, svNode, s);
1377  if (result)
1378  {
1379  ev.set_validityRangeMin( s.toDouble() );
1380  }
1381  else
1382  {
1383  result = false;
1385  << MODULE << " ERROR:\nNode not found: " << path
1386  << std::endl;
1387  break;
1388  }
1389  path = "noiseEstimate/validityRangeMax";
1390  result = ossim::findFirstNode(path, svNode, s);
1391  if (result)
1392  {
1393  ev.set_validityRangeMax( s.toDouble() );
1394  }
1395  else
1396  {
1397  result = false;
1399  << MODULE << " ERROR:\nNode not found: " << path
1400  << std::endl;
1401  break;
1402  }
1403  path = "noiseEstimate/referencePoint";
1404  result = ossim::findFirstNode(path, svNode, s);
1405  if (result)
1406  {
1407  ev.set_referencePoint( s.toDouble() );
1408  }
1409  else
1410  {
1411  result = false;
1413  << MODULE << " ERROR:\nNode not found: " << path
1414  << std::endl;
1415  break;
1416  }
1417  path = "noiseEstimate/polynomialDegree";
1418  result = ossim::findFirstNode(path, svNode, s);
1419  if (result)
1420  {
1421  ev.set_polynomialDegree( s.toInt32() );
1422  }
1423  else
1424  {
1425  result = false;
1427  << MODULE << " ERROR:\nNode not found: " << path
1428  << std::endl;
1429  break;
1430  }
1431  //Read Coefficient
1432 
1433  ossimXmlNode::ChildListType nodelist;
1434  svNode->findChildNodes("noiseEstimate/coefficient",nodelist);
1435 
1436  ossimXmlNode::ChildListType::const_iterator child_iter = nodelist.begin();
1437  std::vector<double> polynomialCoefficients;
1438  while(child_iter != nodelist.end())
1439  {
1440  double coefficient = ((*child_iter)->getText()).toDouble() ;
1441  polynomialCoefficients.push_back(coefficient);
1442  ++child_iter;
1443  }
1444  ev.set_polynomialCoefficients( polynomialCoefficients );
1445 
1446  tabImageNoise.push_back(ev);
1447  ++nbrData;
1448 
1449 
1450  } // matches: for (ossim_uint32 i = 0 ; i < COUNT; ++i)
1451 
1452  noise->set_imageNoise(tabImageNoise);
1453 
1454  } // matches: if ( xnodes.size() )
1455 
1456  } // matches: if (xdoc && pos)
1457  else
1458  {
1459  result = false;
1460  }
1461 
1462  if (traceDebug())
1463  {
1465  << MODULE << " exit status = " << (result?"true\n":"false\n");
1466  }
1467 
1468  return result;
1469 }
1470 
1471 
1472 
1473 
1474 
1475 
1476 
bool initSensorParams(const ossimXmlDocument *xdoc, SensorParams *sp) const
Method to initialize SensorParams object from TerraSAR product xml file.
This class represent an ephemeris in Geographic coordinates system.
bool getSceneCenterLon(const ossimXmlDocument *xdoc, ossimString &s) const
longitude
void set_refRow(ossim_uint32 value)
bool initNoise(const ossimXmlDocument *xdoc, Noise *pos) const
Method to initialize Noise object from TerraSAR product xml file.
bool getSceneId(const ossimXmlDocument *xdoc, ossimString &s) const
bool getReferencePoint(const ossimXmlDocument *xdoc, ossimString &s) const
void set_sightDirection(SightDirection sight)
Definition: SensorParams.h:93
This class represents a date and time in the civil format.
Definition: CivilDateTime.h:30
static ossimString upcase(const ossimString &aString)
Definition: ossimString.cpp:34
This class represents an InfoSceneCoord.
bool getProjection(const ossimXmlDocument *xdoc, ossimString &s) const
void set_rwl(double rwl)
Definition: SensorParams.h:83
bool isTerraSarX(const ossimXmlDocument *xdoc) const
Checks for node /level1Product/generalHeader/mission containing "TSX-1".
This class represents Scence coordinate.
Definition: SceneCoord.h:29
void findChildNodes(const ossimString &rel_xpath, ossimXmlNode::ChildListType &nodelist) const
bool getAzimuthStartTime(const ossimXmlDocument *xdoc, ossimString &s) const
This class handles the platform position.
bool getNumberOfRangeLooks(const ossimXmlDocument *xdoc, ossimString &s) const
bool isProductGeoreferenced(const ossimXmlDocument *xdoc) const
bool getPolLayerList(const ossimXmlDocument *xdoc, std::vector< ossimString > &s) const
bool getSceneAverageHeight(const ossimXmlDocument *xdoc, ossimString &s) const
bool getNumberOfAzimuthLooks(const ossimXmlDocument *xdoc, ossimString &s) const
void set_numberOfSceneCoord(const ossim_uint32 &numberOfSceneCoord)
Definition: SceneCoord.h:72
bool getSceneCenterRefColumn(const ossimXmlDocument *xdoc, ossimString &s) const
one based
bool getProjectedSpacingAzimuth(const ossimXmlDocument *xdoc, ossimString &s) const
bool getRangeGateFirstPixel(const ossimXmlDocument *xdoc, ossimString &s) const
one based???
double y
Definition: ossimDpt.h:165
bool getImagingMode(const ossimXmlDocument *xdoc, ossimString &s) const
bool getSceneCenterRangeTime(const ossimXmlDocument *xdoc, ossimString &s) const
bool getCalFactor(const ossimXmlDocument *xdoc, std::vector< ossimString > &s) const
void set_lin_direction(int dir)
Definition: SensorParams.h:128
void set_refColumn(ossim_uint32 value)
void set_validityRangeMin(double value)
Definition: ImageNoise.h:78
bool getRangeFirstPixelTime(const ossimXmlDocument *xdoc, ossimString &s) const
void set_validityRangeMax(double value)
Definition: ImageNoise.h:88
void set_lat(double value)
bool getRangeGateLastPixel(const ossimXmlDocument *xdoc, ossimString &s) const
one based???
ossim_float64 hgt
Height in meters above the ellipsiod.
Definition: ossimGpt.h:274
void set_imageNoise(const std::vector< ImageNoise > &image_noise)
Definition: Noise.h:75
ossim_uint32 toUInt32() const
bool getRadarCenterFrequency(const ossimXmlDocument *xdoc, ossimString &s) const
bool iso8601TimeStringToCivilDate(const std::string &dataString, CivilDateTime &outputDate)
Converts date string from ISO 8601 format to CivilDateTime.
This class handles the sensor parameters.
Definition: SensorParams.h:29
bool getPolarisationMode(const ossimXmlDocument *xdoc, ossimString &s) const
bool getProjectedSpacingSlantRange(const ossimXmlDocument *xdoc, ossimString &s) const
void set_centerSceneCoord(const InfoSceneCoord &centerSceneCoord)
Definition: SceneCoord.h:76
void set_semiMinorAxis(double value)
Definition: SensorParams.h:158
bool getRadiometricCorrection(const ossimXmlDocument *xdoc, ossimString &s) const
bool getLookDirection(const ossimXmlDocument *xdoc, ossimString &s) const
std::vector< ossimRefPtr< ossimXmlNode > > ChildListType
Definition: ossimXmlNode.h:30
ossim_int32 toInt32() const
bool getMission(const ossimXmlDocument *xdoc, ossimString &s) const
bool getImageDataStrartWith(const ossimXmlDocument *xdoc, ossimString &s) const
bool initPlatformPosition(const ossimXmlDocument *xdoc, PlatformPosition *pos) const
Method to initialize PlatformPosition object from TerraSAR product xml file.
bool getAttributeValue(ossimString &value, const ossimString &name) const
This class represents an ephemeris.
Definition: Ephemeris.h:28
bool geNumberOfLayers(const ossimXmlDocument *xdoc, ossimString &s) const
bool getProductVariant(const ossimXmlDocument *xdoc, ossimString &s) const
This class represents an ImageNoise.
Definition: ImageNoise.h:30
void set_azimuthTimeUTC(ossimString value)
ossim_float64 lon
Definition: ossimGpt.h:266
unsigned int ossim_uint32
void set_polynomialDegree(unsigned int value)
Definition: ImageNoise.h:108
double toDouble() const
ossim_float64 toFloat64() const
void set_semiMajorAxis(double value)
Definition: SensorParams.h:153
bool initTiePoints(const ossimXmlDocument *xdoc, std::list< ossimGpt > &gcp, std::list< ossimDpt > &icp) const
Method to initialize image tie points from TerraSAR product xml file.
bool initSceneCoord(const ossimXmlDocument *xdoc, SceneCoord *pos) const
Method to initialize IncidenceAngles object from TerraSAR product xml file.
void set_lon(double value)
This class represents an Noise.
Definition: Noise.h:28
bool getCommonRsf(const ossimXmlDocument *xdoc, ossimString &s) const
range sampling rate
void set_nRangeLook(double look)
Definition: SensorParams.h:138
bool getCommonPrf(const ossimXmlDocument *xdoc, ossimString &s) const
bool getColumnSpacing(const ossimXmlDocument *xdoc, ossimString &s) const
bool initImageSize(const ossimXmlDocument *xdoc, ossimIpt &imageSize) const
Method to initialize image size from TerraSAR product xml file.
bool getNumberOfColumns(const ossimXmlDocument *xdoc, ossimString &s) const
bool getImageFile(const ossimXmlDocument *xdoc, ossimString &s) const
void setData(Ephemeris **data, int nbrData)
void set_timeUTC(const ossimString &value)
Definition: ImageNoise.h:68
bool getSceneCenterLat(const ossimXmlDocument *xdoc, ossimString &s) const
latitude
ossim_int32 y
Definition: ossimIpt.h:142
bool getNumberOfRows(const ossimXmlDocument *xdoc, ossimString &s) const
bool getGenerationTime(const ossimXmlDocument *xdoc, ossimString &s) const
bool getRowSpacing(const ossimXmlDocument *xdoc, ossimString &s) const
bool findFirstNode(const ossimString &path, ossimRefPtr< ossimXmlNode > node, ossimString &s)
Finds from node with path from node and initializes string.
bool getSceneCenterRefRow(const ossimXmlDocument *xdoc, ossimString &s) const
one based
double x
Definition: ossimDpt.h:164
bool getAzimuthStopTime(const ossimXmlDocument *xdoc, ossimString &s) const
bool getAcquisitionSensor(const ossimXmlDocument *xdoc, ossimString &s) const
bool getOrbitDirection(const ossimXmlDocument *xdoc, ossimString &s) const
void set_nAzimuthLook(double look)
Definition: SensorParams.h:133
void set_cornersSceneCoord(const std::vector< InfoSceneCoord > &cornersSceneCoord)
Definition: SceneCoord.h:80
ossim_int32 x
Definition: ossimIpt.h:141
ossim_float64 lat
Definition: ossimGpt.h:265
bool getPath(const ossimString &path, const ossimXmlDocument *xdoc, ossimString &s)
Gets path from doc and initializes string.
void set_prf(double prf)
Definition: SensorParams.h:73
void findNodes(const ossimString &xpath, std::vector< ossimRefPtr< ossimXmlNode > > &nodelist) const
Appends any matching nodes to the list supplied (should be empty):
void set_rangeTime(double value)
bool initGsd(const ossimXmlDocument *xdoc, ossimDpt &gsd) const
Method to initialize gsd from TerraSAR product xml file.
void set_col_direction(int dir)
Definition: SensorParams.h:123
This class represents a date.
Definition: JSDDateTime.h:30
void set_incidenceAngle(double value)
void set_referencePoint(double value)
Definition: ImageNoise.h:98
void set_sf(double sf)
Definition: SensorParams.h:78
void set_numberOfNoiseRecords(const ossim_int32 &numberOfNoiseRecords)
Definition: Noise.h:71
bool getProductType(const ossimXmlDocument *xdoc, ossimString &s) const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
void set_polynomialCoefficients(const std::vector< double > &value)
Definition: ImageNoise.h:119
bool getRadarFrequency(const ossimXmlDocument *xdoc, ossimString &s) const
bool getRangeLastPixelTime(const ossimXmlDocument *xdoc, ossimString &s) const
int ossim_int32
bool getSceneCenterAzimuthTime(const ossimXmlDocument *xdoc, ossimString &s) const