【问题标题】:how to read Terrasar-X data using GDAL如何使用 GDAL 读取 Terrasar-X 数据
【发布时间】:2013-03-20 17:22:38
【问题描述】:

题主问题。最近用GDAL读取Terrasar—X数据,虚部和实部之类的软件NEST让我很困惑。任何帮助和建议将不胜感激。以下是我的实现方法:

        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;
        }

【问题讨论】:

  • 问题/错误是什么?
  • 每个数组中的值首先正确,但在每行的末尾部分错误,而获得为空或零。

标签: c# gdal sar


【解决方案1】:

我想我有办法解决你的问题。我还尝试阅读复杂的 TerraSAR-X 并遇到了您的答案。

复杂文件格式为 CInt16 合并了两个 Int16,为 CInt32 合并了两个 Int32。 要正确读取复杂数据,您应该将 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;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多