Tag Archives: Windows Phone

ArcGIS API for Windows Phone开发实例(2):HelloMap

  本文内容:WP开发环境的搭建和第一个程序HelloMap。所有参考资料都会给出相应链接,供仔细的朋友进一步学习,后同。

一、开发环境搭建

  1、安装微软的Windows Phone Developer Tools。微软的开发离不开Visual Studio,Silverlight开发又需要Silverlight Tools for Visual Studio,WP的开发需要Windows Phone Developer Tools…看起来有点复杂,其实很简单,只需到APP HUB网站,按照1、2、3的说明依次安装即可。如图:

clip_image002

  其中最主要的是1中提到的Windows Phone Developer Tools,它会下载一个3.2M大小的vm_web.exe安装程序,这其实是一个安装工具,不管你的机器是否安装了VS 2010(不支持以前的版本),是否安装了Silverlight Tools,它都会检测你机器开发WP程序所需的所有工具,并提示你进行安装(比如没有VS的话会为你安装VS 2010 Express,已有的就不再重复提示了),有点类似1 click install,非常方便。如果你的机器上什么都没有,那么它会依次提示你安装以下几个工具:

clip_image004

  另外APP HUB网页上第二步中提到的Windows Phone Developer Tools January 2011 Update修复了最初版本中的bug,提供了一个新的模拟器,以及一些新的特性,比如拷贝和粘贴。第三步中提到的Windows Phone Developer Tools Fix修正了不能给真机上部署超过64M大小的XAP文件的bug。所以,2、3属于选装,但强烈推荐安装。
  安装完成之后,打开VS 2010,新建工程中应该能够看到以下画面:

clip_image006

  至此,我们已经可以用Silverlight开发WP的应用程序了。
  另外,与Silverlight Toolkit类似,微软还提供了Silverlight for Windows Phone Toolkit,地址都在这里。它们都是封装好的,开源的一些控件或效果,用来补充自带控件的不足,为你的程序增加效果。
  2、安装Esri的ArcGIS API for Windows Phone。ArcGIS API for Windows Phone与ArcGIS for Silverlight/WPF一样,是Esri免费提供给我们的开发包,里面包含了几个dll文件(包含各种类,函数)供我们引用。目前最新版本是2.2 beta,可利用自己的Esri Global Account(可免费申请)登陆Beta Community后进行下载。如果你不想参与beta community,也可以在这里按照提示下载2.1版本的API。2.2 beta版本的API提供了exe安装程序(2.1版本没有),安装好后,你可以在安装目录中找到以下内容:

clip_image008

  • ESRI.ArcGIS.Client.dll。这是API中的核心类库,包括最常用的Map控件,各种图层类,Graphics,Geometry,Symbols等,同时还包括了各种Task:Identity,Find,Query,Geoprocessing等;
  • ESRI.ArcGIS.Client.Bing.dll。如果你需要在程序中调用Bing Maps的底图或使用它的Geocoding或Routing服务,则需要这个dll;
  • ESRI.ArcGIS.Client.Toolkit.dll。类似Silverlight Toolkit,是Esri提供的已经封装好的,开源的,一些常用控件,比如缩略图,书签,导航条,InfoWindow等,可以在这里下载它们的源码
  • ESRI.ArcGIS.Client.Toolkit.DataSources.dll。提供对一些通用数据源的加载支持,比如OpenStreetMap,WMS服务,KML等,可以在这里下载它们的源码
  • ESRI.ArcGIS.Client.WebMap.dll。可用于加载ArcGIS Online的在线地图。

  好了,下面我们就可以开始我们的第一个应用程序HelloMap了。

二、 HelloMap

  打开VS 2010,New Project,左侧选择Silverlight for Windows Phone,右侧Windows Phone Application,然后OK:

clip_image010

  可以看到新建好的工程中包含几个文件,我们对其中几个xaml类型文件做一下解释。Silverlight开发中,文件主要分为两种类型,以.xaml结尾的文件和以.xmal.cs(或.xaml.vb)结尾的文件,前者是一种扩展的xml语言,负责页面的布局、样式,后者是普通的代码文件,主要负责程序的逻辑功能。界面与功能很清楚地分离开来。App.xaml(App.xaml.cs)是程序的入口,与应用程序相关的全局事件,比如进入或退出应用程序都在这里;MainPage.xaml(MainPage.xaml.cs)是自动创建的主页面,程序默认会启动这个页面。注:你也可以在WMAppManifest.xml文件中来显示指定程序的第一个启动页面。
  因为我们要使用API中的Map控件,所以先添加对ESRI.ArcGIS.Client.dll的引用(如果是2.1版本,需要手动Browse到这个dll):

clip_image012

  然后在MainPage.xaml中为这个dll引入一个namespace(类似代码文件中的using):

