使用ArcGIS Mobile SDK 9.3 开发移动设备应用-初级篇(zz)(转稿)

【概述】概述如何通过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应用的需求了。那么我们再来看一看从整体流程上如何创建一个移动应用。

image

从上图我们可以看到,通过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”。

image

我们在移动设备上使用的地图服务一般应该是如下的这种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页面上去了。

image

 

测试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”)来测试,效果也很不错的。

image

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

image image

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

image

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

image image

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

image image

 

新建项目

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

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

image image

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

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

image

这个下拉框包括了所有你可用的目标设备(视你安装了多少个智能设备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

 

好了,调试一下,在模拟器中我们可以看到一个空白的窗体,表明我们的工程创建成功了。好了,这个模拟器你可以放在那里不要关掉,好节省它每次启动花费的时间。

image

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

image

 

Map控件

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

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

image

接下来,我们需要给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)];
        }

image

好了,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{}
        }

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

image

到这里,可以算完成了一个简单似“Hello World”的移动GIS应用了。在本文的后续,将对ArcGIS Mobile的其他功能开始展开叙述,本篇先暂告一段落:)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值