基于ArcGIS Engine的栅格数据转换矢量数据

2012-10-15 04:17曾翠云彭珊鸰
城市建设理论研究 2012年19期

曾翠云 彭珊鸰

摘要:ArcGIS提供了栅格数据向矢量数据转换函数,但是有特定的要求。同时,在ArcGIS Engine中提供了操作栅格数据的函数,可以对栅格数据进行编辑,从而可以到达栅格数据转矢量数据的要求。

关键词:ArcGIS Engine ;栅格数据;矢量数据

Abstract: The ArcGIS provides raster data to vector data conversion function, but it has the specific requirements. At the same time, providing the operating raster data function in the ArcGIS Engine, can edit the raster data, to reach the raster data to the vector data requirements.

Key words: ArcGIS Engine, raster data, vector data

中图分类号:P271文献标识码:A 文章编号:2095-2104(2012)

在日常地理信息数据处理中,会对栅格数据进行各种要求处理,并且最终要求将其转换成矢量数据[1][2][3][4][5]。我们可以采用ArcGIS Engine中提供的操作栅格数据的函数,对栅格数据进行各种编辑,满足对栅格数据的各种操作,同时可以将栅格数据转换成矢量数据。

ArcGIS栅格转矢量工具

在ArcGIS桌面版中打开ArcToolbox找到转换工具->由栅格转出,可以找到具体的栅格转矢量的工具。比较常用的是转点、转线、转面。查看帮助文档可以看到栅格转面矢量的函数是RasterToPolygon_conversion (in_raster, out_polygon_features, {simplify}, {raster_field}),其用法要求为:输入栅格的栅格单元大小可以任意,但必须属于有效的整数型栅格数据集。对栅格数据集要求必须是整数型(指栅格数据中格网像素的数据类型)。然而,在实际数据中大部分栅格数据采用浮点型。在ArcGIS中可以通过查看栅格数据的文件属性来查看栅格数据的像素数据类型,如图1。

由于ArcGIS中栅格转矢量工具的具体要求,所有必须对栅格数据进行像素类型转换;同时,要满足数据转出的其它要求,比如某一个栅格数据中,只要求像素值在某个特定范围的数据转出为矢量数据等各种具体的实际操作要求,有必须对栅格数据进行改写等的操作。在ArcGIS Engine中提供了操作栅格数据的函数,可以对栅格数据进行编辑,所有,有必要运用ArcGIS Engine对栅格数据进行编辑,从而满足栅格转矢量等各种具体要求。

图1 查看栅格数据的像素类型

ArcGIS Engine栅格转矢量

ArcGIS Engine提供将栅格转为像素块(IRaster接口中提供函数CreatePixelBlock(IPntpntSize)),游标法(raster cursor,在IRaster2接口中提供函数CreateCursorEx(null))等方法对栅格数据进行读写操作[6][7]。

像素块方法中,参数为块的大小,可以为整个栅格数据,也可以为1个像素块,或者具体的像素块。之后,可以通过IRaster接口的Read方法来实现将栅格数据转到像素块中。Read函数Read (IPnt tlc, IPixelBlock block),第一个参数用于指定获取像素块的位置,第二个参数为像素块。值得注意的是,此处使用的指定获取像素块位置,其值的范围为0到栅格数据的的行数和列数。一般设为整个栅格数据,即设为栅格数据的行数×列数,这样对于栅格数据中的具体格网的像素值可以通过行列号来访问,非常方便,但是,当栅格数据行列比较多时,会出现内存不足的警告。如果将参数设为1×1个像素块或者几×几个像素块,那么对栅格数据具体格网的访问,将要通过计算格网的坐标值来访问。以上可知,采用像素块方法时,当数据行列数不多可以采用整个栅格大小为参数;参数设为1×1个像素块或者其它小块时,要解决栅格格网的坐标计算问题。

游标法中,按默认值将栅格数据自动分成几个光标块,再将游标块当成像素块的集合,然后操作像素块集合从而操作每一个像素块(也就是单元格网)。这种方法可以避免内存不足的警告,也可以通过游标块方便的得到光标块的坐标。同样,也可以设置游标块中像素块集合的个数,可以设置为整个栅格数据,也可以设置如果将参数设为1×1个像素块或者几×几个像素块,其它的操作与像素块方法等同。

