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         }

 更多关于ArcGIS Mobile的开发:http://www.cnblogs.com/ECNU-GIS-LIUJIE

posted on 2010-04-08 17:11  JayLiu  阅读(2969)  评论(3编辑  收藏  举报