首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

嵌入式定位系统的实用设计与软件算法实现(2)

嵌入式定位系统的实用设计与软件算法实现(2)

要得到地图的左上角和右下角的经纬度坐标,只需知道地图边界范围内任取的2个参考点的4个参数即可。通过在某地实地采集的3个参考点,得到表l所列的坐标数据。

根据公式,上面的3个参考点共有3种组合方式,分别得出3组经纬度值,对这3组取平均值,以减少误差,提高精度。最终求得左上角和右下角的坐标数据,如表2所示。

从而得到基准点,并将其坐标数据保存到坐标数据文件taiyuan_gps.dat中。
为了提高灵活性,这里为坐标源数据定义如下数据结构:

3.2 GPS线程
采用单线程对采集的一组数据进行读取、解析和计算。在程序中定义一个pthread_t类型变量,代表采集并解析GPS数据的后端线程。由于 GUI的前端和后端GPS线程都要访问某些GPS数据,因此需要在线程间采用同步策略。这里利用线程锁来实现,将其定义为GPSL0CK。它是一个 pthread_mutex_t类型的变量。
对应于Point型、Pline型和Region型3种类型的地理信息,分别定义数据结构_POINT、_PLINE和_REGION。以道路为例,在程序中定义对应的_PLINE结构来描述相关信息,该结构定义如下:

3.3 MiniGUI下电子地图的绘制
MiniGUI程序的入口点为MiniGUIMain.main函数已在MiniGUl的函数库中定义,该函数在进行一些MiniGUI的初始化工作后调用MiniGUI-Main函数。先调用SetDesktopRect函数来设置程序的显示区域,然后调用CreateMainWindow函数创建并显示程序的主窗口,最终进入消息循环。
MiniGUI是消息驱动的系统,一切运作都围绕消息进行,MiniGUI应用程序通过接收消息来与外界交互。在电子地图的绘制过程中,主要用到MiniGUI的窗口绘制消息MSG_PAINT。该消息在需要进行窗口重绘时发送到窗口过程。MiniGUI通过判断窗口是否含有无效区域来确定是否需要重绘,在需要进行重绘时,MiniGUI会向相应的窗口过程发送MSG_PAINT消息。MSG_TIMER则主要负责从后端GPS线程中取得当前的经纬度信息,格式化之后输出到文本框中。
当MiniGUI主程序接收到其GPS通信子进程发送的SIGUSRl信号时,就会调用相应的信号处理函数。为了实时更新定位点在电子地图中的位置,必须在该函数中读取共享内存中的最新位置信息;同时根据定位点位置的变化确定需要重绘的区域,调用MiniGUI中的lnvalidateRect 函数使该区域无效。通过这种方式使得最新的位置信息实时地显示在电子地图上。
4 结束语
随着社会信息化的发展,GPS导航终端的使用已成燎原之势,越来越多的设备配备定位或导航功能。本设计利用MiniGUI来实现GPS的基本功能,使地图的绘制工作脱离繁琐的底层硬件,大大简化了此项工作,再配合GPS信号接收机实现实时定位导航功能。同时,本设计还有许多地方值得改进,例如通讯反馈精度和矢量化地理信息的优化显示等。
返回列表