WinCE下基于ArcGIS Mobile实现的嵌入式地图
很多场合的嵌入式应用,需要涉及地图操作。目前嵌入式GIS产品国外主要有ESRI和MapInfo,国内主要有超图、灵图等[1]。
本文介绍在某基于WinCE 6.0操作系统的车载信息终端上嵌入式地图的实现方法。主要的目标功能如下:能够实现基本的地图操作,例如放大、缩小、漫游、分图层显示;用户图层的绘制,例如在地图上叠加军标、绘制符号等;能够接收GPS坐标、绘制本车或它车的地理位置。
本文的开发环境使用VS 2005、ArcGIS Server v9.3,编程语言使用C#,目标操作系统为WinCE 6.0。
1 ArcGIS Mobile开发环境
ArcGIS Server是ESRI公司推出的专业的GIS应用整合套装软件,其主要目标是提供地理信息网络服务,在大型GIS系统与终端设备间提供无缝的信息交换与服务。为了支持PDA、智能手机之类的手持设备,按照任务的复杂程度,ArcGIS为移动GIS提供了三种解决方案:ArcGIS Mobile、ArcPad以及ArcGIS Engine[2]。本文介绍依托ArcGIS Mobile开发的嵌入式应用。此外,还利用ArcMap和ArcCatalog这两个工具进行地图制作和地图发布,而且这两个工具也都包含在ArcGIS Server套装中。
ArcGIS Mobile的基本功能包括:浏览空间数据,捕捉、标注GPS位置,创建或更新点、线、面等要素,通过ADO.Net编辑表格数据,自动从GIS服务器同步更新数据等[3]。
基于ArcGIS Mobile开发移动应用的基本步骤是:首先使用ArcMap编辑地图;然后使用ArcCatalog或者ArcGIS Server Manager发布地图;使用Visual Studio 2005以及ArcGIS Mobile SDK开发应用程序;最后将数据和应用程序部署到目标设备[4]。
2 地图数据的准备
ArcGIS Mobile开发的应用,不仅支持在线应用,同时也支持离线应用。在应用程序有可用的网络使用时,ArcGIS Mobile可以在线同步更新数据,并下载到本地设备上作为缓存;当网络不可用时,ArcGIS Mobile可以使用缓存数据。
本文描述的终端设备不需要考虑地图编辑功能,也不需要从地图服务器读取数据,所以在应用部署时,应预先生成缓存再直接部署到目标设备上与应用程序一起发布。
ArcToolbox为Mobile应用提供了两个工具,其中Generate Mobile Service Cache用来生成Mobile地图服务的缓存。需要注意的是,为了支持移动应用,在发布服务时,应选中“Mobile Data Access”。如果用户不需要修改地图数据,还可以创建Basemap,对地图数据进行高度压缩,使之在移动设备上的性能更加优化[5]。
3 应用程序开发
在Visual Studio 2005下提供了智能设备应用程序开发向导,可以按照向导进行应用程序的开发。为了使用ArcGIS Mobile提供的类,应当引用相应的命名空间。
3.1 在应用程序中加入Map控件
在工具箱的“ArcGIS Mobile Controls”选项卡中提供了与Mobile开发的各种控件,其中Map控件提供了对地图内容进行管理和控制的功能。当给窗体添加了一个Map对象时,Map控件会自动绑定一个MobileService对象。在ArcGIS Mobile中,地图内容通过MobileService控件获得并发送,Map主要负责地图的表现。地图服务地址和地图缓存路径的设置也保存在MobileService对象中。
3.2 从缓存读取地图数据
为了显示地图,首先通过MobileService控件读取地图缓存数据。基本步骤是:在程序初始化时,首先通过MobileService的CacheStoragePath属性设置缓存路径,然后利用MobileService的Open方法,打开缓存。示例代码如下(省略了异常捕获语句):
mobileService1.CacheStoragePath=@MapCache;
mobileService1.Open(CacheOpenMode.Open);
3.3 地图基本操作的实现
地图的基本操作如放大、缩小和漫游等可以通过Map控件的MapActions属性来实现。MapActions是与Map控件关联的地图操作模式集合,常用的有PanMapAction、ZoomInMapAction等。将需要的地图操作模式添加到MapActions集合,在地图操作模式需要改变时,设置Map控件的CurrentMapAction属性为MapActions集合中的一种,当前的地图操作模式也就随之改变。
例如,准备通过点击工具栏的Button实现地图放大操作,则首先创建ZoomInMapAction的新实例,然后将新实例加入Map控件的MapActions,响应Button单击事件,将Map控件的CurrentMapAction属性设置为 ZoomInMapAction。代码如下:
private ESRI.ArcGIS.Mobile.MapActions.
ZoomInMapAction zoomInMapAction1;
this.zoomInMapAction1=new ESRI.ArcGIS.
Mobile.MapActions.zoomInMapAction1
(this.components);
this.map1.MapActions.Add(this.zoomInMapAction1);
this.map1.CurrentMapAction=zoomInMapAction1;
在移动设备没有鼠标、触摸屏等定位设备时,可以采取一种变通的方式进行地图的缩放,这就是Envelope类。Envelope用来定义一个几何对象的区域,可以借助它先获取地图的显示区域,然后改变Envelope,再设置地图的显示区域。代码如下:
this.envelop1=this.map1.GetExtent();
this.envelop1.Resize(0.5);
this.map1.SetExtent(this.envelop1);
利用Map控件的GetExtent和SetExtent方法来获取及设置地图的可视区域。CenterAt方法可以改变地图的中心位置。为了在屏幕坐标和地理坐标之间进行转换,可以调用Map控件的ToMap和ToClient方法。
嵌入式 地图 实现 Mobile 基于 ArcGIS WinCE 相关文章:
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)
- 嵌入式系统实时性的问题(06-21)
- 嵌入式实时系统中的优先级反转问题(06-10)
- 嵌入式Linux系统中MMC卡驱动管理技术研究(06-10)
- FPGA的DSP性能揭秘(06-16)