地闪密度图与相应MIF文件自动生成

2012-11-20 03:17:04董兴朋李胜乐刘珠妹
华南地震 2012年4期
关键词:分布图雷电代码

董兴朋,李胜乐,彭 愿,苏 融,刘珠妹,刘 坚

(中国地震局地震研究所,湖北 武汉 430071)

0 引言

雷击是一种破坏性及其严重的自然灾害,是造成输电线路跳闸的主要原因,对社会影响很大[1~4]。尤其是珠江三角洲地区[5],属于亚热带暖湿气候分布区,是全国的雷击高发区,每年受雷击灾害严重。地闪密度是比雷电日更为科学的雷电参数,是评估雷电活动强弱,进行防雷设计的重要参数[6]。1997年,美国以网格法为基础,绘制了1989~1996年8年的美国地闪密度分布图,之后中国、日本等国家也采用网格法绘制地闪密度分布图。

C++是由AT&T Bell(贝尔)实验室的Bjarne Stroustrup博士及其同事于20世纪80年代初在C语言的基础上开发成功的。C++既可以用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型程序设计语言[7]。动态链接库英文为DLL,是Dynamic Link Library的缩写形式,它使得进程可以调用不属于其可执行代码的函数。动态链接库有以下优点:①使用较少的资源,当多个程序使用同一个函数库时,DLL可以减少在磁盘和物理内存中加载代码的重复量。②推广模块式体系结构,DLL有助于促进模块式程序的开发,这可以帮助开发要求提供多个语言版本的大型程序或要求具有模块式体系结构的程序。③简化部署和安装,当DLL中的函数需要更新或修复时,部署和安装DLL不要求重新建立程序与该DLL的链接。

基于Visual C++,我们实现了地闪密度分布图和相应MIF文件的自动生成。这不仅为编程生成地闪密度图提供了一种思路,还分析了生成MapInfo Tab的另一种方法-MIF文件法,实现了使用通用的Visual C++语言即可在MapInfo中成图,避免了繁琐的Mapbasic语言。

1 初始化GDI+环境

GDI+的头文件和库文件没有包含在VC++6.0开发环境中,我们需要手工下载后安装,具体步骤如下:

第一步:将gdiplus.h,gdiplus.lib分别拷贝到VC相应的include及lib目录下。例如,VC中Include目录,包括三个路径:VC98INCLUDE,VC98MFCINCLUDE和VC98ATLINCLUDE,分别对应非MFC应用程序、MFC应用程序和ATL应用程序的路径。

第二步:在StdAfx.h中加入如下语句:

第三步:要使用GDI Plus类库,必须首先初始化类库。初始化是一个调用两个参数的函数,这两个参数是必须在整个GDIPlus会话中都存在的变量。在使用完GDIPlus之后,必须调用一个函数来关闭会话。如果使用MFC,一个好的方法是在你的CWinApp派生的类中(比如CYourProjectApp)添加变量:

第四步:然后在CWinApp派生的类的InitInstance函数中的开始添加一行代码:

然后重载ExitInstance函数 (如果没有的话),在其中添加一行代码:

经过上面四步之后,就可以在你的程序中使用GDI plus类库的功能了。

2 MIF文件结构

MIF是MapInfo与其它GIS软件进行数据交换的数据格式[8],它以文本形式存储MapInfo数据,并通过坐标值的方式来表示MapInfo图形文件中的点、线、面。MIF文件的数据格式包含三个部分:MIF文件头、MIF数据段和MIF中的画笔、刷子、符号和字体。MIF文件头主要是对MapInfo如何将这种格式的地图数据生成电子地图的一些说明信息,具体结构如下[9]:

MIF数据段是几何对象的定义,由数据点坐标和简单的语法组成。其后有该数据对象的所包含的画笔、画刷等属性。具体示例如下:

3 过程分析及部分代码实现

本程序主要实现了两个功能:生成BMP格式的密度图和相应的MIF格式文件。首先是按行读取后缀为.GRD的数据文件,并将数据全用逗号隔开,部分代码如下:

3.1 生成地闪密度图

3.1.1 建立绘图对象

在VC6.0中,进行GDI+绘图,首先要分别定义一个设备显示对象和一个位图对象,然后建立与屏幕显示兼容的位图和内存显示设备,将位图选入到内存显示设备中,最后用背景色将位图清除干净,这里我们用白色做背景。部分代码如下:

