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

2014-11-15 02:51田芳莲
电子测试 2014年18期
关键词:类库椭球二次开发

田芳莲

(青海省核工业地质局,810001)

我国完成了大量基于54坐标系的测绘成果,这些成果对国民经济建设具有重要的使用价值。为了消除局部平差和逐级控制带来的不合理影响,提高大地网的精度,1980年我国建立了比北京54坐标系更为科学、严密的西安80坐标系。

为能有效的利用北京54坐标系下的大量测量成果,使北京54坐标系下的数据与西安80坐标系下的数据相互有效结合利用,北京54坐标系与西安80坐标系的转换势在必行。

1 MapGIS

1.1 MapGIS软件

MapGIS软件具有图形编辑、修改、检索、造区等功能,从而使输入的图形更准确、更丰富、更漂亮。它的主要功能有:

(1)先进的可视化定位检索功能---提供了多种图形窗口的操作功能,包括开窗口,移动窗口,无级任意放大缩小窗口比例,显示窗口及图元捕获信息等系列可视化技术功能。

(2)灵活方便的线元编辑功能---软件将各种线型以线为单位作为线图元来编辑。各种线图元,根据指定的坐标点数据、线型及参数,经过算法处理产生各种线型。

(3)功能强大的点元编辑功能---图形中各种注释,各种专用符号、子图、图案以及圆、弧、直线归并为点图元来编辑。

1.2 二次开发

MapGIS为了支持用户进行二次开发,而提供了完整的二次开发库,所有用户可以在MAPGIS平台上开发出面向各领域的应用系统。当前,二次开发库以MFC扩展类、COM组件、ActiveX控件、API函数方式提供。

(1) 基于API函数开发

这些函数的实现被封装在24个动态链接库(DLL)中, 因此,是独立于开发工具的。

(2) 基于MFC类库开发

MapGIS类库用面向对象的思想把一些API功能进行封装,形成多个派生于MFC中Cview类的可重用基类,用户利用基于MFC的MapGIS类库可构建面向对象软件工程的MapGIS应用系统。

(3) COM组件开发

MAPGIS COM组件支持用户进行组件式开发,具有二次开发便利、易于集成、无限扩展的特点,支持多种开发软件等优点。

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开发北京西安坐标系转换流程图如下所示:

图1 MapGIS开发北京西安坐标系转换流程图

4 程序实现

4.1 VC++

Visual C++ 6.0提供了各种各样的数据库访问技术-ODBC API、MFC ODBC、DAO、OLE DB等。这些技术各有自己的特点,具有简单、灵活、访问速度快、可扩展性好的特点。

ODBC(Open Database Connectivity) 是客户应用程序访问关系数据库时提供的一个统一接口,对于不同的数据库,ODBC提供了一套统一的API。

4.2 部份代码

(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坐标系过渡是今后社会发展的需要,在逐步过渡的过程中,只要采用有效合理的措施,就可以在尽量不影响现有测绘成果使用方便的基础上,避免一次转换需要较多投入而难于实现。本文基于VC++结合MapGIS类库开发出54坐标系与80坐标系互转程序,该程序算法较合理,操作简单,大大提高了工作效率。

[1]中国地质大学(武汉)信息工程学院.MAPGIS地理信息系统开发手册[M].武汉华地图形数据公司.1998.

[2]边少锋.大地坐标系与大地基准[M].北京:国防工业出版社,2005,

[3]吕晓华,刘宏林.地图投影数值变换方法综合评述[J].测绘学院学报,2002,19(2):150—153.

猜你喜欢
类库椭球二次开发
独立坐标系椭球变换与坐标换算
椭球槽宏程序编制及其Vericut仿真
浅谈基于Revit平台的二次开发
用Java编写客户机/服务器端应用程序
浅谈Mastercam后处理器的二次开发
Python在数据可视化中的应用
数据结构课程教学改革方案和应用效果
数据结构可视化类库的设计与实现
西门子Easy Screen对倒棱机床界面二次开发
椭球精加工轨迹及程序设计