专题图件编辑软件开发中的MapObjects技术

时间:2022-06-15 10:32:38

专题图件编辑软件开发中的MapObjects技术

摘要:专题图件编辑软件主要解决栅格数据和矢量数据的叠加匹配、地图信息的分类显示以及矢量信息的物理逻辑结构转换。该文以专题图件编辑软件的部分开发过程为例,总结ESRI公司推出的GIS组件――MapObjects在开发过程中三项关键技术的应用,为应用MapObjects进行二次开发提供一定参考。

关键词:矢量数据;栅格数据;分类显示;叠加匹配;GIS组件;MapObjects

中图法分类号:TP39文献标识码:A 文章编号:1009-3044(2009)34-9706-04

MapObjects Techniques of Design and Development of Geological Thematic Mapping Software

LIU Jia, YAO Guo-qing

(China University of Geosciences, Beijing 100083, China)

Abstract: Thematic mapping software concerns about three problems: matching vector data and raster data, classification of map information, and transform vector data between logical structure and physical structure. This paper states parts of the progress of design and development of geological map editing software, and summarize three key technologies used in the developing process with MapObjects provided by ESRI, and supply reference of redevelopment with MapObjects.

Key words: vector data; raster data; outline; matching; GIS components; MapObjects

1 背景

MapObjects是ESRI开发的提供制图与空间分析功能的组件,它的核心是一个被称为Map控件的ActiveX控件,包括35个可编程的ActiveX 对象,这些对象为应用开发人员提供了有力的制图与GIS功能支持[1]。MapObjects可以应用于Visual C++、Visual Basic、Delphi、Microsoft Access等程序设计环境。在应用MapObjects进行专题图件编辑软件开发的过程中,主要有三项关键的技术:栅格数据和矢量数据的匹配、矢量数据物理-逻辑结构的转换、信息的分类显示。

栅格数据和适量数据的匹配技术主要是为了实现在底图上叠加失量图层,以实现对底图的装饰、信息说明等。底图可以是栅格数据,也可以是矢量数据。图像数据物理-逻辑结构的转换是指矢量数据读取/存储过程中,数据的物理结构与逻辑结构之间的相互转换,进而以编程实现适量数据读取/存储的技术。信息的分类显示是指同一图像层中相同类型的数据以不同的形式进行显示。该技术主要是为了实现数据可视化的过程中,同一文件中的同类型数据以不同形式显示,便于曾强图像说明信息的效果。

2 正文

2.1 栅格数据和适量数据的匹配

2.1.1 栅格数据与矢量数据

矢量数据是在直角坐标系中,用x、y坐标表示地图图形或地理实体的位置和形状的数据。对于矢量结构:点实体是在在二维空间中,用一对坐标x,y来表示;线实体可以认为是由连续的直线段组成的曲线,用坐标串的集合(x1,y1,x2,y2,…,xn,yn)表示;面实体通常通过记录面状地物的边界来表现栅格数据是按网格单元的行与列排列、具有不同灰度或颜色的阵列数据。每一个单元(象素)的位置由它的行列号定义,所表示的实置隐含在栅格行列位置中,数据组织中的每个数据表示地物或现象的非几何属性或指向其属性的指针。对于栅格结构:点实体由一个栅格像元来表示;线实体由一定方向上连接成串的相邻栅格像元表示;面实体(区域)由具有相同属性的相邻栅格像元的块集合来表示。

2.1.2 栅格数据与矢量数据匹配技术

矢量数据与栅格数据的匹配是为了将两种数据在坐标上重合,以达到栅格图像与矢量图像的叠加显示。影像匹配首先要给出影像数据和矢量数据之间的配准信息,通常配准信息记录在一个专门的文件中,并且作为附加文件和影像数据保存在同一路径下。在加载图像数据时,同时读取配准信息文件,将栅格数据的每个像元行列与二维空间中的 、 坐标对应。MapObjects采用world文件来配准影像数据,其配准公式为:

X=Ax+By+C(1)

Y=Dx+Ey+F(2)

其中:

X表示像元在地图上的X方向坐标值[2];Y表示像元在地图上的Y方向坐标值[2];x表示像元在影像文件中的列数[2];y表示像元在影像文件中的行数[2];A表示影像数据与矢量数据在X方向的比例关系[2];E表示影像数据与矢量数据在Y方向的比例关系,但它为负值,这是由于空间坐标系与影像数据的存储坐标系在Y方向上相反,要匹配,必须将E设为负值[2];C、F表示影像数据的左上角点的像元对应的空间坐标的X、Y坐标[2];B、D表示影像数据的旋转参数,但是在MapObjects中不支持影像数据的旋转,因此这两个参数的值是被忽略的,缺省记录为0[2]。

