CE开发GPS应用心得

来源:互联网 发布:淘宝买家怎么删除好评 编辑:程序博客网 时间:2024/05/18 03:16

      从09年9月开始,用了几个月的时间,开发了一个GPS的应用软件,其间近两三个月,基本是每天睡眠三到四小时,从开始的,什么是GPS开始........ 到今天10年2月,C语言大约代码行达1.7万行,95%不是拷贝,都是在这段日子里寒冷冬夜里逐个字母写出来的,我个人认为可以称得上一个系统....现在在这里做一个小结知识点.

     刚开始,对大地坐标转换有一点点儿了解.限于什么是西安坐标,北京坐标,但对于其中的含义不是太清楚,对于学物理的人来说,要做GIS开发,必须深入了解,开始入手的时候就是到当当网先一口气买了《大地测理学基础》  ,  《控制测量学》上下册,《GPS测量原理及应用》《GPS测量操作与数据处理》,说实话,这几本书中,只有《大地测理学基础》是比较有用的。但,书本上全是公式,没有例题和题解,只能自己理解矩阵方程和微积分啦,所以当这些公式出现时,我的线性代数去那了,新的问题又来了,对于一个已毕业了十年的学生来说,很多基本的东东已还给老师,只好再上当当啦(有段小插曲:本来我是对自己的书很爱护的,但由于毕业时,去东莞和在广州的两年里居没定所,书一直放老家,当我再拿《高等数学》出来时,不知那时湿了水全粘在一起了。)这次是《高等数学》上下册第六版,《线性代数》工程数学的。当然为了验证时不需要编大量的试验性应用程序,以前了解了一些《MATLAB》的作用。所以还是买本《高等应用数学问题的MATLAB》求解。经一段时间的学习,对于什么长半轴,第一偏心率有了相当的了解(呵呵,其中的什么高斯投影,最小二阶乖等)开始在MATLAB中验证可用。至此解决了第一个问题。如何将大地坐标转至平面坐标,基本实现了《COORD》上的所有功能。(如无特别说明,全过程开发是用C++)

       接着,第二个问题,开始在PDA上开发软件。当然就是要读到GPS数据啦,开始的时候,看到微软的GPSID(GPS Intermediate Driver),参照MSDN中的"MobileGPS"只要是以下几个对象啦 GPS APIs: - GPSOpenDevice  - GPSGetPosition - GPSCloseDevice  - GPSGetDeviceState