clip_image014

  接下来添加我们用以显示地图的Map控件。在MainPage.xaml中找到名为ContentPanel的Grid部分,在其中添加我们的Map控件,并在加入一个底图图层:

   1: <!--ContentPanel - place additional content here-->

   2:         <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">

   3:             <esri:Map x:Name="MyMap">

   4:                 <esri:ArcGISTiledMapServiceLayer ID="MyLayer" 

   5:                     Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />

   6:             </esri:Map>

   7:         </Grid>

  按F5,编译运行(注意将Targets选择为Windows Phone Emulator而不是Windows Phone Device),会启动Windows Phone模拟器,就完成了我们的HelloMap程序。

clip_image016

  解释一下。Grid是Silverlight里最常用的布局控件之一(另外还有StackPanel和Canvas),类似于Html里的Table,可自行搜索学习或参考这里;x:Name相当于该元素的一个id,便于在.cs的代码页面中直接引用。
  Map控件是ArcGIS API for Windows Phone中最基本的控件,所有能够看见的与地图有关的元素都将呈现在这个控件以内。但它本身是空的,所以我们需要给其中添加一个图层,用以显示上面的地图。我们这里使用的图层类型是ArcGISTiledMapServiceLayer,它专门并且只能用于加载ArcGIS Server发布的经过切片的缓存地图服务,与之相对应的还有ArcGISDynamicMapServiceLayer,专门并且只能用于加载ArcGIS Server发布的动态地图服务,以及ArcGISImageServiceLayer,用于加载ArcGIS Server发布的影像服务。这里的Url是一个地图服务的REST方式的节点,可通过ArcGIS Server的Service Directory查看。比如我们可以查看通过http://services.arcgisonline.com/arcgis/rest/services 这个地址查看ArcGIS Online上发布的所有服务。在这里你并不需要掌握有关ArcGIS Server的任何知识,只需要知道所有的资源,包括地图,查询等功能都是服务器端ArcGIS Server通过服务形式暴露给你的,而我们只需通过一个Url去引用它即可。当然如果你对ArcGIS Server感兴趣的话,可以在这里找到资料。
  好了,这就是我们HelloMap的所有内容。最后给出几个相关链接,也是我们学习过程中最常用到的资料,如能掌握,则可事半功倍。

关于Map控件和图层的详细解释:http://help.arcgis.com/en/arcgismobile/10.0/apis/WindowsPhone/help/011v/011v00000005000000.htm

ArcGIS API for Windows Phone的在线例子(可操作,有源码):http://help.arcgis.com/en/arcgismobile/10.0/apis/WindowsPhone/samples/start.htm

关于WP7的知识,推荐Windows Phone 7 in 7 Minutes!系列视频教程,全面、快速、易懂

关于ArcGIS Server的知识:http://help.arcgis.com/en/arcgisserver/10.0/help/arcgis_server_dotnet_help/index.html

ArcGIS API for Windows Phone开发实例(1):准备工作

  本文有三部分内容。注:以后的文章中以WP作为Windows Phone的简写。

一、Windows Phone开发需要哪些知识?

  先来看一下WP的整体结构:

clip_image002

  最底下是通用的基础类库,可以当做是.NET Framework中保留了核心功能的简化版CLR;最上层是WP特有的类库,提供给开发者与手机相关的功能,比如说屏幕控制,摄像头控制,获取位置等等。
  中间这层是WP为我们提供的两套开发框架:Silverlight或XNA。也就是说,你可以利用Silverlight技术或者XNA技术来开发运行在WP上的应用程序。大致地,在WP上,Silverlight适合编写大多数应用程序,XNA适合编写游戏程序。XNA是微软提供的一套游戏开发环境,它有多强大,看看XBOX有多成功就知道了,感兴趣的同学可以深入研究。Silverlight是微软抢占RIA市场的有力武器之一,也是以后微软.NET Framework中主打开发技术之一——WPF——的子集。作为.NET开发人员,如果还不熟悉的话,有必要赶紧熟悉一下。关于它的介绍很多,可以参考我之前写的这篇,或者自己搜索。
  要强调的一点是,你在别处写的Silverlight或XNA程序基本不需要或只需要进行少量的更改(比如屏幕尺寸调整或使用WP的硬件功能),便可顺利运行在WP上,这是微软统一的开发平台给我们带来的好处。
  这次,我们只关心Silverlight,它就是开发WP程序所需的知识。

