田芳莲
(青海省核工业地质局,810001)
我国完成了大量基于54坐标系的测绘成果,这些成果对国民经济建设具有重要的使用价值。为了消除局部平差和逐级控制带来的不合理影响,提高大地网的精度,1980年我国建立了比北京54坐标系更为科学、严密的西安80坐标系。
为能有效的利用北京54坐标系下的大量测量成果,使北京54坐标系下的数据与西安80坐标系下的数据相互有效结合利用,北京54坐标系与西安80坐标系的转换势在必行。
MapGIS软件具有图形编辑、修改、检索、造区等功能,从而使输入的图形更准确、更丰富、更漂亮。它的主要功能有:
(1)先进的可视化定位检索功能---提供了多种图形窗口的操作功能,包括开窗口,移动窗口,无级任意放大缩小窗口比例,显示窗口及图元捕获信息等系列可视化技术功能。
(2)灵活方便的线元编辑功能---软件将各种线型以线为单位作为线图元来编辑。各种线图元,根据指定的坐标点数据、线型及参数,经过算法处理产生各种线型。
(3)功能强大的点元编辑功能---图形中各种注释,各种专用符号、子图、图案以及圆、弧、直线归并为点图元来编辑。
MapGIS为了支持用户进行二次开发,而提供了完整的二次开发库,所有用户可以在MAPGIS平台上开发出面向各领域的应用系统。当前,二次开发库以MFC扩展类、COM组件、ActiveX控件、API函数方式提供。
(1) 基于API函数开发
这些函数的实现被封装在24个动态链接库(DLL)中, 因此,是独立于开发工具的。
(2) 基于MFC类库开发
MapGIS类库用面向对象的思想把一些API功能进行封装,形成多个派生于MFC中Cview类的可重用基类,用户利用基于MFC的MapGIS类库可构建面向对象软件工程的MapGIS应用系统。
(3) COM组件开发
MAPGIS COM组件支持用户进行组件式开发,具有二次开发便利、易于集成、无限扩展的特点,支持多种开发软件等优点。
北京54坐标系是采用前苏联的克拉索夫斯基椭球参数(长轴6 378 245 m,短轴6 356 863m,扁率1/298.3),并与前苏联1942年坐标系进行联测,通过计算建立了我国大地坐标系,定名为1954年北京坐标系。其坐标的原点在前苏联的普尔科沃。
北京存在着坐标系存在着以下缺隙:
① 椭球参数有较大误差;
② 参考椭球面与我国大地水准面存在着自西向东明显的系统性的倾斜;
③ 几何和物理大地测量应用的参考面不统一;
④定向不明确;
西安80坐标系是1980年国家大地坐标系,利用多点定位,采用地球椭球基本参数为1975年国际大地测量与地球物理联合会第十六届大会推荐的数据(长轴6 378 140 m,短轴6 356 755 m,扁率l/298.257 221 01)。该坐标系的大地原点设在我国中部的陕西省泾阳县永乐镇,位于西安市西北方向约60 km,故称1980年西安坐标系。
西安坐标系存在着以下优点:
① 椭球短轴平行于地球地轴;
② 起始大地子午面平行于格林尼治天文台起始子午面;
③ 椭球面同似大地水准面在我国境内最为密合;
④ 系统经过了整体平差。
MapGIS开发北京西安坐标系转换流程图如下所示:
图1 MapGIS开发北京西安坐标系转换流程图
Visual C++ 6.0提供了各种各样的数据库访问技术-ODBC API、MFC ODBC、DAO、OLE DB等。这些技术各有自己的特点,具有简单、灵活、访问速度快、可扩展性好的特点。
ODBC(Open Database Connectivity) 是客户应用程序访问关系数据库时提供的一个统一接口,对于不同的数据库,ODBC提供了一套统一的API。
(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; } } } ...... 54坐标系向80坐标系过渡是今后社会发展的需要,在逐步过渡的过程中,只要采用有效合理的措施,就可以在尽量不影响现有测绘成果使用方便的基础上,避免一次转换需要较多投入而难于实现。本文基于VC++结合MapGIS类库开发出54坐标系与80坐标系互转程序,该程序算法较合理,操作简单,大大提高了工作效率。 [1]中国地质大学(武汉)信息工程学院.MAPGIS地理信息系统开发手册[M].武汉华地图形数据公司.1998. [2]边少锋.大地坐标系与大地基准[M].北京:国防工业出版社,2005, [3]吕晓华,刘宏林.地图投影数值变换方法综合评述[J].测绘学院学报,2002,19(2):150—153.5 结束语