的确,对于一般的应用,用这玩意就足够啦。例如C#(C#是引入 [DllImport("gpsapi.dll")]       [DllImport("coredll.dll")]这两个DLL ),或C的程序员也可以用这个接口的。毕竟微软GPSID让好多细节不需了解,但对于星历等的数据就没有了。因为要解到所有星历的情况,保存原始的NMEA码,只好底层读COM口(串行口)啦。当然还要自己解析NMEA码。这其中实现回调函数,这个最基础的东东。到这一步基本可以拿到数据啦。接下来将要做一个解决一个将数据传送到台式机的问题。其实最开始认识到需要的时候我就是需要传一个数据回到台机处理的。

      第三个难点。TCP/IP UDP协议不得不了解啦。没办法,这里有相当的机制需要自己实现,什么叫套接字等,以前有点基础,曾写过一个连连看的网络对战,代码基本合用,拿来啦....这里是省了些功夫....庆幸以前无聊时还是学习了点知识,要不这可要花一个星期以上。。。

     接着,这时对应用的认识了解深入了些,原来扛一台笔机本到野外,不太切合实际,怎么办?只能在一台PDA中实现啦。那CPU只有528Hz内存也只有192M当系统运行起来,已只有60M内存供使用,怎么感回到80年代286啦,没错,你没听错,是回到旧社会啦。。。可高科技呀,一张图片(卫星图20G)大小,要在这个小玩意上显示(不单要显示出来,还要放大缩小,动态移动(10幅/秒)好在显示屏不大(480*600分辨率)那时不知什么WorldWind,只好自己想办法啦。20G存到小机器上都成问题,更不要说显示啦。好在我们先辈们搞了个叫JPEG的东东,这个东东可以压得比较小而看起来呢并没什么问题,好啦,那只好去研究一下什么是JPEG啦,痛苦的日子来啦。好在国外有两大哥写了两个类库OpenCV、CxImage。在此我代表我家人多谢他们。顺便说一下,BMP的格式和TIF的格式,还是需要对其中每一个字节的含义清楚的。好啦,找到了方法,自己实现一个机制(所谓的算法)让在这小台机器上读取影像数据啦。真机运行时还挺流畅的,一般GPS一秒来一次数据,自己实现的机制可以做到0.02秒显示完。上天保佑,竟还有大把的时间可以利用。这时新的要求接着来啦,能不能再叠加些矢量数据呢?

               新要求,矢量数据叠加,有困难找民警,咱家的这个困难,只好自己来啦,老婆我今晚要看书啦,有宵夜吃码?以前通过ArcGIS的应用,知道什么是SHP文件,挺方便的。可现在要咱家自己处理。好在这东东年代久远,格式开放,就我一个英语未过级的人,看懂了是怎么一会事的时候,高兴了一会,不再为羡慕别人能写出转换SHP到别的格式(因为这两年兴起GIS应用,接触了什么SDE,反证就是ArcGIS这一大堆东东,别人写了些应用。称之为高手,什么怪才的,就是虚荣心吧。),现在我翻身当主人了,我也可以写啦。哈哈。小小乐了一下,这里要说一下DXF也就是AutoCAD的明码格式,需要知道每一组编码的意义。接着什么四叉腰腰腰腰腰腰腰(哦,腰改树)是四叉树。听说能很快的速度找到你要的实体,学啦,看看是什么怪兽。当上数据实验后,发觉这四叉树并不是神,只能对于轻量级,大约万对象以下小数据来说,还算可以,但对于要求内存只能用5M以内,一个10多M的SHP,他无能为力了。。。。只好自己另走路径解决。。。。。。。暂不细说啦。。。。。挺麻烦的。。。

         那矢量对象快速找到后,还得显示呀,这时,什么剪枝,计算机图形学我承认我以前没学好,但不代表以后不好。。有点象表决心。。哈哈。。。。。还好,这些东东,努力一把,还是有希望的。。。功夫不负有心人呀。。。图像宣(好象不是这个宣)渲染。大功告成啦。。。

  回过头来数落一下CE或者说是Windows Mobile.太可恶了。基本上,数据是以ASCII码存储的。但系统是UNICODE码。这个烦恼好烦人,还好写了两个全局函数解决(下面粘上代码,让后人不再受苦),但还是很痛苦。要清析的记得free内存。第二个要说的是:对话框(OPEN DIALOG),系统的只能看到Documents“文档”文件夹,没办法。只有自己写一个打开保存对话框,开始时,还不相信,非搞了两天,才死心自己写一个。神呀,微软,你太可恶啦,说是什么保护系统,但对于开发人员来说,你封啥呀。你多设一参不就完事了吗?非得各家写各家的。无语。另一个是的CBrush ;CPen ; CFont ;CBitmap ;以上几个类,用完必须马上立即DeleteObject,绝对不用怀疑.系统并不会给你释放,如果不释放,黎叔很生气,后果很严重,恭喜你,你已知什么是内存泄漏了..希望后面的同学不要再出现这种情况。

   再说一下国内的编程环境,基本找不出一个象样的开源,google中文,没有用的,真的没用的,CSDN上也只是皮毛,还好有http://www.codeproject.com/.在你无助的时候,这个网站是你的最好朋友,上面有无数的英雄模范,但那是英文的,对于编程的沟通还是没问题的.
      写到现在的心得,诉一下苦,因为框架定义,算法,编程实现,测试都一个人,确实有点累,难怪别的一个团队得一比一比一配套人员.
      写算法时,不要对着电脑,要带上纸和笔,在纸上构思..将大概的框架画出来,可以的话将头函数也写好.
      编码时,也就是对着内存搬来搬去的时候,要细心,多假设可能性,那怕只出现万份之一的可能,也要写检测函数,先确定没这种可能再继续下一步实现代码,不要怕麻烦.
      测试,这个就要用脑去想还有什么没想到的.在机器上多跑........这个没什么好办法,要学会调试,一个编程所谓的高手就是一个调试高手,反之也成立.学会看内存块..汇编.......
 

       黎明来了。接下来的就是外围功夫啦,什么3DES加密(算是掩耳盗铃)吧。为自己的软件做个轻量保护。

       一分耕耘一分收获。。

        快过年了。希望来年的日子幸福快乐。。。

        也希望世界和平,台湾早日回归,这个好象不太靠谱,还是实际点,各位及你的家人身体健康,家庭幸福。重要的是所有朋友都物质文明更加丰富。。。。。
       

 

 

原创粉丝点击