GDAL AAIGrid 栅格驱动完全指南:Arc/Info ASCII Grid 读写、数据类型探测与配置选项解析
GIS遥感数据工程【免费下载链接】gdalGDAL is an open source MIT licensed translator library for raster and vector geospatial data formats.项目地址https://gitcode.com/gh_mirrors/gd/gdal点击查看免费下载AAIGrid 是 GDAL 内置的栅格驱动用于读写 Arc/Info ASCII Grid.asc格式。该格式是 Arc/Info Grid 栅格的纯文本交换格式常以.asc文件加一个可选的.prj投影文件成对出现通常由 Arc/Info 的ASCIIGRID命令生成。通过本指南你将掌握 AAIGrid 的完整读写能力、驱动内置的数据类型自动探测逻辑、三个关键配置选项AAIGRID_DATATYPE、FORCE_CELLSIZE、DECIMAL_PRECISION的实战用法以及从源码与测试层面理解驱动行为与常见边界情况。驱动概览与适用场景AAIGrid 驱动支持读取与写入并支持读取仿射地理配准变换affine georeferencing transform以及部分投影信息。它适合以下典型场景与 ArcGIS / ArcInfo 之间交换单波段栅格数据用gdal_translate或 Python API 快速将 GeoTIFF 等格式转为可读的 ASCII 文本网格处理 Golden Surfer 等第三方软件生成的特殊 ASCII Grid 变体含dx/dy参数需要将 NODATA 值原样保留并保持与波段数据类型一致。从驱动注册代码frmts/aaigrid/aaigriddataset.cpp可以看到该驱动的能力元数据元数据项值驱动名AAIGrid长名Arc/Info ASCII Grid默认扩展名asc支持创建数据类型Byte、UInt16、Int16、Int32、Float32打开选项DATATYPE可选Int32/Float32/Float64创建选项FORCE_CELLSIZE、DECIMAL_PRECISION、SIGNIFICANT_DIGITS虚拟 I/O/vsimem、/vsigzip 等支持该驱动默认随 GDAL 编译构建built-in by default无需额外依赖。测试文件位于 autotest/gdrivers/aaigrid.py测试数据位于 autotest/gdrivers/data/aaigrid。AAIGrid 文件结构头信息与数据体AAIGrid 文件由头信息块和逐行栅格数据两部分组成。一个典型的文件示例如下取自测试数据 autotest/gdrivers/data/aaigrid/pixel_per_line.ascncols 15 nrows 12 xllcorner 0.100000E06 yllcorner 0.650000E06 cellsize .500E02 nodata_value -99999 .000E00 .000E00 ...各头字段的含义与驱动解析行为如下ncols/nrows栅格列数、行数。驱动通过 ParseHeader() 解析并用GDALCheckDatasetDimensions()校验尺寸合法性xllcorner/yllcorner左下角坐标栅格像元为面状像元对应 GDAL 的GDALMD_AREA_OR_POINTArea语义。驱动在 ParseHeader() 中将其转换为 GDAL 的左上角起始仿射变换yorig yllcorner nrows * cellsize且yscale取负xllcenter/yllcenter左下角像元中心坐标点状像元对应GDALMD_AREA_OR_POINTPoint。驱动在解析时会减去半个像元尺寸得到角点坐标ParseHeader()cellsize像元尺寸。驱动假定像元为正方形dfCellDX dfCellDY cellsizedx/dy非正方形像元时分别表示 X、Y 方向的像元尺寸见下文FORCE_CELLSIZE章节NODATA_value无数据值读取时会以与波段数据相同的格式保留详见「NODATA 保留与数据类型探测」章节。头字段是大小写不敏感的驱动注册与Identify()使用STARTS_WITH_CI不区分大小写匹配ncols、nrows、xllcorner、yllcorner、cellsize、dx、dy等关键字见 Identify()。实际测试数据 autotest/gdrivers/data/aaigrid/pixel_per_line.asc 中nodata_value即为小写可正常识别。读取行为与打开选项自动识别与打开流程AAIGDataset::Open()先调用Identify()检查文件头部是否出现ncols、nrows、xllcorner等关键字且头信息至少 40 字节随后由CommonOpen()完成完整打开流程CommonOpen()主要步骤包括解析头信息得到栅格尺寸、像元尺寸与坐标原点构建 GDAL 仿射变换寻找真实数据起始位置跳过头信息块自动探测数据类型见下一节创建AAIGRasterBand波段对象尝试加载同名.prj投影文件先尝试.prj在大小写敏感文件系统上失败时再尝试.PRJ见 CommonOpen()初始化 PAMTryLoadXML()并检查外部概览overview。AAIGRasterBand在构造时为每一行记录文件偏移panLineOffset数组读取时通过Seek()Getc()按行定位支持随机块读取IReadBlock()。同时CommonOpen()对声明的尺寸做了安全校验若ncols/nrows超过 1000 万、或像素总数超过 10 亿且文件实际大小不足以容纳每个像元至少 2 字节将报错Too large raster dimension ... compared to file size防止异常分配内存对应测试test_aaigrid_open_file_with_large_dimension_but_small。数据类型自动探测与 AAIGRID_DATATYPE默认情况下GDAL 返回的 AAIGRID 数据集数据类型是自动探测的对于含浮点值的网格返回Float32否则返回Int32。探测逻辑结合了 NODATA 值格式与栅格数据内容具体见 ParseHeader() 与 CommonOpen()解析NODATA_value时若其含有小数点、逗号、为 NaN、或超出 32 位整数范围INT_MIN~INT_MAX则判定为Float32若绝对值小于FLT_MIN或大于FLT_MAX如2.2250738585072014e-308这样的DBL_MIN则升级为Float64若头信息不足以判定则扫描真实数据块一旦发现.、,、e、E字符即判定为浮点型CommonOpen()无数据值时浮点值会经MapNoDataToFloat()转换确保 NoData 与 Float32 表达一致并夹紧到 float 范围、保留 ±inf 与 NaNaaigriddataset.cpp。自动探测的准确性可由测试验证test_aaigrid_6NODATA 含小数点 →Float32、test_aaigrid_6bisNODATA 为整数 →Int32、test_aaigrid_15NODATA 等于DBL_MIN→Float64。当需要显式指定数据类型时可通过两种方式1. 配置选项配置选项作用于所有打开操作AAIGRID_DATATYPEFloat642. 打开选项open option作用于单次打开gdal.Open(float64.asc, open_options[DATATYPEFloat64])二者的可选值均为Int32、Float32、Float64。源码中配置选项优先、打开选项兜底CommonOpen()若传入了三者之外的非法值驱动会发出Unsupported value for AAIGRID_DATATYPE警告并回退为Int32。建议当 NODATA 或数据值超出单精度 float 精度范围时务必显式设置AAIGRID_DATATYPEFloat64否则自动探测可能降为Float32丢失精度。测试 test_aaigrid_10 演示了通过配置选项与打开选项将默认探测为 Float32 的float64.asc强制按 Float64 读取并能精确还原-1.234567890123的 NODATA 值与数据极值。NODATA 保留与特殊取值读取时网格中的 NODATA 值以与波段数据相同的格式保留。驱动支持以下特殊情形NODATA_value null这是 D12 软件特有的写法。读取时按数据类型映射为-FLT_MAXFloat32或-DBL_MAXFloat64测试见 test_aaigrid_null 与 test_aaigrid_null_float64NODATA 为 NaN数据体中以nan开头也能被识别为数据而非头信息CommonOpen()测试见 test_aaigrid_nodata_nan数据体以nan开头正常读取test_aaigrid_starting_with_nan逗号作小数分隔符某些区域设置下使用逗号驱动同样支持对应 test_aaigrid_comma测试数据 pixel_per_line_comma.asc。写入行为与创建选项AAIGrid 驱动通过CreateCopy()实现写入CreateCopy()本质是「复制创建」从源数据集读取数据并写出 ASCII 网格。写入时有如下约束与默认行为仅支持单波段多波段输入会报错AAIG driver doesnt support %d bands. Must be 1 band.源数据类型Byte、Int16、UInt16、Int32按整数写出其他类型按浮点写出并以%.20g作为默认格式见下文地理参考若源数据集有投影会尝试写出同名的.prj文件ESRI WKT 格式写入的像元坐标为左下角yllcorner与 GDAL 的左上角语义自动换算且支持 south-up 栅格gt.yscale 0测试见 test_aaigrid_write_south_up_rasterNODATA 写出若源波段有 NODATA 值会写入NODATA_value行整数数据按整数写出浮点数据按当前精度格式写出CreateCopy()浮点小数点的兜底为保证生成的浮点文件可被正确识别驱动确保整行输出中至少出现一个小数点——若某值格式化为纯整数且非 inf/NaN会自动追加.0对应 issue #6060测试 test_aaigrid_14。写入基本用法gdal_translate -of AAIGrid input.tif output.asc或 Python APIfrom osgeo import gdal src gdal.Open(input.tif) out gdal.GetDriverByName(AAIGrid).CreateCopy( output.asc, src, options[FORCE_CELLSIZENO, DECIMAL_PRECISION3] )FORCE_CELLSIZE处理非正方形像元当写入的像元不是正方形X 与 Y 方向地理尺寸不同时默认会输出dx与dy参数替代cellsize。这类文件可以在 Golden Surfer 中使用但大多数其他 ASCII Grid 读取程序包括 ArcGIS不支持dx/dy参数。判断逻辑位于 CreateCopy()当|xscale yscale|或|xscale - yscale|小于1e-7时视为正方形像元、输出cellsize否则输出dx/dy。驱动在写出dx/dy变体时还会发出警告Producing a Golden Surfer style file with DX and DY instead of CELLSIZE since the input pixels are non-square. Use the FORCE_CELLSIZETRUE creation option to force use of DX for even though this will be distorted. Most ASCII Grid readers (ArcGIS included) do not support the DX and DY parameters.创建选项取值YES/NOTRUE/FALSE亦可通过CPLTestBool解析。FORCE_CELLSIZEYES强制以 X 方向像元尺寸写入cellsize即使 Y 方向尺寸不同这会造成一定形变更稳妥的替代方案是先将输入重采样为正方形像元再写入避免任何兼容性问题。测试 test_aaigrid_7 使用 nonsquare.vrt像元 60×50验证了非正方形像元的 CreateCopy 行为。DECIMAL_PRECISION 与 SIGNIFICANT_DIGITS控制浮点输出精度写入浮点值时驱动默认使用%.20g格式约 20 位有效数字可最大限度保留 double 精度。可通过两个创建选项自定义创建选项取值说明DECIMAL_PRECISION非负整数指定输出的小数位数内部以%.Nf格式输出例如DECIMAL_PRECISION3输出 3 位小数如-99999.000SIGNIFICANT_DIGITS非负整数指定输出的有效数字位数内部以%.Ng格式输出例如SIGNIFICANT_DIGITS3输出 3 位有效数字如-1e05两者的精度格式构造见 CreateCopy()。需要说明的是DECIMAL_PRECISION来自 C 标准库printf语义官方文档建议参考 printf 参考手册了解其精确行为。冲突处理若同时指定两者驱动发出警告Conflicting precision arguments, using DECIMAL_PRECISION并以DECIMAL_PRECISION为准CreateCopy()。这两个选项的 NODATA 写出精度也有专门测试test_aaigrid_9DECIMAL_PRECISION2写浮点数据test_aaigrid_11SIGNIFICANT_DIGITS2写浮点数据test_aaigrid_12DECIMAL_PRECISION3时 NODATA 输出为-99999.000test_aaigrid_13SIGNIFICANT_DIGITS3时 NODATA 输出为-1e05。实践建议默认%.20g精度最高但文件更大若追求文件紧凑且对精度要求不高可设置DECIMAL_PRECISION6或SIGNIFICANT_DIGITS7与 Float32 精度匹配来压缩输出体积。驱动能力汇总与限制能力说明读取支持含仿射地理配准与部分投影依赖.prj写入CreateCopy支持单波段地理参考支持.prj读取 / 写出虚拟 I/O支持/vsimem/等虚拟文件系统test_aaigrid_8外部概览支持通过oOvManager初始化CommonOpen()投影支持范围相当有限仅能通过.prj文件ESRI 风格 WKT读取部分投影关于投影支持需要特别注意驱动通过importFromESRI()解析.prj文件仅覆盖常见的 ESRI 投影定义地理坐标单位为秒UnitsDS时还会自动将坐标除以 3600 换算为度CommonOpen()。官方文档注明如有额外可用的.prj样例可提供给维护者以扩充支持列表。.prj与主文件大小写不匹配的情况也有测试覆盖test_aaigrid_5测试数据 case_sensitive.ASC 与 case_sensitive.PRJ。此外AAIGrid 驱动源码与 GRASS ASCII Grid 驱动GRASSASCIIGrid、ISGInternational Service for the Geoid驱动共享同一实现文件 frmts/aaigrid/aaigriddataset.cpp通过GridFormat枚举区分见 aaigriddataset.h但三者是独立的驱动。Arc/Info二进制Grid 格式请使用 raster.aig 驱动文档 对应的 AIG 驱动。源码导航从文档到实现若希望深入阅读驱动实现建议按以下顺序驱动注册与元数据frmts/aaigrid/aaigriddataset.cpp文件识别Identifyfrmts/aaigrid/aaigriddataset.cpp头信息解析与数据类型判定ParseHeader()打开主流程CommonOpen()按行读取IReadBlock()写入主流程与精度选项CreateCopy()类声明frmts/aaigrid/aaigriddataset.h自动化测试autotest/gdrivers/aaigrid.py测试数据在 autotest/gdrivers/data/aaigrid。小结AAIGrid 驱动以极小的实现成本为 GDAL 提供了 Arc/Info ASCII Grid 格式的双向支持读取时自动识别头字段、自动探测数据类型并保留 NODATA写入时通过FORCE_CELLSIZE解决非正方形像元兼容问题、通过DECIMAL_PRECISION/SIGNIFICANT_DIGITS精确控制浮点输出精度。掌握了这些选项与源码行为即可在 ArcGIS 生态与 GDAL 工作流之间无缝交换 ASCII 网格数据。赞分享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 CPHD 驱动实战基于 sarkit 的测试数据生成与多维栅格读取全解析GDAL CPHD 驱动实战基于 sarkit 的测试数据生成与多维栅格读取全解析 本指南围绕 GDAL 仓库中 CPHDCompensated PhaseGIS遥感数据工程GDAL栅格数据模型深度解析GDAL栅格数据模型深度解析 引言 在地理信息系统GIS和遥感数据处理领域栅格数据是最基础且重要的数据格式之一。GDALGeospatial DataGIS遥感数据工程CANN ops-math 算子 aclnnInplaceMaskedFillTensor 两段式接口开发指南CANN ops math 算子 aclnnInplaceMaskedFillTensor 两段式接口开发指南 aclnnInplaceMaskedFillTeGIS遥感数据工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Ampere GPU L2缓存逆向工程:从寄存器测绘到bank冲突优化

