GDAL SAR_CEOS 驱动详解:用 GDAL 读取 Radarsat / JERS-1 / ALOS-2 / ALOS-4 / ERS 的 CEOS SAR 影像
GIS遥感数据工程【免费下载链接】gdalGDAL is an open source MIT licensed translator library for raster and vector geospatial data formats.项目地址https://gitcode.com/gh_mirrors/gd/gdal点击查看免费下载导读SAR_CEOS 是 GDAL 内置默认编译启用的只读栅格驱动用于读取遵循 CEOSCommittee on Earth Observation Satellites格式的合成孔径雷达SAR影像文件支持 Radarsat、JERS-1、JAXA PALSAR-2ALOS-2、JAXA PALSAR-3ALOS-4以及 ERS 等主流 SAR 产品涵盖单视复数Single Look ComplexSLC产品。读完本文你将掌握该驱动的适用数据范围、GCP 与元数据的自动提取机制、SIR-C 与 PALSAR 极化数据的波段组织方式以及通过 GDAL 命令行工具gdalinfo、gdal_translate 等和 Python 绑定实际使用该驱动的方法并深入理解其底层实现原理实现文件为 frmts/ceos2/sar_ceosdataset.cpp。驱动概览SAR_CEOS 是 CEOS SAR 影像的只读读取器。使用时直接选择主影像文件即可驱动会自动在磁盘上查找配套的 volume directory、leader、trailer 等辅助文件。其官方文档位于 doc/source/drivers/raster/sar_ceos.rst。该驱动适用于绝大多数 Radarsat、JERS-1、JAXA PALSAR-2ALOS-2、JAXA PALSAR-3ALOS-4和 ERS 数据产品包括单视复数产品但大概率无法处理非雷达用途的 CEOS 产品如光学影像。对于这类数据通常应改用更简单的 CEOS 驱动raster.ceos。在 GDAL 驱动注册层面驱动描述名为SAR_CEOS注册逻辑见 frmts/ceos2/sar_ceosdataset.cpp#L2454-L2472通过GDALRegister_SAR_CEOS()完成注册声明GDAL_DCAP_RASTER YES只支持栅格并对外暴露GDAL_DCAP_VIRTUALIO YES即支持 虚拟文件系统 打开。驱动能力矩阵能力项支持情况说明读取只读✅驱动不支持更新GA_Update会被ReportUpdateNotSupportedByDriver拒绝见 Open()地理参考Georeferencing✅通过 GCPGround Control Points提供详见下文GCP 提取机制虚拟文件系统Virtual I/O✅GDAL_DCAP_VIRTUALIO YES支持 /vsizip/、/vsicurl/ 等影像数据类型依据 CEOS 影像描述UInt8 / Int16 / UInt16 / Int32 / UInt32 / Float32 / Float64 / CInt16 / CFloat32映射关系见 Open()适用产品与文件结构CEOS SAR 卷的五类文件CEOS 格式的 SAR 数据卷通常由五类文件组成SAR_CEOS 驱动在打开主影像文件后会按照多套命名规则尝试定位其余文件见 CeosExtension 表文件角色说明常见扩展名多套规则之一Volume Directory File卷目录文件记录卷级元信息如逻辑卷 IDvol、vdf、VOLDLeader File前导文件记录卫星、轨道、处理等元数据led、lea、slf、Sarl_01Imagery Options File影像文件主影像数据即用户直接打开的文件img、datTrailer File尾随文件部分元数据与校准记录trl、tra、stfNull Volume Directory空卷目录补充卷信息nul、nvd命名规则并非只有一种从源码可以看出驱动内置了十余套候选规则覆盖 ERS-1/2 的VDF/LF/SLC、Radarsat-1 的vdf_dat/lea_%02d/dat_%02d/tra_%02d、JERS 的VOLD/Sarl_01/Imop_%02d/Sart_01/NULL以及 ALOS-2/ALOS-4 的VOL/LED//TRLALOS2-ALOS4规则。驱动会逐一尝试这些规则并校验记录序列号从而兼容不同分发渠道的产品。打开主影像文件的过程SAR_CEOSDataset::Open()是驱动入口其识别流程为Open()头部魔数校验检查文件头 12 字节内是否包含合法的 CEOS 记录头——第 5 字节必须为0x3f或0x32第 6~8 字节必须为0xc0 0x12 0x12同时拒绝疑似小端字节序的记录索引规避某些字节序颠倒的产品导致崩溃见源码注释#1862。解析影像文件把当前文件作为 Imagery Options File 处理最多解析前 4 条记录ProcessData中max_records4随后在磁盘上按候选规则寻找其余四类文件。获取影像描述调用GetCeosSARImageDesc()从影像描述记录类型码63 192 18 18即IMAGE_OPT中读出通道数、交错方式、数据类型、每行像素数、记录字节数等字段。这些字段的具体偏移量定义在 ceosrecipe.c 的RadarSatRecipe、JersRecipe、ScanSARRecipe、PALSARRecipe等配方表中。按数据类型分流普通类型使用RawRasterBand大端字节序或SAR_CEOSRasterBand多记录每行、CHAR/LONG/ULONG/DOUBLE 等复杂情况压缩散射矩阵SIR-C使用CCPRasterBandPALSAR 复数据使用PALSARRasterBand。扫描元数据与 GCP调用ScanForMetadata()和按需的ScanForGCPs()。初始化 PAM / 概览支持 PAMPersistent Auxiliary Metadata.aux.xml与外部概览.ovr。值得注意的是CEOS 记录由 12 字节记录头记录序号 类型码 记录长度与记录体组成ProcessData()sar_ceosdataset.cpp#L2309-L2448逐条读取并校验记录序号遇到序号不连续时会报Corrupted CEOS File并失败ALOS-2/4 trailer 的填充记录情况除外以静默方式容忍。元数据提取机制SAR_CEOS 驱动会从各类头文件中捕获大量CEOS_前缀元数据。文档中给出的典型示例为CEOS_LOGICAL_VOLUME_IDEERS-1-SAR-MLD CEOS_FACILITYCDPF-RSAT CEOS_PROCESSING_FACILITYAPP CEOS_PROCESSING_AGENCYCCRS CEOS_PROCESSING_COUNTRYCANADA CEOS_SOFTWARE_IDAPP 1.62 CEOS_ACQUISITION_TIME19911029162818919 CEOS_SENSOR_CLOCK_ANGLE 90.000 CEOS_ELLIPSOIDIUGG_75 CEOS_SEMI_MAJOR 6378.1400000 CEOS_SEMI_MINOR 6356.7550000ScanForMetadata()sar_ceosdataset.cpp#L894-L1615按记录类型逐组提取字段各字段的元数据名与在记录体中的字节偏移量在源码中均有精确对应可归纳如下卷目录文件 → Volume Descriptor RecordCEOS_LOGICAL_VOLUME_ID偏移 61、CEOS_PROCESSING_FACILITY149、CEOS_PROCESSING_AGENCY141、CEOS_PROCESSING_COUNTRY129、CEOS_SOFTWARE_ID33、CEOS_PRODUCT_ID261、CEOS_VOLSET_ID77。Leader/Trailer 文件 → Dataset Summary RecordCEOS_ACQUISITION_TIME69、CEOS_ASC_DES101升降轨仅 Radarsat、CEOS_TRUE_HEADING149、CEOS_ELLIPSOID165、CEOS_SEMI_MAJOR181、CEOS_SEMI_MINOR197、CEOS_SCENE_LENGTH_KM341、CEOS_SCENE_WIDTH_KM357、CEOS_MISSION_ID397、CEOS_SENSOR_ID413、CEOS_ORBIT_NUMBER445、CEOS_PLATFORM_LATITUDE453、CEOS_PLATFORM_LONGITUDE461、CEOS_PLATFORM_HEADING469、CEOS_SENSOR_CLOCK_ANGLE477即视角 Look Angle、CEOS_INC_ANGLE485入射角、CEOS_FACILITY1047、CEOS_PIXEL_TIME_DIR1527、CEOS_LINE_SPACING_METERS1687、CEOS_PIXEL_SPACING_METERS1703。Radarsat 专用CEOS_BEAM_TYPE来自辐射补偿记录的偏移 4189CEOS_PROC_START、CEOS_PROC_STOP、CEOS_EPH_ORB_DATA_0..6、CEOS_GROUND_TO_SLANT_C0..C5、CEOS_INC_ANGLE_FIRST/LAST_RANGE来自详细处理参数记录多处偏移见源码。ERS 校准相关CEOS_INC_ANGLE_FIRST/CENTRE/LAST_RANGE、CEOS_CALIBRATION_CONSTANT_K、CEOS_GROUND_TO_SLANT_C0..C3来自 General Facility Data RecordCEOS_CALIBRATION_OFFSET来自 Radiometric Data RecordCEOS_OFFSET_A0、CEOS_GAIN_A1CEOS_GAIN_SETTINGH/V 增益设置来自 Scene Header Record。ALOS-2 / ALOS-4PALSAR-2/3专用CEOS_PLATFORM_POS_*系列轨道根数、位置/速度矢量序列点来自 Platform Position Data Record、CEOS_PLATFORM_ATT_*系列姿态角与角速率序列点来自 Attitude Data Record、CEOS_RADIOMETRIC_*辐射定标因子与 2×2 复数矩阵 DT/DR来自 Radiometric Data Record、CEOS_FACILITY_5_*Facility Related Data Record #5 中投影坐标↔像素/行、像素/行↔经纬度、经纬度↔像素/行/列的多项式系数各 25 个系数、CEOS_SLANT_RANGE_*、CEOS_DOPPLER_CENTROID_*、CEOS_AZIMUTH_FM_RATE_*来自影像处理数据记录首/中/末像素分别给出并额外读取末行记录作为_LAST_LINE后缀校验。这些偏移量定义均可在 ScanForMetadata() 中逐条核对字段为空或与产品无关时不会被写入元数据。原始记录访问ceos-*元数据域驱动还提供了一种特殊的元数据域ceos-FFF-n-n-n-n:r可访问预加载的原始 CEOS 记录GetMetadata() 实现FFF为文件标识vol卷目录、lea前导、img影像、trl尾随、nul空卷目录n-n-n-n为四字节记录类型码例如数据集摘要记录为18-10-18-20对应前导文件的DATA_SET_SUMMARY:r为可选的第 r 条记录从 0 开始计数。该域返回两个键RawRecord二进制内容中\0被替换为空格的可读文本与EscapedRecord对\0、双引号、反斜杠做转义。注意只有预加载的记录才能访问通常大部分影像记录不在其列ProcessData对影像文件仅预载前 4 条记录。GCP 提取机制SAR_CEOS 驱动通过 GCP 提供地理参考其空间参考固定为 WGS84 经纬度m_oSRS.importFromWkt(SRS_WKT_WGS84_LAT_LONG)构造函数。常规产品逐扫描行采样 15 个 GCP对于普通产品ScanForGCPs()sar_ceosdataset.cpp#L1767-L1871会通过采样每条 CEOS 扫描行前缀per-scanline superstructure中的经纬度信息来读取 15 个经纬度 GCP在每个采样扫描行的开头、中间、末尾各取一个 GCP最多 15 个覆盖大多数用途。GCP 坐标以百万分之一度×10⁻⁶存储源码中通过nLat / 1000000.0还原为度。测试 autotest/gdrivers/sar_ceos.py 中的 ALOS-2 L1.5 用例即验证了GetGCPCount() 15。ASF 产品从投影/设施记录读取角点对于来自 Alaska Satellite FacilityASF的产品驱动改为读取角点坐标ScanSAR 产品从地图投影记录Map Projection Record读取四角非 ScanSAR 产品从设施数据记录Facility Data Record读取四角。ScanForMapProjection()sar_ceosdataset.cpp#L1624-L1761会依次尝试标准 Map Projection Record、JERS 变体、ASF Map Projection Record、ASF Facility Data Record并依据不同记录类型采用不同的 GCP 顺序标准记录为 UL→UR→LR→LLASF 设施记录为 UL→LL→UR→LRASF 投影记录为 LL→LR→UR→UL最终映射到图像的四角像素位置。无 GCP 的例外情况ALOS-2/ALOS-4 的 SLC单视复数产品CEOS_VOLSET_ID以ALOS2 SAR或ALOS4 SAR开头且波段类型为GDT_CFloat32不生成 GCP——这主要是性能考虑避免在读取 zip/网络归档时因 GCP 扫描而整卷读取。测试用例test_sar_ceos_alos2_L1_1与test_sar_ceos_alos4_L1_1均断言GetGCPCount() 0。若扫描行前缀数据不足ImageDataStart 192或 ASF L1 产品的经纬度字段无效也会回退到ScanForMapProjection()。极化数据的波段组织SIR-C 与 PALSARSAR_CEOS 驱动对 SIR-C 与 PALSAR 极化数据提供了专门支持。SIR-C压缩散射矩阵CCPSIR-C 格式将极化数据存储为压缩散射矩阵形式。GDAL 在读取时实时解压输出 4 个GDT_CFloat32复波段分别对应 HH、HV、VH、VV 四个散射矩阵元素CCPRasterBand构造中设置POLARIMETRIC_INTERP元数据sar_ceosdataset.cpp#L331-L351并在波段数为 4 时给数据集写入MATRIX_REPRESENTATIONSCATTERINGOpen()。其解压公式来源为源码注释引用的 JPL dcomp 文档为ysca sqrt{ [ (Byte(2) / 254) 1.5 ] * 2^Byte(1) } // 2^Byte(1) 查 256 项幂表 afPowTable Re(SHH) Byte(3) * ysca / 127 Im(SHH) Byte(4) * ysca / 127 Re(SHV) Byte(5) * ysca / 127 Im(SHV) Byte(6) * ysca / 127 Re(SVH) Byte(7) * ysca / 127 Im(SVH) Byte(8) * ysca / 127 Re(SVV) Byte(9) * ysca / 127 Im(SVV) Byte(10) * ysca / 127即每个像素 10 个有符号字节构成一组CCPRasterBand::IReadBlock()sar_ceosdataset.cpp#L379-L480在读取块时逐像素完成上述解算。PALSAR3×3 厄米协方差矩阵PALSAR 格式PALSAR-1/2/3即 ALOS/ALOS-2/ALOS-4的波段与 3×3 厄米协方差矩阵的元素几乎一一对应完整描述见 ERSDAC-VX-CEOS-004A 文档像素存储见其 193 页当前仓库源码注释引用的是 PALSAR-2 与 PALSAR-3 的官方产品格式说明 PDF。GDAL 在读取时将其转换为复数浮点协方差矩阵波段波段与散射矩阵元素 HH、HVVH、VV 的对应约定如下注意非对角元素为复数对角元素为实数但统一以复波段表示波段含义类型公式Band 1Covariance_11Float32HH·conj(HH)Band 2Covariance_12CFloat32√2·HH·conj(HV)Band 3Covariance_13CFloat32HH·conj(VV)Band 4Covariance_22Float322·HV·conj(HV)Band 5Covariance_23CFloat32√2·HV·conj(VV)Band 6Covariance_33Float32VV·conj(VV)波段身份同时反映在元数据中PALSARRasterBand构造函数为每个波段设置POLARIMETRIC_INTERP依次为Covariance_11 / Covariance_22 / Covariance_33 / Covariance_12 / Covariance_13 / Covariance_23sar_ceosdataset.cpp#L492-L515当波段数为 6 时数据集写入MATRIX_REPRESENTATIONSYMMETRIZED_COVARIANCEOpen()。源码中PALSARRasterBand::IReadBlock()的注释sar_ceosdataset.cpp#L581-L596明确了各波段的换算逻辑Covariance_11 HH*conj(HH) —— 原样 Covariance_22 2*HV*conj(HV) —— 乘 2 Covariance_33 VV*conj(VV) —— 原样 Covariance_12 sqrt(2)*HH*conj(HV) —— 乘 sqrt(2) Covariance_13 HH*conj(VV) —— 原样 Covariance_23 sqrt(2)*HV*conj(VV) —— 取共轭后乘 sqrt(2)对应实现sar_ceosdataset.cpp#L598-L636Band 2 实部与虚部整体乘 2Band 4 乘 √2四舍五入Band 6 的实部乘 √2、虚部取反后乘 √2即共轭后放大 √2。实战如何使用 SAR_CEOS 驱动1. 检查数据可读性使用gdalinfo查看影像基本信息、GCP 与元数据gdalinfo ottawa_patch.img # 或通过虚拟文件系统直接打开 zip 内的 ALOS-2 SLC 影像 gdalinfo /vsizip//vsicurl/https://example.com/ud2_L1.1_CEOS/IMG-HH-ALOS2403684200-200620-UBSL1.1__D输出中将包含CEOS_系列元数据、GCP Projection WGS84、15 个或 0 个GCP 列表以及影像尺寸与波段数。2. 查看极化波段对于 PALSAR 极化产品6 波段协方差矩阵可用gdalinfo -stats或 Python 查看各波段类型与POLARIMETRIC_INTERPgdalinfo -mdd all PALSAR_image.dat3. 转换与地理配准gdal_translate可直接将 SLC/复数影像转换为 GeoTIFF 等格式复数波段请选用支持复数的目标格式如 GeoTIFF 的 CFloat32gdal_translate -of GTiff -ot Float32 ottawa_patch.img out.tif若需利用 GCP 做地理配准可配合gdalwarp使用GCP 位于 WGS84 经纬度需先转换为可用的地理参考gdalwarp -t_srs EPSG:4326 -order 1 -r bilinear ottawa_patch.img georef.tif4. Python 绑定用法通过osgeo.gdal打开示例路径来自测试数据 autotest/gdrivers/data/sar_ceosfrom osgeo import gdal ds gdal.Open(autotest/gdrivers/data/sar_ceos/ottawa_patch.img) print(Driver:, ds.GetDriver().ShortName) # SAR_CEOS print(Size:, ds.RasterXSize, x, ds.RasterYSize) print(Bands:, ds.RasterCount) print(GCPs:, ds.GetGCPCount()) for k, v in sorted(ds.GetMetadata().items()): print(k, , v) band ds.GetRasterBand(1) print(DataType:, gdal.GetDataTypeName(band.DataType))测试与验证SAR_CEOS 驱动有专门的自动化测试 autotest/gdrivers/sar_ceos.py可作为理解驱动行为的最佳参考test_sar_ceos_app_1用 ottawa_patch.img 验证打开test_sar_ceos_asf_2用 ASF 产品 R1_26161_FN1_F164.D 验证 ASF 命名与 GCP 逻辑test_sar_ceos_alos2_L1_1/test_sar_ceos_alos2_L1_5/test_sar_ceos_alos4_L1_1标注pytest.mark.network的网络测试通过/vsizip//vsicurl/从 JAXA 官方示例数据站点远程打开 ALOS-2 L1.1CFloat32 SLC无 GCP、ALOS-2 L1.5UInt16 地理编码产品15 GCP与 ALOS-4 L1.1CFloat32 SLC无 GCP产品并逐项断言全部CEOS_元数据字典——这是校验驱动元数据提取正确性的黄金基准。另外frmts/ceos2/ceosrecipe.c 中的配方表Recipe定义了不同产品Radarsat、JERS、ScanSAR、SIR-C、PALSAR-ALOS在影像记录内各字段的偏移与类型是理解驱动如何从二进制记录中解析出影像描述的关键frmts/ceos2/ceos.h 则定义了 CEOS 记录头12 字节、文件角色常量、交错方式与数据类型常量。小结SAR_CEOS 驱动是 GDAL 中处理 CEOS 格式星载 SAR 数据的主力入口它对 Radarsat、JERS-1、ALOS-2PALSAR-2、ALOS-4PALSAR-3与 ERS 的 SLC/地理编码产品提供只读支持通过自动多套命名规则定位五类卷文件从各头文件中提取丰富的CEOS_*元数据按扫描行采样或按 ASF 记录生成 GCP并为 SIR-C 与 PALSAR 极化数据提供散射矩阵/协方差矩阵层面的实时解译。使用时可仅传入主影像文件配合 gdalinfo、gdal_translate、gdalwarp 与 Python 绑定即可完成查看、转换与配准官方文档与自动化测试文件是进一步深入的最佳参考。赞分享GIS遥感数据工程【免费下载链接】gdalGDAL is an open source MIT licensed translator library for raster and vector geospatial data formats.项目地址https://gitcode.com/gh_mirrors/gd/gdal点击查看免费下载相关推荐GDAL JAXA PALSAR 驱动详解读取 ALOS PALSAR L1.1/L1.5 处理产品的完整指南GDAL JAXA PALSAR 驱动详解读取 ALOS PALSAR L1.1/L1.5 处理产品的完整指南 导读 本指南围绕 GDAL 栅格驱动家族中的GIS遥感数据工程GDAL 的 ERS 栅格驱动深度解析读写 ERMapper .ERS 头文件格式GDAL 的 ERS 栅格驱动深度解析读写 ERMapper .ERS 头文件格式 GDAL 内置的 ERS 栅格驱动用于读取和写入 ERMapper 生态中GIS遥感数据工程oh-my-codex 运行时模型元数据清理用 reasoningEffort 取代遗留模型别名haiku/sonnet/opusoh my codex 运行时模型元数据清理用 reasoningEffort 取代遗留模型别名haiku/sonnet/opus 导读 本篇技术指南围绕GIS遥感数据工程上一篇DirectX-Headers多平台支持Windows、Linux与WSL开发全攻略下一篇AutoGen多智能体框架全攻略从架构到实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考