3.1.2 绘制地闪密度图

该部分是绘图的主要程序,部分代码如下:

我们使用本程序,利用北纬15°~55°、东经75°~140°区域的地闪数据,生成了该区域的地闪密度分布图,如图1所示:

图1 北纬 15°~55°、 东经 75°~140°区域的地闪密度图Fig.1 Cloud-to-ground flash density map of region in 15°~55°N、 75°~140°E

3.2 生成MIF/MID文件

3.2.1 创建MIF/MID文件

创建MIF/MID文件,文件名分别为MapInfo_FileName.MIF和MapInfo_FileName.MID,然后打开创建的文件 (按写的方式),部分代码如下:

3.2.2 写创建文件

(1)写MIF头文件

我们必须在新创建的MIF文件中写入其文件头,否则我们生成的MIF文件无法在MapInfo中打开,该头文件写入的是标准格式的字符串[10]。

(2)写MIF字符段

MIF数据段是图形目标的定义,数据段开头一行是字符串DATA,之后写入各个坐标点的坐标值。

(3)写入MIF中的画笔、刷子、符号和字体

(4)关闭文件

3.3 将程序做成动态链接库

动态链接库 (Dynamic Link Library)基本与exe类似,除了不能独立运行。动态链接库能够减少内存使用,提高运算效率。

我们将程序中用到的类Draw_MIF做成DLL导出类,具体方法是打开VC6.0→新建→工程,选择MFC APPWizard(dll),输入工程名称后,在要创建的DLL类型中选择第二个:动态链接库使用共享DLL,完成DLL的创建。之后将源程序中文件添加到新建立的DLL工程中,在头文件Draw_MIF.h中Draw_MIF类的定义前面加上_declspec(dllexport),这样便完成了动态链接库的创建,语句如下:

4 结论

通过实例和重点代码分析,阐述了地闪密度图和相应MIF文件自动生成的过程。地闪密度分布图能够为电网防雷提供基础资料,而使用Visual C++语言生成MIF文件,借助MapInfo平台可以很方便的生成矢量图,避免了专业语言MapBasic复杂的语法结构,为矢量图的生成提供了一种新思路。

[1]赵阳,张义军,董万胜,等.青藏高原那曲地区雷电特征初步分析[J].地球物理学报,2004,47(3):405-410.

[2]童雪芳,王海涛,陈家宏,等.雷电定位系统地闪密度分布图与雷击故障相关性分析[J].高压电技术,2009, 39(12): 2924-2925.

[3]吴小花,钟贻军.数字遥测地震台的雷电防护[J].华南地震,2003,23(2):80-84.

[4]邱永平.宁波台数字式温度计三次受强雷电干扰记录的异常特征[J].华南地震,2004,24(1):69-73.

[5]刘刚,唐军,季严飞,等.珠江三角洲地区雷电时空分布规律的统计研究[J].电网与清洁能源,2011,27(11): 13-19.

[6]王海涛,童航伟,冯万兴,等.浙江省地闪密度图的绘制方法及其有效性验证 [J].高压电技术,2008, 34 (11): 2488-2491.

[7]谭浩强.C++程序设计[M].北京:清华大学出版社,2004.

[8]彭清涛,李连营,徐志强,等.VC环境下基于mif格式的数字地图开发[J].黑龙江交通科技,2010,3:131-133.

[9]赵从欣.基于MapInfo平台的mif/mid文件生成法[J].四川测绘,2003,26(1):28-32.

[10]王晓丽,申进志.GRP文件格式到MIF格式的实现[J].测绘工程,1997,6(4):50-54.

猜你喜欢
分布图雷电代码
雨天防雷电要选对雨伞
中老年保健(2021年5期)2021-08-24 07:08:30
贵州十大地质公园分布图
乡村地理(2019年2期)2019-11-16 08:49:34
雷电
创世代码
动漫星空(2018年11期)2018-10-26 02:24:02
创世代码
动漫星空(2018年2期)2018-10-26 02:11:00
创世代码
动漫星空(2018年9期)2018-10-26 01:16:48
创世代码
动漫星空(2018年5期)2018-10-26 01:15:02
中国癌症分布图
左右江水冲石器采集分布图
宝藏(2017年6期)2017-07-20 10:01:01
计算机机房的雷电防护
中国市场(2016年45期)2016-05-17 05:15:53