Ampere GPU L2缓存逆向工程:从寄存器测绘到bank冲突优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 1:10:38 阅读更多 →
ESP32 Wi-Fi与BLE共存干扰的物理根源与全栈抑制方案

ESP32 Wi-Fi与BLE共存干扰的物理根源与全栈抑制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 1:10:38 阅读更多 →
MP-DQN无人机避障与目标追踪:深度强化学习复现与调参实践

MP-DQN无人机避障与目标追踪:深度强化学习复现与调参实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 1:10:38 阅读更多 →

最新新闻

数据结构 - > 排序算法

数据结构 - > 排序算法

1. 排序的概念1.1 常见的排序算法1.2 排序算法的评价指标复杂度:评价排序算法的第一大指标就是时间复杂度和空间复杂度,它衡量算法的时间效率和空间效率。稳定性:假定在待排序的数据元素中有两个元素 Ri 和 Rj,它们对应的关键字为…

2026/10/12 3:39:10 阅读更多 →
ccg-workflow Shell 技能指南:Bash 脚本自动化、系统管理与多模型协作实战

ccg-workflow Shell 技能指南:Bash 脚本自动化、系统管理与多模型协作实战

【免费下载链接】ccg-workflow 多模型协作工作流引擎 — /ccg:go 一个命令,AI 自动分析意图、选择策略、编排 Codex Gemini Claude 协作执行 项目地址: https://gitcode.com/gh_mirrors/cc/ccg-workflow 点击查看 免费下载 导读 本文基于 ccg-workfl…

