您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 4-23基于WINCEGPS手簿的数字化测图系统研究与实现
22基于WINCEGPS手簿的数字化测图系统研究与实现孙艳崇(辽宁省交通高等专科学校辽宁沈阳110122)摘要:本人主持了辽宁省教育厅的科研项目《基于WINCEGPS手簿的数字化测图系统研究与实现》,其项目编号是L2010220。该测图系统实现了在WINCEGPS手簿上直接绘制地形图的功能,并且可以通过编码链接导入到“CASS”(数字地形地籍绘图软件)中,自动生成“dwg”格式的数字地图文件;用户只要在“CASS”绘图软件中进行简单的编辑工作,即可生成标准的数字地形图。采用这一系统进行外业数字测图时,可以利用碎步点坐标采集之间的空余时间,进行现场绘图,这样不仅可以减轻内业成图的工作量;并且利于发现漏测的地物,进行实时的补测与修改。关键词:WINCE;GPS手簿;数字化测图系统;研究与实现1.概述目前很多品牌的GPS接收机手簿都具有操作系统(例如WINCE),广义上讲此手簿即相当于一个掌上电脑,利用嵌入式开发工具EVC4.4对其进行二次开发,实现在WINCEGPS手簿上绘制数字地图的功能,本测图系统实现了掌上测图系统的基本功能,具有展点、图形绘制、图形编辑及无极缩放等功能。本系统采用视图文档结构,文档对象通常代表一个已经打开的文件,在文档类中,通过串行化函数可以实现图形的打开和保存,而视图对象表示文档中数据的可视化表示,并提供可视化交互界面允许用户查看、编辑数据,在视图类中定义链表类图元对象及文字对象,以实现对图元对象和文字对象的保存。在用EVC开发测图系统中,各图元的绘制都是以类的形式实现的,所以相关的图元类要直接或间接的从Cobject类派生,这样就可以利用类的多态性,简化程序的结构,利于对程序的调试和修改。多态性是面向对象程序设计代码重用的一种机制,功类中具有相似功能的不同函数使用同一个名称来实现。例如定义一个平移菜单,可以实习对直线、圆及矩形等对象的平移。多态性的实现的基本方法如下:(1)从Cobject类派生建立图元基类Centity,并在Centity中添加如下虚函数:图元绘制函数、视图缩放函数、图元编辑函数及图元串行化函数。(2)从图元基类Centity派生每个图元类,如Cline(直线类)、Ccircle(圆类)、Carc(圆弧类)及Crectangle(矩形类),并在这些图元类中,重载基类(Centity)中的所有虚函数。(3)在各个派生类中,添加适当的成员变量,以实现对图元数据的保存;例如直线要定义两个点(first_point,end_point)实现对直线起点和端点的保存。2.几个关键问题的解决方法2.1展点及绘制点号功能的实现绘制数字地形图之前,必须将GPSRTK测定的碎步点展绘制在软件中,然后才能依据实际地物的连接关系,进行点的连线,进而绘制出地形图;并且需要将点号也同时显示在软件的绘图区域,因为这样如果发现图形的位置及相对位置关系出现问题,可以通过查找源数据以确定具体是哪个点出现错误。GPS测得的数据存放在记事本中,此数据文件是以文本文件格式存在的,在展点前需要将此文件进行分割处理,得到点号、东坐标、北坐标及高程,之后还需要把这些数据转换处理成Double的数据格式。其主要过程如下:(1)定义文件对话框类CfileDialog,实现用户通过文件对话框的选定展点所用的文件,定义文件类Cfile,实现对文件的读取,并将数据文件分割成行,并用字符数组存储;①通过下列循环语句,计算出文本文件的行数,“\n”代表的是换行符232.1展点及绘制点号功能的实现绘制数字地形图之前,必须将GPSRTK测定的碎步点展绘制在软件中,然后才能依据实际地物的连接关系,进行点的连线,进而绘制出地形图;并且需要将点号也同时显示在软件的绘图区域,因为这样如果发现图形的位置及相对位置关系出现问题,可以通过查找源数据以确定具体是哪个点出现错误。GPS测得的数据存放在记事本中,此数据文件是以文本文件格式存在的,在展点前需要将此文件进行分割处理,得到点号、东坐标、北坐标及高程,之后还需要把这些数据转换处理成Double的数据格式。其主要过程如下:(2)定义文件对话框类CfileDialog,实现用户通过文件对话框的选定展点所用的文件,定义文件类Cfile,实现对文件的读取,并将数据文件分割成行,并用字符数组存储;①通过下列循环语句,计算出文本文件的行数,“\n”代表的是换行符intnum=1;for(inti=0;ix;i++){if(text.GetAt(i)=='\n')num=num+1;}②将数据文件分割成行,用字符数组存储for(intj=0;jnum;j++){CStringstr[num]=text.SpanExcluding(_T(\n));text=text.Right(text.GetLength()-text.GetLength());}其中各函数的使用方法如下:①CStringpos_code=Str_txt.SpanExcluding(_T(,))返回字符串“Str_txt”左侧起始位置到出现第一个“逗号”位置之间的字符,并将其保存在字符“pos_code”中;②intStr_long=Str_txt.GetLength()返回字符串“Str_txt”中字符的数目,并保存在整数类型“Str_long”中③CStringcode=Str_txt.Right(3)返回字符串“Str_txt”中最右侧的三个字符,并保存在字符串“code”中③CStringcode=Str_txt.Right(3)返回字符串“Str_txt”中最右侧的三个字符,并保存在字符串“code”中④if(text.GetAt(i)=='\n')判断字符串中,是否含有换行符“\n”,如果有则返回“真”值,没有则返回“假”值(2)利用Cfile类中的SpanExcluding()、GetLength()和Right()等函数实现对文件中每行数据进行分割,即得到“点号”、“东坐标”、“北坐标”和“高程”;(3)利用atof()函数,将“东坐标”、“北坐标”和“高程”字符串,转换成“Double”数据类型;(4)定义点类中,定义点的成员变量绘制点的函数和绘制点号的函数,并设置变量调整点的大小,且应注意点号同点位不要相互遮挡,并建立隐藏点号功能的函数,实现点号的重画,画刷的颜色取反即可;(5)建立图元对象,通过遍历点图元链表,根据点号实现图元数据成员的赋值,实现点的保存;建立点类对象,包括四个成员变量,即点号将“东坐标”、“北坐标”和“高程”字符串,24Cpoint*point=newCpoint()point-code=code;point-x=x;point-y=y;point-z=zArrayArray_point;Array_point.Add(Cpoint);//存储点224.屏幕坐标同测量坐标的转换要实现在智能测量设备上开发测图系统,其中一个很重要的问题就是实现图形显示功能,而图形显示采用的坐标系必须为测量坐标系,如图1所示:坐标原点为屏幕左下角,Y轴指向屏幕右侧,X轴指向屏幕上方。屏幕坐标系如图2所示:屏幕的左上角为坐OXYABABXYO图1测量坐标系图2屏幕坐标系标原点,横轴为Y轴,X轴与与Y轴垂直指向屏幕下方。屏幕坐标同测量坐标的转换方法如下:(1)确定比例尺首先需要确定全图显示时的比例尺,算法如下:}/)(,/){(minmaxminmaxLYYHXXMaxScale(1)上两式中,Scale为图上一个单位所代表的实际距离值;maxX为需要显示的最大X值;minX为需要显示的最小X值;minY为需要显示的最大Y值;minY为需要显示的最小Y值;H为视图窗口的高度;L为视图窗口的宽度。232.2.视图无极缩放功能的实现数字化测图软件要求必须实现视图无极缩放的功能,即用户能够在设备屏幕上以任意比例查看图形的某一范围,矢量图形系统的一个优点就是具有无极放缩,即图形可以无极限的放大或缩小而不会出现失真,通过此项功能,用户可以将图形全部缩放到绘图区域,查看整体效果,也可以放大显示图形的某一分,以便根据绘图的需要,以一定的比例在设备显示屏上显示出图形的某一范围以查看或编辑。此项功能如果是在PC机上,则较为简单,因为在PC机上用VC开发,可以采用其自带的MFC的窗口类和视图类函数。而在EVC开发中,系统只定义了窗口和视口的函数,由于EVC中没有实现视图类和窗口类中的视图操作函数,所以用户只能自行开发相关的视图缩放函数。我们在利用EVC开发工具,以嵌入式设备为开发平台时,图形绘制所调用的CDC(设备上下文)类的成员函数的参数实际为设备坐标(GPS手簿的屏幕坐标,以像素为单位),而GPS测定的为实际坐标(GPS测得的坐标,单位一般为米),这就要求在矢量图形系统中,将实际坐标(GPS测得的坐标,单位一般为米)转化为设备坐标,这样绘制的图形才能根据用户的需要,在屏幕合适的位置显示出来。为了实现系统的无极缩放和与设备的无关性,系统必须建立一套坐标系,以方便系统的管理,可以方便的实现自身的坐标与各种映像方式之间的转换。即建立建立两套坐标系,即实际坐标与逻辑坐标,实际坐标代表的是屏幕坐标,以像素为单位;逻辑坐标代表的是测量时用的坐标,以米为单位的实际坐标同设备坐标的相互转换。所有只能通过坐标变换的方法,把GPS测得的实际坐标转换转成GPS屏幕的设备坐标,以实现在屏幕上显示任意一部分图形的功能;在实现坐标转换的同时,系统还需要实时保存实际坐标转换成设备坐标所用的转换参数(平移量x、y及比例因子scale),以便在保存图形文件时,将各个图元对象的数据成员恢复成GPS测得的实际坐标。1.1.1实现图形的移动定义如下函数,实现平移图形需要的坐标转换,其参数x_Move、y_Move采用设备单位,表示图形的平移量,其值可取固定值(一般取10个像素即可)。voidMove(floatx_Move,floaty_Move)(1)平移函数的定义voidC1p_circle::pan(doublex,doubley){center.x=center.x+x;center.y=center.y+y;}1.1.2实现图形的缩放定义如下函数,实现缩放图形需要的坐标转换,其参数base_pointx、base_pointy采用实24际单位(米),表示缩放的基点;scale表示缩放采用的比例,以上所有参数均由用户输入。voidzoom(doublebase_pointx,doublebase_pointy,doublescale)(2)缩放函数的定义voidC1p_circle::zoom(doublebase_pointx,doublebase_pointy,doublescale){center.x=base_pointx+(center.x-base_pointx)*scale;center.y=base_pointy+(center.y-base_pointy)*scale;radius=radius*scale;}1.1.3实现实际坐标同设备坐标的相互转换定义如下函数,实现实际坐标同设备坐标的相互转换,其参数x1、y1、x2、y2的值取常量,可以在视图类的够造函数中直接赋值,其代表的是实际单位;其参数x3、y3、x4、y4是图形经过平移缩放后,由x1、y1、x2、y2转换而得到的值,其代表的是设备坐标。通过以上四对坐标,即可求出实际坐标同设备坐标的转换参数,近而在下面函数中通过调用Move()和zoom()函数,实现实际坐标同设备坐标的相互转换。voidrestore(doublex1,doubley1,doublex2,doubley2,doublex3,doubley3,doublex4,doubley4)(4)设备坐标同逻辑坐标相互转换的函数定义(3)设置并记录系统变量,用于存储用户进行平移及缩放的状态,利用此数据可以进行设备坐标同逻辑坐标的互换。doublesx1,sy1,sx2,sy2,sx3,sy3,sx4,sy4;sx1=0;sy
本文标题:4-23基于WINCEGPS手簿的数字化测图系统研究与实现
链接地址:https://www.777doc.com/doc-2929671 .html