点状地图符号制作系统的
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
和实现
李天宏 薛 安 杨海宏
(北京大学遥感与地理信息系统研究所 100871)
【摘 要】 地图符号的制作是数字制图的基础。地图符号根据表示的事物分布特点可分为:点状符号、线状符号和面状符号,其中点状符号的制作比较复++杂。本文基于VISUAL C4.0编程语言,在分析点状地图符号的特点后,设计了一个矢量点状符号制作系统,并给出了系统实现的关键数据结构。
地图符号包括各种形式不同、大小和色彩各异的图形符号以及表示名称的文字和表示数量的数字,它传输地理事物的空间分布,被称为地图的语言。每类具
色彩和色调)、结构(晕线、花纹和图体的符号都以其一定的形状、尺寸、颜色(
案)、位置、方向(这些属性称为符号的视觉变量)相互区别。地图符号根据所表示事物的分布特点可分为:点状符号、线状符号和面状符号。其中点状符号表示的事物在地图上所占面积很小,只能以点的形式来表达。比如表示居民地的圆圈、表示煤矿的小正方形和表示机场的小飞机等。点状符号又可分为几何符号、文字,1,符号和象形符号三种。
目前,随着计算机技术、信息技术、遥感技术的飞速发展,传统的绘制地图方法正逐渐被数字制图的新技术取代。地图符号的制作则是数字制图的基础。
一、系统设计的原则
1. 完备性
系统应能够制作所有现有的
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
地图的图式,例如地形图、地籍图等,此外也要支持各种专题地图(地质图、环境
评价
LEC评价法下载LEC评价法下载评价量规免费下载学院评价表文档下载学院评价表文档下载
图等)的符号。
2. 灵活性
由系统制作的符号存入符号库,供地图输出模块调用。因此产生的符号必须具有高度的灵活性,如符号的色彩、大小、旋转、位置等视觉变量应为外部可调的。
3. 精确性 ,2, 地图是地理信息系统分析结果的重要输出成果之一,地图符号的精度直接影响地图的精度和价值。符号的设计和绘制必须满足地图精度的要求,比如定位点的精度要高,符号的放大、缩小和旋转不能变形等。
4. 易用性
地图符号的视觉变量都有严格的定义,要制作满足国家或行业标准的符号还是比较繁复的,因此系统要提供用户方便的工具和良好的用户界面。操作的热键和鼠标的定义应尽可能地和常用应用软件(比如WORD文字处理系统)一致。
图1 符号库的文件结构
二、符号库的逻辑结构设计
系统制作的符号存为符号库文件,其结构见图1,由地图输出模块调用。
为了便于调用,每个符号库根据逻辑关系可分为若干分区,每个分区内存放着逻辑上接近的符号(具体如何分区由用户根据实际情况控制)。
三、系统的模块设计
根据符号库的逻辑结构和设计原则,系统的功能模块组成如图2所示:
系统的功能模块设计和用户界面的特点和常用的基于WINDOWS的应用软件相似,既提供了满足符号设计的基本符号元素的绘制,又提供了符号元素属性修改和排列的各种辅助工具。
图2 系统主要功能模块图
四、类定义
本系统基于日益广泛使用的WINDOWS95/WINDOWS NT操作系统平台,充分利用了WINDOWS提供的强大图形图像获取、处理和输出功能以及设备管理和内存管++理优点。编程语言选用VISUAL C4.0及其为WINDOWS面向对象编程所设计的的MFC (Microsoft Foundation Class)类库。
在图2中,符号的编辑和绘图模块是系统的核心。有关的类定义如下;
1. 符号类(CSymbol)
符号类(CSymbol)封装了点状符号的属性和操作。CObject是MFC中所有类的基类(或称为父类)。CSymbol从CObject中继承出来,可以利用CObject所固有的特性。
class CSymbol: public CObject
{
// 成员变量
DWORD mnUserID;// 用户对符号的编码 -
CString mstrName;// 符号的名称 -
COLORREF mcrForeColor; // 符号的前景色(红、绿、蓝) -
COLORREF mcrBackColor; // 符号的背景色(红、绿、蓝) -
CSize msizeSymbol; // 符号的尺寸 -
CPoint mptHotSpot;// 符号的定位点 -
CObList molDrawObject;// 符号图形元素的链表 -
// 主要成员函数
DrawSymbol(……);// 实现在指定位置,以指定的前景色、背景色和旋转角度绘制该符号
}
2. 符号图形元素类(GDrawObject)
无论是几何符号,文字符号还是象形符号都由一些基本的图形元素组成。这些图形元素包括点、线、矩形、圆角矩形、圆、椭圆、圆弧、扇形、多边形、正多边形、星形和文字等。各个符号元素具有其自身的属性和操作。GDrawObject类封装了所有这些符号元素的共同属性和操作,具体的符号元素都由GDrawObject类中派生出来。
class GDrawObject:public CObject
{
// 成员变量
CRect mposition; // 符号元素的位置和大小 -
static COLORREF mcrForeColor; -
static COLORREF mcrBackColor; -
LOGPEN mlogpen; // 绘制符号元素边框的笔的宽度、颜色和线型 -
LOGBRUSH mlogbrush; // 填充符号元素内部的刷子的类型、颜色等 -
// 成员函数(略)
};
3. 点类(GDrawDot)
class GDrawDot:public GDrawObject {
点的位置取GDrawObject中矩形mposition的左上角 -
};
4. 线类(GDrawLine)
class GDrawLine: public GDrawObject
{
线的两点取GDrawObject中矩形mposition的左上角和右下角 -
}
5. 矩形类(GDrawRect)
class GDrawRect:public GDrawObject
{
BOOL mnShape; // 圆角矩形? -
CPoint mroundness; // 定义了圆角的大小 -
};
6. 椭圆类(GDrawEllipse)
class GDrawEllipse:public GDrawObject
{
GDrawObject中矩形mposition定义了椭圆的大小 -
};
7. 圆类(GDrawCircle)
class GDrawCircle:public GDrawEllipse
{
特殊的椭圆,GDrawObject中矩形mposition为正方形 -
; }
8. 椭圆弧类(GDrawArc)
class GDrawArc:public GDrawObject
{
CPoint mBeginPoint; // 椭圆弧的起点 -
CPoint mEndPoint; // 椭圆弧的终点 -
这两点连同CDrawObject中矩形mposition定义了椭圆弧的位置和大-
小
};
9. 饼图类(GDrawPie)
class GDrawPie:public GDrawArc
{
封闭的椭圆弧
};
10. 折线类(GDrawPolyline)
class GDrawPolyline:public GDrawObject
{
int mnpoints; // 折线的点的数目 -
CPoint mpPoints; // 存放折线点的数组 -
};
11. 多边形类(GDrawPolygon)
class GDrawPolygon:public GDrawPolyline
{
封闭的折线
};
12. 正多边形类(GDrawNPolygon)
class GDrawNPolygon:public GDrawObject
{
double mlfAngle; // 旋转角度 -
WORD mwLength; // 正多边形的边长 -
WORD mwEdges; // 正多边形的边数 -
CPoint mptOrg; // 正多边形的中心点 -
; }
13. 星形类(GDrawStar)
class GDrawStar:public GDrawNpolygon
{
和正多边形的绘制函数不同
};
14. 字符类(GDrawChar)
class GDrawText:public GDrawObject
{
LOGFONT mlfFont; // 字符的字体、大小、方向等 -
CString mstrChar; // 字符 -
};
图3是上述符号元素类的继承/派生关系。
图3 符号元素的继承或派生关系
作为一个实用的符号制作系统,为了方便用户的操作,比如每个符号对象在选中时,所有控制点处都有一个小方块(TRACKER),方便用户用鼠标进行拖拉(drag and drop),每个符号元素类内都有相应的辅助变量,本文为节约篇幅只列出设计符号属性的主要成员变量。
五、系统演示
系统运行环境为WINDOWS95或者WINDOWS NT,在WINDOWS95中运行结果如图4所示:
由本系统制作的符号在环境评价和地籍管理制图中得到了应用,出图的效果令人满意。
图4 系统在WINDOWS95上的演示
参考文献
,1, 陆漱芬.地图学基础.北京:高等教育出版社,1987
,2, 党安荣,乔彦友.地理信息系统图例库的研究.地理科学,1996,16(4)