MapObjects地图填充符号库扩展

 

在地图制图学中,将所有的地图符号划分为三大类:点状符号、线状符号和面状符号。

    各种GIS平台都有自己的符号库用于地物的表示。ESRI的ArcMap中就提供了非常丰富的地图符号库,在安装目录下的Bin/Styles目录中你会发现许多以.Style的文件,这些文件中存储的就是一些符号信息。另外安装目录下的Styles目录中有许多以.ServerStyle为扩展名的文件,这些也是ESRI提供符号库文件,不过这些是专门提供给ArcGis Engine使用的。关于.Style和.ServerStyle的信息访问www.esri.com可以获得更多的信息。通过这些符号库用户可以在ArcMap中制作出各式各样的专题地图。ArcMap中提供的符号信息非常丰富,基本满足了用户的需求,当然在不够用的情况下还可以自己增加符号库中的符号,甚至制作一套自己的符号库。

    MapObjects是ESRI提供的一组供应用开发人员使用的制图与GIS功能组件。它由一个OLE控件和一系列可编程OLE对象组成。利用MapObjects, 开发人员可以在应用程序中添加制图和GIS功能。由于利用MapObjects组件开发出系统开销小,开发周期也相对短些,因此许多应用系统都采用它。ArcGIS Engine是ESRI ArcGIS 9系列中推出的高级地图应用组件,功能非常强大开发也非常容易,对于MapObjects和ArcGIS Engine ESRI的观点好象是更推荐使用ArcGIS Engine进行开发,不过ArcGIS Engine占系统资源多,普通配置的机器运行ArcGIS Engine开发出来的系统比较慢。

    还是回到符号上来,MapObjects对点、线、面地理要素分别提供了相应的符号。

    1、点符号:MapObjects提供了4个基本的点符号,不过可以通过TrueType字体对点符号进行扩充,如:Wingdings索引为81的符号就是一架小飞机了。可以用造字程序创建自己的TrueType字体符号库,Font Creator Program 是一个TrueType字体造字程序非常好用。另外还可以实现ICustomMarker进行扩充。不过使用TrueType字体比实现ICustomMarker的操作更为有效方便。
 
    2、线符号:MapObjects只提供5个基本的线符号,需要更多的线型只能自己通过实现ICustomLine接口来扩充。

    3、面符号:MapObjects中包含11中填充的符号。与点、线符号类似可以通过实现ICustomFill进行扩充。

    下面主要讨论Dotnet C# 实现MapObjects面符号的扩充。我们知道WIN API提供了位图画刷,且画刷可以支持彩色相关位图及设备不相关位图。因此我们可以通过位图BITMAP构建画刷进行面区域的填充,如果完全通过底层的WIN API从图片创建BITMAP位图填充的画刷,对于API不太了解的人来说感觉很麻烦。不过还好通过Dotnet框架只需要几个API就可以搞定了,而且还可以很好的对这些符号进行组织,如:增加、删除、编辑、存档等。

    下面是需要用到的WINAPI函数:

 

为了更好的组织符号信息以及利于复用,可以编写两个可以序列化[Serializable]的类:填充符号:PatternStyle和符号集:StyleContainer

    PatternStyle: 描述符号的基本信息:符号内容即图象[Image]、符号名称[PatternName]、符号描述[PatternDescription]。

    StyleContainer:是一系列PatternStyle的集合,并包含一些增、删、修改PatternStyle的方法以及保存和打开二进字填充样式文件[*.pattern]的静态方法。标明[Serializable]的类在Dotnet中可以方便的进行序列化存储为本地的文件。标明[Serializable]的类的存取:
 

 

实现ICustomFill接口,主要实现SetupDC、ResetDC和Draw三个函数。

 

应用示例:

图一、单一符号填充效果

图二、独立值填充效果

 

 

地图显示是GIS的基础,完美的地图显示,首先是主题内容突出,要素的类型、特征及其层次变化分明,和谐悦目的色彩诱导读者阅读其内容。地图能完整、高效地显示,您就完成了开发工作的百分之七八十了,地图显示的关键是地图符号的显示,所以一套完善的符号库是GIS开发的基础,也是GIS开发的核心。 在继地形图符号之后,这次我推出一套城市图符号库。因为就城市图来讲,国家到目前还没有一套标准化的编码表及图式,这套符号库是我多年GIS开发经验的积累,也是我综合我国及瑞士等国家城市交通旅游图所得的结果。此套地形图符号库包括四十多种点状符号,十多种线状符号和二十多种面状符号,加上这些符号等级的变化,基本可以完成城市图的显示工作,如你有一些特殊的需求,在现有程序的基础上进行扩充,相信你很快就能自己实现了。 这套符号库是利用VC++语言开发的,并且已经在多个城市信息系统中使用过,有着很好的稳定性和高效性,作为VC开发的组件,它有简单的接口(只用了一个接口函数),强大的功能等特点(实现了所有城市图符号的绘制)。符号库的接口: DrawSymbol(int ID,CDC *pDC,int number,double *x,double *y,double FDtimes)。 此符号库不仅是VC语言的成果,它更是制图艺术的体现,根据不同的放大比例,能自动进行制图综合。如果你是GIS开发人员,你可以直接使用我的这一套符号库,也可以使用些符号库中的一些画图形的源代码,相信此套符号库对你的GIS底层开发会有很大的帮助;如果你是VC图形图像开发人员,此套符号库对你也会有一定的帮助,因为符号本身就是图形学的一部分,其中的图形函数比较成熟,很有参考价值。 联系作者:campanula6524@sina.com campanula6524@hotmail.com campanula6524@163.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值