栅格数据属性

栅格数据属性

 

栅格数据的每一个像元都有自己的像元值,并且这些像元值根据栅格类型的不同,可以代表反射值,或高程值,或分类类别等。栅格数据的像元值可以分成Integer, Float,或者Double,为什么栅格数据有的只有一个band,有的确有多个band?栅格统计值是干什么用的?

我们可以在ArcCatalog里面查看栅格数据的属性,见下图:

 

红框中的内容就是栅格的属性了。这些属性具体告诉了我们关于栅格的什么故事呢?

Columns and Rows行列数告诉我们这个栅格一共有15781x13442个像元,而Cellsize则说明了像元大小为0.1单位。如果栅格是在投影坐标系下,则像元大小为0.1 米。根据这两个属性,我们对栅格数据覆盖的面积就有了概念(行数 x 列数 x 象元大小的平方)。

 

Number of bands说明了一个栅格数据带有几个波段。我们先不要纠结于栅格数据为什么会有多个波段,以及多波段的影像如何显示的问题(后文有详解)。单纯的从栅格数据的数据结构来看,波段就是描绘栅格数据的除行列数外的另外一个维度。可以这样来理解波段,如果将栅格数据看做一个切片面包,每一个波段就是这个切片面包中的一片,而每个面包片的大小(长和宽)就是栅格的行列数。从栅格的属性也不难看出,栅格数据中每个波段的行列数,像元大小是完全相同的。

 

再来看下Pixel TypePixel Depth

 

这两个属性通常情况下是一起出现的。而这两个属性定义的就是栅格数据的像元值的值域范围。例如8bit的 unsigned integer栅格数据的像元值范围就是0~255,8bit的signed integer的像元值范围是 -128~127等等。

一般常见的遥感影像数据都是8bit unsigned integer的。会用到16 bit unsigned 或是32bit float类型的栅格多是高程表面数据,需要用到更大的带小数位的值来精确的记录高程信息。详细的比特深度和值域范围的对照请参见下表。

 


在拿到新的栅格/影像时,上述的信息可以帮助你快速了解手上的数据。再有就是在创建一个新的栅格数据时,也需要这些信息作为新建栅格的参数。在ArcGIS中创建一个栅格数据集时,会看到如下窗口:

 

 

其中像元类型和波段数是必填的。像元大小如果在新建时置空,将会由导入/镶嵌进来的第一幅影像决定。

 

此外,如果得知栅格数据的这些属性,根据一个8bit像元占1B的空间,32bit的像元占4B的空间,就可以直接得到栅格数据未压缩的大小。

例如上上图中,一个3波段,15781列13442行,8bit的栅格数据未压缩大小为

1B x 15781 x 13442 x 3 =636384606 B = 606.903MB(Uncompressed Size)

 

栅格属性中的颜色表(color map),金字塔(pyramid),统计值(statistics)等内容都会在下面的栅格的渲染中仔细说说。

 

 

### GIS栅格数据属性表无法打开的解决方案 在处理GIS栅格数据时,如果遇到属性表无法打开的情况,通常是因为以下几个原因造成的: 1. **多波段数据** 如果栅格数据是多波段类型的,则无法为其创建属性表。这是因为ArcGIS不支持为多波段数据生成属性表[^1]。 2. **浮点型数据** 浮点型数据也是导致属性表无法创建的主要原因之一。由于浮点数具有较高的精度,在存储和计算过程中可能会引入误差,因此ArcGIS默认不允许为浮点型栅格数据创建属性表[^1]。 #### 解决方案 针对以上问题,可以通过以下方法解决问题: - **对数据进行求整** 使用`Int`工具将浮点型数据转换为整型数据。这样可以有效解决因数据类型而导致的属性表创建失败问题。为了减少精度损失,可以在求整之前先放大数值范围,例如通过乘以100或1000来保留更多小数位的信息。 下面是一个Python脚本示例,展示如何使用ArcPy模块对栅格数据进行求整操作: ```python import arcpy # 输入栅格路径 input_raster = r"C:\path\to\your\raster.tif" # 输出栅格路径 output_raster = r"C:\path\to\output\raster_int.tif" # 将原始栅格数据放大并取整 int_raster = arcpy.sa.Int(arcpy.Raster(input_raster) * 100) # 保存结果 int_raster.save(output_raster) ``` - **检查数据源** 确认输入的栅格数据是否满足条件(即单波段且非浮点型)。如果是双精度或其他特殊格式的数据,也需要按照上述方式进行预处理[^3]。 - **利用编程接口访问栅格属性** 对于某些高级需求,可以直接通过ArcObjects API实现对栅格数据的选择和查询功能。例如,可以将栅格层转换为`IDisplayTable`对象,并进一步获取其对应的`ISelectionSet`集合[^2]。以下是C#代码片段的一个简单例子: ```csharp using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Carto; IRasterLayer rasterLayer = layer as IRasterLayer; IDataset dataset = rasterLayer as IDataset; IWorkspace workspace = dataset.Workspace; // 创建过滤器 IQueryFilter filter = new QueryFilterClass(); filter.WhereClause = string.Format("{0} in ({1})", "VALUE", oidArray); // 获取选择集 ISelectionSet selectionSet = (rasterLayer as IDisplayTable).SelectDisplayTable( filter, esriSelectionType.esriSelectionTypeIDSet, esriSelectionOption.esriSelectionOptionNormal, workspace); ``` 完成这些步骤后,重新尝试为经过处理后的栅格数据建立属性表即可成功。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值