时间:2024-07-28
张彦敏 芮小平 刘真余
(1.交通运输部科学研究院;2.中国科学院研究生院资源与环境学院)
地图符号是地图的语言单位,通过对地图符号的解读,可以直观地了解地图所表达的地理信息。无论是在地理信息系统,还是在地图制图系统中,地图符号设计均是其主要功能模块之一。ArcGIS Engine是一组完备的并且打包的嵌入式GIS组件库和工具库,不过,它只提供了基础地图符号模型和地图符号管理对象模型,没有提供地图符号管理和符号制作的工具。采用ArcGIS Engine进行应用系统开发,一个需要解决的问题就是地图符号化问题,但现有的方法均存在一定程度的不足[1]。
在煤层气地面集输地理信息系统中,涉及到各类气井符号、阀门符号、管线符号等,这些符号的绘制需要符合我国煤层气地面集输的行规。不管是ArcMap桌面版的符号库还是ArcGIS Engine本身的符号库都无法满足该行业符号绘制的需求。在实际应用中,系统用户还要根据实际应用的需要来制作新的符号或者修改符号,所以需要基于ArcGIS Engine研建一套地图符号制作工具,来满足用户针对不同行业符号定制的需求。煤层气地面集输系统的生产元素符号库设计是GIS可视化的重要组成部分,本研究结合煤层气地面集输地理信息系统的项目需求,研究了利用C#编程语言和ArcGIS Engine开发行业特色符号库的一般方法,重点研究了符号(点符号、线符号和面符号)的绘制方法、符号库全数据库储存方案、符号的使用配置方案以及符号库的导入导出与管理。
ArcGIS Engine的符号系统在充分挖掘Display库内部已有接口的基础上进行扩展,以达到对符号库进行扩充的目的。ArcGIS Engine的符号体系如图1所示。
从地图符号的约定性及其表示的抽象概念可以把地图符号分为点状符号、线状符号和面状符号[2]。点状符号有且只有1个定位点,它的大小与比例尺无关,由1种或几种图元按不同的排列方式组合而成;线状符号表示线状延伸的地物,具有方向性,长度与比例尺有关系而宽度与比例尺没有关系;面状符号表示空间上的二维地物,所处的范围与比例尺有关。
图1 ArcGIS Engine的符号体系
符号绘制有很多方法[3-7],本系统考虑到用户使用的方便性,符号制作系统的交互界面设计为一个绘图程序,用户可以新建符号像使用Windows绘图程序一样绘制所需的符号形状。在符号绘制工具选用的C#类库中的 System.Drawing.Graphics类提供将对象绘制到显示设备的方法。当符号绘制完成后,关键参数以数据库存储,目前国内已经有学者对符号的关系型数据库存储作了研究[8],针对不同几何类型的符号的特征,提取出相关的采用符号的关键参数都用XML文件存储到ORACLE数据库中,每个符号由1个头记录和若干个不定长的图元数据记录组成,具体关键参数描述如下。
(1)符号头记录。符号头记录由多个数据字段组成,分别描述整个符号的编码、总数据长度、图元数据记录总数、分类编码等信息。每个头记录由10个字节组成,其结构如表1所示。
表1 符号头记录
(2)图元数据记录。图元数据记录描述组成符号的每个基本图元(线、填充区、圆等),为不定长记录,其最大长度为128 k字节。
(3)基本图元记录。基本图元记录的数据部分由线、填充区、字符及图元记录头信息和相应的坐标信息组成。图元记录头信息由6字节组成,描述这个基本图元的类型、画笔宽度、颜色、坐标点个数等信息。其结构如表2所示。
表2 基本图元记录
符号绘制后,将符号关键的参数存储到数据库中,同时将绘制的符号保存为BMP文件。用户在绘图区域绘制好图像后,假如保存为点符号,则用下面语句即可新建一个点图片符号:
IPictureMarkerSymbol m_PictureMarkerSymbol=new Picture Marker Symbol Class();
m_PictureMarkerSymbol.CreateMarkerSymbolFrom File(esriIPictureType.esriIPictureBitmap,pPicture Path);
其中的第1个参数esriIPictureType.esriIPicture Bitmap是指Bmp格式的图像,第2个参数pPicture Path是指该Bmp文件的存储路径,符号被存储在ESRI的.ServerStyle文件中,为了方便以后对该符号进行编辑修改,中间过程中的参数会被存储到数据库中,符号绘制的流程如图2所示。
图2 绘制符号的流程
用户可以在符号选择其中选择系统需要的符号来配置地物,可以调整符号的大小、方向和颜色等,不同的符号类型的配置方法描述如下。
点符号的配置:IMarkerSymbol是所有点状符号的基本接口。所有其他点状符号接口继承了IMarkerSymbol的属性和方法。成员Angle(属性)是点状符号的旋转角度。旋转方向是逆时针,并且ArcMap假定点状符号的方向是水平的(指向笛卡尔坐标系的X轴正向)。Color(属性)是点状符号颜色。Col-or是点状符号的基本颜色。任意ArcMap颜色接口都可能被用于创建颜色对象。BarChartSymbol类不支持Color。Size(属性)是点状符号的大小(高度或宽度的最大值)。以point为单位。XOffset是点状符号在水平方向的偏移量。偏移量可以是正值也可以是负值。YOffset是点状符号在竖直方向的偏移量。偏移量可以是正值也可以是负值。
线符号配置:ILineSymbol接口,提供控制线符号的成员。ILineSymbol是 ISimpleLineSymbol、ICartographicLineSymbol、IHashLineSymbol、IMarkerLine-Symbol和IPictureLineSymbol的通用属性接口。成员包括Color线状符号颜色,Width线状符号宽度。
面符号配置:IFillSymbol接口,提供控制填充符号的成员包括IFillSymbol是ILineFillSymbol、IMarkerFillSymbol、IGradientFillSymbol 和 IPictureFill-Symbol的通用属性接口。其中Color为填充颜色,Outline为填充边线的线型。
系统中的点符号例如控制阀、压力传感器、温度传感器等符号有方向性,当配置这种点符号时,程序会根据该点符号相邻的线段的角度,主要调用线段的Angle属性来计算出点符号的角度,使该点符号能很好地符合相邻线段的方向,地图元素显示会更加美观。
用户配置完毕后,符号配置信息会保存为XML文件,当用户下次进入系统后,系统会读取XML文件,自动配置图层的符号,如图3所示。
图3 符号配置流程
符号导入导出:可以将外部的ServerStyle文件中符号导入到系统本身的ServerStyle文件中,也可以将系统的ServerStyle文件中导出。符号库管理器:读取系统的符号文件,进行浏览,并能将符号删除。该模块的使用的关键接口为IStyleGalleryStorage,IStyleGallery,IStyleGalleryStorage 接口负责读取系统的符号库文件(如:煤.ServerStyle文件),关键代码如下:
pStyleGalleryStorage.AddFile(Application.StartupPath+ “煤.ServerStyle”);
pStyleGalleryStorage.TargetFile=(Application.StartupPath+ “煤.ServerStyle”);
IStyleGallery接口负责读取符号类型,如点符号,线符号,面符号,文字符号等等,按照煤层气地面集输地理信息系统的需要,只需要读取点线面符号类型,并通过TreeView控件显示管理。当用户点击某一符号类型后,会通过IEnumStyleGalleryItem接口去读取pStyleGallery变量中符合要求的符号,并将读取后的符号在窗口中显示。
以上符号化方法应用到了“煤层气地面集输地理信息系统”当中。该系统是基于ArcGIS Engine+Visual Studio2005开发的[9-10],向用户提供地图符号的制作管理功能。
(1)符号制作功能(如图4)。符号制作系统的交互界面设计为一个绘图程序,用户可以新建符号像使用Windows绘图程序一样绘制所需的符号形状,或者打开已有的.BMP符号文件进行编辑,用户完成符号绘制后点击保存按钮,就会弹出符号保存对话框,首先选择符号类型,点线面选择1种,然后选择符号分类,如果没有用户需要的类型,用户可以新建分类,然后输入符号名称,点击确定按钮。
图4 符号绘制界面
(2)符号选择器(如图5)。用户单击图层列表中的符号图形,即可弹出符号选择器,选择用户需要的符号,用户可以改变符号颜色、大小、角度,将地图中原有的符号替换掉。
(3)符号导入导出功能(如图6)。符号导入时首先要选择ServerStyle文件,用户根据需要可以选择符号文件中的具体符号类型导入,也可全部导入。确定后,会在符号导入导出主窗口中浏览刚才选中符号。点击确定后,符号导入到系统本身的Server-Style文件中。符号导出是将当前系统的ServerStyle文件导出,用户只需选择保存位置即可。
图5 符号选择界面
图6 符号导入导出
(4)符号管理器的功能(图7)。用户可以在符号管理器中浏览系统中的符号,可以选择大图标小图标或详细信息进行预览,并可以进行符号删除。
采用自定义制作后的符号化整体效果如图8所示。
图7 符号库管理器
本文基于ArcGIS Engine的煤层气地面集输地理信息系统中的地图符号制作管理工具的研建,介绍了地图符号的制作、地图符号库的建立、符号库的导入导出、符号管理以及地图符号化模块的设计与实现。该工具是一个独立的模块,它既可独立运行,也可嵌入到基于ArcGIS Engine的其他GIS应用系统中。实际开发应用表明,该地图符号制作管理工具的效果可以与ArcMap桌面版中的符号工具相比,并且绘制符号方法简单,提供给用户的绘图交互界面,使不具备GIS专业知识的用户也可进行操作,同时开放式的设计使用户在制作新的符号时,可直接加进去,能够很好地满足用户扩充地图符号库的需求。
图8 符号化效果
[1] 尹鹏程.基于ArcEngine符号系统的实现与扩展[J].四川测绘,2006,5(2):72-73.
[2] 李津平.基于Intemet地图符号化研究[D].北京:中国科学院遥感应用研究所,2003.
[3] 张园玉,李 霖,龙 毅.地图符号系统的设计与实现[J].测绘信息与工程,2004,29(6):25-27.
[4] 李鸿基.ArcGIS中自定义地图符号[J].计算机与现代化,2004(4):113-114.
[5] 祁华斌,艾廷华,胡 珂.基于ArcGIS的地图符号库建立与符号化实施[J].测绘通报,2003(1):14-17.
[6] 刘丙方,刘冰晶,狄丽娟.基于ArcObjects的特殊符号开发方法[J]. 矿山测量,2004,6(2):21-22.
[7] 谈晓军,边馥苓,何忠焕.地图符号可视化系统的面向对象设计与实现[J].测绘通报,2003(1):11-13.
[8] 蔡国林,李永树,冯德俊.基于ArcGIS Engine地图符号化模块的设计与实现[J].计算机应用研究,2006,89(12):268-270.
[9] 陈飞翔.移动空间信息服务关键技术研究[D].北京:中国科学院研究生院,2006.
[10] 韩 鹏,徐占华,褚海峰.地理信息系统开发ArcObjects方法[M].武汉:武汉大学出版社,2005.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!