不只是图片:深入理解 GIS 栅格数据本质与 GDAL 读写实战

news/2026/1/20 13:44:24/文章来源:https://www.cnblogs.com/charlee44/p/19506226

GIS 栅格数据只是一张普通图片吗?其实它可以是高程、降雨量、土地类型,甚至是二维空间信号。本文节选自新书《GIS基础原理与技术实践》第5章,带你穿透表象,掌握栅格数据的本质与 GDAL 开发核心技能。

GIS基础原理与技术实践

第5章 地理空间数据之栅格

导言

在上一章节中,我们对地理空间数据进行了初步的介绍,并详细的论述了其表现形式之一的矢量数据。而在本章中,我们会详细论述地理空间数据的另外一种表现形式,也就是栅格数据。矢量和栅格是GIS地理空间数据最基础的两种数据类型,是一定需要理解和掌握的。

5.1 栅格数据的深入认识

通过第4.1节中的介绍,我们对栅格数据有了一个初步的认识:栅格是地理空间连续实体的表达。接下来在本节中,我们会进一步探索栅格的技术细节,加深对栅格数据的理解。

5.1.1 离散还是连续

记得笔者有一次跟同事争论,图像数据(也就是栅格数据)到底是离散的还是连续的?当时笔者还是个GIS菜鸟,认为图像是离散的。从前面介绍的知识来说,很显然栅格是地理的连续表达。与矢量只能知道具体的要素的坐标不同,我们可以很容易获取每一个栅格单元具体的地理坐标,体现了数据的连续性。然而,当我们把一张图像放大,我们很容易会看到一个个具体的栅格单元,如下图5.1所示:

图5.1 放大后的栅格单元

这些栅格单元中突变的颜色表明,栅格数据并不是我们想象的那样单纯的具有连续性。栅格数据对地理空间的表达总是会受制于采样频率,最直观的体现就是分辨率。如同现实中显示器一样,分辨率越高意味着像素的数目越多,显示效果就越精细。但是无论多精细,其实都是由离散的栅格单元在二维平面上连续铺盖成的格网组成的。如此说来,笔者在菜鸟时期认为栅格数据是离散的,可以说还是具有一定的正确性的,尽管是误打误撞。离散还是连续,并不是绝对的,关键还在于是如何看待和认知:

  • 在宏观意义上,栅格数据毫无疑问是连续的,这是区别与矢量数据的根本特性。只要是在栅格数据的范围之内,就可以获取任意位置的地理对象值。
  • 在微观意义上,栅格数据也可以认为是离散的。受制于数据表达的载体,总会在一个无法细分的尺度上,用一个离散的栅格单元来代表一定连续范围内的地理对象值。

栅格数据关于离散还是连续的讨论,我们在后面还会涉及到。

5.1.2 栅格的表现形式

我们在4.1节中介绍过,栅格数据的一种具体表现形式就是我们经常见到的图片(有时称为图像,或者影像)。但是认为图片就是栅格,这种理解并不全面,栅格数据的内涵要丰富得多。

我们最常见的图片是24位真彩色图片,因为每个像素都由红绿蓝(RGB)3种颜色值混合而成,而每个波段的颜色值都由而一个8位整型表示。这样,真彩色图片能表示的颜色就有 256 X 256 X 256 = 16777216 种不同颜色,这恰好大于人类能识别1000万种颜色的限制。另外,出于数据叠加显示等目的,还会将第4个波段设置成透明度。其实透明度并不是一个颜色值,其是当前颜色值与背景颜色值的混合。

图5.2 国家天地图上的真彩色数字影像图

在遥感领域,很多传感器并不是只能接受红绿蓝这三种可见光的波段,一些不可见的波段也可以接收到(比如红外波段),这主要取决于传感器的波长分辨率。因此,第4个波段也不一定就是透明度,而是其光谱的反射值或者辐射值。甚至于可以存在4个以上的波段。光谱的反射值也不一定就是8位整型,用于遥感探测的传感器要敏感的多,因此每个波段的光谱反射值是16位、32位甚至64位数值都是有可能的。

图5.3 遥感影像中的不可见光波段

