ArcGIS Mobile 9.4学习笔记十之GPS

 

ArcGIS Mobile SDK提供的GPS library从某一个连接到GPS模块(或者GPS接收器)的COM端口读取并解析GPS位置信息.COM端口可以是一个物理串行端口、一个通过蓝牙或USB绑定GPS接收设备的虚拟COM端口、或者一个程序端口(比如Windows Mobile设备上的GPS intermediate driver驱动程序,GPS intermediate driver允许多个应用程序在同一时间访问GPS).

 

ArcGIS Mobile GPS library只支持NMEA协议的GPS信号,你可以利用第三方工具把GPS接收器输出的GPS位置信息转换成NMEA格式(比如为Trimble的GPS接收器提供转换的Trimble GPS Controller).你应该确保GPS接收器已正确配置,在开始运行ArcGIS Mobile应用程序之前应该确定你想用的COM端口,并且连接到你的GPS接收机.

有必要先了解下Windows Mobile对GPS的支持,在Windows Mobile 5.0的时候引入了上面提到的GPS Intermediate Driver(GPS 中间驱动程序,以下简称 GPSID),它使开发基于GPS的 Windows Mobile应用程序变得简单多了。因为它在开发人员编写的应用程序和 GPS 设备之间加入了一个中间层,使开发人员不需要通过串口直接访问 GPS 设备,而是访问 GPSID 提供的 API 函数,GPSID 再去访问 GPS 设备。这样一来,编写出来的 GPS 应用程序具有设备无关性。另外,GPSID 还有下面两个好处:

1. 多个应用程序可以同时访问同一个 GPS 设备,因为你访问的是 GPSID

2. 不需要去解析 NMEA 命令,GPSID 帮你解析好了

 

Windows Mobile 6.0 SDK 之前利用模拟器Emulator~进行移动程序开发,很多和设备相关的功能无法调试和验证(比如GPS),Windows Mobile 6.0 Professional SDK提供了Fake GPS和GPS Settings 这两个针对模拟器和GPSID开发和使用的辅助工具,可以在C:/Program Files/Windows Mobile 6 SDK/Tools/GPS 目录下找到它们.

      Fake GPS主要用于你想开发运行在Windows Mobile上GPS应用程序,但找不到GPS设备用来调试.或者在室内调试程序,GPS设备接收不到卫星信号.GPSID 的所有配置信息都保存在注册表中,可以通过修改注册表来更改 GPSID 的配置,其中有一个设置可以让 GPSID 从一个包含 NMEA 命令的 .txt 文件读取 GPS 数据,而不需要从 GPS 设备读取数据。Fake GPS 的工作原理就是修改设备注册表的GPSID配置,让GPSID 从一个文本文件读取 GPS 数据。对于我们开发的应用程序来说,跟访问真实的设备并没有两样。

      在C:/Program Files/Windows Mobile 6 SDK/Tools/GPS下的FakeGPS.cab就是FakeGPS的安装文件。然后我们就把Emulator的share folder设置为该目录,或者把该文件拷贝到仿真器里.单击FakeGPS.cab文件进行安装,安装完成以后我们打开Programs里面的Fake GPS项,将第一参数的”Disable”改为”Enable”,现在可以在第二个输入框中选择从哪个文件读取 GPS 数据。Fake GPS 默认带了两个测试文件,fakegpsdata.txt 在打开后会让 GPSID 马上接收到位置信息,而 dixies.txt 需要等待一段时间才能接收到位置信息。点击”Done”,这样就完成Fake GPS的安装和设置。

      我们可以在设备的”MyDevice/Programs/FakeGPS/GPSFiles”下,找到”FakeGPSData.txt”和”dixies.txt”文件,其中的数据所遵循的就是NEMA协议.什么是NEMA?请联系Google或Baidu.如果你想使用自己的测试数据,可以将编写好的 .txt 文件复制到 /Program Files/FakeGPS/GPSFiles 目录下,在重新运行Fake GPS 就可以在 NMEA File 列表中看到了。在C:/Program Files/Windows Mobile 6 SDK/Samples/PocketPC/CS/GPS下有一个解决方案,打开Gps.sln,选择Windows Mobile 6.0 Professional Emulator进行调试。

