GDAL库读取Envisat ASAR数据
来源:互联网 发布:maxdos是什么软件 编辑:程序博客网 时间:2024/04/28 14:36
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]; //解析Sample memcpy(&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"); //解析Time float 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"); //解析Angles memcpy(&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]; //解析Sample snprintf(szKey, sizeof(szKey), "LAST_LINE_SAMPLE_%d", iGCP); snprintf(szValue, sizeof(szValue), "%d", nSample); SetMetadataItem(szKey, szValue, "GEOLOCATION_GRID_ADSR"); //解析Time float 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"); //解析Angles memcpy(&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.296353 FIRST_LINE_ANGLES_1=15.133030 FIRST_LINE_ANGLES_10=22.277876 FIRST_LINE_ANGLES_2=15.960590 FIRST_LINE_ANGLES_3=16.779432 FIRST_LINE_ANGLES_4=17.589853 FIRST_LINE_ANGLES_5=18.389204 FIRST_LINE_ANGLES_6=19.186239 FIRST_LINE_ANGLES_7=19.972475 FIRST_LINE_ANGLES_8=20.750854 FIRST_LINE_ANGLES_9=21.521433 FIRST_LINE_SAMPLE_0=1 FIRST_LINE_SAMPLE_1=832 FIRST_LINE_SAMPLE_10=8304 FIRST_LINE_SAMPLE_2=1663 FIRST_LINE_SAMPLE_3=2494 FIRST_LINE_SAMPLE_4=3325 FIRST_LINE_SAMPLE_5=4153 FIRST_LINE_SAMPLE_6=4987 FIRST_LINE_SAMPLE_7=5818 FIRST_LINE_SAMPLE_8=6649 FIRST_LINE_SAMPLE_9=7480 FIRST_LINE_TIME_0=5414506.500000 FIRST_LINE_TIME_1=5432814.000000 FIRST_LINE_TIME_10=5637850.500000 FIRST_LINE_TIME_2=5452048.500000 FIRST_LINE_TIME_3=5472201.000000 FIRST_LINE_TIME_4=5493261.000000 FIRST_LINE_TIME_5=5515137.000000 FIRST_LINE_TIME_6=5538061.500000 FIRST_LINE_TIME_7=5561780.000000 FIRST_LINE_TIME_8=5586363.000000 FIRST_LINE_TIME_9=5611798.500000 LAST_LINE_ANGLES_0=14.357172 LAST_LINE_ANGLES_1=15.185051 LAST_LINE_ANGLES_10=22.280605 LAST_LINE_ANGLES_2=16.004770 LAST_LINE_ANGLES_3=16.816580 LAST_LINE_ANGLES_4=17.620653 LAST_LINE_ANGLES_5=18.414248 LAST_LINE_ANGLES_6=19.206030 LAST_LINE_ANGLES_7=19.987459 LAST_LINE_ANGLES_8=20.761423 LAST_LINE_ANGLES_9=21.527927 LAST_LINE_SAMPLE_0=1 LAST_LINE_SAMPLE_1=832 LAST_LINE_SAMPLE_10=8304 LAST_LINE_SAMPLE_2=1663 LAST_LINE_SAMPLE_3=2494 LAST_LINE_SAMPLE_4=3325 LAST_LINE_SAMPLE_5=4153 LAST_LINE_SAMPLE_6=4987 LAST_LINE_SAMPLE_7=5818 LAST_LINE_SAMPLE_8=6649 LAST_LINE_SAMPLE_9=7480 LAST_LINE_TIME_0=5414506.500000 LAST_LINE_TIME_1=5432814.000000 LAST_LINE_TIME_10=5637850.500000 LAST_LINE_TIME_2=5452048.500000 LAST_LINE_TIME_3=5472201.000000 LAST_LINE_TIME_4=5493261.000000 LAST_LINE_TIME_5=5515137.000000 LAST_LINE_TIME_6=5538061.500000 LAST_LINE_TIME_7=5561780.000000 LAST_LINE_TIME_8=5586363.000000 LAST_LINE_TIME_9=5611798.500000
从上面的信息中可以看出,ASAR数据里面的入射角等信息都位于GEOLOCATION_GRID_ADSR元数据之下,后续只需从该元数据中解析入射角、Sample等信息进行插值即可得到辐射定标的相关参数。
- GDAL库读取Envisat ASAR数据
- ENVISAT ASAR 数据开放共享的通知
- ENVISAT-1卫星及ASAR传感器介绍
- Gdal库读取和生成图像数据
- GDAL读取HDF数据
- GDAL读取元数据
- GDAL RasterIO读取波段数据
- 使用GDAL读取necdf数据
- Python gdal 读取栅格数据
- 关于GDAL读取MODIS卫星数据
- 使用GDAL进行栅格数据读取示例
- 关于GDAL读取MODIS卫星数据
- 关于GDAL读取MODIS卫星数据
- GDAL\OGR读取数据示例 C#版本
- 使用GDAL/OGR读取多边形数据
- C#使用GDAL读取DEM数据
- GDAL\OGR读取数据示例 C#版本
- gdal读取图像数据,构建gdi+显示
- 交叉编译工具链 <一>
- 如何用Maven创建web项目(具体步骤)
- 链接标签a 的伪类
- [数据结构]01-复杂度2 Maximum Subsequence Sum
- 测试不同格式下depth buffer的精度
- GDAL库读取Envisat ASAR数据
- OAuth的机制原理讲解及开发流程
- JavaScript事件冒泡
- logd,删除log,逻辑
- python爬虫(8)爬取tuchong网站美图
- AR智能眼镜是怎么样改变工业和工作现状的
- FishC笔记—21 讲 函数:lambda表达式
- 汽车车内CAN总线 网络安全分析及防御措施
- java设计模式--抽象工厂模式