2011年3月10日星期四

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感兴趣,请看牛魔王的系列教程。

2011年2月12日星期六

google maps中的中国式街景

  大家都知道google maps有个街景服务(street view),自07年推出起,目前已经覆盖了北美洲,欧洲,东亚大部分国家和地区的城市。这样即使我们足不出户,也可以浏览异国他乡的景色,比如看看英国的“伦敦眼”:


View Larger Map
  但由于某些原因,虽然google的街景已经完全覆盖了我国台湾,香港和澳门地区,但大陆地区的街景数据采集仍是遥遥遥遥遥遥无期。
  今天偶然发现,当你拖拽街景的小黄人到地图上的时候,除了能够浏览街景的主要街道以外,还有许多蓝色的热点地区可供浏览:
image
  而这些蓝色的热点区域是网友们上传到panoramio网站(以前被google收购)的照片。于是通过这些离散的照片,我们也能略微领略一下当地的风景了。
  赶紧看看你的家乡吧~
  ps:该功能必须使用英文版地图:http://maps.google.com才能浏览,中文版http://ditu.google.cn不提供;
  pps:欢迎围观我在panoramio上的照片~

2011年2月1日星期二

我想和自己谈谈

  最近博客上连续都是所谓的技术文章,这样不好。原因有以下几点。
  一是因为容易被人误会我是一个纯技术爱好者,这个还不是事实。事实是这是我目前谋生的手段,既然看过了,好记性不如烂笔头,就把它们记下来,另外也好让需要这些东西的同学少些阅读长篇文字的痛苦;我也很羡慕那些真正的技术爱好者,因为他们可以利用自己的兴趣在某一方面推动人类历史发展的车轮,使人们的生活变得更加美好和有趣,如果有一天真能升华成这样的人,我也很荣幸。二是避免让有的同学拿“你才是做技术的,你全家都是做技术的”之类的语句来攻击我,起因是我俩曾在五道口地铁处看到过一个地摊,地摊摊主神似犀利哥,而摊上摆满了技术书籍,诸如《21天精通asp.net》,《php,java入门宝典》之类,5块一本,不还价。其实这都是玩笑话,是咱自己技不如人,但人家西班牙国家队成员还是很光荣的。三是主要原因,因为这些文章有内容,但没思想。思想无所谓好坏,只要是自己的就好,在生活中失去了自己的思想,是一件很可怕的事情。
  虽然我的肉身早已和大家一起进入了2011,但总觉得自己的2010还没有结束。结束的标志不是跨年倒数,也不是一篇年终总结,而是要把自己的思绪理一理,塞进时间的罐头中,然后盖好盖子,轻轻埋在心里。不论是这个动作的过程还是结果,对自己都有帮助。这就开始,结束我的2010。
  今年(应该是去年)最大的变化,就是开始工作了。结束自己长达十几年的学生生涯,突然过上了一种新的生活,肯定很不适应。和某些过程一样,在生理上和心理上都会产生阵痛。身体上的不适应表现在以前在学校想睡几点就睡几点,想什么时候玩就什么时候玩,想跟谁表白就跟谁表白,想吃什么就能吃到什么,而现在那些都变成了无比美好的回忆;六七月份同学们qq空间里那么多篇的感慨证明了我们思想上的不适应,严格意义上来说,我这篇也算,只是反应有点迟钝。就和我们小时候总希望变成大人一样,上学的时候总想着工作,可回过头来发现失去的东西才是最美好的。好在现在大家都已经适应了新的生活,也希望所有亲爱的同学们,不管是高中的还是大学的,和我一样,觉得虽然现在工作比原来在宿舍睡觉辛苦,但总体来说,感觉也还不错。很高兴告别那些所谓的科研项目,迎来现在平凡而有意义的工作,很高兴告别所谓的教授专家,迎来许多活泼可爱的同事们;离开空间狭小,硬件条件落后,软件环境也不优秀的地方很高兴,但离开母校,结束学生生涯,离开同学们还是伤感;离开一个生活了许多年的地方,新鲜和兴奋,但远离自己的亲人和家乡,还是伤感……
  前一阵看到一个词叫gap year,是指用一段较长的时间(通常是一年)去旅行或是从事一些非政府组织的志愿者工作。最常见的gap year包括高中毕业与升大学之间,大学毕业与工作之间,或者工作一段时间之后。想到别人的gap year,大家应该都充满了各种羡慕嫉妒恨,这点不难解释,就和所有人都喜欢下雪,所有人都喜欢旅游一样,the core of man's spirit comes from new experiences。按照上面的说法,我似乎刚刚错过了一个gap year的机会,但也还不错,夏天的时候我有一个gap half month可以回忆。比起三年前一个人从西安到成都,这次和涛哥从西安骑车去北京的目的要简单和纯粹的多,不是驴友,不是户外,只是简单的自我锻炼和长长见识。能在这样一个低温少雨的冬季城市里,回想起当时汗流浃背,一天10瓶水的日子,夏天金灿灿的茫茫麦田和树荫下潺潺的清凉流水,疾驰时耳边的风声和困倦时田地里抱膝而憩,就像看着从桶里慢慢倒出酸奶一样,是一种享受。如果还有机会,我会毫不犹豫地选择再来一次。有人说这是一种疯狂,其实我觉得这还差得远。我更羡慕和向往在第10天遇到的三个学生,花了2个月时间从北京骑到了能目及珠峰的地方,南京的小胡花了十多天搭免费车25次回乌鲁木齐,Man vs Wild里Bear Grylls穿峡谷过沙漠的经历。不敢保证gap year一定不能实现,但心向往之,至少可以从gap day过起。
  关于济南。以前去过2次济南,每次停留的时间都很短,所看到的都是不起眼甚至在大城市人眼里看来有些落魄的外表,所想到的又是它省会的地位,自然和大多数外地人一样,认为这是一个没有吸引力的城市。但十月份的出差改变了我的看法,如果现在让我说,我挺喜欢她。和大部分陌生的山东人接触,让你不自觉的感受到他们的实在和直爽,不管是作为间接甲方的开发商还是早上卖早点的大娘。有一次吃饺子,饭馆人太多,只好和别人拼桌坐着等,服务员拿来茶水,放在了桌子上远离我的那一边,那个陌生人给自己倒完水后竟然主动给我倒水,这样友好的举动出乎意料,当然后来我也主动给他递过调料盘。虽然饺子味道一般,但是吃饭的过程很愉快。如果把济南比作一个姑娘,那么单从外表上来说,北京要比她性感和丰满得多,但我现在还并没有找到真正喜欢北京的理由。就拿倒水这件事来说,都说小概率事件在一次试验中不可能发生,但它发生了,所以就不是小概率事件;而在北京吃饭这么多次,也没碰到过一回,如果我在饭馆主动给同桌的陌生人倒水,碰到和我一样的人知道是友好,没准碰到其他少数人还可能认为我是主动犯贱。北京吸引人的地方主要有两点,除了繁华的外表,就是它悠久的历史文化。历史文化相比我的家乡来说,既不那么悠长又不那么正统,所以这点不吸引我;外表这个东西我认为只是浮云,因为随着时间的变化(这点我们无法阻止),每个人的外表都是会变的,不发达的城市有可能变得发达起来,好看的人也会变得不好看。而北京的繁华,究其原因,好比通过非常手段暴富起来的人一样,容易遭到人的反感和厌恶,而不是羡慕。当然谁都不愿意生活在一个自己没有一点感情投入的地方,也许是我来的时间太短,以后还有许多机会让我去发现这里美好的一面,这也正是我所希望的。比如冷得纯粹的冬天,时常的蓝天白云阳光,这些都比西安要好。《艾玲》里唱过,“迷恋一个人的身体远比爱他的灵魂更加容易”,现在在我看来,有可能恰恰相反。
  既然已经开始工作,自然要考虑一些现实的问题。比较初级的是,先让自己独立起来。独立应该分几个阶段。最早达到的应该是生活上的独立,这个容易理解,其他条件都具备的情况下,自己一个人生活,不至于活着活着就被饿死或者被自己成堆的臭袜子熏死;然后是经济上的独立,经济上独立了,上面所说的“其他条件都具备”才可能实现;然后我觉得是思想上的独立,思想独立了,对于所有的事情你才有自己的思考,真正的看法,折射出来你自己的所有行为,这样别人记住/喜欢/讨厌你的时候可能更多的是因为你的性格而不是你的长相;下来是人格上的独立,思想上独立一段时间后,自然就形成了独立的人格;最后,从理论上,是心的独立。如果把你流放到一个荒岛上,除了生活,你不会因为想念任何人而变得伤感和难过,那么恭喜,你完全没有情感依赖症,应该是达到独立的最高境界了。就我现在的认识,最理想的状态是,人格独立并且能够心灵独立但不做到心的独立。
  还有一个一直在思考的问题,如果我离开了现在的单位,究竟还可以做什么样的事情?这不是说我现在或者将来就不想继续做我现在做的事情或者离开我现在在的单位,只是我觉得如果找到了这个问题的答案,才能够更清楚的认识自己。其实应该是认识到自己的潜力。和小高聊天时候让我又一次想到了这个问题,不过思来想去,对于我这样从来没有远大抱负的人来说,不把自己逼到那一步似乎是找不到答案的。希望能早点改变我现在的认识。
  现在我感觉到自己的2010才真正的结束了。
  有趣的是,我们在公元20到21世纪的地球上一起生存。祝大家新年快乐~