GPS Settings:在 Windows Mobile操作系统中自带了一个GPSID 的配置程序,在 Windows Mobile 6 Professional 中可以通过选择“Start-->Settings-->System-->External GPS”打开。

 

现在我们回到ArcGIS Mobile,在其SDK中提供了3个.Net组件用于GPS功能的开发:

1 GPS Serial Port Connection

2 GPS File Connection

3 GPS Display

它们设计用来管理和GPS接收器的连接,解析遵循NMEA协议的GPS语句,在地图上展现GPS位置信息,并且为其它应用程序提供利用GPS语句的接口.

 

SerialPortGpsConnection

SerialPortGpsConnection组件旨在直接从设备的某个指定串口获取GPS信息,与GPS设备连接后使用SerialPortGpsConnection通信协议.由于GPS设备triangulate定位信息,通过这个连接来分发和接收这些信息(it is broadcast and received via this connection).SerialPortGpsConnection对该定位信息进行解码,进行打包并通过一个有含义的事件参数依次分发解码后的定位信息.若要使用该组件,你必须首先指定GPS设备所使用的端口名.

 

FileGpsConnection

FileGpsConnection组件旨在模拟野外使用的GPS,它读取一个包含位置信息的二进制文件(位置信息以前通过GPS设备获得),读取文件里定位信息的时间间隔由用户指定.文件里的定位信息通过FileGpsConnection和解码后,通过内部有含义的事件参数进行分发传递.当定位语句被接收到的事件触发后,NMEASentenceEventArgs参数可以用来获取GPS信息.如果正确设定GPSDisplay和FileGpsConnection连接后,GPSDisplay组件将自动获得GPS的信息.若要使用FileGpsConnection组件,你必须先指定一个有效的包含遵循NMEA协议的GPS定位信息的文件.

 

GpsDisplay

GpsDisplay组件用来同步GpsConnection中解码了的定位信息,并在地图空间中进行显示.若要使用该组件,你必须先定义关联的Map组件和GpsConnection组件(SerialPortGpsConnection或者FileGpsConnection).该组件包含了所有的属性和配置信息用来控制GPS定位信息在地图上的显示方式.在应用程序中使用GPS组件使你的GPS开发工作变得更加简单.

在ArcGIS Mobile应用程序中添加FileGpsConnection(或SerialPortGpsConnection)和GpsDisplay组件,并在属性框中进行上述的一些必要设置后,就可以开启GPS连接和使用GPS定位数据了,相关代码如下:

 

代码

 1         private void menuItemOpen_Click(object sender, EventArgs e)

 2         {

 3             this.fileGpsConnection1.Open();

 4         }

 5 

 6         private void menuItemClose_Click(object sender, EventArgs e)

 7         {

 8             this.fileGpsConnection1.Close();

 9         }

10 

11         private ESRI.ArcGIS.Mobile.Geometries.Point gpsLocation;

12         private void fileGpsConnection1_GpsChanged(object sender, EventArgs e)

13         {

14             double lat = this.fileGpsConnection1.Latitude;

15             double lon = this.fileGpsConnection1.Longitude;

16             if (!(lat >= -90 && lat <= 90)) return;

17             if (!(lon >= -180 && lon <= 180)) return;

18             //提供坐标转化

19             ESRI.ArcGIS.Mobile.SpatialReferences.SpatialReference spatialReference = mobileCache1.SpatialReference;

20             ESRI.ArcGIS.Mobile.Geometries.Coordinate coordinate = spatialReference.FromWgs84(lon, lat);

21 

22             gpsLocation = new ESRI.ArcGIS.Mobile.Geometries.Point(coordinate);

23             this.map1.CenterAt(coordinate);

24         }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值