栅格数据中格网单元的取值可以是可见光的颜色,也可以是遥感获取的具体探测值。那么,存放其他类型的数据是可以的吗?当然也是可以的,比如我们可以在栅格数据中储存高程值,就可以表达地形,成为栅格形式的DEM(Digital Elevation Model,数字高程模型)数据。这一点我们会在后续的地形章节中专门论述它。

图5.4 SRTM(Shuttle Radar Topography Mission,航天飞机雷达地形测量)地形数据晕渲图

既然栅格单元可以存放高程,那么存放一些诸如表达降雨量,污染浓度这样的测量值,或者土地类型这样的分类值也是可以的——此类数据就是与业务紧密关联的专题栅格数据,具有很大的实用价值,可以在其基础之上进行专题分析,例如利用降雨量专题数据进行淹没分析。当然,专题栅格数据如果需要进行可视化的话,就需要进行转换。

图5.5 国家天地图上的人口密度专题图

栅格数据(图像)还可以看成是信号。在常规的认知中,我们通常认为信号是随时间t变化的一种东西,比如电磁波或者声波。实际上,栅格数据(图像)可以认为是一个沿着空间分布、随着X空间轴和Y空间轴变化的二维信号。有这一点认知非常重要,因为很多栅格数据处理的算法都需要借助于信号的理论,比如我们后续会介绍的滤波。

最后,在数学中可以认为栅格数据就是一个很大的矩阵,可以进行复杂的矩阵运算。很多运算数据都可以转换成矩阵,从而被转换成图片格式来保存,这也与我们认知的常规图片不同。

5.1.3 正射还是透视

以GIS中最常用的地图来说,我们至少有这样一个认识:地图上每一段相同距离所代表的实际距离都相等。如果不具备这样的特性,地图就不可能辅助我们进行导航等空间位置上的决策。在GIS中,大部分栅格数据就是这种具备相同比例尺的光学影像数据,它好像是很多道平行的光线同时反射到摄像机成像生成的,所以通常被称为数字正射影像图(DOM,Digital Orthophoto Map)。

但是在现实中,理想的正射成像模型几乎不存在,大多数摄像机都是透视成像模型,其生成的图像最大的特点就是近大远小,并且投影的光线会聚于一点。这也是真实的人眼成像的特点。其实,数字正射影像图就是通过透视成像模型的图片做几何纠正生成的,这一点在GIS的关联学科《摄影测量学》中有详细的介绍。如下图5.6所示为正射成像模型和透视成像模型示意图:

图5.6 正射成像模型和透视成像模型

正射还是透视只是图像的生成的两种不同的方式,并不会影响图像或者栅格数据本身的性质。在GIS中的栅格数据大多数指的是数字正射影像图,能够使用专业的GIS方法进行处理,这是常规的基于透视成像模型的图片所不具备的。

5.2 栅格数据开发基础

5.2.1 栅格数据读取

与矢量数据一样,可以使用第三方开源库GDAL来实现栅格数据的基础开发。GDAL提供了市面上绝大多数常见栅格数据的支持,并将其抽象成一个数据集对象。读取栅格数据的示例如下例5.1所示:

// 例5.1 使用GDAL读取栅格数据
#include <gdal_priv.h>#include <iostream>using namespace std;int main() {GDALAllRegister();string srcFile = getenv("GISBasic");srcFile = srcFile + "/../Data/Raster/berry_ali_2011127_crop_geo.tif";GDALDataset* img = (GDALDataset*)GDALOpen(srcFile.c_str(), GA_ReadOnly);if (!img) {return 1;}int imgWidth = img->GetRasterXSize();   //图像宽度int imgHeight = img->GetRasterYSize();  //图像高度int bandNum = img->GetRasterCount();    //波段数int depth = GDALGetDataTypeSize(img->GetRasterBand(1)->GetRasterDataType()) / 8;  //图像深度cout << "宽度:" << imgWidth << '\n';cout << "高度:" << imgHeight << '\n';cout << "波段数:" << bandNum << '\n';cout << "深度:" << depth << '\n';GDALClose(img);img = nullptr;
}