2011年1月25日星期二

Local方式连接时ArcGIS Server ADF程序部署的问题

如果ADF程序用Local方式连接服务,用VS时必需添加Identity。办法是VS中右键单击网站工程,Add ArcGIS Identiy。
如果部署程序的IIS机器和SOM机器是两台机器,则需要注意了。Add ArcGIS Identity对话框中,填写的用户名密码必需在SOM及其的agsusers或agsadmin组中,并且这里不能勾选加密选项。因为Add ArcGIS Identity工具使用的machine specific(开发机器)的DataProtectionConfigurationProvider方法加密,而这样的话在IIS机器上是无法识别这个加密串的。如果在Add ArcGIS Identity对话框中勾选了加密选项,而后将程序部署到了另外的IIS机器上,则可能出现以下错误:
image未能使用提供程序“DataProtectionConfigurationProvider”进行解密。
解决办法是改用RSAProtectedConfigurationProvider加密办法。如果要在开发机器上加密,则需要导出custom RSA key container为xml文件,在IIS机器上还需要导入之,并且在aspx页面中也需要添加代码才行,具体步骤见:http://msdn.microsoft.com/en-us/library/2w117ede.aspx。如果只要求加密,不追究加密细节的话,可以采用一种简便办法,就是将明文的Identity拷贝到IIS机器上后,用命令行来完成RSA加密过程。步骤如下:
1、右键网站工程,Add ArcGIS Identity。填写SOM机器上的至少在agsusers组中的成员账户,机器名指定IIS机器名(IIS机器上需要创建同样的账户)。如果是域用户,则指定域名;
2、不要勾选加密选项,点击OK。此时web.config里identity节点的用户名密码是明文保存的;
3、拷贝程序文件夹到IIS机器上,建立虚拟目录,转成应用程序,赋予执行脚本权限,使用ArcGIS的应用程序池。此时浏览网站应该是正常的。如果提示地图控件没有primary map resource,确保你的服务在SOM机器上正常工作,然后关掉SOM机器的防火墙;
4、用命令行进行加密。cmd方式到\WINDOWS\Microsoft.Net\Framework\v2.0.*目录,运行以下命令:
aspnet_regiis -pe "system.web/identity" -app "/WMA"
其中WMA是IIS中应用程序的名称。
此时查看该网站的web.config文件,identity节点已被加密。并且程序可以正常访问。

参考:http://help.arcgis.com/en/sdk/10.0/serveradf_net/conceptualhelp/index.html#//0002000000w4000000

2011年1月24日星期一

A Silverlight/Windows Phone Multi-Touch Manipulation Library

地址:http://multitouch.codeplex.com/

用法:

wp_multitouch_lib_1

效果:

wp_multitouch_lib_2

ps:debug时可以在WP的Emulator上模仿多点触控的动作,如上图;这样自己就不用根据GestureType去写放大、缩小的动作了。

Ref: How to: Handle Manipulation Events