On 28 February 2012 16:06, Even Rouault <[email protected]>wrote:

>
> I've skimmed quickly through the driver code and if you are lucky, it is
> probably just a matter of changing a few lines (well, I can be wrong).
>

Even

I've produced a new patch for the satellite IDs based on the documentation.
(diff -c from the 1.9.0 source)

Andrew
*** l1bdataset.cpp.orig	2012-01-04 07:03:28.000000000 +0000
--- l1bdataset.cpp	2012-03-06 15:03:52.241101854 +0000
***************
*** 47,52 ****
--- 47,53 ----
  
  enum {          // Spacecrafts:
      TIROSN,     // TIROS-N
+     // NOAA are given a letter before launch and a number after launch
      NOAA6,      // NOAA-6(A)
      NOAAB,      // NOAA-B
      NOAA7,      // NOAA-7(C)
***************
*** 61,67 ****
      NOAA16,     // NOAA-16(L)
      NOAA17,     // NOAA-17(M)
      NOAA18,     // NOAA-18(N)
!     METOP2      // METOP-2(A)
  };
  
  enum {          // Product types
--- 62,72 ----
      NOAA16,     // NOAA-16(L)
      NOAA17,     // NOAA-17(M)
      NOAA18,     // NOAA-18(N)
!     NOAA19,     // NOAA-19(N')
!     // MetOp are given a number before launch and a letter after launch
!     METOP2,     // METOP-A(2)
!     METOP1,     // METOP-B(1)
!     METOP3,     // METOP-C(3)
  };
  
  enum {          // Product types
***************
*** 1009,1014 ****
--- 1014,1020 ----
               eProcCenter = UNKNOWN_CENTER;
  
          // Determine the spacecraft name
+ 		// See http://www.ncdc.noaa.gov/oa/pod-guide/ncdc/docs/klm/html/c8/sec83132-2.htm
          int iWord = CPL_MSBWORD16( *(GUInt16 *)
              (abyRecHeader + L1B_NOAA15_HDR_REC_ID_OFF) );
          switch ( iWord )
***************
*** 1025,1041 ****
              case 7:
                  eSpacecraftID = NOAA18;
                  break;
!             /* FIXME: find appropriate samples and test these two cases:
!              * case 8:
!                 eSpacecraftID = NOAA-N';
                  break;
              case 11:
!                 eSpacecraftID = METOP-1;
!                 break;*/
              case 12:
-             case 14:    // METOP simulator (code used in AAPP format)
                  eSpacecraftID = METOP2;
                  break;
              default:
  #ifdef DEBUG
                  CPLDebug( "L1B", "Unknown spacecraft ID \"%d\".", iWord );
--- 1031,1052 ----
              case 7:
                  eSpacecraftID = NOAA18;
                  break;
!             case 8:
!                 eSpacecraftID = NOAA19;
                  break;
              case 11:
!                 eSpacecraftID = METOP1;
!                 break;
              case 12:
                  eSpacecraftID = METOP2;
                  break;
+             // METOP3 is not documented yet
+             case 13:
+                 eSpacecraftID = METOP3;
+                 break;
+             case 14:
+                 eSpacecraftID = METOP3;
+                 break;
              default:
  #ifdef DEBUG
                  CPLDebug( "L1B", "Unknown spacecraft ID \"%d\".", iWord );
***************
*** 1155,1162 ****
          case NOAA18:
              pszText = "NOAA-18(N)";
              break;
!         case METOP2:
!             pszText = "METOP-2(A)";
              break;
          default:
              pszText = "Unknown";
--- 1166,1182 ----
          case NOAA18:
              pszText = "NOAA-18(N)";
              break;
!          case NOAA19:
!             pszText = "NOAA-19(N')";
!             break;
!        case METOP2:
!             pszText = "METOP-A(2)";
!             break;
!        case METOP1:
!             pszText = "METOP-B(1)";
!             break;
!        case METOP3:
!             pszText = "METOP-C(3)";
              break;
          default:
              pszText = "Unknown";
***************
*** 1734,1740 ****
          poDS->SetBand( iBand, new L1BRasterBand( poDS, iBand ));
          
          // Channels descriptions
!         if ( poDS->eSpacecraftID >= NOAA6 && poDS->eSpacecraftID <= METOP2 )
          {
              if ( !(i & 0x01) && poDS->iChannelsMask & 0x01 )
              {
--- 1754,1760 ----
          poDS->SetBand( iBand, new L1BRasterBand( poDS, iBand ));
          
          // Channels descriptions
!         if ( poDS->eSpacecraftID >= NOAA6 && poDS->eSpacecraftID <= METOP3 )
          {
              if ( !(i & 0x01) && poDS->iChannelsMask & 0x01 )
              {
***************
*** 1751,1757 ****
              if ( !(i & 0x04) && poDS->iChannelsMask & 0x04 )
              {
                  if ( poDS->eSpacecraftID >= NOAA15
!                      && poDS->eSpacecraftID <= METOP2 )
                      if ( poDS->iInstrumentStatus & 0x0400 )
                          poDS->GetRasterBand(iBand)->SetDescription( apszBandDesc[7] );
                      else
--- 1771,1777 ----
              if ( !(i & 0x04) && poDS->iChannelsMask & 0x04 )
              {
                  if ( poDS->eSpacecraftID >= NOAA15
!                      && poDS->eSpacecraftID <= METOP3 )
                      if ( poDS->iInstrumentStatus & 0x0400 )
                          poDS->GetRasterBand(iBand)->SetDescription( apszBandDesc[7] );
                      else
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to