在这个示例中,从栅格数据文件中创建了一个数据集对象,并且获取了影像的宽度、高度和波段数(通道数)和深度。深度有点难以理解,指的是栅格存储数据类型的字节数。常规的影像数据都采用8位无符号整型进行存储,因此深度都为1。
本例运行结果如下:

宽度:4000
高度:7200
波段数:4
深度:1

5.2.2 栅格数据创建

另一方面,也可以根据一个数据集对象创建栅格数据文件,也就是栅格数据的写出操作。与第4.4.2节中创建矢量的步骤类似,同样通过GDAL的数据驱动GDALDriver,传入数据类型的名称来创建对应格式的栅格文件,如下例5.2所示,创建了一个tif格式的栅格数据:

// 例5.2 使用GDAL创建栅格数据
#include <gdal_priv.h>#include <iostream>using namespace std;int main() {GDALAllRegister();  //注册格式string dstFile = getenv("GISBasic");dstFile = dstFile + "/../Data/Raster/dst.tif";GDALDriver* pDriver =GetGDALDriverManager()->GetDriverByName("GTiff");  //图像驱动char** ppszOptions = NULL;ppszOptions =CSLSetNameValue(ppszOptions, "BIGTIFF", "IF_NEEDED");  //配置图像信息int imgWidth = 256;int imgHeight = 256;int bandNum = 3;GDALDataset* dst = pDriver->Create(dstFile.c_str(), imgWidth, imgHeight,bandNum, GDT_Byte, ppszOptions);if (!dst) {printf("Can't Write Image!");return 1;}GDALClose(dst); return 0;
}

上例中我们创建了一个宽256,高256,波段数3,byte类型(8位,深度1)的栅格数据文件:

GDALDriver* pDriver =GetGDALDriverManager()->GetDriverByName("GTiff");  //图像驱动//...GDALDataset* dst = pDriver->Create(dstFile.c_str(), imgWidth, imgHeight,bandNum, GDT_Byte, ppszOptions);

数据类型的名称“GTIFF”是GDAL定义的驱动名,表示创建的数据集对象是一个tif格式的栅格数据文件。一些常用栅格数据格式在GDAL中数据驱动如下表5.1所示:

名称 全称
JPEG JPEG JFIF File Format
PNG Portable Network Graphics
BMP Microsoft Windows Device Independent Bitmap
GTiff GeoTIFF File Format
HFA Erdas Imagine .img
ENVI ENVI .hdr Labelled Raster

其中,JPEG、PNG和BMP就是我们经常见到的图像数据格式;GTiff(GeoTIFF)、HFA(Erdas Imagine .img)和ENVI(ENVI .hdr Labelled Raster)则是专业的GIS栅格数据。前者通用性更强,能被常规的图片软件所识别;而后者专业性更高,一些栅格数据的特性常规图像数据无法支持(例如存在数据量大小限制),因此只能使用专业GIS栅格数据,一般情况仅被GIS相关的软件支持。

另一点值得注意的是,在创建特定数据集对象时,可以根据特定格式的需求进行配置:

char** ppszOptions = NULL;ppszOptions =CSLSetNameValue(ppszOptions, "BIGTIFF", "IF_NEEDED");  //配置图像信息//...GDALDataset* dst = pDriver->Create(dstFile.c_str(), imgWidth, imgHeight,bandNum, GDT_Byte, ppszOptions);

这里配置参数的意思是,在需要的时候使用“BIGTIFF”格式而不是“TIFF”,以避免当栅格数据文件的大小超过4G的时候会创建失败。

最后,在创建数据集完成之后,不要忘了关闭数据集:

GDALClose(dst);

此时创建的数据集文件就是一张黑色的栅格图片(因为关闭后默认填充0像素值),如下图5.7所示:

图5.7 创建的栅格数据集文件


本文节选自作者新书《GIS基础原理与技术实践》第5章。书中系统讲解 GIS 核心理论与多语言实战,适合开发者与高校师生。

📚 配套资源开源:GitHub | GitCode

