地图符号库

地图符号库的面向对象技术与引用接口设计

吴立新 刘纯波 陈桂茹 崔志琳

摘要 本文利用面向对象的思想,对地图符号进行了制图分类,从地图符号中抽象出构造地图符号的15个基本图元,设计了基本图元对象类的类层次结构关系、服务于符号制图的三个空间坐标数据结构类以及点、线、面三类地图符号的统一外部引用接口。
关键词 符号库 地图 面向对象设计 GIS

地图是地理信息系统(GIS)的重要组成部分,GIS就是一种以地图为基础的空间信息系统。地图符号是地图的语言,是地图的主要表达形式。因此地图符号库的设计在GIS以及各种数字化制图系统中占有重要的地位。随着计算机技术的发展,面向对象程序设计思想得到了广泛的实践与应用。利用面向对象的设计思想设计地图符号库,可以大大地优化符号库的数据结构组织,提高符号库的可移植性与设计效率。本文首先阐述了面向对象的基本概念,然后运用面向对象的思想对地图符号进行了制图分类,最后在地图符号分类的基础上,设计了地图符号库面向对象设计模型与数据结构。

1 面向对象概念

面向对象(Object-Oriented)方法也称面向目标方法,是为克服软件质量和软件生产率低下而发展起来的一种程序设计方法。近年来,面向对象技术在程序设计、数据库等方面的应用都取得了很大的进步。面向对象的方法假定无论多么复杂的事物都可以准确地由一个对象表示。每个对象是一个包含了属性集(数据成员)和方法集(成员函数)的实体。面向对象方法除属性与方法封装性(Encapsulation)和继承(Inheritance)、传播(Propagation)两个语义工具外,还有以下四个基本概念:〔1〕〔2〕
a 分类(Classification):具有相同属性和方法的对象的集合形成类(Class)。每个对象都是该类的一个实例(Instance)。同类的对象共享相同的方法集与属性集,但每个对象可能有不同的属性值。
b 概括(Generation):将若干类所具有的相同属性与方法抽象出来,形成一种更一般的超类(Hyper Class)即概括。借助于继承语义工具,超类可以派生出若干子类,子类具有超类的部分属性集和方法集。
c 联合(Aggregation):将若干同一类的对象(实例)组合起来,设立一个更高水平的对象,以表示相同的属性和方法。联合的实质为同类对象的集合。
d 聚集(Association):将若干不同类的对象(实例)组合起来,形成一个更高水平的复合对象。不同类的对象是该复合对象的一个组成部分,彼此有独立的属性集与方法集,复合对象从子对象的派生中获得信息。聚集的实质是不

同类对象的集合。

2 地图符号制图分类

按照面向对象的思想,根据地图符号的制图特性及其所表示的地物与地理现象的分布特征,地图符号分为点状符号、线状符号、面状符号分为三个一级类。地图注记因为与点状符号在诸多方面的相似性,故归于点状符号一级类。

2.1 点状符号

点状符号表示空间上的零维地物和地理现象。点状符号图形比较规则、固定,不随它在地图上的具体定位位置变化而改变。在地图上,点状符号都有确切的定位点和方向性。根据点状符号的制图特性,点状符号可进一步分为以下二级分类:
a 独立点状地物 包括点状地物符号、点状分布的地理现象、点状图面整饰符号。
b 地图注记 包括点状符号、线状符号、面状符号的地图注记以及文字型地图整饰。

2.2 线状符号

线状符号表示空间上的一维地物和地理现象。线状符号的显著特点是有一有形或无形的空间定位线。根据线状符号的分解特性和图形的对称特性,线状符号分以下六个二级分类:
a 一般直线型线状符号 符号由直线沿定位点连接生成。
b 点状符号型线状符号 符号由点状符号沿定位线线性排列生成,定位线隐藏。
c 圆弧型线状符号 符号由定位点的圆弧连接生成。
d 样条曲线型线状符号 符号由定位点确定的样条曲线生成。
以上四个二级分类是按照线状符号的生成方式分类的,它们概括了由空间定位点生成线状符号的所有方式。
e 平行线型线状符号 符号由平行于定位线的两条线状符号生成。平行线的线型可以是a、b、c、d四种线。根据符号的定位方式,又可分为中线定位、左(上)线定位、右(下)线定位三个子类。
f 复合线状符号 由以上五类线状符号复合而成。在面向对象概念里面,表现为聚集与派生关系。

2.3 面状符号

面状符号表示空间上的二维地物和地理现象的分布。面状符号都有一个或多个有形或无形的封闭的边界线。为区别地物的性质和地理现象空间分布的数量、质量,面状符号常采用一定的充填方式。根据充填方式的不同,面状符号分布为以下三个级分类:
a 颜色充填面状符号 以不同的颜色来区分面状地物的性质和地理现象的二维分布的数量、质量。
b 晕线充填面状符号 以多边形区域充填不同的线状符号来区分面状地物的性质和地理现象的二维分布的数量、质量。根据晕线的充填方式,可进一步细分为基本单晕线充填、基本双晕线充填、组合晕线充填三个子类。
c 点状充填面状符号 以多边形区域充填不