通过以上的方法可以获取栅格中像素块的值,但是PixelBlock 接口只提供像素值的读取,不提供写操作。这时候要采用IPixelBlock3接口。ArcGIS Engine中提供IPixelBlock3接口的PixelData属性可以获得像素块集合中的像素值数组,通过修改像素值数组来改变栅格数据的像素值。将修改后的像素值写入到像素块中,然后调用IRasterEdit接口,将修改后的保存到栅格数据中,必须注意像素块在栅格数据中的位置。

根据需要对栅格数据中的像素值进行相关的修改,以符合转换成矢量数据或者其它的各种要求。在ArcGIS Engine中对栅格数据转换成矢量数据的最关键的一般是将栅格数据的像素值的类型设置为整数型,其函数为。IConversionOp接口栅格转换矢量的函数如转线的函数为RasterDataToPolygonFeatureData()。因为,该函数只能处理像素值为整数型的栅格数据。在次调用IRasterProps 接口的PixelType属性来设置栅格数据像素值的类型,如整数性、浮点型等,将要转换的栅格数据的像素值类型转为整数型,最终完成栅格数据到矢量数据的转换。

通过以上介绍,可以看出ArcGIS Engine中可以对栅格数据进行赋值、修改、变换类型等各种编辑。在ESRI.ArcGIS.GeoAnalyst类库中。IConversionOp接口栅格转换矢量的函数如转线的函数为RasterDataToPolygonFeatureData()。通过这些函数,可以将栅格数据按要求转换成矢量数据。

实验

我们对江西省全省的DEM数据进行高程值在15-25米范围内的区域提取。基于ArcGIS Engine编程实现中对该原始数据进行高程值15-25米的区域提取,其设置为整形类型,并转换为所需求的矢量数据。如图2,图3。

图2 提取的高程值在15-25米范围内的矢量图

图3 提取的高程值在15-25米范围内的矢量图局部放大图

总结

在地理信息数据处理中,栅格数据转换成矢量数据在实际工作中比较常见,也有众多的相关的研究[8][9][10][11][12]。采用ArcGIS Engine进行二次开发对栅格数据进行处理并转换成矢量数据是比较高效快速的方法。 ArcGIS Engine提供了一些接口跟函数,可以对栅格数据进行编辑,修改像素类型,从而满足转换为矢量的要求。基于ArcGIS Engine编程可以对栅格数据进行特定的修改编辑,以满足日常工作的各种要求,并最终可以将栅格数据转换为矢量数据,提供各种数据的高效使用。

参考文献

[1] 王宪民. ArcGIS在栅格数据处理中的应用初探.测绘技术装备[J].2005(1):32~34

[2] 彭仪普. GIS中矢量与栅格相互转换方法研究.四川测绘[J]. 1998.21(2):62~65

[3]汤国安,杨昕.ArcGIS 地理信息系统空间分析实验教程[M].科学出版社.2006.

[4]宋小冬,钮心毅.地理信息系统实习教程 [M].科学出版社.2007.06

[5] 闵婕,杨华,赵纯勇.基于栅格数据结构分析的土壤侵蚀强度判别方法研究及应用[J]. 水土保持研究. 2005(01)

[6]邱洪钢,张青莲,陆绍强.ArcGIS Engine开发从入门到精通[M].人民邮电出版社.2010.07

[7]韩鹏,王泉,王鹏,漆炜,乌萌.地理信息系统开发:ArcEngine方法[M].武汉大学出版社.2008.09

[8] 邹修明,张岳新.栅格地图矢量化关键技术研究与实現[J]. 计算机工程与应用. 2003(19)

[9] 史桂娴,张平.栅格图像矢量化方法及其研究进展[J]. 电脑知识与技术. 2008(33)

[10]刘晓洁.GIS中矢量与栅格数据模型比较[J]. 吉林地质. 2005(01)

[11]沈掌泉,王人潮.栅格转换矢量的一种新方法——结点搜索法[J]. 中国图象图形学报. 1998(04)

[12] 张星月,汪闽,蒋圣.一种新的栅格数据矢量化方法[J]. 地球信息科学. 2008(06)

注:文章内所有公式及图表请以PDF形式查看。