二、ArcGIS API for Silverlight/WPF和ArcGIS API for Windows Phone的异同?

  在比较Esri的这几个客户端API之前,我们需要看一看Windows Phone上使用的Silverlight技术和普通的Silverlight技术有什么区别。目前是WP的第一个版本,也就是Windows Phone 7,它所使用的Silverlight开发技术是基于3版本的,在WP开发中你基本可以使用Silverlight 3的所有特性,还包括WP特有的触控功能。具体可参考这两篇文章:Features Supported in Silverlight for Windows PhoneDifferences Between Silverlight and Silverlight for Windows Phone。需要强调的一点是,Silverlight 4的新特性在WP上基本无法使用,对此我们只能表示遗憾。但可以期待在以后的WP版本中,Silverlight版本能够与其他平台统一起来。
  那么Esri的这三个API(最新的2.2beta版本中已将Silverlight和WPF两个API分开)就比较好理解了。ArcGIS API for Silverlight,ArcGIS API for WPF,ArcGIS API for Windows Phone三者的功能,架构,包括源代码完全一致,只是编译的目标平台不同。对于Esri的这三个API,你只需熟悉其中之一,就可以在其他两个平台上进行开发。
  所以,如果你没有学过ArcGIS API for Silverlight的话也没有关系,会了Windows Phone API,你也就学会了Silverlight API。

三、我们要完成的工作

  在上一篇文章中,我们已经了解到,最终我们需要完成这么一个WP上的应用程序:连锁超市的老板出差在外,在机场候机的过程中想查看一下自己的几家店面最近的营业情况。传统的统计报表只能通过电子邮件发送给老板,他需要不停的查看自己的邮箱;而里面的内容既不直观也不易懂。将报表数据发布成地图服务,这样即可在任何时间任何地点访问业务数据,也可通过地图的方式充分挖掘数据的潜在价值。老板通过windows phone7上的地图应用,对自己店面近来营业情况一目了然,利用应用所提供的分析功能,即使在千里之外也能随时对自己的生意轻松经营。
  好了,要了解的预备知识已经梳理完毕。有人可能说,都看了这么多了,还没进入动手阶段?我是希望大家每时每刻都知道我们在做什么,为什么要这么做,知其然也知其所以然。就跟听别人的PPT一样,对于我们不熟悉的内容,如果前面两页他交代不清楚,可能整个PPT就是在浪费我们的时间。凡事皆如此。

ArcGIS API for Windows Phone开发实例(0):为什么选择Windows Phone?

为什么要了解Mobile GIS?

  GIS技术固然有自己独特的理论知识,但GIS的实际应用离不开IT技术,GIS应用的发展离不开主流IT技术的发展。上面这句话我们可以看做一条公理,公理是不需要证明的。GIS技术的应用,从C/S到B/S,从SOAP到REST,从SOA到云,都印证了这条公理。
  从台式机到笔记本,从上网本到平板电脑和遍地开花的智能手机,移动不仅是IT技术的发展趋势之一,也是所有硬件的发展趋势。
  综上所述,作为GISser的你,没有理由不了解Mobile GIS技术。

ArcGIS移动产品线

  为什么要学习ArcGIS API for Windows Phone?从两个角度来回答:ArcGIS和Windows Phone。ArcGIS目前有5种移动产品,所有产品的介绍,帮助,下载详见这里

  • ArcPad。这是一个开箱即用的软件产品,基于Windows Mobile平台,最新版本是ArcPad 10(支持Windows Mobile 6.5)。特点是数据采集精度高(可到分米级),支持并推荐采用完全离线作业方式,包含丰富的GIS功能,比如图形(有捕捉功能)/属性/符号编辑,图层管理等,界面类似ArcMap,适合GIS专业人员使用,可通过界面或脚本语言进行定制。由于推出早(历经5.X,6.X,7.0,7.1,8.0.10几个版本),功能实用而丰富,收到广大用户青睐,目前全球用户超过100,000。
  • ArcGIS Mobile。是目前ArcGIS应用最广的移动产品之一,基于Windows Mobile平台,最新版本是ArcGIS Mobile 10.0(支持Windows Mobile 6.5)。特点是拥有自己的离线缓存格式,可完全离线使用,也可与ArcGIS Server随时进行各种粒度的缓存同步;基于任务模式,由工作流驱动,非GIS人员可以很快上手;可进行离线数据编辑,属性/空间查询,外业人员协作等任务;具有丰富的定制功能,并提供功能全面的SDK可进行二次开发。软件历经9.2,9.3,9.3.1,10.0几个版本,在国内拥有广大的用户群体。
  • ArcGIS for iOS。包括一个开箱即用的应用程序(ArcGIS for iOS Application,可在App Store中免费下载)和提供二次开发功能的ArcGIS API for iOS。基于苹果公司的iOS系统,可在iPhone,iPad,iPod Touch产品上运行。最初于2010年4月发布,目前应用程序和API版本是1.8。
  • ArcGIS for Windows Phone。包括一个开箱即用的应用程序(ArcGIS for Windows Phone Application,可在MarketPlace中免费下载)和提供二次开发功能的ArcGIS API for Windows Phone。基于微软公司的Windows Phone系统,可在基于该系统的手机上运行。最初于2010年9月发布,目前应用程序和API版本是2.2 beta。
  • ArcGIS for Android。基于Google公司的Android系统。目前ArcGIS API for Android处于public beta阶段,可在ArcGIS Beta Community中免费申请试用。正式版推出后,应该也会有开箱即用的应用程序,照惯例可通过Android Market免费下载。最初与2010年10月内测,今年2月底开始公测。

  以上三个产品(ArcGIS for iOS,ArcGIS for Windows Phone,ArcGIS for Android)是ArcGIS新一代的移动产品,就目前版本而言,大部分功能都是基于ArcGIS Server所发布的地图服务来使用(需要网络环境支持),包括地图操作,GraphicsLayer/FeatureLayer支持,各种Task(Identity/Query/Find/GeoProcessing等)的使用等。可以看出,这三种移动产品与ArcGIS客户端API(ArcGIS API for Javascript/Flex/Silverlight)所提供的功能基本一致,因此它们的概念和开发方式与三种客户端API无异。大家可能比较关心这三种API的离线使用方式,目前来说,理论上可以实现离线使用,但需要自己进行开发定制,可参考iOS中自定义图层的例子。以后的版本中肯定会加入离线模式,但目前无法给出具体的时间表。

