介绍一个简单的 GPS 应用软件开发包
2006-07-21 11:09:05 来源:WEB开发网本文示例源代码或素材下载
简介 :
- 欢迎使用 GPSLIB,这是一个简单的软件开发包(SDK),你可以利用这个 GPSLIB 在自己的32位 Windows 应用程序中加入全球定位系统的支持。
- 本文附带的源代码压缩文件中包含有 GPSLIB 库的源代码和 Demo 程序。很多文件中都有详细的注释说明。为了保证可下载文件的体积尽量的小,压缩文件中不含任何二进制文件。请使用Visual C++ 5 以上的版本编译并生成 DLLs、控制面板程序和可执行文件。
特性:
- 可以在任何支持Windows DLLs调用的开发环境中使用,包括VB、VBA、C、C++、Fortran、Delphi。
- 完全支持 UNICODE 编码字符集。
- 提供一个控制面板程序用以在客户端添加、配置和删除GPS接收器。
- 简单易用的API函数调用与 Win32 SDK API 调用方法类似,所以 Windows 程序开发人员对此不会感到陌生。
- 提供全部的源代码,以便帮助开发人员在调试时可进入 GPSLIB 库代码。
安装与配置:
- GPSLIB 只能用于 Win32 平台。它没有安装程序。只要将 gpslib.zip 文件解压缩到硬盘上的某个目录即可。
- 当你分发自己的应用程序时,必须将相关的 GPSLIB.DLL 文件以及控制面板程序一起分发。
注意事项:
- 请随时跟踪作者个人网站,以便获得最新版本。
使用方法:
- 用 GPSLIB 开发客户端程序时,请链接相应的 GPSLIB DLL 文件(静态链接或动态链接均可),然后调用其中输出的函数。
- 使用 GPSLIB 之前,必须修改包含文件路径和库文件路经,使其指向 GPSLIB 所在的目录。
- 如果想重新生成 GPSLIB 组件,请直接打开 gps32.dsw 工程文件。然后重新编译生成。
- GPSLIB 组件中不包含二进制模块,需要时请用相应的*.dsw文件重新生成。
- 不同的生成配置必须链接不同版本的 GPSLIB DLL。具体细节请参考表一。
- 控制面板由两个文件组成。一个是.CPL文件,另一个是.EXE文件。生成配置请参考表二。
- 形成 GPS 控制面板的两个程序应该被安装到客户端机器的系统目录( 如Windows NT 或 Windows 2000的 system32 )。但 GPSLIB DLL 既可以被安装到客户端机器的系统目录,也可以被安装到客户端机器的应用程序目录。
- 请注意分发程序时,任何人只被允许分发 GPSLIB 的正式(RELEASE)版本。
- 调试(Debug)版本只用于调试。开发客户端程序的语言或工具最好能支持 DLLs 中的调试信息,以便在 MS IDE 开发环境中调试使用 GPSLIB 库的客户端程序时能直接跟踪到 GPSLIB 库的源代码。
表一:
生成配置 | 需要链接的GPSLIB DLL |
Ascii Debug | GPS103D.DLL |
Ascii Release | GPS103.DLL |
Unicode Debug | GPS103UD.DLL |
Unicode Release | GPS103U.DLL |
表二:
生成配置 | 控制面板动态库 | 控制面板执行文件 |
Ascii Debug | GPS103D.CPL | GPS103D.EXE |
Ascii Release | GPS103.CPL | GPS103.EXE |
Unicode Debug | GPS103UD.CPL | GPS103UD.EXE |
Unicode Release | GPS103U.CPL | GPS103U.EXE |
API 参考:
GPSLIB DLLs 接口函数输出清单如下:
GpsShowControlPanel
GpsCreateEntry
GpsGetNumDevices
GpsEnumDevices
GpsDeleteEntry
GpsRenameEntry
GpsPropertiesDlg
GpsOpen
GpsClose
GpsGetPosition
GpsGetVersion
GpsDeviceNameAlreadyExists
GpsShowAboutBox
GpsGetDevice
GpsSetDevice
GpsShowControlPanel
BOOL GpsShowControlPanel();
返回值
如果控制面板程序显示成功,函数返回 TRUE,否则返回 FALSE。
参数
无
注释
调用此函数打开 GPS 接收器控制面板程序。通过该程序可以在系统中安装、配置和删除 GPS 接收器。
GpsCreateEntry
BOOL GpsCreateEntry(HWND hWnd);
返回值
如果安装新的 GPS 接收器成功,函数返回 TRUE,否则返回 FALSE。
参数
hWnd 用于此函数显示的用户界面元素父窗口句柄。
注释
调用此函数将显示一个基于向导的标准对话框,使用户可以在其计算机上安装 GPS 接收器。
参见
GpsDeleteEntry, GpsGetDevice
GpsGetNumDevices
DWORD GpsGetNumDevices();
返回值
当前安装的 GPS 接收器数目。
参数
无
注释
调用此函数可以返回当前安装的 GPS 接收器数目。
参见
GpsEnumDevices, GpsGetDevice
GpsEnumDevices
DWORD GpsEnumDevices(LPGPSDEVINFO lpGpsDevInfo, DWORD dwRequestedDevices);
返回值
成功枚举的 GPS 设备数目。
参数
IpGpsDevInfo 指向 GPSDEVINFO 结构的指针,该结构由函数体中的代码填写。
dwRequestedDevices 枚举的设备数。
注释
用此函数获取任何已安装 GPS 设备的配置参数。为了枚举当前所有 GPS 设备,必须将 dwRequestedDevices 设置为 GpsGetNumDevices 的返回值。
参见
GpsGetNumDevices, GPSDEVINFO, GpsGetDevice
GpsDeleteEntry
BOOL GpsDeleteEntry(LPCTSTR lpszEntry);
返回值
如果成功删除 GPS 设备,则为 TRUE,否则为 FALSE。
参数
lpszEntry 要删除的 GPS 设备名。
注释
删除一个已安装的 GPS 设备。
参见
GpsCreateEntry
GpsRenameEntry
BOOL GpsRenameEntry(LPCTSTR lpszOldEntry, LPCTSTR lpszNewEntry);
返回值
如果针对 GPS 设备的改名成功,则为 TRUE,否则为 FALSE。
参数
lpszOldEntry 当前的 GPS 设备名。
lpszNewEntry GPS 设备新名称。
注释
改名已安装的 GPS 接收器。
参见
GpsCreateEntry, GpsDeleteEntry
GpsPropertiesDlg
BOOL GpsPropertiesDlg(HWND hWnd, LPCTSTR lpszEntry);
返回值
如果属性对话框成功显示并且用户通过“OK”按钮关闭对话框。则返回 TRUE。
参数
hWnd 用于显示属性对话框的父窗口。
lpszEntry 显示该名称的 GPS 设备属性。
注释
显示与已安装的 GPS 接收器关联的属性对话框。如果用“OK”按钮关闭该对话框,则会保存对相关属性数据的更新。
参见
GpsCreateEntry, GpsDeleteEntry
GpsOpen
HGPS GpsOpen(LPCTSTR lpszEntry);
返回值
返回抽象的 HANDLE 类型(HGPS),该 HANDLE 表示一个到 GPS 接收器的连接。如果是一个无效的 HANDLE ,则由标准的 Win32 INVALID_HANDLE_VALUE 值表示。
参数
lpszEntry 打开连接的 GPS 设备名称。如果 lpszEntry 为 NULL。那么默认的 GPS 接收器将被打开。
注释
这是客户端程序用来获取 GPS 装置的主要函数。客户端程序还应该通过调用 GpsShowControlPanel 来提供打开控制面板的机制。
参见
GpsClose, GpsEnumDevices, GpsShowControlPanel
GpsClose
BOOL GpsClose(HGPS hEntry);
返回值
如果打开 GPS 接收器连接被成功关闭。则返回 TRUE。
参数
hEntry 要关闭的 GPS 接收器句柄。
注释
此函数通常只在客户端 GPS 程序退出之前被调用。
参见
GpsOpen
GpsGetPosition
BOOL GpsGetPosition(HGPS hEntry, LPGPSPOSITION lpPosition);
返回值
如果打开连接的 GPS 装置被成功搜索到则返回 TRUE。
参数
hEntry 要搜索的 GPS 装置的 GPS 连接句柄。
Remarks
在成功调用 GpsOpen 函数之后,客户端程序应周期性地调用该函数,根据客户端程序的需要,建议调用间隔在 1-5 秒,如果返回成功,那么客户端程序可将 lpPosition 用于任何目的,如:在某个地图程序中,用此信息标出用户位置,也可以在屏幕地图上进行目标跟踪。
参见
GpsOpen, GpsClose, GPSPOSITION
GpsGetVersion
DWORD GpsGetVersion();
返回值
当前 GPSLIB 库的版本号,版本号值类型为 DWORD。
参数
无
注释
返回 GPSLIB dll 版本号。当前的值为 0x101,其对应的 GPSLIB 版本号为 v1.01。
GpsDeviceNameAlreadyExists
BOOL GpsDeviceNameAlreadyExists(LPCTSTR lpszEntry);
返回值
如果命名的 GPS 设备已经被安装,则返回 TRUE,否则返回 FALSE。
参数
lpszEntry GPS 设备名。该函数检查该设备是否安装。
注释
在函数内部,使用 GpsEnumDevices 确定命名的 GPS 设备是否已经安装。该函数被控制面板使用,以保证指定设备的唯一性。
参见
GpsEnumDevices
GpsShowAboutBox
void GpsShowAboutBox(HWND hWnd);
返回值
无
参数
hWnd 用于显示关于对话框的父窗口句柄。
注释
该函数显示一个“关于”对话框,其中包含 GPSLIB 的版本号以及版权信息。它被用于控制面板自己的“关于”对话框。
参见
GpsGetVersion
GpsGetDevice
BOOL GpsGetDevice(LPCTSTR lpszEntry, LPGPSDEVINFO lpDevice);
返回值
如果成功找到该设备则返回 TRUE,否则返回 FALSE。
参数
lpszEntry 要对之进行设置的 GPS 设备名。
IpGpsDevInfo GPSDEVINFO 结构指针,该函数填写该结构,然后以参数形式返回该结构。
注释
获取给定名称的 GPS 设备的设置信息。如果 lpszEntry 被置为 NULL,那么获取的就是默认的 GPS 接收器设置。
参见
GpsSetDevice, GpsEnumDevices, GPSDEVINFO
GpsSetDevice
BOOL GpsSetDevice(LPCTSTR lpszEntry, LPCGPSDEVINFO lpGpsDevInfo);
返回值
如果成功更新设备的设置,则返回 TRUE,否则返回 FALSE。
参数
lpszEntry 要更新设置的 GPS 设备名。
IpGpsDevInfo GPSDEVINFO 常量结构指针,其中包含要更新的参数信息。
注释
更新指定名称的 GPS 设备设置。在调用该函数前,通常应该调用 GpsGetDevice 函数以保证 lpGpsDevInfo 包含有效成员。
参见
GpsGetDevice, GpsEnumDevices, GPSDEVINFO
GPSLIB 使用的数据结构:
GPSDEVINFO Structure
typedef struct tagGPSDEVINFO
{
TCHAR szDeviceName[ GPS_MaxDeviceName + 1 ];
BOOL bDefaultReceiver;
WORD wCommPort;
DWORD dwCommBaudRate;
WORD wCommDataBits;
WORD wCommParity;
WORD wCommStopBits;
} GPSDEVINFO;
GPSDEVINFO 结构用于表示 GPS 接收器设备属性。
成员表:szDeviceName | GPS 设备名 |
bDefaultReceiver | 如果该设备为默认接收器,该值为 TRUE,否则为 FALSE |
wCommPort | GPS 接收器所连接的串行通讯口端口号 |
dwCommBaudRate | 用于连接该设备的波特率 |
wCommDataBits | 用与连接该设备通讯端口的数据位 |
wCommParity | 用于连接该设备的枚举类型校验位。此成员取值为下列值之一: GpsParityNone GpsParityOdd GpsParityEven GpsParityMark GpsParitySpace |
wCommStopBits | 用与连接该设备的枚举类型停止位。此成员取值为下列值之一: GpsStopBits1 GpsStopBits1Point5 GpsStopBits2 |
参见
GpsEnumDevices
GPSPOSITION Structure
typedef struct tagGPSPOSITION
{
BOOL bNorthing;
DWORD dwLatitude;
BOOL bEasting;
DWORD dwLongitude;
DWORD dwBearing;
DWORD dwSpeed;
WORD wFixYear;
WORD wFixMonth;
WORD wFixDay;
WORD wFixHour;
WORD wFixMinute;
WORD wFixSecond;
WORD nSatellites;
DWORD dwAntennaAltitude;
WORD wQualityIndicator;
} GPSPOSITION;
成员表:
bNorthing | 如果报告的位置在赤道以北,该值为 TRUE,否则为 FALSE。 |
dwLatitude | 纬度。该值与bNorthing一起从 NMEA 命令“GPRMC”中获取。 |
bEasting | 如果所报告的位置在格林威治本初子午线以东,该值为 TRUE,否则为 FALSE。 |
dwLongitude | 经度。该值与bEasting一起从 NMEA 命令“GPRMC”中获取。 |
dwBearing | 方位。该值从 NMEA 命令“GPRMC”获取。与接收器移动的罗盘方向对应。 |
dwSpeed | 以厘米/小时计算的速度。该值从 NMEA 命令“GPRMC”获取。与接收器移动的速度对应。 |
wFixYear | GPS 定位时间的年份。该值从 NMEA 命令“GPRMC”获取。 |
wFixMonth | GPS 定位时间的月份。该值从 NMEA 命令“GPRMC”获取。 |
wFixDay | GPS 定位时间的日期。该值从 NMEA 命令“GPRMC”获取。 |
wFixHour | GPS 定位时间的小时。该值从 NMEA 命令“GPRMC”获取。 |
wFixMinute | GPS 定位时间的分钟。该值从 NMEA 命令“GPRMC”获取。 |
wFixSecond | GPS 定位时间的秒数。该值从 NMEA 命令“GPRMC”获取。 |
nSatellites | 视图中的卫星数该值从 NMEA 命令“GPRMC”获取。 |
dwAntennaAltitude | 以厘米计算的接收器在平均海平面以上的海拔高度,该值从 NMEA 命令“GPRMC”获取。 |
wQualityIndicator | 枚举类型 GPS 质量指示器。该值从 NMEA 命令“GPRMC”获取。该成员取下列值之一: GpsQualityFixNotAvailable GpsQualityFix GpsQualityDifferentialFix |
改进计划:
- 创建 MFC 打包类,提供 GPSLIB C++ 接口。
- 解决 GPSLIB 控制面板程序对 MFC 库的依赖问题,此问题解决后,代码体积将减少很多。
- 缩小 GPSLIB DLLs 的体积,缩短客户端程序加载 GPSLIB DLLs 的时间。
- 为客户端程序提供支持:使其可同时使用相同的 GPS 设备。其难点和技术挑战在于需要开发一个类似 TAPI 实现的那种框架。
- 如果你有任何关于 GPSLIB 的问题,请及时交流,以便进一步改进 GPSLIB 将来的版本。
更多精彩
赞助商链接