示例#1
0
/* Helpful functions */
int firstRecordLen(char *ceosName)
{
  FILE *f;
  struct HEADER h;

  f=FOPEN(ceosName,"rb");    /*Open file.*/
  ASF_FREAD(&h,1,12,f);          /*Read first CEOS header.*/
  FCLOSE(f);                 /*Close file*/
  return bigInt32(h.recsiz); /*put recsiz in proper endian format & return*/
}
示例#2
0
meta_parameters *open_terrasar(const char *data_name, const char *meta_name,
			       const char *band, int multilook,
			       ClientInterface *client)
{
  ReadTerrasarClientInfo *info = MALLOC(sizeof(ReadTerrasarClientInfo));
  
  terrasar_meta *terrasar = read_terrasar_meta(meta_name);
  meta_parameters *meta = terrasar2meta(terrasar);
  if (!meta)
    return NULL;
  
  client->read_client_info = info;
  client->read_fn = read_terrasar_client;
  client->thumb_fn = get_terrasar_thumbnail_data;
  client->free_fn = free_terrasar_client_info;
  client->data_type = GREYSCALE_FLOAT;
  
  info->fp = fopen(data_name, "rb");
  if (!info->fp) {
    asfPrintWarning("Failed to open Terrasar file %s: %s\n",
		    data_name, strerror(errno));
    return FALSE;
  }

  FILE *fpIn = info->fp;
  
  unsigned char intValue[4];
  int asfv, aslv, rsfv, rslv;
  FREAD(&intValue, 1, 4, fpIn);
  //int bytes_in_burst = bigInt32(intValue);
  FREAD(&intValue, 1, 4, fpIn);
  //int range_sample_relative_index = bigInt32(intValue);;
  FREAD(&intValue, 1, 4, fpIn);
  int range_samples = bigInt32(intValue);
  FREAD(&intValue, 1, 4, fpIn);
  int azimuth_samples = bigInt32(intValue);
  FREAD(&intValue, 1, 4, fpIn);
  //int burst_index = bigInt32(intValue);
  FREAD(&intValue, 1, 4, fpIn);
  int rangeline_total_number_bytes = bigInt32(intValue);
  FREAD(&intValue, 1, 4, fpIn);
  int total_number_lines = bigInt32(intValue);
  FREAD(&intValue, 1, 4, fpIn);
  
  // Check for the first and last azimuth and range pixel
  int kk;
  asfv = 1; // azimuth sample first valid
  FSEEK(fpIn, 2*rangeline_total_number_bytes+8, SEEK_SET);
  for (kk=2; kk<range_samples; kk++) {
    FREAD(&intValue, 1, 4, fpIn);
    if (bigInt32(intValue) > asfv)
      asfv = bigInt32(intValue);
  }
  
  aslv = azimuth_samples; // azimuth sample last valid
  FSEEK(fpIn, 3*rangeline_total_number_bytes+8, SEEK_SET);
  for (kk=2; kk<range_samples; kk++) {
    FREAD(&intValue, 1, 4, fpIn);
    if (bigInt32(intValue) < aslv)
      aslv = bigInt32(intValue);
  }
  
  rsfv = 1; // range sample first valid
  rslv = range_samples; // range sample last valid
  for (kk=4; kk<total_number_lines; kk++) {
    FSEEK(fpIn, 4*rangeline_total_number_bytes, SEEK_SET);
    FREAD(&intValue, 1, 4, fpIn);
    if (bigInt32(intValue) > rsfv)
      rsfv = bigInt32(intValue);
    FREAD(&intValue, 1, 4, fpIn);
    if (bigInt32(intValue) < rslv)
      rslv = bigInt32(intValue);
  }
 
  info->aslv = aslv;
  info->asfv = asfv;
  info->rslv = rslv;
  info->rsfv = rsfv;
  info->header = (asfv+2)*rangeline_total_number_bytes + 8;
  info->width = rangeline_total_number_bytes;
  info->multilook = multilook;
 
  meta->general->line_count = aslv - asfv + 1;
  meta->general->sample_count = rslv - rsfv + 1;

  return meta;
}