🛒 支持正版:京东|当当

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1189163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探寻福州前十研究生留学中介,为何申请成功率高?揭秘其优势 - 留学机构评审官

探寻福州前十研究生留学中介,为何申请成功率高?揭秘其优势一、探寻福州前十研究生留学中介,为何申请成功率高?在搜索引擎中,许多福州的学生和家长会频繁查询:“福州研究生留学中介哪家靠谱?”、“为什么有些中介…

武汉研究生留学机构口碑排名揭晓,申请成功率高引热议 - 留学机构评审官

武汉研究生留学机构口碑排名揭晓,申请成功率高引热议随着留学竞争日益加剧,武汉地区高校的硕士申请者们在选择中介服务机构时,常面临几大核心关切:如何辨别机构真实口碑与“注水”宣传?如何在众多选择中找到真正擅…

西安气体分析仪厂家哪家强?本地优质供应商推荐 - 品牌推荐大师

随着工业智能化转型加速与环保监管政策持续收紧,气体分析仪作为核心检测装备,已成为医疗、科研、环保、冶金、石油化工等多个领域的刚需设备。西安作为国内仪器仪表产业的重要聚集地,汇聚了众多气体分析仪厂家,但市…

十大官网工具对比分析:如何有效降低AIGC重复率及概念详解

核心工具对比速览 工具名称 核心功能 适用场景 处理速度 特色优势 aibiye 降AIGC率查重 学术论文优化 20分钟 适配知网/格子达/维普规则 aicheck AIGC检测 风险区域识别 实时 可视化热力图报告 askpaper 学术内容优化 论文降重 20分钟 保留专业术语 秒篇 …

新加坡硕士留学机构口碑排名深度剖析,录取案例多揭示优选路径! - 留学机构评审官

新加坡硕士留学机构口碑排名深度剖析,录取案例多揭示优选路径!一、新加坡硕士留学如何甄选靠谱中介?从海量案例中寻找优选路径面对新加坡两所顶尖高校——新加坡国立大学与南洋理工大学的高竞争态势,许多意向申请者…

IKanalyzer分词器从配置到运用

IKanalyzer分词器从配置到运用 IKAnalyzer 是基于 Java 开发的开源轻量级中文分词工具包,常用于 Lucene、Elasticsearch(ES)等全文检索场景,提供细粒度与智能分词两种模式,支持自定义词典与高速分词处理。 分词器的核心内容 算法与性能:采用 “正向迭代最细粒度切分算…

选择新加坡硕士留学机构必看:Top10名单与资质正规评估 - 留学机构评审官

选择新加坡硕士留学机构必看:Top10名单与资质正规评估一、新加坡硕士留学,如何选择可靠的中介机构?2026年1月10日。计划前往新加坡攻读硕士学位的同学,在挑选留学中介时,常面临几大困惑:如何核实机构的合法资质与…

提升AIGC原创性的秘诀:10款官网工具实测对比及核心概念详解

核心工具对比速览 工具名称 核心功能 适用场景 处理速度 特色优势 aibiye 降AIGC率查重 学术论文优化 20分钟 适配知网/格子达/维普规则 aicheck AIGC检测 风险区域识别 实时 可视化热力图报告 askpaper 学术内容优化 论文降重 20分钟 保留专业术语 秒篇 …

长沙研究生留学机构口碑排名发布,学员满意度高成关键参考 - 留学机构评审官

长沙研究生留学机构口碑排名发布,学员满意度高成关键参考一、 长沙学子如何筛选靠谱的留学中介?在2026年1月9日的今天,计划前往海外深造的研究生申请者们,尤其是来自长沙高校的同学们,在挑选留学服务机构时常常面…

edge alt tab怎么关

edge alt tab怎么关要关闭 Microsoft Edge 浏览器在 Alt+Tab 切换时显示多个标签页的功能,您需要通过 Windows 系统设置进行调整,而非在 Edge 浏览器内部设置。此功能由 Windows 的“多任务处理”选项控制。 以下是具…

导师推荐8个AI论文写作软件,自考学生轻松搞定论文格式规范!

