基于MapGIS开发北京西安坐标系转换

时间:2022-08-05 03:39:41

基于MapGIS开发北京西安坐标系转换

摘要:本文描述了北京西安坐标系转换的重要意义;介绍了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:\\Mapgis67\program。这样就把生成的可执行文件输出到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)

{

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.

上一篇:关于高速公路造价控制的研究 下一篇:探讨工程施工组织设计的编制及重要性