ArcGIS Mobile开发.doc_第1页
ArcGIS Mobile开发.doc_第2页
ArcGIS Mobile开发.doc_第3页
ArcGIS Mobile开发.doc_第4页
ArcGIS Mobile开发.doc_第5页
免费预览已结束,剩余27页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

以前没有注意到这个问题,今天换了一个模拟器调试原先的程序,抛出“Missing ArcGIS registry key”错误。 这与ArcGIS Mobile的开发环境配置不人性化有关。我们知道ArcEngine开发桌面程序需要目标机器安装Runtime,但是开发机器的环境已经包含了 Runtime。ArcGIS Mobile与此类似,部署的时候需要在目标设备上安装ArcGIS Mobile Runtime,但是开发调试时并不会自动部署,因此需要你首先手动安装。 安装包是你的机器ARCGIS安装目录“%ARCGIS_HOME%DotNetWindowsCEInstallAGMRuntime.CAB”,对于定制的WinCE平台,可能需要安装AGMRTWinCE.CAB可是,怎么在开发调试的pda模拟器上安装AGMRuntime.CAB呢?VS中 工具选项设备工具设备属性仿真器选项设置共享文件夹,把要传到模拟器的文件放到共享文件夹中,模拟器把共享文件夹当作storage card看待,这样就可以拷贝到模拟器中了mobileService1的urlhttp:/yzcity/ArcGIS/services/yizhen/MapServerArcGIS 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:/arcgis/services/MapServer/MobileServer支持的设备平台ArcGIS Mobile 9.3支持以下这些智能设备平台:l Windows Mobile 6 Professionall Windows Mobile 6 Standardl Windows Mobile 5 Pocket PCl Windows Mobile 5 Smartphonel Windows Mobile 2003l 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%DeveloperKitSamplesNETServerMobile_ApplicationsMapViewer_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,比如320240像素大小。这个通常在模拟器名称上可以看出来。对于计算机屏幕大小还有一些术语,比如VGA、QVGA等等,等你看到的时候,适时Google一下就知道了。最后再唠叨一句,如果你开发的是中文程序(废话),最好还是要下载一个中文版的模拟镜像装上,要不然在调试的时候中文内容只能看到方块字(是真的方块字,每个字都是一个方块)是一件很郁闷的事情。Windows Mobile 6 Professional SDK:/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Professional%20SDK%20Refresh.msiWindows Mobile 6 Professional中文镜像:/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.MapActionsConvert.ToInt32(e.Button.Tag); 好了,Map控件的基本雏形完成,万事俱备、只欠东风,只要有数据过来,我们就可以渲染出来,并且进行操作了。让我们想一想现在我们有什么,还需要什么。我们有的就是这个Map对象和在服务器上发布的Mobile地图服务,显然,要想显示地图,我们还需要把Mobile服务的数据下载到本地设备上来,好,这就是我们剩下的目标。对于第一个应用,本地设备上没有缓存,需要首先初始化缓存的目录(btw:智能设备上的目录结构和PC不同,它有一个根目录,所有文件在这个根目录下组织,比如“Storage Cardcache”),在此基础上打开缓存,用以接受数据。这一切都完成以后,程序就要告诉服务器,嗨,把数据发过来了。好的,我现在需要获得所有的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的其他功能开始展开叙述,本篇先暂告一段落:)ScaleBar控件ScaleBar兼有比例尺和进度条的功能。ScaleBar对象同时和Map和MobileService对象关联,与Map的关联可以显示当前地图的比例大小,与MobileService的关联可以显示当前设备从服务器同步数据的进程。当然,你也可以把ScaleBar与MobileService对象的关联去除掉,好让ScaleBar显得更加纯粹一点。空间参考空间参考(Spatial Reference)是GIS的一个非常重要的组成部分,空间参考包括地理坐标系和投影坐标系。我们通过MobileService获得地图是有空间参考的,但是,在移动设备上,有时候还需要将一些坐标点(比如GPS信息)标注到地图上,这时就还需要进行空间参考的处理。以下代码表现的是如何将一个GPS经纬度坐标(WGS84)转化为一个当前空间参考下的坐标值。是不是很简单?double lat = 40.123456;double lon = 116.123456;ESRI.ArcGIS.Mobile.SpatialReferences.SpatialReference spatialReference = mobileService.SpatialReference;ESRI.ArcGIS.Mobile.Geometries.Coordinate coordinate = spatialReference.FromWgs84(lon, lat); GPS支持ArcGIS Mobile提供了3个GPS相关的控件对GPS进行支持:l FileGpsConnectionl SerialPortGpsConnection l GpsDisplay对名称的第一印象我们就可以大概知道,FileGpsConnection可以提供文件GPS连接,在调试中可能使用比较多;SerialPortGpsConnection则提供串口GPS连接,实际应用一般都会用到;GpsDisplay和上述两种GpsConnection联动,实现GPS信息在地图上的表现。在没有GPS设备的时候,我们先使用FileGpsConnection进行调试。FileGpsConnection的原理就是从一个包含GPS数据的文本文件,模拟一个GPS连接。当然,首先需要准备一个GPS文件,这个文件手写是写不出来的,获得的最便捷的方法是安装Windows Mobile 6 Professional SDK的FakeGPS工具(“%WINDOWS_MOBILE_6_SDK_HOME%ToolsGPS”),其中包含有GPS数据文件。我把“fakegpsdata.txt”文件复制到“Storage Card”目录下,再给FileGpsConnection对象指定FileName属性为“Storage Cardfakegpsdata.txt”。我们在菜单上新建两个菜单项,用以打开关闭GPS连接: private void menuItemOpenGpsConn_Click(object sender, EventArgs e) this.fileGpsConnection.Open(); private void menuItemCloseGpsConn_Click(object sender, EventArgs e) this.fileGpsConnection.Close(); GpsDisplay有一个AutoPan属性默认设为了true,现在让我们打开GPS连接,看看我们的地图,是不是自动移动了?其实,这个时候我们完全可以不用GpsDisplay,而直接通过GpsConnection做任何事情。我们给FileGpsConnnection添加一个消息响应函数,每次GPS位置点改变了就触发一次: private ESRI.ArcGIS.Mobile.Geometries.Point gpsLocation; private void fileGpsConnection_GpsChanged(object sender, EventArgs e) double lat = this.fileGpsConnection.Latitude; double lon = this.fileGpsConnection.Longitude; if (!(lat = -90 & lat = -180 & lon = 180) return; ESRI.ArcGIS.Mobile.SpatialReferences.SpatialReference spatialReference = mobileService.SpatialReference; ESRI.ArcGIS.Mobile.Geometries.Coordinate coordinate = spatialReference.FromWgs84(lon, lat); gpsLocation = new ESRI.ArcGIS.Mobile.Geometries.Point(coordinate); this.map.CenterAt(coordinate); private void map_Paint(object sender, ESRI.ArcGIS.Mobile.MapPaintEventArgs e) if (gpsLocation = null | gpsLocation.IsEmpty) return; e.Display.DrawPoint(new Pen(Color.Blue), new SolidBrush(Color.Red), 5, gpsLocation); 看一下实际效果:离线编辑功能ArcGIS Mobile的编辑功能可以在离线状态下使用,当然,前提要有空间数据缓存。要使用ArcGIS Mobile的编辑功能,首先需要在Map对象中添加一个或者几个sketchGraphicLayer对象,我们的编辑将会在这些图层上进行。如果有必要,我们还可以针对Map的其它设置作一些改变,比如捕捉:和地图浏览的Action类似,我们还需要给Map添加一些编辑的Action:好,下面我们试着在sketchGraphicLayer上添加一个多边形: private void menuItemAdd_Click(object sender, EventArgs e) this.map.CurrentMapAction = this.map.MapActions3; ESRI.ArcGIS.Mobile.Sketch.SketchGraphicLayer sketchGraphicLayer = (this.map.MapGraphicLayers0) as ESRI.ArcGIS.Mobile.Sketch.SketchGraphicLayer; sketchGraphicLayer.Geometry = new ESRI.ArcGIS.Mobile.Geometries.Polygon(); 现在,当我们点击了菜单中的“Add”菜单项以后,再在地图上点击就可以绘制一个多边形了。再尝试一下DeleteVetexSketchTool、InsertVetexSketchTool、MoveVetexSketchTool(前提是先获得需要操作的Geometry对象),是不是发现对已经画的对象进行修改也是很容易呢?当然,接着马上要做的事情就是保存刚才所作的编辑,写程序的大多都有Ctrl+S的好习惯。保存刚才的编辑到缓存图层是一件很容易的事情,看一下这段代码: private void menuItemSave_Click(object sender, EventArgs e) ESRI.ArcGIS.Mobile.MobileServices.FeatureLayer featureLayer = this.mobileService.Layers0 as ESRI.ArcGIS.Mobile.MobileServices.FeatureLayer; if (featureLayer.AllowNew) ESRI.ArcGIS.Mobile.Sketch.SketchGraphicLayer sketchGraphicLayer = (this.map.MapGraphicLayers0) as ESRI.ArcGIS.Mobile.Sketch.SketchGraphicLayer; ESRI.ArcGIS.Mobile.MobileServices.FeatureDataTable featureDataTable = featureLayer.GetDataTable(); ESRI.ArcGIS.Mobile.MobileServices.FeatureDataRow featureDataRow = featureDataTable.NewRow(); featureDataRowfeatureLayer.GeometryColumnIndex = sketchGraphicLayer.Geometry; featureDataTable.Rows.Add(featureDataRow); featureDataTable.SaveInFeatureLayer(); sketchGraphicLayer.Geometry = null; 在这里还要废话几句,上面做的保存是将编辑保存在本地的缓存中,而不是保存到服务器。在保存之前,先使用了FeatureLayer对象的AllowNew属性,这是一个GET访问器,可以获得图层是否允许保存编辑(添加要素)。如果你在调试程序的时候AllowNew是false,可能有几种原因:l 图层不是SDE图层 l 图层没有Global ID(这是Mobile应用一个特殊的地方)这个时候,你或许可以尝试这个方法:在线上传编辑在线上传编辑可以把在本地缓存上进行的编辑操作提交到服务器,使用方法很简单:mobileService.PostFeaturesAsync(Update); 不过,由于SDE分别有针对不同数据库的版本,而各种不同的数据库也各自有很多不同版本,在这种对应关系下,出现各种诡异的问题都是有可能的。建议:暂时慎用这个功能。异步请求和响应在ArcGIS Mobile中,我们可以看到很多以Async结尾的方法,比如常用的GetFeatureDataAsync ()方法等等。从名称就可以看出来,这些方法会向服务器发送一个异步的请求,但是,请求何时完成,请求的结果如何,并不是由这个方法及其后续来处理。对异步请求结果的处理,可以通过MobileService对象的几个消息响应函数实现,主要包括RequestCompleted、RequestProgressChanged等。当MobileService接收到了服务器发来的消息,表示请求有了反馈了,这些消息响应函数则被调用,来实现后续的处理。有个很自然的问题,我可能向服务器发送了很多种的请求,MobileService对象怎么来分辨接收到的反馈属于谁呢?我们回头看一下Async方法的参数会发现,Async方法的参数中都有一个名叫 userState的object对象,这个对象用来表示Async请求发生时候的用户状态,也就是对请求进行了标识。CatalogService控件CatalogService控件用以发现某个服务器上的Mobile服务。在ArcGIS Server服务器上,一个服务器下可以有若干个文件夹,一个文件夹下可以有若干个地图服务对象,每个地图服务对象提供1种以上地图服务(Mobile Access、WFS)。CatalogService对象就可以把这个层次结构挖掘出来,并获得详细的信息。获得文件夹: catalogService.Url = http:/wuyf-winxp/arcgis/services; string folders = catalogService.GetFolders(); 获得服务信息: catalogService.Url = http:/wuyf-winxp/arcgis/services/folder; ESRI.ArcGIS.Mobile.CatalogServices.ServiceDescription serviceDescriptions = catalogService.GetServiceDescriptions(); 好了,今天就到这里吧,欢迎关注本文的后续。本文来自CSDN博客,转载请标明出处:/qwlovedzm/archive/2010/02/09/5302480.aspx预生成地图缓存我们已经知道,ArcGIS Mobile支持离线和在线两种应用。我们可以选择让ArcGIS Mobile应用在首次请求的时候保存地图缓存,也可以在此之前(部署应用之前),预先生成缓存,跟应用一起发布。是不是有点像原来的单机设备应用?好,让我们把ArcCatalog打开,启动ArcToolbox工具箱:在工具箱中,找到“Mobile Tools”。ArcToolbox专门为Mobile应用提供了两个工具。其中“Generate Mobile Service Cache”就是用以生成Mobile地图服务的缓存。 点击确认,经过处理,在指定目录生成了缓存。我们可以比较一下,这些缓存和在移动设备上通过MobileService对象生成的缓存是一样的。换句话说,在部署的时候将这些缓存部署到缓存目录以后,MobileService可以直接打开它,无需与服务器进行任何交互。Mobile Basemap这是Mobile的特殊数据,目的在于通过对地图数据进行高度压缩,使之在移动设备上的性能更加优化。Basemap与我们前面使用的Mobile地图服务数据不同,Basemap是不提供用户进行操作的,它将在程序运行时首先被渲染,其他所有的Mobile地图都将在它之上绘制简单地说,它应该被称为底图。创建Mobile Basemap很简单,我们从ArcToolbox中点击“Create Mobile Basemap”,根据提示操作即可。一个mxd文档对应一个navmap文件,每个图层也都有相应的对应文件。在ArcGIS Mobile中,有个专门的命名空间“ESRI.ArcGIS.Mobile.SdcData”,这个命名空间包括了所有对Basemap进行操作的类。事实上,Mobile Basemap对应的数据叫做SDC base map data。Basemap的使用非常简单: try ESRI.ArcGIS.Mobile.SdcData.SdcMapLayer sdcMapLayer = new ESRI.ArcGIS.Mobile.SdcData.SdcMapLayer(Storage Cardbj_basemapbj.navmap); map.MapLayers.Add(sdcMapLayer); catch (Exception ex) MessageBox.Show(ex.Message); 看一下效果。我们把整个北京地图生成了Basemap预先部署到移动设备上,而仅仅将建筑物图层发布成地图服务,如图,Basemap自动衬在底部,想一下,对于某些应用,你会不会有一种把所有不经常变化的内容全部生成Basemap的冲动?哦,还需要说明一下,Basemap和其他Mobile 地图服务的空间参考需要是一致的。在上篇中我们可以看到,利用Mobile Project Center可以方便的创建直接可用的ArcGIS Mobile应用程序,这里我们介绍如何利用ArcGIS Mobile SDK把GIS功能嵌入到已有的移动设备应用程序中。首先利用Visual Studio创建一个智能设备项目,在VS2005新建项目对话框的左侧点击智能设备,在下面的子节点中选择项目平台(如Windows Mobile 6 Professional), 在VS2008新建项目对话框中,先在右上角选择.NET Framework 2.0,按确定按钮在随后出现的对话框中选择目标平台(如下左图),把一个Map控件拖到界面中,我们会发现一个MobileCache1控件自动添加到下面,项目的引用中也会自动添加程序集ESRI.ArcGIS.Mobile(如下右图)Tips:如果一开始选错了目标平台也没关系,在解决方案资源管理器的项目上右击,然后选择“更改目标平台”命令,就可以修改到你期望的目标平台。查看Map控件的 DataSources属性,我们会发现MobileCache1 自动列在那里,如果没有列出,请自己添加(一般都是自动添加,除非你的RP。)附件: Create.JPG 附件: Control94.JPG 在笔记二的最后一段我们通过属性对话框来进行参数设置,现在我们通过代码来进行同样的设置,为Form1添加Load事件,在其中添加如下代码:Form1_Load相应函数 1. 1 private void Form1_Load(object sender, EventArgs e)2. 2 3. 3 /Environment.GetFolderPath(Environment.SpecialFolder.Personal) = My Documents4. 4 this.mobileCache1.StoragePath = My DocumentsXYZMobileCache;5. 5 if (!this.mobileCache1.IsValid)6. 6 7. 7 MessageBox.Show(Map Cache is not valid!);8. 8 return;9. 9 10. 10 if (this.mobileCache1 != null & this.mobileCache1.IsOpen)11. 11 this.mobileCache1.Close(); 12. 12 try13. 13 14. 14 this.mobileCache1.Open();/原来9.3中CacheOpenMode枚举类型的参数取消了=。=15. 15 16. 16 catch17. 17 18. 18 MessageBox.Show(Cannot open map cache);19. 19 20. 20 复制代码因为地图缓存是事先通过笔记一中介绍的Create Mobile Map这个GP工具生成(放在文件夹XYZ中),然后把文件夹拷贝到移动设备的My Documents文件夹下的,还有一种通过访问地图服务直接创建缓存的方法在下一篇介绍。既然说到文件拷贝,那就具体介绍下模拟器配置,点击VS“工具”菜单下的“设备仿真器模拟器”,在你期待的目标平台上右击,连接后插入底座(Cradle如下左图),就可以同步了,前提是你打开了 ActiveSync的wcescomm.exe程序。现在在“我的电脑”目录下,打开“移动设备”,就可以把文件拷贝到你想要的位置。在上一篇中,地图使用的本地缓存是通过Create Mobile Map这个GP工具生成(放在文件夹XYZ中),然后把文件夹拷贝到移动设备的My Documents文件夹下的。这里我们介绍通过访问“Mobile Data Access”类型的服务,直接创建缓存的方法(可以先删除设备上My DocumentsXYZMobileCache下的所有本地缓存文件) 在Form1的Load事件处理函数中添加如下代码:Form1_Load 1. 1 private void Form1_Load(object sender, EventArgs e)2. 2 3. 3 this.mobileCache1.StoragePath = My DocumentsGlobeMapCacheMobileCache;4. 4 if (!this.mobileCache1.IsValid)5. 5 6. 6 MessageBox.Show(Map Cache is not valid!);7. 7 return;8. 8 9. 9 if (this.mobileCache1 != null & this.mobileCache1.IsOpen)10. 10 this.mobileCache1.Close(); 11. 11 if (mobileCache1.IsEmpty)12. 12 13. 13 mobileCache1.DeleteCache();/删除现有缓存,试验结果是删除My DocumentsXYZ 下的MobileCache文件夹14. 14 mobileServiceConnection1.Url = http:/vmserver/arcgis/services/MobileGlobe/MobileServer;15. 15 mobileServiceConnection1.WebClientProtocolType = WebClientProtocolType.BinaryWebService;16. 16 MobileCacheSyncAgent mobilesync = new MobileCacheSyncAgent(mobileCache1, mobileServiceConnection1);17. 17 18. 18 mobileServiceConnection1.CreateCache(mobileCache1);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论