2013-03-20 4 views
1

Вопрос о названии. Повторное использование GDAL-считывания данных Terrasar-X и деления мнимых и реальных частей. Подобно программному NEST, меня смущает много. Любая помощь и предложение будут высоко оценены. мой метод осуществления:как читать данные Terrasar-X с использованием GDAL

 string dataPath = @"E:\SARDATA\SampleData\TerraSar-X\SO_000009564_0002_1\SO_000009564_0002_1\TSX1_SAR__SSC______HS_S_SRA_20090223T204240_20090223T204241\TSX1_SAR__SSC______HS_S_SRA_20090223T204240_20090223T204241.xml"; 
     Gdal.AllRegister(); 
     Dataset dataset = Gdal.OpenShared(dataPath, Access.GA_ReadOnly); 
     Band band = dataset.GetRasterBand(1); 
     int xSize = band.XSize; 
     int ySize = band.YSize; 
     short[] realArray = new short[xSize * ySize]; 
     short[] imgArray = new short[xSize * ySize]; 
     if (band.DataType == DataType.GDT_CInt16) 
     { 
      short[] tmpArray = new short[2 * xSize * ySize]; 
      band.ReadRaster(0, 0, xSize, ySize, tmpArray, xSize, ySize, 0, 0); 
      for (int i = 0; i < tmpArray.Length;i++) 
      { 
       realArray[i] = tmpArray[i/2]; 
       imgArray[i] = tmpArray[i/2 + 1]; 
      } 
      tmpArray = null; 
     } 
+0

В чем вопрос/ошибка? –

+0

значения в каждом массиве правильны сначала, но неправильны в концевой части каждой строки, когда они получены как нуль или ноль. – xwhsky

ответ

0

Я думаю, что у меня есть решение вашей проблемы. Я также попытался прочитать сложный TerraSAR-X, и я столкнулся с вашим ответом.

Сложный формат файла объединяет два Int16 для CInt16 и два Int32 для CInt32. Чтобы правильно прочитать сложные данные, вы должны разделить Integer на два шорта. Правильное чтение должно выглядеть следующим образом:

string dataPath = @"E:\SARDATA\SampleData\TerraSar-X\SO_000009564_0002_1\SO_000009564_0002_1\TSX1_SAR__SSC______HS_S_SRA_20090223T204240_20090223T204241\TSX1_SAR__SSC______HS_S_SRA_20090223T204240_20090223T204241.xml"; 
    Gdal.AllRegister(); 
    Dataset dataset = Gdal.OpenShared(dataPath, Access.GA_ReadOnly); 
    Band band = dataset.GetRasterBand(1); 
    int xSize = band.XSize; 
    int ySize = band.YSize; 
    short[] realArray = new short[xSize * ySize]; 
    short[] imgArray = new short[xSize * ySize]; 
    if (band.DataType == DataType.GDT_CInt16) 
    { 
     short[] tmpArray = new short[xSize * ySize]; 
     band.ReadRaster(0, 0, xSize, ySize, tmpArray, xSize, ySize, 0, 0); 
     for (int i = 0; i < tmpArray.Length;i++) 
     { 
      int value = tmpArray[i]; 
      realArray[i] = (short)(value>>16); 
      imgArray[i] = (short)(value & 0xffff); 
     } 
     tmpArray = null; 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^