Python+GDAL栅格数据基本操作
Python+GDAL栅格数据基本操作
什么是栅格数据?
最简形式的栅格由按⾏和列(或格⽹)组织的像元(或像素)矩阵组成,其中的每个像元都包含⼀个信息值(例如温度)。栅格可以是数字航空像⽚、卫星影像、数字图⽚或甚⾄扫描的地图。
为何将数据存储为栅格?
在GIS的应⽤中最常见的是⽮量数据和栅格数据,相⽐于⽮量数据,栅格数据的存储格式简单,处理简单,所以经常使⽤。但是也存在着数据冗余⼤的缺点。
有时只能将数据存储为栅格;
例如,影像仅以栅格形式提供。然⽽,许多其他要素(例如点要素)和测量值(例如降⾬量)既可以
存储为栅格数据类型也可以存储为要素(⽮量)数据类型。
栅格数据的⼀般特征
栅格数据集中,每个像元都有⼀个值,⽤来表达是所描绘的现象,如类别、⾼度、量级或光谱等等。
在栅格数据集中,每个像元(也称为像素)都有⼀个值。此像元值表⽰的是栅格数据集所描绘的现象,如类别、量级、⾼度或光谱值等。⽽其中的类别则可以是草地、森林或道路等⼟地利⽤类。量级可以表⽰重⼒、噪声污染或降⾬百分⽐。⾼度(距离)则可表⽰平均海平⾯以上的表⾯⾼程,可以⽤来派⽣出坡度、坡向和流域属性。光谱值可在卫星影像和航空摄影中表⽰光反射系数和颜⾊。
单元值可正可负,可以是整型也可以是浮点型。整数值适合表⽰类别(离散)数据;浮点值则适合表⽰连续表⾯。有关离散和连续数据的附加信息,请参阅离散和连续数据。在单元中,还可以使⽤ NoData 值来表⽰数据缺失。有关 NoData 的信息,请参阅栅格数据集中的NoData。
栅格数据的像元值
栅格会被存储为有序的像元值列表,例如:80、74、62、45、45、34 等。
各像元所表⽰区域(或表⾯)的⾼和宽都相等,⽽且在栅格表⽰的整个表⾯上占据相等的部分。例如,表⽰⾼程的⼀个栅格(即,数字⾼程模型)可能会覆盖 100 平⽅千⽶的区域。如果该栅格中有 100 个像元,则每个像元都将表⽰等⾼等宽的 1 平⽅千⽶(即,1 km x 1 km)。
像元的⼤⼩决定了栅格中要素呈现的粗细程度。
像元的尺⼨可⼤可⼩,具体可根据栅格数据集所描述的表⾯,以及表⾯中要素的表达需要来确定。它可以是平⽅千⽶、平⽅英尺,甚⾄是平⽅厘⽶。像元的⼤⼩决定着栅格中图案或要素呈现的粗细程度。像元⼤⼩越⼩,则栅格将越平滑或越详细。但是像元数量越多,所需的处理时间会越长,占据的存储空间也越⼤。如果像元⼤⼩过⼤,则可能会出现信息丢失或精细的图样变得模糊的情况。例如,
如果像元⼤⼩超过
道路的宽度,则栅格数据集中便不存在该道路。下图显⽰如何使⽤不同像元⼤⼩的栅格数据集来表⽰简单的⾯要素。
将数据存储为栅格具有以下优点:
1、数据结构更加简单
2、格式更加强⼤,可进⾏⾼级的空间和统计分析
3、可以表⽰连续表⾯以及执⾏表⾯分析
4、点、线、⾯和表⾯都可同样存储
5、对复杂数据集也可执⾏快速叠置
将数据存储为栅格具有以下局限性:例如:
1、像元尺⼨具有局限性可能带来空间误差。
2、栅格数据集会⾮常⼤占⽤更多的磁盘空间,拖慢处理速度。
3、数据重建会损失⼀定的精度。
栅格数据基本词汇
您在 ArcGIS 中使⽤栅格数据时会遇到的⼀些术语进⾏概述。这些术语并⾮全部特定于 ArcGIS。
描述
栅格与影像栅格和影像是两个经常互相指代的术语。影像是⼆维的图像表⽰。它不依赖于波长或遥感设备,如卫星、航空摄像机或地形传感器。影像可以显⽰在屏幕上,也可以打印出来。您可以查看影像。栅格是描述影像存储⽅式的数据模型。栅格可定义组成影像的像素数(像元数)(以⾏和列的形式表⽰)、波段数以及位深度。当您查看栅格时,您查看的是该栅格数据的影像。您还可能听说栅格被称为基于像元的数据集,但在 ArcGIS ⽂档中通常
不这样使⽤。
像元和像素像素通常会作为像元的同义词使⽤。像元和像素都是指栅格数据中的最⼩信息单位。像素是图像元素的简称,通常⽤于描述影像,⽽像元则通常⽤于描述栅格数据。像元和像素具有尺⼨和值。它们可以表⽰温度、⼟壤类型、⾼程和真实世界要素(例如,公园、湖泊和建筑物)等信息。
分辨率、⽐例和像元⼤⼩分辨率、⽐例和像元(像素)⼤⼩都是指栅格数据中要素的⼤⼩,但⼜并⾮如此简单。例如,有四种类型的分辨率:光谱分辨率 - 描述⽤于创建影像的电磁光谱内的波长。时间
分辨率 - 指对地球表⾯的同⼀地点捕获影像的频率。辐射分辨率 - 描述传感器在电磁光谱的同⼀部分中对所查看对象的分辨能⼒。空间分辨率 - 唯⼀⼀个与⽐例和像元⼤⼩相关的分辨率。空间分辨率(也称为像元⼤⼩)是单个像元所表⽰的地⾯上覆盖的区域的尺⼨。⽐例是地图(或影像)上的距离或⾯积与地⾯上相对应的距离或⾯积之间的⽐率或关系,通常以分数或⽐率的形式表⽰。空间分辨率或像元⼤⼩会影响
影像在任意⽐例下所表⽰的详细程度。
波段
栅格可包含⼀个或多个波段。多波段栅格通常称为多光谱图像,⽽具有⾼达数百个波段的栅格通常称为⾼光谱图像。单波段栅格数据集表⽰单⼀现象
java调用python模型(如⾼程)或只表⽰电磁光谱的⼀个波长范围(如⿊⽩航空像⽚)。波段通常与光谱分辨率相关。栅格
格式与栅格类型栅格格式⽤于定义像素的存储⽅式,例如,⾏数和列数、波段数、实际像素值,以及其他栅格格式特定的参数。栅格类型⽤于与栅格格式⼀起标识元
数据,例如地理配准、采集⽇期和传感器类型。
栅格产品栅格产品的作⽤是使从特定传感器或数据提供商向您的地图添加影像变得更加容易,因为每⼀栅格产品均有独特的增强功能的集合以及波段组合以优化您数据的视图。栅格产品将在⽬录中显⽰,以代替与特定供应商产品相关的元数据⽂件。它是⽤于⽣成栅格产品(⽐如 Landsat 7 或 QuickBird 等卫星影像)的元数据⽂件中的信息。栅格产品会以⾃⾝独有的图标显⽰在⽬录中:栅格产品图标。
渲染栅格数据集可在地图中以多种不同的⽅式进⾏显⽰或渲染。渲染是⼀个显⽰数据的过程。栅格数据集的渲染⽅式取决于它所包含的数据的类型以及您要显⽰的内容。某些栅格包含⼀个 ArcMap 将⾃动⽤于显⽰栅格数据的预定义配⾊⽅案,即⾊彩映射表。对于未包含预定义配⾊⽅案的栅
格,ArcMap 将选择⼀种合适的显⽰⽅法,您可根据需要对其进⾏调整。
功能分类函数允许您(或软件)定义将应⽤于⼀个或多个栅格的处理功能,但此处理功能不会永久地应⽤于栅格;⽽是在访问栅格时动态应⽤。
描述
存储⽅法:数据模型 了解有关栅格数据模型的信息栅
格数据集栅格数据集是组织成⼀个或多个波段的任何有效的栅格格式。每个波段由⼀系列像素(单元)数组组成,每个像素都有⼀个值。栅格数据集⾄少有⼀个波段。可将多个栅格数据集在空间上附加(镶嵌)在⼀起形成⼀个更⼤的连续栅格数据集。栅格数据集⽤ 栅格数据集图标表⽰:
镶嵌数据集镶嵌数据集是⼀组以⽬录形式存储并以单个镶嵌影像或单个影像(栅格)的⽅式显⽰或访问的栅格数据集(影像)。这些集合的总⽂件⼤⼩和栅格数据集数量都会⾮常⼤。添加栅格数据时会根据其栅格类型进⾏,该类型与栅格格式⼀起⽤于标识元数据,例如地理配准、采集⽇期和传感器类型。镶嵌数据集中的栅格数据集可以采⽤本机格式保留在磁盘上,也可在需要时加载到地理数据库中。可通过栅格记录以及属性表中的属性来管理元数据。通过将
元数据存储为属性,可以更⽅便地管理诸如传感器⽅向数据等参数,同时也可以提⾼对选择内容的查询速度。镶嵌数据集⽤镶嵌数据集图标表⽰:
栅格⽬录栅格⽬录是以表格式定义的栅格数据集的集合,其中每个记录表⽰⽬录中的⼀个栅格数据集。栅格⽬录可以⼤到包含数千个影像。栅格⽬录通常⽤于显⽰相邻、完全重叠或部分重叠的栅格数据集,⽽⽆需将它们镶嵌为⼀个较⼤的栅格数据集。栅格⽬录⽤ 栅格⽬录图标表⽰:
在地理数据库中存储栅格数据的⽅式有两种 - 托管或⾮托管。托管栅格数据集存储在地理数据库中,⽽⾮托管栅格数据集则不是。
在 ArcGIS 中使⽤镶嵌
术语“镶嵌”在 ArcGIS 中的使⽤⽅式有很多种:
镶嵌数据集 - 地理数据库中的数据模型,⽤于管理以⽬录形式存储并以镶嵌影像⽅式查看的栅格数据集(影像)的集合(上⽂进⾏了详细介绍)。这种镶嵌
数据集使⽤镶嵌数据集⼯具集中的地理处理⼯具进⾏创建和编辑。
镶嵌的影像 - 在视图中显⽰的来⾃两个或多个影像的影像或栅格。通常,在您查看镶嵌数据集时会看到
镶嵌 - 描述将多个栅格数据集组合或合并在⼀起的操作。有关详细信息,请参阅什么是镶嵌。
镶嵌栅格数据集或栅格数据集(镶嵌)表⽰同⼀含义。⼆者均为栅格数据集。词语“镶嵌”或“镶嵌的”⽤于描述栅格数据集的创建情况,是已创建还是将
要创建。
什么是GDAL?
GDAL(Geospatial Data Abstraction Library)是⼀个⽤于栅格数据操作的库,是开源地理空间基⾦会(Open Source Geospatial Foundation,OSGeo)的⼀个项⽬。
GDAL是⼀个操作各种栅格地理数据格式的库。包括读取、写⼊、转换、处理各种栅格数据格式(有些特定的格式对⼀些操作如写⼊等不⽀持)。它使⽤了⼀个单⼀的抽象数据模型就⽀持了⼤多数的栅格数据(GIS对栅格,⽮量,3D数据模型的抽象能⼒实在令⼈叹服)。
当然除了栅格操作, GDAL从2.0起集成了另⼀个⽤于⽮量数据操作的库(OGR);这个库还同时包括
了操作⽮量数据的另⼀个有名的库ogr(ogr这个库另外介绍),这样这个库就同时具备了操作栅格和⽮量数据的能⼒。
,是由Sean Gillies等⼈写的,其底层是C++开发的OGR库(⼀个开源GIS库)。
但是ogr这个库,只是简单的⽮量数据的读写操作,如若需要⼀些复杂的⼏何操作,那么就需要配合GEOS库了,很多开源的GIS软件(如QGIS)是利⽤GEOS库开发的。
GDAL/OGR库是⽤C/C++写的,很多GIS产品都使⽤了GDAL/OGR库,包括ESRI的ArcGIS、Google Earth、GRASS GIS等。
GDAL提供了多种编程语⾔的API,包括Python、Perl、C#以及Java等,因此,在Python中调⽤GDAL的API函数时,底层执⾏的是
C/C++编译的⼆进制⽂件。
如何对栅格数据进⾏读取

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。