同的点状符号来区分面状地物的性质和地理现象的二维分布的数量、质量。点状符号的充填有规则散列充填与不规则散列充填之分。不规则散列充填实际上反映了地理现象空间分布第二级的不均匀性,制图上宜采用区域细分,从而转化为规则散列充填方式。
以上面状符号二级分类是按照充填方式进行分类的,按照面状符号的边界类型,面状符号可以分为矩形、圆角矩形、椭圆、多边形四类。多边形可细分为直边多边形、样条曲边多边形两个子类。

3 地图符号库的面向对象设计

符号是由基本图元对象类实例聚集而成的复杂对象。根据上述地图符号的制图分类以及符号设计的基本要求,可以将符号分解为以下15种基本对象类:点(CCellPoint)、注记(CCellText)、直线(CCellLine)、点划线(CCellPoint_Line)、圆弧(CCellArc)、样条曲线(CCellBezier)、折线(CCellPoyline)、双线(CCellDbLine)、矩形(CCellRect)、圆角矩形(CCellRoundrect)、椭圆(CCellEllipse)、多边形(CCellPolygon)、颜色充填(CCellColor-Fill)、晕线充填(CCellLile-Fill)、点状符号充填(CCellPoint_Fill)。依据面向对象思想,可以将不同类中具有相同数据成员或操作方法的类抽象出来,生成一个更高层次的超类(CCellElement)。点和注记可以抽象出点状符号超类(CPointElement)。直线、点划线、圆弧线、样条曲线、折线、双线可抽象出线状符号超类(CLineElement)。矩形、圆角矩形、椭圆、多边形可抽象出区域超类(CRegionElement)。颜色充填、晕线充填、点状符号充填可抽象出充填超类(CFillElement)。基本图



附图 基本图元对象类层次图

元的类层次关系如附图所示。
上述符号类层次体系中,符号的定位信息由以下三个坐标数据类定义:
(1)点坐标类CCoordinate
Class CCoordinate
{
Public:
float x,y,z;∥设置三维坐标,以方便向三维扩展
Private
CCoordinate(float x,float y,float z=0);∥z坐标缺省置为0,方便二维操作
~ CCoordinate();
}
(2)坐标串类CCoordinateList
Class CCoordinateList:Public CObList∥继承MFC的CObList类,以减化操作
{
public:
CCordinate Point;
Private:
CCoordinateList(Coordinate point);
~ CCoordinateList ();
}
(3)边界串类CEdgeList
Class CEdgeList:Public CCoordinteList
{
pubic:
CCoordinateList pointList;
CRegionElement edgeStyle;∥边界的线型
Private:
CEdgeList(CCorrdinateList pointList,CRegionElement edgeStyle);
~ CEdgeList()
}
限于篇幅,以下将不列出各类的具体属性集与方法集的定义,只分点、线、面三类说明各类符号的外部引用参数接口。

3.1 点状符号设计

Draw(CCoordinate point,float angle,float sca

le)
其中:
Point——符号在地图上的定位位置坐标;
angle——符号的旋转角度;
scale——符号的比例因子。

3.2 线状符号设计

Draw(CCoordinateList PointList,float scale)
其中:
pointList——线状符号的定位线控制点坐标串;
scale——符号的比例因子。

3.3 面状符号设计

Draw(CEdege edgeList,CFillElement fillStyle,float angle,CCoordinate distance)其中:
edgeList——区域的外边界及内岛的边界坐标、边界线型;
fillStyle——区域的充填模式;
angle——区域充填的走向;
distance——充填的二维间距。

4 结论

a利用面向对象的思想,地图符号按制图特性可分为点、线、面3个一级类11个二级类。
b 地图符号按构造特性可归结为点(CCell Point)、注记(CCellText)、直线(CCellLine)、点划线(CCellPoint_Line)、圆弧(CCellArc)、样条曲线(CCellBezier)、折线(CCecPolyline)、双线(CCellDblLine)、矩形(CCellRect)、圆角矩形(CCellRoundrect)、椭圆(CCellEllipse)、 多边形(CCellPolygon)、颜色充填(CCellColor-Fill)、晕线充填(CCellLine_Fill)、点状符号充填(CCellPoint_Fill)15种基本图元生成类。依据面向对象思想,可以将不同类中具有相同数据成员或操作方法的类抽象出来,生成一个更高层次的超类(CCellElement)。点和注记以抽象出点状符号超类(CPointElement)。直线、点划线、圆弧线、样条曲线、折线、双线可抽象出线状符号超类(CLineElement)。矩形、圆角矩形、椭圆、多边形可抽象出区域超类(CRegionElement)。颜色充填、晕线充填、点状符号充填可抽象出充填超类(CFillElement)。
c 为便于符号的程序表达和引用,设计了点坐标类CCoordinate、坐标串类CCoordinateList、边界串类CEdgeList三个空间坐标数据结构类和点、线、面符号的统一外部引用接口。


相关文档
最新文档