2026/10/12 3:39:10 阅读更多 →
2026年软件测试趋势:AI Agent、质量内建与可观测性重塑质量保障

2026年软件测试趋势:AI Agent、质量内建与可观测性重塑质量保障

做测试这行,每年年底都在猜明年的技术方向,但2026年这次不太一样。我最近和不少测试负责人、开发团队聊下来,大家最焦虑的已经不是又冒出了什么新工具,而是整个质量体系正在被 AI 和平台工程重构,很多沿用多年的测试方…

2026/10/12 3:39:10 阅读更多 →
netdxf实战:DXF文字注释与尺寸标注的创建与修改

netdxf实战:DXF文字注释与尺寸标注的创建与修改

接触过DXF开发的人应该都有这种感觉:画直线、画圆、画多段线都属于“基本功”,真正让图纸变得可读、可传递设计意图的,是文字注释和尺寸标注。这一篇是整个netdxf系列里我比较想写的一篇,因为注释和标注的处理逻辑和普通几何实体完…

2026/10/12 3:39:10 阅读更多 →
文华财经主升浪买点指标公式拆解:多条件共振识别趋势启动

文华财经主升浪买点指标公式拆解:多条件共振识别趋势启动

1. 文华财经主升浪买点指标的实战拆解做期货日内或者波段的朋友,应该都听过“主升浪”这个词。行情走主升浪的时候,速度最快、幅度最大,但也是最难拿得住的一段。很多朋友在文华财经软件里翻遍了各类指标公式,要么信号滞后&#x…

2026/10/12 3:39:10 阅读更多 →
ppt-master 的 IBM 品牌身份预设解析:从 Carbon Blue 设计规范到可执行的 design_spec

ppt-master 的 IBM 品牌身份预设解析:从 Carbon Blue 设计规范到可执行的 design_spec

AI 技能人工智能 【免费下载链接】ppt-master AI 把任意文档生成真正可编辑的 PowerPoint —— 原生形状与动画、演讲者备注可合成音频旁白、还能参考你自己的 .pptx 模板,而不是一张张图片 何雨果出品 项目地址: https://gitcode.com/hugohe3/ppt-master 点击查看…

2026/10/12 3:38:09 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →