您的位置:首页 > 其它

使用ArcGIS Mobile SDK 9.3 开发移动设备应用-初级篇

2010-04-21 17:31 645 查看
【概述】概述如何通过ArcGIS
Server 9.3提供的Mobile SDK开发移动设备应用。

【环境】Windows XP SP3,ArcGIS Server
9.3,Visual Studio 2008,Windows Mobile 6 Professional SDK

ArcGIS
Mobile简介

随着3G移动通讯时代的到来,移动设备开始扮演越来越重要的角色。包括各种智能手机、PDA、导航设备、平板电脑在
内的各种移动终端,在人们生活和业务中发挥越来越重要的作用。对于移动设备来说,构建其上的GIS应用天生与目前基本属于移动设备标准配置的GPS关系密
切;同时,有了3G高速带宽的支持,GIS在移动设备上的各种应用,也能够凭借互联网的东风,扶摇直上。这个时候,ArcPad以及其它很多嵌入式GIS
开发工具已经不能满足这样的需求了,ArcGIS Mobile应运而生。

ArcGIS
Mobile开发的应用,不仅支持在线应用,它同时也支持离线应用。在应用程序有可用的网络使用时,ArcGIS
Mobile应用可以在线同步更新数据,并下载到本地设备上作为缓存;当网络暂时不可用时,ArcGIS
Mobile应用同样可以通过操作缓存数据来使用;甚至在应用部署的时候,我们可以预先生成缓存直接部署到目标设备上。这种灵活的模式使ArcGIS
Mobile应用在移动环境下有着非常好的伸缩性。

通过SDK我可以做什么?

通过ArcGIS
Mobile SDK,我们可以实现以下一些主要功能:

1. 浏览空间数据

2. 捕捉、标注GPS位置

3.
创建或更新点、线、面等要素

4. 通过ADO.Net编辑表格数据

5. 自动从GIS服务器同步更新数据

我们看到,以
上的这些功能,基本上已经可以满足移动GIS应用的需求了。那么我们再来看一看从整体流程上如何创建一个移动应用。



从上图我们可以看到,通过ArcGIS
Mobile创建一个移动应用大体可以通过这几个步骤完成:

1. 在ArcGIS Desktop中设计创建地图

2.
将地图通过ArcGIS Server发布

3. 使用ArcGIS Mobile SDK创建移动应用程序

4. 将程序部署到目标设备上

是不是很简单?对于了解并熟悉ArcGIS
Server和.Net程序开发的人来说,开发移动应用无非是换了一个开发环境——在ArcGIS Server强大的支持下,万变不离其宗。

好,
让我们开始开发我们的第一个ArcGIS Mobile应用吧!

准备数据并发布服务

对于熟悉
ArcGIS Desktop和ArcGIS
Server的人来说,这和桌面应用的数据准备没有任何区别。我们首先使用ArcMap进行地图的组织,然后通过ArcCatalog或者ArcGIS
Server Manager将这个地图发布成服务,只需注意,为了支持我们的移动应用,在发布服务时,选中“Mobile Data Access”。



我们在移动设备上使用的地图服务一般应该是如下
的这种URL形式:

http://<server_name>/arcgis/services/<map_name>/MapServer/MobileServer

支持的设备平台

ArcGIS Mobile 9.3支持以下这些智能设备平台:

l
Windows Mobile 6 Professional

l Windows Mobile 6 Standard

l
Windows Mobile 5 Pocket PC

l Windows Mobile 5 Smartphone

l Windows
Mobile 2003

l Windows CE .NET 5.0

以上这些移动设备平台SDK都可以在微软的网站上免费下
载。另外需要说明的是,除了这些智能设备,ArcGIS Mobile支持完整的.Net框架,因此ArcGIS
Mobile也支持开发能够在Ultra-Mobile PC(超便携移动个人电脑,操作系统可能包括Windows XP、Windows XP
Tablet PC edition和Windows
Vista)上运行的桌面程序。当然,在进行开发之前,你首先需要确定你的应用最终是要部署到哪里的,为智能设备开发的应用和为PC开发的应用是不能通用
的。

使设备联网

如今我们的移动应用大部分都要整合到Internet中去,形成
MID(Mobile Internet Device)应用。ArcGIS Mobile也需要Internet与ArcGIS
Server进行同步和交互,所以,我们需要首先想办法让我们的设备能够联网。

关于使模拟器上网,你可以在Google搜索“模拟器
上网”,有很多可供参考的材料。这里选择的是适合只有一个IP地址的上网方法:通过ActiveSync连接PC上网。

1.
打开ActiveSync ,点击“文件”—>“连接设置”,在“允许连接到以下其中一个端口”下选择“DMA”。

2.
打开Visual
Studio,点击菜单“工具”—>“设备仿真管理器”,选择模拟器,在右键菜单中点击“连接”。等模拟器启动后,再点击“插入底座”
(Cradle),此时,通过ActiveSync来连接到模拟器,并进行数据同步。

3.
在模拟器中,点击“开始”—>“设置”,点击“连接”选项卡。

(1)选择“网卡”-“我的网卡连接到”选“默认单位设置”。在
“点击适配器以修改设置:”下面选“AsyncMac NDISWAN
Miniport”,选中“使用服务器分配的IP地址”,点击右上角的“ok”,连续确认后结束设置。

(2)在“连接”选项卡中选择“连接”。在
“高级”选项卡中,点击“选择网络”,在“在程序自动连接到Internet时,使用:”下面选“单位设置”(默认是“Internet设置”),然后,
连续点击右上角的“ok”确认设置。

4.
在“设备仿真器管理器”中选中该模拟器,先点击右键菜单中的“移除底座”,再点击“插入底座”,重新与ActiveSync连接一次后就可以上网了。打开
浏览器,输入Google的网址,它还很智能唉,自动跳转到布局比较小的Mobile页面上去了。



测试Mobile服务和设
备连接情况

在正式动手开发我们的移动应用之前,先不要着急,我们还没有检查我们的Mobile服务是否正常,我们也没有检查设备能否通
过网络连接到GIS服务器,获得Mobile地图数据。所以,最好还是先测试一下看看效果再说。但是,我们还没有开发任何一个哪怕“Hello
World”程序,怎么测试呢?

ArcGIS Mobile想得很周到,你从浏览器打开ArcGIS Server
Manager可以看到,首页很醒目的一个选项是“Create a mobile
project”。跟Web程序很类似,通过这个向导我们可以快速地生成一个Mobile应用。

哦,这里插播一句,如果你对智能设备调
试比较熟悉的话,你也可以使用Sample程序(比如:

“%ARCGIS_HOME%/DeveloperKit/SamplesNET
/Server/Mobile_Applications/MapViewer_PPC05CSharp.zip”)来测试,效果也很不错的。



这个向导很简单,无非根据一些提示选择一些数据
源,一路next而已。套用一句书面语:“此处不再赘述”——听说有一部明朝历史剧,愣是能把一个太监泡茶拍了小半集,我想如果是我看一定会睡着的。
OK,新建完成以后我们再点击“View Mobile Project via the web”,在跳转的页面中点击“ArcGIS Mobile
Application”,下载“ArcGISMobile.cab”到本地。这个cab文件可以在设备中进行安装,跟PC上经常出场的
“Setup.exe”类似。这这里,我这个应用的名称叫“WuMobileMap”。





我们的阵地要转移到模拟器上了,当然,目前为止
这个可爱的“ArcGISMobile.cab”文件还在PC硬盘上,先想办法给挪到设备上去。这个很简单,在模拟器菜单
“File”->“Configure…”中设置“Share
folder”到你PC上的一个目录,这个目录就好像一张存储卡一样插到设备中去了。



好了,一切完成以后,我们可以从模拟器的资源管
理器中找到“Storage Card”,运行上面的那个cab文件,把ArcGIS Mobile
Application安装到设备上。OK,运行它!它会提示你需要你指定一下下载应用的位置,我输入了我的机器名和arcgis服务名称,在这个位置,
程序可以找到我们刚刚生成的Mobile应用“WuMobileMap”。





再继续,不出意外的话,我们很快就看到了服务器
上发布地图。嗯,证明了服务和连接都没有问题。





新建项目


这里开始,我们从零开始构建我们自己的移动设备应用,这才是我们的目的所在。

新建一个Smart
Device项目,选择目标平台,这里选择的是Windows Mobile 5 Pocket PC。同时,选择.Net框架版本为2.0 。





点击确定按钮以后,经过短暂的等待(多短暂视你
的机器强劲程度),和桌面应用开发一样,我们看到项目解决方案里面有一些自动生成的文件和目录,仔细一看,竟然还有一个Form1,看名字就是那么的熟
悉!看,这和桌面开发有什么区别?

有个地方值得我们稍微注意一下,看下图的下拉框:



这个下拉框包括了所有你可用的目标设备(视你安
装了多少个智能设备SDK),最后以Emulator结尾的表明是模拟器,如果你手边没有一个真实的智能设备,那当然要选择模拟器进行开发;显然,还有一
个选项是为真实设备准备的,如果你手头有一个真实的智能设备,并且这个设备已经成功地和电脑连接,那么你可以选择这个直接在机器上开发。


面的Square表示模拟器的屏幕是方形的,当然,对应的还有长方形的,一般来说是4:3,比如320×240像素大小。这个通常在模拟器名称上可以看出
来。对于计算机屏幕大小还有一些术语,比如VGA、QVGA等等,等你看到的时候,适时Google一下就知道了。

最后再唠叨一句,如
果你开发的是中文程序(废话…),最好还是要下载一个中文版的模拟镜像装上,要不然在调试的时候中文内容只能看到方块字(是真的方块字,每个字都是一个方
块…)是一件很郁闷的事情。

Windows
Mobile 6 Professional SDK


http://download.microsoft.com/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Professional%20SDK%20Refresh.msi
Windows Mobile 6 Professional
中文镜像:
http://download.microsoft.com/download/0/1/2/012bfbba-9fe5-4e68-86c9-d434446d97dd/0804/Windows%20Mobile%206%20Professional%20Images%20(CHS).msi
好了,调试一下,在模拟器中我们可以看到一个空白的窗体,表明我们的工程创建成功了。好了,这个模拟器你可以放在那里不要关掉,好节省它每次启动
花费的时间。



顺便打开Toolbox(工具箱)看看,在
ArcGIS Mobile Controls选项卡下可以看到ArcGIS Mobile
SDK提供的若干开发控件。让我们还是从听名字就最熟悉的Map控件开始吧……



Map控件


桌面程序类似,Map控件提供了对地图内容进行管理和控制的功能。当我们给窗体添加了一个Map对象时,我们可以发现Map自动绑定了一个
MobileService对象,在ArcGIS
Mobile中,地图内容通过MobileService控件获得和发送,Map则主要负责表现。MobileService对象同时还能够管理缓存。

我们指定MobileService对象的Url属性为上面发布的Mobile地图服务地址:http://wuyf-winxp/arcgis/services/California/MapServer/MobileServer




接下来,我们需要给Map控件指定若干操作,比
如平移、缩放等等。这可以在Map控件的MapActions集合中进行设置,这里首先先添加PanMapAction、ZoomInMapAction
等几个基本操作。在我们预先设定的工具条按钮上(当然,如果你喜欢使用菜单也是一样的),将每个按钮的点击事件设定到对应的地图操作上去。我是这样做的
(每个按钮设置一个Tag):

private
void
toolBar_ButtonClick(object
sender, ToolBarButtonClickEventArgs
e)

{

this
.map.CurrentMapAction = this
.map.MapActions[Convert
.ToInt32(e.Button.Tag)];

}



好了,Map控件的基本雏形完成,万事俱备、只
欠东风,只要有数据过来,我们就可以渲染出来,并且进行操作了。让我们想一想现在我们有什么,还需要什么。我们有的就是这个Map对象和在服务器上发布的
Mobile地图服务,显然,要想显示地图,我们还需要把Mobile服务的数据下载到本地设备上来,好,这就是我们剩下的目标。

对于
第一个应用,本地设备上没有缓存,需要首先初始化缓存的目录(btw:智能设备上的目录结构和PC不同,它有一个根目录,所有文件在这个根目录下组织,比
如“/Storage Card/cache”),在此基础上打开缓存,用以接受数据。

这一切都完成以后,程序就要告诉服务器,嗨,把
数据发过来了。好的,我现在需要获得所有的Feature,那么就用MobileService的GetFeatureDataAsync方法通知服务
器,服务器很聪明的把结果全部给你返回过来。

以上这一切,我都让它在窗体的Load事件中完成。

private
void
FormMain_Load(object
sender, EventArgs
e)

{

this
.mobileService.CacheStoragePath = Environment
.GetFolderPath(Environment
.SpecialFolder
.Personal) + @"/WuMobileMap_Cache"
;

if
(!this
.mobileService.IsValid)

return
;

if
(this
.mobileService != null
&& this
.mobileService.IsOpen)

this
.mobileService.Close();

try

{

this
.mobileService.Open(ESRI.ArcGIS.Mobile.MobileServices.CacheOpenMode
.Create);

this
.mobileService.GetFeatureDataAsync(map,
false
, "GetFeatures"
);

}

Catch

{
}

}

好了,我们现在已经可以浏览地图了,运行一下,看看我们的成果:



到这里,可以算完成了一个简单似“Hello
World”的移动GIS应用了。在本文的后续,将对ArcGIS Mobile的其他功能开始展开叙述,本篇先暂告一段落:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: