首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

WinCE下的嵌入式地图 02

WinCE下的嵌入式地图 02

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方法。

3.4 用户图层符号标绘的实现

军事上的态势标绘常常需要在地图图层之上叠加各种军标符号,比较简单的方法是响应Map控件的Paint事件。Display对象在Map图层之上显示,当所有的图层绘制完毕后,重绘Display之前会触发Paint事件,此时可以使用Display对象绘制图形、文本和图像。需要说明的是,Display对象绘制的内容不可以保持,用户应注意重绘。调用Display对象绘制一个圆点的代码如下:

private void map1_Paint(object sender,

MapPaintEventArgs e)

{

e.Display.DrawPoint(

new Pen(Color.Blue),

new SolidBrush(Color.Red), 3,

map1.ToMap(100, 100));

}

另一种绘制用户符号的方法是借助绘图图层(graphic layers),Map控件的MapGraphicLayers属性表示绘图图层的集合。地图中包括地理图层(geographic layers)、注解图层(annotation layers)和绘图图层(graphic layers)三类图层。前两类图层的数据都由数据源读取,绘图图层则由用户控制,可以在地理图层、注解图层之上显示额外的信息。其使用方法是:首先为Map控件的MapGraphicLayers属性添加MapGraphicLayer对象或其派生对象的实例,然后重载该实例的Draw()方法。这样当Map重绘时,就会通过Draw()方法完成用户符号的绘制。

3.5 GPS定位功能的实现

ArcGIS Mobile提供了3个GPS相关的控件对GPS进行支持:(1)FileGpsConnection控件:提供文件GPS连接,它可以从一个包含GPS数据的文本文件中,模拟一个GPS连接,这样在调试中会非常方便;(2)Seria1P0rtGpsConnection控件:提供串口GPS连接,主要用在实际应用中;(3)GpsDisplay和上述两种GpsConnection联动,实现GPS信息在地图上的表现。

在没有GPS设备的时候,可以使用FileGpsConnection进行调试。FileGpsConnection的原理就是从一个包含GPS数据的文本文件,模拟GPS连接。将FileGpsConnection对象的FileName属性指定为这个GPS数据文件,然后调用Open和Close方法就可以打开或关闭GPS连接。每次GPS位置点改变时,都会触发GpsChanged事件,在此事件中,可以更新地图的位置。

3.6 应用程序的部署

在部署应用程序之前要在移动设备上安装一些必要的支持文件,一个是。NET CF运行,另一个是ArcGISMobile.CAB和AGMRuntime.CAB,通过ActiveSync把它们拷贝到移动设备并运行;然后把项目生成的可执行文件拷贝到移动设备上,即可以运行创建的应用程序。

如果在VS 2005环境下调试应用程序,应用程序会自动部署到目标设备上。

本文介绍了使用ArcGIS Mobile开发嵌入式GIS应用的基本方法,这些方法已经在工程实践中得到了应用。本文的主要目标是实现态势、军标在移动设备上的显示,ArcGIS Mobile作为一款专业的移动GIS平台,这些功能只是其中一小部分。ArcGIS Mobile的进一步开发,例如数据的现地编辑、数据回传等应结合ArcGIS Server来实现。
返回列表