GDAL库读取Envisat ASAR数据
GDAL库本身就可以读取Envisat的图像数据,具体链接为:http://www.gdal.org/frmt_various.html#Envisat。
但是对于ASAR传感器的数据来说,GDAL在处理的时候将入射角数据没要进行处理,也就是通过GDAL提供的接口无法获取到这个信息。
ASAR数据进行辐射定标的时候,入射角信息是必须要的信息,如果通过GDAL库来对ASAR数据进行辐射定标,那么因为没法获取到入射角信息从而导致没法进行辐射定标。
ASAR数据里面入射角信息位于GEOLOCATION GRID ADS中,GDAL库在解析该部分内容时,只将GCP信息进行了解析,而对于入射角、时间等信息直接跳过,没有进行处理,所以要使用GDAL库能够读取入射角信息,最简单的方式就是将入射角信息解析到GDAL的元数据中,这样就可以在不改动任何接口的情况下来获取入射角信息。
基于上面的分析,需要对GDAL库中读取ENVISAT数据的驱动进行修改,增加解析入射角的内容,并将入射角构造成元数据信息写入Dataset中。通过分析ENVISAT驱动的源码文件envisatdataset.cpp,可以在函数ScanForGCPs_ASAR()中增加相应的代码。
增加的代码片段为:
- 解析First Line的数据
//解析入射角信息char szKey[32];char szValue[32];//解析Samplememcpy(&unValue, abyRecord + 25 + iRecord * 4, 4);int nSample = CPL_MSBWORD32(unValue);snprintf(szKey, sizeof(szKey), "FIRST_LINE_SAMPLE_%d", iRecord);snprintf(szValue, sizeof(szValue), "%d", nSample);SetMetadataItem(szKey, szValue, "GEOLOCATION_GRID_ADSR");//解析Timefloat fValue;memcpy(&fValue, abyRecord + 25 + 44 + iRecord * 4, 4);CPL_SWAP32PTR(&fValue);snprintf(szKey, sizeof(szKey), "FIRST_LINE_TIME_%d", iRecord);snprintf(szValue, sizeof(szValue), "%.6f", fValue);SetMetadataItem(szKey, szValue, "GEOLOCATION_GRID_ADSR");//解析Anglesmemcpy(&fValue, abyRecord + 25 + 88 + iRecord * 4, 4);CPL_SWAP32PTR(&fValue);snprintf(szKey, sizeof(szKey), "FIRST_LINE_ANGLES_%d", iRecord);snprintf(szValue, sizeof(szValue), "%.6f", fValue);SetMetadataItem(szKey, szValue, "GEOLOCATION_GRID_ADSR");
- 解析Last Line的数据
//解析入射角信息char szKey[32];char szValue[32];//解析Samplesnprintf(szKey, sizeof(szKey), "LAST_LINE_SAMPLE_%d", iGCP);snprintf(szValue, sizeof(szValue), "%d", nSample);SetMetadataItem(szKey, szValue, "GEOLOCATION_GRID_ADSR");//解析Timefloat fValue;memcpy(&fValue, abyRecord + 279 + 44 + iGCP * 4, 4);CPL_SWAP32PTR(&fValue);snprintf(szKey, sizeof(szKey), "LAST_LINE_TIME_%d", iGCP);snprintf(szValue, sizeof(szValue), "%.6f", fValue);SetMetadataItem(szKey, szValue, "GEOLOCATION_GRID_ADSR");//解析Anglesmemcpy(&fValue, abyRecord + 279 + 88 + iGCP * 4, 4);CPL_SWAP32PTR(&fValue);snprintf(szKey, sizeof(szKey), "LAST_LINE_ANGLES_%d", iGCP);snprintf(szValue, sizeof(szValue), "%.6f", fValue);SetMetadataItem(szKey, szValue, "GEOLOCATION_GRID_ADSR");
增加上面两部分代码之后,重新编译GDAL库,生成DLL即可。下面使用gdalinfo工具来进行测试,输出的入射角、时间信息如下:
Metadata (GEOLOCATION_GRID_ADSR):FIRST_LINE_ANGLES_0=14.296353FIRST_LINE_ANGLES_1=15.133030FIRST_LINE_ANGLES_10=22.277876FIRST_LINE_ANGLES_2=15.960590FIRST_LINE_ANGLES_3=16.779432FIRST_LINE_ANGLES_4=17.589853FIRST_LINE_ANGLES_5=18.389204FIRST_LINE_ANGLES_6=19.186239FIRST_LINE_ANGLES_7=19.972475FIRST_LINE_ANGLES_8=20.750854FIRST_LINE_ANGLES_9=21.521433FIRST_LINE_SAMPLE_0=1FIRST_LINE_SAMPLE_1=832FIRST_LINE_SAMPLE_10=8304FIRST_LINE_SAMPLE_2=1663FIRST_LINE_SAMPLE_3=2494FIRST_LINE_SAMPLE_4=3325FIRST_LINE_SAMPLE_5=4153FIRST_LINE_SAMPLE_6=4987FIRST_LINE_SAMPLE_7=5818FIRST_LINE_SAMPLE_8=6649FIRST_LINE_SAMPLE_9=7480FIRST_LINE_TIME_0=5414506.500000FIRST_LINE_TIME_1=5432814.000000FIRST_LINE_TIME_10=5637850.500000FIRST_LINE_TIME_2=5452048.500000FIRST_LINE_TIME_3=5472201.000000FIRST_LINE_TIME_4=5493261.000000FIRST_LINE_TIME_5=5515137.000000FIRST_LINE_TIME_6=5538061.500000FIRST_LINE_TIME_7=5561780.000000FIRST_LINE_TIME_8=5586363.000000FIRST_LINE_TIME_9=5611798.500000LAST_LINE_ANGLES_0=14.357172LAST_LINE_ANGLES_1=15.185051LAST_LINE_ANGLES_10=22.280605LAST_LINE_ANGLES_2=16.004770LAST_LINE_ANGLES_3=16.816580LAST_LINE_ANGLES_4=17.620653LAST_LINE_ANGLES_5=18.414248LAST_LINE_ANGLES_6=19.206030LAST_LINE_ANGLES_7=19.987459LAST_LINE_ANGLES_8=20.761423LAST_LINE_ANGLES_9=21.527927LAST_LINE_SAMPLE_0=1LAST_LINE_SAMPLE_1=832LAST_LINE_SAMPLE_10=8304LAST_LINE_SAMPLE_2=1663LAST_LINE_SAMPLE_3=2494LAST_LINE_SAMPLE_4=3325LAST_LINE_SAMPLE_5=4153LAST_LINE_SAMPLE_6=4987LAST_LINE_SAMPLE_7=5818LAST_LINE_SAMPLE_8=6649LAST_LINE_SAMPLE_9=7480LAST_LINE_TIME_0=5414506.500000LAST_LINE_TIME_1=5432814.000000LAST_LINE_TIME_10=5637850.500000LAST_LINE_TIME_2=5452048.500000LAST_LINE_TIME_3=5472201.000000LAST_LINE_TIME_4=5493261.000000LAST_LINE_TIME_5=5515137.000000LAST_LINE_TIME_6=5538061.500000LAST_LINE_TIME_7=5561780.000000LAST_LINE_TIME_8=5586363.000000LAST_LINE_TIME_9=5611798.500000
从上面的信息中可以看出,ASAR数据里面的入射角等信息都位于GEOLOCATION_GRID_ADSR元数据之下,后续只需从该元数据中解析入射角、Sample等信息进行插值即可得到辐射定标的相关参数。
GDAL库读取Envisat ASAR数据相关推荐
- 从二进制数据流中构造GDAL可以读取的图像数据
在很多时候,我们的图像数据往往都不是文件方式存储在磁盘上,而是可能从网络或者数据库中获取的是二进制的图像数据流.最简单的方式和最容易想到的方式就是将这个文件流保存到磁盘上形成一个文件,然后再使用GDA ...
- GDAL库——读取图像并提取基本信息
GDAL库是一个跨平台的栅格地理数据格式库,包括读取.写入.转换.处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持).它使用了一个单一的抽象数据模型就支持了大多数的栅格数据.这里有GDAL ...
- 从二进制数据流中构造GDAL可以读取的图像数据(C#)
在上一篇博客中,讲了一下使用GDAL从文件流中构造一个GDAL可以识别的数据来进行处理.原以为这个接口在C#中没有,仔细看了下GDAL库中源码,发现C#版本也有类似的函数,下面是GDAL库中的一个C# ...
- gdal库读取tif影像坐标
# coding=utf-8 from osgeo import gdal from gdalconst import *def readImage(img_path):data = []# 以只读方 ...
- 获取及安装EXCEL支持库ExcelDataReader,通过ExcelDataReader库读取excel表格数据
获取及安装EXCEL支持库 新建项目,通过管理NuGet程序包获取ExcelDataReader库文件 选中浏览,输入EXCEL,可用看到ExcelDataReader,ExcelDataReader ...
- Python gdal库读取tif文件
from osgeo import gdal # GDAL库主要提供对栅格数据的处理,使用抽象数据模型来解析所支持的数据格式 import filename_cut as fc import matp ...
- 使用Assimp库读取mtl文件数据
最近在使用opengl做学校的大作业,在读取模型时遇到了无法显示材质的问题,在通过研究obj与mtl文件格式时发现了原因. 由于之前一直是使用别人做好的读取类,对于有贴图的模型可以正常处理,但是这次的 ...
- 使用Assimp库读取mtl文件数据-光照模型Shader
最近在使用opengl做学校的大作业,在读取模型时遇到了无法显示材质的问题,在通过研究obj与mtl文件格式时发现了原因. 由于之前一直是使用别人做好的读取类,对于有贴图的模型可以正常处理,但是这次的 ...
- Linux配置gdal变量环境,基于GDAL库的LINUX环境下的FY-3D和FY-4A遥感数据处理
王燕婷 摘要 基于GDAL库的功能和其开源.可对栅格空间数据操作的特点,将GDAL与C++语言的完美结合,可极大得发挥其在开发遥感图像处理软件中的优势,并可跨平台应用于不同操作系统下的遥感图像数据处理 ...
最新文章
- android 根据时间获取时间对应的星期
- SAP PM入门系列20 - IH08 Equipment报表
- 露雨资源库(第一个.net2.0软件)二
- JVM-12虚拟机性能监控与故障处理工具之【JDK的可视化工具-VisualVM】
- session共享怎么做的(分布式如何实现session共享)?
- HYSBZ - 2565 最长双回文串(回文自动机)
- es6 --- Promise.all等待多个异步任务执行
- c语言 结构体 选择题,C语言结构体共用体选择题(新).doc
- 输出最长上升子序列 模型(DP)
- Python判断是否json是否包含一个key
- 更改Oracle数据库的编码格式,解决导入时ORA-12899错误
- PowerDesigner如何生产数据字典
- 应用+技术!闪马智能惊艳亮相WAIC!斩获AIWIN双料大奖!
- Java学习(8) —— 异常处理
- Java连rabbitMQ 报错 An unexpected connection driver error occured
- delphi控制excel ,在指定单元格后插入行
- PHP的环境安装基本的配置
- 备赛笔记:Opencv学习:颜色识别
- react类组件中父组件调用子组件函数
- 【java】函数式接口和Stream