word文件是一个文本文件,记录的内容包括上述A、B、C、D、E、F六个参数,它们是按顺序连续记录的。这六个参数的获取可以通过两种不同的方法:1)应用专业软件ENVI、PCI等。2)通过在矢量图和位图文件中选适当控制点,然后用最小二乘法拟合求得六个参数。

不同格式影像数据对应的world文件的扩展名不同,表1列出了各种格式影像数据对应的world文件的扩展名。

2.1.3 栅格数据与矢量数据匹配效果

本节以插图形式展示栅格数据与适量数据的匹配效果。其中栅格数据为中国遥感影像图,矢量数据为全国水系矢量图和全国主干公路矢量图。

栅格数据示例如图1。

矢量数据示例如图2,图3。

栅格数据和矢量数据叠加匹配的结果如图4。

2.2 矢量数据物理-逻辑结构转换

2.2.1 Shapefiles的物理结构

Shape文件格式是ESRI 公司开发的一种GIS数据格式[3],Shapefile是最常用的空间数据格式之一[4],在应用MapObjects组件进行二次开发时较为常用。一个Shape文件由一组文件构成,其中必要的基本文件包括坐标文件(.shp)、索引文件(.shx)和属性文件(.dbf)[5]。其中坐标文件记录矢量数据的空间坐标信息;索引文件主要包含坐标文件的索引信息,文件中每个记录包含对应的坐标文件,记录距离坐标文件的头文件的偏移量;属性文件用于记录矢量数据的属性信息,如注记、颜色等。

2.2.2 Shapefiles的类型

Shapefile以点、线、面作为基本的要素,来对地理实体进行建模[6]。从矢量文件实体信息的角度讲,矢量文件分为三种类型:点状矢量文件、线状矢量文件、面状矢量文件。在编辑矢量文件前首先要创建空的矢量文件,此时就要确定矢量文件的文件类型,矢量文件的类型只能为点、线、面三者之一,一个矢量文件不能同时存储两种或两种以上类型的矢量。对于不同类型的矢量文件而言,坐标文件(.shp)的内容是不同的,而属性文件(.dbf)和索引文件(.shx)基本相同。下面简要叙述坐标文件存储的内容。

点状矢量文件存储点状目标(Point)。点状目标由一对X、Y坐标构成,坐标值为双精度(double)数。通俗地说,一个矢量文件为点状矢量文件时,其存储的坐标信息为X方向的坐标和Y方向的坐标两个值。

线状矢量文件存储线状目标(PolyLine)。线状目标是由一系列点坐标串构成的,一个线状目标可能包括多个子线段,子线段之间可以是相离的,也可以是相交的。PolyLine的数据结构如下:

PolyLine

{

Double[4]Box

IntegerNumParts

IntegerNumPoints

Integer[NumParts]Parts

Point[NumPoints] Points

}

各记录项的含义如下:

Box记录了当前线状目标的坐标范围,它是一个double型的数据,按照Xmin、Ymin、Xmax、Ymax的顺序记录了坐标范围;

NumParts记录了当前线状目标所包含的字线段的个数;

NumPoints记录了当前线状目标的坐标点总数;

Parts记录了每个子线段的第一个坐标点在坐标数组Points中的位置,以便读取数据;

面状矢量文件存储面状目标(Polygon)。面状目标由多个子环构成,环是由4个或更多无相交的点按顺序连接而成的闭合曲线[7]。面状矢量文件中的多边形需要满足三个条件:1)构成多边形的每个子环都必须是闭合的,即每个子环的第一个顶点和最后一个顶点是同一个点;2)每个子环在Points数组中的排列顺序并不重要,但每个子环的顶点必须按照一定的顺序连续排列;3)存储的多边形不能有自相交现象,对于一个不含岛的多边形或者是含岛的多边形的外环,它们的顶点排列顺序必须是顺时针方向;而对于内环,它们必须是逆时针方向。

2.2.3 Shapefiles的逻辑结构

从应用的角度讲,在对Shape文件操作时,更像是对一个文件操作而非对三个文件进行操作,但是实际的编辑过程却涉及到三个文件内容的变动。下面将从应用的角度解释Shape文件的结构。