为什么选择Windows Phone?

  现在最流行的手机操作系统有三种iOS,Android和Windows Phone。关于这三种操作系统究竟谁好谁坏,仁者见仁,每个人都有自己的答案。如果你是苹果的忠实粉丝,那么你可能对Android或Windows Phone系统不屑一顾,没关系,Android和Windows Phone用户也是这么想的。简单介绍一下。
  iOS。苹果公司的操作系统,用于其所有移动设备之上(iPhone/iPad/iPod Touch)。操作体验极好,界面华丽(容易吸引mm和领导),应用程序丰富;软硬件环境统一,用户群体相对固定,忠实度高;开发使用Objective C语言,难度相对较大。
  Android。Google公司的手机操作系统。07年底推出,占有率迅速上升,目前是市场占有率最高的智能手机系统。系统本身基于Linux,开源(软件版本多,定制版本多);集成google各种产品,包括gmail,gtalk,latitude等;应用软件丰富,用户群体广泛,以google的忠实用户为代表;开发基于Java语言。
  Windows Phone。微软公司2010年10月推出的新一代移动操作系统,用以取代即将被淘汰的Windows Mobile。不同于封闭的iOS和稍显混乱的Android,它的硬件环境统一,操作体验好;MarketPlace在不到半年的时间里,应用程序已达10,000个(我写文章这会是9643个);目前的生产厂商有HTC,Dell,三星,LG,还有即将加入的Nokia。
  你可能有很多理由不选择微软,但不管你喜欢不喜欢,它就在那里,不离不弃。这里给出选择Windows Phone的几个理由,供参考。
  1、微软的云+端战略。Windows Azure是微软自己的云平台,至于它的优劣,可以自己搜索。但有一点是肯定的,这是微软不惜重金打造的战略平台,在未来数年内会主导微软其他产品的发展方向,而微软也会不遗余力的推广它。端是指客户端,包括电脑,电视和移动端的手机,也就是Windows Phone了,所以其推广和宣传力度可知。
  2、Windows Phone上有两种开发架构,Silverlight和XNA。Silverlight和WPF是微软下一代的开发技术,而XNA是微软XBOX平台上的游戏开发技术。也就是说,不论是Silverlight的程序还是XNA的程序,基本上拿来就可以在Windows Phone上运行,效果不打折扣,这得益于微软统一的平台策略。给我们带来的直接好处就是,对于熟悉Silverlight或WPF的同学来说,Windows Phone的开发门槛几乎为零,而这两者所能够实现的功能,大家也是有目共睹,毋庸置疑。
  3、Windows Phone的娱乐性。XNA开发出的游戏得到了全球资深游戏玩家的一直认可,因为主流游戏平台就是PC+XBOX+PlayStation。如果你看过去年微软TechEd上Windows Phone的游戏演示(点这里),那你一定不会再留恋iOS上的极品飞车了。

讲座内容

  本系列文章内容以去年微软TechEd上的演示demo为例,从零开始,教你一步步完成这个Windows Phone应用程序实例。如果你学习过ArcGIS API for Silverlight,那么很好,你会在这里学到有关Windows Phone的开发知识;如果没学过,也没关系,本系列也会再次讲解API中所有的相关概念和内容。
  每篇文章内只提供相关代码和说明,希望在学习的过程中大家多思考为什么,而不是简单追求拷贝粘贴看效果。好了,该说的也都说了,如果你选择继续信任并使用Windows Phone,请继续关注;如果你对ArcGIS API for iOS感兴趣,请看barry.z的系列教程,如果你对ArcGIS API for Android感兴趣,请看牛魔王的系列教程