导师推荐8个AI论文写作软件&#xff0c;自考学生轻松搞定论文格式规范&#xff01; 自考论文写作新利器&#xff0c;AI工具让学术之路更轻松 随着人工智能技术的不断进步&#xff0c;越来越多的自考学生开始借助AI工具来辅助论文写作。这些工具不仅能够帮助学生快速完成初稿&am…

盘点6款主流论文辅助工具,并附上专业公式编辑资源推荐

核心工具对比速览 工具名称 核心功能 适用阶段 独特优势 AIbiye 论文结构优化 初稿完成后 理工科逻辑框架自动检测 AIcheck 万字论文生成 开题/初稿 实证研究模块内置 AskPaper 文献综述生成 文献调研 中英文文献混合处理 秒篇 快速论文生成 紧急任务 10分钟…

为什么摇车上坡更省力?试着看懂背后的骑行原理。

每位骑友都有过这样的体验&#xff0c;当你爬坡累成狗的时候&#xff0c;肯定试过站起来摇车。对&#xff0c;就是那种左右晃着往上蹬的感觉。奇怪的是&#xff0c;明明更费劲了&#xff0c;怎么反而觉得省力了呢&#xff1f;今天就用大白话给你拆明白。摇车不是瞎晃。你想想&a…

主流论文辅助工具横向评测,整合专业公式编辑器资料

核心工具对比速览 工具名称 核心功能 适用阶段 独特优势 AIbiye 论文结构优化 初稿完成后 理工科逻辑框架自动检测 AIcheck 万字论文生成 开题/初稿 实证研究模块内置 AskPaper 文献综述生成 文献调研 中英文文献混合处理 秒篇 快速论文生成 紧急任务 10分钟…

优化AIGC原创性的最佳实践:10款官网工具测评及关键概念详解

核心工具对比速览 工具名称 核心功能 适用场景 处理速度 特色优势 aibiye 降AIGC率查重 学术论文优化 20分钟 适配知网/格子达/维普规则 aicheck AIGC检测 风险区域识别 实时 可视化热力图报告 askpaper 学术内容优化 论文降重 20分钟 保留专业术语 秒篇 …

小白也能丝滑入手浏览器自动抓取可用数据

小白也能丝滑入手浏览器自动抓取可用数据亮数据官方账号&#xff0c;大家可以关注&#xff1a;https://brightdata.blog.csdn.net/ 现在正有福利&#xff0c;新用户可领30美金&#xff0c; 有兴趣的伙伴可以访问链接&#xff1a; https://www.bright.cn/products/scraping-br…

血袋离心机权威选购:七大品牌深度剖析与选购全指南 - 品牌推荐大师1

行业背景:血液分离技术的关键支撑在血液成分制备、临床输血安全、生物制药等领域,血袋离心机是不可或缺的核心装备。随着我国医疗卫生事业的持续发展,采供血系统的现代化水平不断提升。根据国家卫健委《2022年国家医…

开源可定制社区论坛小程序源码 带完整的搭建部署教程

温馨提示&#xff1a;文末有资源获取方式如果您期望拥有一套代码自主可控、能够深度定制的社区论坛小程序系统&#xff0c;那么这款开源可定制的源码将是您的理想之选。它专为技术团队、IT工作室及有开发能力的创业者打造&#xff0c;采用多用户架构&#xff0c;支持无限客户端…

响应式设计+多端适配,全平台社区论坛小程序源码系统

温馨提示&#xff1a;文末有资源获取方式它采用核心代码统一、多端适配的架构&#xff0c;让您一次开发&#xff0c;即可快速生成适用于微信小程序、抖音小程序、H5网页等多端的产品&#xff0c;最大化覆盖用户场景。无论您是服务多家客户的建站公司&#xff0c;还是希望打造自…

API核心作用与设计实例解析

****# API&#xff1a;数字世界的连接桥梁 一、API的核心作用 1. 抽象与封装 API&#xff08;应用程序编程接口&#xff09;本质上是一种契约&#xff0c;它定义了软件组件之间如何交互&#xff0c;同时隐藏内部实现细节。就像电器插座一样&#xff0c;用户只需知道如何插入插头…