分享
 
 
 

介绍一个简单的 GPS 应用软件开发包

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

介绍一个简单的 GPS 应用软件开发包

作者:PJ Naughter

下载源代码

简介

特性

安装和配置

注意事项

使用方法

API 参考

GPSLIB 使用的数据结构

改进计划

作者的联系方式

简介 :

欢迎使用 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 将来的版本。

作者的联系方式:

PJ Naughter

个人网站:http://www.naughter.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有