0 引言
在各种施工中,经常需要借阅地形图,在施工范围较大时,覆盖的地形图个数较多,尤其是施工边界形状复杂时,列举全部地形图就更加麻烦,计算图幅号工作繁琐,非测绘专业技术人员更是无从下手。在网上找的一些计算图幅号的工具,都只是计算单点所在图幅号,没有能够进行施工区域整体计算的。笔者在VC6环境下,结合GDI+图形技术,完成了一款傻瓜型图幅号计算工具,使用人员无需掌握很多测绘知识及AutoCAD绘图软件,就可算出所需查询的地形图图幅号,并制作出位置关系图,在生产实际中取得较好的效果。
1 地形图分幅
地形图是分图幅进行管理的,不同比例尺的地形图通过不同经度差、纬度差进行分幅,不同比例尺地形图在分幅时存在相关关系,分幅方法是建立在经纬度基础上,经纬度与图幅号之间可以换算。存在新旧两套地形图编号体系,分幅方法基本相同,但编号差异较大,新旧分幅号相互之间可以换算[1]。。地形图分幅方法有两大类:一是按经纬度分幅的梯形分幅法,另一种是按坐标格网划分的矩形分幅法,矩形分幅法通常只用于1:500、1:1000,1:2000等大比例尺地形图分幅。矩形分幅法一般用于城市和工程建设,而石油工程施工范围较大,一般使用的是1:5万和1:10万比例尺的地形图,故此文讨论的是梯形分幅方式,在程序实现中也只考虑1:5万和1:10万比例尺的图幅号计算。
地图的图廓有经纬线网格构成,我国的基本比例尺地形图是以经纬线分幅制作的,它们都是以1:100万比例尺地形图作为基础,按规定的经差和纬差划分图幅,行列数和图负数成简单的倍数关系,梯形分幅法各比例尺地形图的旧分幅方法与编号见表1,新分幅方法及编号见表2。
表1地形图采用的 旧分幅方法与编号
序号 |
比例尺 |
母图 |
母图成子图张数 |
编号 |
分幅方法 |
例子 | |
纬差 |
经差 |
B=39.5430 | |||||
L=122.2825 | |||||||
1 |
1:100万 |
纬度从A至V,经度由西向东从1至60 |
4° |
6° |
J-51 | ||
2 |
1:50万 |
1:100万 |
4 |
A B C D |
2° |
3° |
J-51-A |
3 |
1:20万 |
1:100万 |
36 |
(1)…(36) |
40′ |
60′ |
J-51-(3) |
4 |
1:10万 |
1:100万 |
144 |
1…144 |
20′ |
30′ |
J-51-5 |
5 |
1:5万 |
1:10万 |
4 |
甲 乙 丙 丁 |
10′ |
15′ |
J-51-5-乙 |
A Б В Г | |||||||
6 |
1:2.5万 |
1:5万 |
4 |
1 2 3 4 |
5′ |
7’30” |
J-51-5-乙-4 |
a б в г | |||||||
7 |
1:1万 |
1:10万 |
64 |
(1)…(64) |
2’30” |
3’45” |
J-51-5-(24) |
表2地形图采用的新分幅方法与编号
序号 |
分幅比例尺 |
图幅的大小 |
前比例图的分幅比例尺 |
识别码 |
行数 |
列数 |
例 | |
B=39.5430 | ||||||||
纬差 |
经差 |
L=122.2825 | ||||||
1 |
1:50万 |
2° |
3° |
1:100万 |
B |
2 |
2 |
J51B001001 |
2 |
1:25万 |
40′ |
60′ |
1:100万 |
C |
4 |
4 |
J51C001002 |
3 |
1:10万 |
20′ |
30′ |
1:100万 |
D |
12 |
12 |
J51D001005 |
4 |
1:5万 |
10′ |
15′ |
1:100万 |
E |
24 |
24 |
J51E001010 |
5 |
1:2.5万 |
5′ |
7′30″ |
1:100万 |
F |
48 |
48 |
J51F002020 |
6 |
1:1万 |
2′30″ |
3′45″ |
1:100万 |
G |
96 |
96 |
J51G003040 |
2 GDI+简介
图形设备接口(Graphics Device Interface或Graphical Device Interface,缩写GDI),GDI是Windows提供的一套与硬件设备无关的图形API,包括多种用于窗口绘图的绘图工具,如化纤用的笔,填充区域用的刷子,书写文字用的字体等,由于其与硬件设备无关的特性,简化了编程人员的开发难度并增强了程序的可移植性。GDI基本能满足一般的绘图要求,但是其色彩比较单一,线条边缘具有较明显的锯齿以及不支持渐变色等缺点也让人不尽满意。
GDI+是GDI的扩展升级,它对GDI进行了整体优化,并添加了许多新的功能,GDI是基于句柄的编程方法,而GDI+是真正的面向对象,GDI+相对于GDI增加了渐变的画刷、基数样条函数、持久路径对象、变形和矩阵对象、透明混合等愈多新功能,使许多利用GDI难以实现的功能,现在只需简单编程即可完成[2]。但是GDI+的交互性不如GDI,比如GDI+不支持GDI的橡皮筋技术(即GDI的绘图模式),所以在实际使用中,一般是二者组合使用,GDI负责交互绘图以及双缓存的实现,GDI+负责复杂现实效果的实现以及没有用户交互的绘图场合。
3 程序实现
3.1 整体设计
(1)程序的目的是为非测绘专业技术人员也能使用,界面应简洁,符合windows窗口操作习惯,选项尽可能少,使程序更傻瓜型。进行查询图幅号的一般都已经将坐标输入为一个电子文件,所以本程序以输入文件的方式导入关键点坐标,输入文件采用逗号分隔符文件。程序需要显示施工图形,石油勘探工程施工图形涉及到一般只有点、线、面,所以界面上应有个下拉列表框选项进行图形类型的选择。
(2)程序只是为了计算图幅号,避免使非测绘人员弄糊涂,忽略北京1954坐标系和1980西安坐标系的坐标转换问题,但为了严谨性,只申明在北京1954坐标系下使用。
(3)图像显示界面需设置比例尺选项及新旧分幅法选项。在实际施工中,要查看施工线路附近的地形图,所以需要一个图形外扩选项,以半透明填充方式显示扩展范围。
(4)显示界面中个要素的颜色、字体、大小应可以进行手动调节,增强程序图形显示的交互性和美观性。
3.2 流程图
使用流程图如图1所示。
图1 流程图
3.3界面设计
程序有3个显示窗口,界面如图2。左上为输入点坐标信息显示列表框,坐下为帅选的图幅号列表框,右侧为图形和图幅号网格显示区。点“导入坐标”按钮,弹出文件对话框,选择要导入的文件,“清空列表”按钮可以手动清除导入数据,“使用说明”按钮弹出一个简单窗口,显示使用方法。“导出图幅号到文件”可以将筛选的图幅号导出到文本文件。“隐藏程序”按钮实现界面最右侧颜色、字体等调节选项进行隐藏或显示。“保存图形”按钮可以将当前图形显示区的图像保存为图片格式,以供打印。最右侧图像显示颜色、字体采用点击相应按钮,弹出颜色选择对话框的方式。各按钮下面的滑块控件是调整相应透明度的控制。
图2 软件界面图
3.4 程序代码
3.4.1 坐标换算
为了使用简便,不涉及椭球转换的参数问题,程序设定在北京1954坐标系下进行坐标换算,只涉及公里网格和经纬度的高斯投影正反算。首先完成了公里网格坐标到经纬度坐标及经纬度到公里网格坐标的转换函数,椭球参数直接固化在程序代码中。适用于电算的高斯投影换算公式及源代码网络上很容易查阅到,在此不详述。
3.4.2 类结构
测量坐标格式是浮点型,而且位数较多,在程序中首先创建了两个类(结构体):双精度类型的点dPoing和双精度类型的矩形DoubleRect。导入坐标可以看做一个dPoing点集,又分为点、线、面三种不同形态,所以分别创建三个dPoing点集对象用于存放输入点坐标,在C++中,创建集合有很多方法,比如<Array>、<vector>等,程序根据用户在界面图形类型选项的不同,存放到相对应的点集中,在。这样做的好处是在进行几何边界绘制时,空集合是不会绘出图形的,就不需要在根据界面选项进行判断,使程序结构更加简洁。几何图形外扩采用了GDI的路径和区域类GraphicsPath和Region,将用户输入的几何图形转换成路径和区域类对象,可以很方便进行外扩操作以及后面的绘图填充。
设计了地形图类map。其创建的对象用于代表在显示框的一张地形图区域。类成员变量包含地图图幅名、四个角点屏幕坐标、地形图边界路径、地形图屏幕区域,另外还有个布尔型的变量用于标识是否被选中。设计了一个类成员函数,用于实现新旧图幅号变换,因新分幅法更适合计算机逻辑判断,所以程序内部计算都是使用新分幅法图幅名,只有在需要显示旧图幅名的时候,才用此成员函数,计算出旧图幅名以供显示。
3.4.3 图形显示
界面显示采用GDI+功能函数进行绘制,为防止闪烁,在内存中创建一个与显示窗口大小相同的画布,用户输入有修改时,直接对该画布进行修改,然后激发显示窗口的重绘事件,在显示窗口的OnPaint函数中,直接将内存中的画布复制到显示窗口中。
3.5 应用效果
导入一个不规则四边形,外扩距离设为5000m,比例尺选择1:5万,旧图幅名显示方式,点“计算图幅号”按钮后,结果如图3。四边形等比放大区域为外扩区域,灰色地形图区域为扩展后的区域所覆盖到的地形图,灰色区域可以通过鼠标点选进行添加和删除,同时左下窗口的图幅号列表也会进行自动变化。如果角色颜色不美观,可以通过最右侧设置选项进行调整。最后进行图像保存和图幅号导出,以供打印使用。
图3 软件使用图
4 结束语
在各种施工中,地形图的使用比较多,此软件简单易用,在项目初期可以很方便地了解地形图需求状态,避免购买时遗漏,多购等情况发生,在生产实际中,受到很多技术人员的好评。购买回地形图后,需要将施工图形展布到地形图上,但是跨越多张地形图的长边,在中间地图上展布时无已知坐标,自动计算展点坐标功能将作为此软件完善的下一步内容。
参考文献
[1]林辉,唐可平,等.地形图分幅及图幅号转换[J].华东森林经理,2011,(1):95-97.
[2]杨平,任娟.基于GDI+的高质量电子地图实现方法[J].北京测绘,2005,(1):12-15.