从应用的角度,将Shape文件的三个文件视为一个文件进行操作,也就是逻辑上的Shape文件。该文件所记录的每一个内容块都具有相同的数据结构,这个数据结构涉及到两个方面的内容:1)矢量数据的坐标信息,该内容记录的是矢量数据在地图上的坐标位置;2)矢量数据的属性信息,该内容记录矢量数据的一些属性,如颜色、大小、注记、名称、级别等。逻辑上的Shape文件结构分层为:1)数据块包含坐标信息和属性信息(Recordset);2)属性信息由属性表(TableDesc)组成;3)属性表由属性字段(Field)组成。如图5(图中Tableset的字段数设置为2)。

2.2.4 Shapefiles物理-逻辑结构的转换

读取Shapefiles数据的过程是将Shapefiles的数据由物理结构向逻辑结构转换的过程。由于程序对于文件数据操作时倾向于对一个整体文件进行操作,而非对三个文件进行操作,因此读取Shapefiles数据时,是将物理上的三个文件作为逻辑上的一个文件进行读取的。逻辑上的一个文件结构在2.2中已详细叙述。在逻辑结构中各个字段的字节数因实际情况的不同而不同。如果是自己创建的Shapefiles,那么其中各个字段的字节数是已知的,如果是采用他人的Shapefiles,想要知道文件的字段信息,就要阅读矢量文件说明。读取Shapefiles数据就是将三个文件中的相关数据信息读取为图5的一个整体结构,然后对相关数据进行操作。

存储矢量数据为Shapefiles文件时,是将矢量数据由逻辑结构向Shapefiles的物理结构转换的过程,具体操作是将如图5的一个结构的整体矢量数据写为相应的三个文件。在进行矢量数据的存储时,首先要创建空的Shapefiles空文件,同时指定属性字段,包括字段长度、字段名称等。

在读取/存储矢量数据时,首先要明确矢量文件的类型,也就是说矢量文件存储的是哪类实体信息。在利用MapObjects进行二次开发时,对Shapefiles文件的操作是有限制的,一个Shapefiles只能存储一类实体信息。因此,在读取/存储矢量数据时,需要明确矢量文件存储的实体信息类型,然后根据不同的实体信息类型,应用不同的对象进行数据读取/存储操作。

2.3 信息分类显示

2.3.1 信息分类显示

专题图件编辑的过程中,信息量较大,包括不同矿物、岩石,甚至断层、行政信息等。信息分类显示技术针对解决专题图件编辑的过程中多信息不同显示同文件存储的问题。

信息分类技术是图像分级技术的扩展。图像分级显示是将不同级别的地物用不同的符号显示。但是,我们常常希望将地物用不同的符号显示而并非因为它们是不同级别,因此,将此技术作以扩展,就是将同一图像文件中的图像信息按照自身需求显示,就形成了本节所述的信息分类显示技术。在专题图件编辑软件开发的过程中,一般是对矢量图像文件进行分类显示。分类显示的目标不仅仅局限于矢量数据坐标形状特征,也可以是矢量数据的其他信息。

Shapefile文件通过标注属性字段来实现文件显示[8],因此,信息分类显示的依据是矢量数据的相关属性字段。本文在2.3中针对于矢量数据的读取/存储操作给出了矢量文件――Shapefiles的逻辑结构。在此,将从信息分类显示的角度解释矢量数据的逻辑结构。在对读入的矢量数据进行操作时,有两点内容需要关注:1) 矢量坐标信息;2) 矢量属性信息。这两类信息对应于矢量文件中的坐标文件(.shp)和属性文件(.dbf)。数据读入程序后,按照处理需要,将矢量数据的结构解释如图6。

图6中将矢量数据的逻辑结构简化为两个字段,实际上,其中的名称字段只是属性字段中的一个,表示的是该矢量数据的名称。一个矢量数据只有一个坐标字段,但是会有多个属性字段。这些属性字段记录的是一个矢量数据的相关属性信息,如名称、显示要素。

2.3.2 信息分类显示实现技术

利用MapObjects实现信息分类显示主要有以下几个步骤:

第一步,设定分类显示的对象字段。也就是要将矢量数据的哪项信息分类显示。该字段一般为矢量坐标字段或者矢量注记字段。

