何明耀
摘要:本文描述了北京西安坐标系转换的重要意义;介绍了MapGIS软件及其二次开发方式;分析了北京西安坐标系的各项参数指标;讨论了基于MapGIS开发北京西安坐标系转换的开发流程图;并给出了程序实现的核心代码;在现阶段具有一定的理论与实际意义。
关键词:MapGIS,北京坐标系,西安坐标系,二次开发
中图分类号:{P286+.1} 文献标识码:A 文章编号:
几十年来,我国完成了大量基于54坐标系的测绘成果,这些成果对国民经济建设具有重要的使用价值。54坐标系提供的大地坐标是通过分区局部平差逐级控制求得,往往使得不同年代、不同单位、不同锁段所测算出来的成果出现矛盾,给用户在使用中带来很多困难,同时它不能满足现代大地测量和有关科学发展的需要。为了消除局部平差和逐级控制带来的不合理影响,提高大地网的精度,1980年我国建立了比北京54坐标系更为科学、严密的西安80坐标系[1-2]。
为能有效的利用北京54坐标系下的大量测量成果,使北京54坐标系下的数据与西安80坐标系下的数据相互有效结合利用,北京54坐标系与西安80坐标系的转换势在必行。
1 MapGIS
1.1 MapGIS软件
MapGIS软件具有图形编辑、修改、检索、造区等功能,从而使输入的图形更准确、更丰富、更漂亮。它的主要功能有:
(1)先进的可视化定位检索功能---提供了多种图形窗口的操作功能,包括开窗口,移动窗口,无级任意放大缩小窗口比例,显示窗口及图元捕获信息等系列可视化技术功能。
(2)灵活方便的线元编辑功能---软件将各种线型(如点划线、省界、国界、公路、铁路、河堤、水坎等)以线为单位作为线图元来编辑。各种线图元,根据指定的坐标点数据、线型及参数,经过算法处理产生各种线型。线元编辑功能完成对线段进行连接、组合、增加、删除、修改、剪裁、提取、平滑、移位、阵列复制、改向、旋转、产生平行线、修改参数等。
(3)功能强大的点元编辑功能---图形中各种注释(英文、汉字、日文、俄文),各种专用符号、子图、图案以及圆、弧、直线归并为点图元来编辑。点图元编辑功能提供编辑修改注释及其控制点坐标的手段,可增加、删除、移动、复制、阵列复制各注释点,修改各类注释信息,包括字串大小、角度、字体、字号、子图号等,同时还可修改控制点的坐标方位。
1.2 二次开发
MapGIS为了支持用户进行二次开发,而提供了完整的二次开发库,所有用户可以在MAPGIS平台上开发出面向各领域的应用系统。当前,二次开发库以MFC扩
展类、COM组件、ActiveX控件、API函数方式提供[3]。
(1) 基于API函数开发
这些函数的实现被封装在24个动态链接库(DLL)中, 因此,是独立于开发工具的。用户在使用如VC++、VB或Delphi等高级语言编程时,在调用Windows的API函数,就可依此调用MapGIS的二次开发函数。
(2) 基于MFC类库开发
MapGIS类库用面向对象的思想把一些API功能进行封装,形成多个派生于MFC中Cview类的可重用基类,用户利用基于MFC的MapGIS类库可构建面向对象软件工程的MapGIS应用系统。值得注意的是,类库开发仅针对C++的开放。
(3) COM组件开发
MAPGIS COM组件支持用户进行组件式开发,具有二次开发便利、易于集成、无限扩展的特点,支持多种开发软件等优点。ActiveX控件是MAPGIS完成组件化改造成果之一,它们使二次开发更为快捷方便,代码的可复用性也更高。
2 北京与西安坐标系
2.1 北京坐标系
北京54坐标系是采用前苏联的克拉索夫斯基椭球参数(长轴6 378 245 m,短轴6 356 863m,扁率1/298.3),并与前苏联1942年坐标系进行联测,通过计算建立了我国大地坐标系,定名为1954年北京坐标系。其坐标的原点不在北京,而是在前苏联的普尔科沃。
北京存在着坐标系存在着以下缺隙:
① 椭球参数有较大误差;
② 参考椭球面与我国大地水准面存在着自西向东明显的系统性的倾斜;
③ 几何和物理大地测量应用的参考面不统一;
④定向不明确;
2.2 西安坐标系
西安80坐标系是1980年国家大地坐标系,利用多点定位,采用地球椭球基本参数为1975年国际大地测量与地球物理联合会第十六届大会推荐的数据(长轴6 378 140 m,短轴6 356 755 m,扁率l/298.257 221 01)。该坐标系的大地原点设在我国中部的陕西省泾阳县永乐镇,位于西安市西北方向约60 km,故称1980年西安坐标系。
西安坐标系存在着以下优点:
① 椭球短轴平行于地球地轴;
② 起始大地子午面平行于格林尼治天文台起始子午面;
③ 椭球面同似大地水准面在我国境内最为密合;
④ 系统经过了整体平差。
3 转换流程图
MapGIS开发北京西安坐标系转换流程图如下所示:
图2 MapGIS开发北京西安坐标系转换流程图
4 程序实现
4.1 VC++
Visual C++ 6.0提供了各种各样的数据库访问技术-ODBC API、MFC ODBC、DAO、OLE DB等。这些技术各有自己的特点,具有简单、灵活、访问速度快、可扩展性好的特点。
ODBC(Open Database Connectivity) 是客户应用程序访问关系数据库时提供的一个统一接口,对于不同的数据库,ODBC提供了一套统一的API,使用应用程序可以应用所提供的API来访问任何提供了ODBC驱动程序的数据库,并且,ODBC已经成为一种标准,目前所有的关系数据库 都提供了ODBC驱动程序,这使ODBC的应用非常广泛,基本上可用于所有的关系数据库。
由于ODBC是一种底层的访问技术,直接使用ODBC API编写应用程序需要编写大量代码。Visual C++ 提供了MFC ODBC类,其中封装了ODBC API,因此,使用MFC来创建ODBC的应用程序非常简便。
4.2 MapGIS二次开发
MapGIS类库的开发,首先安装MAPGIS二次开发库,这些库函数是使用VC++开发MAPGIS应用程序最快速有效的方法。下面创建MAPGIS图形编辑窗口:
第一步:利用VC++的程序向导(AppWizard)创建一个工程(名为CITY),点击Finish即可。
第二步:对VC++的工作环境进行必要的设置。分以下2个部分:
(1)字节设置:选择Project菜单下的Settings命令,在C/C++页面上ategory一栏选择Code Generation,将Struct Member Alignment设定为1 Byte。
(2)输出目录设置:选择Project菜单下的Settings命令,在General页面上Output files一栏, 填写mapgis应用程序目录, 如:C:\Mapgis67program。这样就把生成的可执行文件输出到MAPGIS动态连接库所在的目录下。
第三步:应用MAPGIS中的类和函数。
首先在工程的视图类定义(即CITYView.h文件)前加入includeCGisView.h”,然后将视图类从CView派生改为从MAPGIS中的CGisView类派。方法是:分别在视图类的头文件(TestView.h)和实现文件(TestView.cpp)中,用VC++的查找替换功能(Edit菜单下的Replace命令或是热键Ctrl+H )在弹出的替换对话框中选中左边三个复选框,然后点击“Replace All”即可。替换完成后就实现了视图类从CGisView的继承。
第四步:为了完成绘图工作的预处理,调用CGisView类中的OnDraw (pDC)函数。
4.3 部份代码
(1) 文件批量处理子程序
文件批量处理子程序的部份代码如下所示:
CString strtemp;
if(strPath.Right(1)!="\")
strtemp.Format("%s\*.*",strPath);
else
strtemp.Format("%s*.*",strPath);
CFileFind findfile;
BOOL bfind=findfile.FindFile(strtemp);
while(bfind)
{
bfind=findfile.FindNextFile();
if(strfilename==findfile.GetFileName())
{
m_filelist.AddString(findfile.GetFilePath());
}
if(findfile.IsDirectory()&&!findfile.IsDots())
{
FindFile(findfile.GetFilePath());
}
if(bstop)return;
}
(2) 北京西安坐系互转主程序
北京西安坐系互转主程序的部份代码如下所示:
_GetPntNum(QTZJAi,&i,&pntN);
GetDlgItemText(IDC_repace,str1);
GetDlgItemText(IDC_repace1,str2);
for(i=1;i { _GoingClockCursor(); memset(szBufCvt,0,sizeof(szBufCvt)); memset(szBufCvt1,0,sizeof(szBufCvt1)); t=0;jj=0;jjj=0; if(_GetPnt(QTZJAi,i,&xyz,&dat,&len,&QTZJinf)<=0) continue; { for (int j = 0 ; j { if(dat[1]==str1[0])//开头是"T" { if (dat[j] =='/') {t=t+1; continue;} else { if(t==1) { szBufCvt1[jj] =dat[j]; jj =jj+1; } } } ...... 5 结束语 54坐标系向80坐标系过渡是今后社会发展的需要,在逐步过渡的过程中,只要采用有效合理的措施,就可以在尽量不影响现有测绘成果使用方便的基础上,避免一次转换需要较多投入而难 以具体实施的现象,在城镇未来进行新测、修测中逐步进行,最终平稳过渡完成向80坐标系下成果的全部转换。 本文基于VC++结合MapGIS类库开发出54坐标系与80坐标系互转程序,实践应用表明,该程序算法较合理,操作简单,大大提高了工作效率。 参考文献 [1] 中国地质大学(武汉)信息工程学院.MAPGIS地理信息系统开发手册[M].武汉华地图形数据公司.1998. [2] 边少锋.大地坐标系与大地基准[M].北京:国防工业出版社,2005, [3] 吕晓华,刘宏林.地图投影数值变换方法综合评述[J].测绘学院学报,2002,19(2):150—153.