第二步,设定分类显示的依据字段。分类依据字段是分类判断的标准,存储分类显示对象字段的类别。实际是依据矢量数据的哪个字段的信息将显示信息分类。在分类显示时,自己设定一个标准,当分类显示的依据字段内容符合这个标准时,该字段所对应的矢量数据就会以不同的符号显示。

第三步,设定分类显示的符号。符号内容包括:大小、颜色,如果显示信息为文字,则符号内容还可包括字体。符号的内容一般作为矢量数据的属性信息存在于矢量文件中。

由于分类显示技术中,分类判断是必需的步骤,因此,在信息分类显示技术中,还会应用到“假分类”技术。分类显示所需要的“类别”在需要分类显示的矢量文件中并不是很明显,也就是说矢量数据之间没有很特殊的区别,此时可以“假分类”。意思是将依据字段设定为名称字段,然后判断标准为名称字段的内容等于矢量数据的名称(这是个永远成立的条件,对于应用者并没有真正分类,但是对于程序而言已经执行了分类的步骤)。“假分类”并非一定要用名称字段,只要是利用判断结果永真的字段进行分类均可称为“假分类”。经实验,虽然判断条件永真,但如果没有这样的判断,分类显示就会失败。

2.3.3 信息分类显示示例

图7为一个矢量文件分类显示的实例。该矢量文件为点状矢量文件,分类显示的对象字段为名称字段,依据字段也为名称字段。应用“假分类”对该矢量文件进行分类显示。将三个点的名称以不同符号(本例选取颜色和大小)进行显示。如果不进行分类显示,只是将三个点对应的名称进行显示,则三个点的名称以同一符号(颜色、大小、字体等)显示,如图8。

图7 矢量数据分类显示示例 图8 矢量数据未分类显示示例

3 结论

组件式GIS开发是一种灵活的、GIS功能较为完整的开发方法。在专题图件编辑软件开发中应用较为广泛。本文叙述了MapObjects组件在专题图件编辑软件开发过程中的三项关键技术――栅格数据和矢量数据的匹配、矢量数据物理-逻辑结构的转换、信息的分类显示。

栅格数据和矢量数据的匹配技术解决不同坐标格式图像数据的精确叠加问题。对于专题图件编辑软件来讲,底图的相关信息需要通过叠加相关矢量数据进行显示说明。因此,将矢量数据精确的表示在栅格底图的某一位置就需要通过栅格数据和矢量数据的匹配技术来实现。矢量数据物理-逻辑结构的转换技术主要解决矢量数据的读取/存储问题。要对矢量数据进行操作,首先要对其外在物理结构和内部处理时的逻辑结构有所了解,进而实现两者之间的相互转换。这样才能准确的处理好矢量数据的读取/存储操作。信息的分分类显示技术是丰富图像显示信息的重要手段之一。应用该技术可以减少不必要的矢量文件。将相似相关但需不同显示的数据存储于一个文件,利用分类显示技术将数据按其本身显示需求进行显示。这样既实现了各矢量数据的显示需求,还减少了不必要的文件开销。

利用MapObjects组件开发时,还会因具体问题应用到其他的相关技术手段。本文叙述的三个技术手段是开发过程中相对基础、常用的技术。为应用MapObjects组件进行开发提供一定的参考。

参考文献:

[1] 周松艳.MapObjects在集卡路径优化中的应用[J].武汉交通职业学院学报,2009,11(2).

[2] 韩鹏.地理信息系统开发-MapObjects方法[M].武汉:武汉大学出版社,2004.

[3] Environmental Systems Research Institute.ESRI shapefile technical description[R/OL]./library/whitepapers/pdfs/shape2file.pdf.1998207.

[4] 王方雄,满慧嘉.基于GML的网络GIS数据互操作方法研究[J].地理空间信息,2008,6(5).

[5] 郝燕玲,唐文静,赵玉新,等.Shapefile格式电子海图数据集成存储研究[J].微计算机信息,2008,24(7-3).

[6] 卜坤,张树文,杨久春,等.基于Delaunay三角网的Shapefile几何纠正算法与实现[J].吉林大学学报(地球科学版),2008,38(3).

[7] 张新宇,陈殿友,杨天行.ARC_VIEW中Shapefile数据结构剖析及格式转换[J].吉林大学学报:信息科学版,2003,21(4).

[8] 陈小虎,董竹,陈凯.MapGIS文件快速转换Shapefile文件的研究[J].城市勘测,2008(1).

上一篇:《ASP.NET技术及应用》课程教学与实践 下一篇:基于信息素质的计算机基础教学过程的优化