随着互联网技术的不断发展,公众对于Web终端用户体验的要求越来越强烈。特别是在GIS的地图发布领域,用户总是希望能够体验到更顺畅、更炫、更酷、更能让人沉浸其中的数据浏览和应用体验,以让他们能够忽略掉因GIS技术的引入带来的种种不适,而更加地醉心于业务的创新和自身潜能的挖掘上。笔者正是为此而工作!近来,笔者正在研究由ESRI发布的ArcGIS Server WPF/Silverlight API 框架,该API是基于微软的WPF/Silverlight技术开发的面向ArcGIS Server标准服务的富客户端应用程序开发框架。其目标是为了使得程序员在WPF平台上能够更方便、快捷地构建当前绝佳的、一致的地图用户体验。而笔者在使用该框架的过程中发现该框架中的图层符号(Symbol)在设计、编程、管理、复用上还存在一些系统性的问题,而这些问题将会直接影响到开发组成员更顺畅的工作与合作,进而成为影响开发进度的瓶颈。因此,为了解决这个问题笔者设计了SymbolEditor,并将其上传到CodePlex上与大家分享(项目Url)。由于该项目的定位是面向全球,因此从文档到注释该项目均使用英文来描述。但是,为了让大家能够更多地了解这个项目,同时,更重要地是,能够找到一批像笔者一样醉心于GIS领域创新的志同道合的朋友,时常一起"谈经论道",笔者决定将该项目的相关中文版的文档同步地发布到博客园中与大家分享。
在本文中,笔者将在第二章对ArcGIS Server WPF/Silverlight客户端技术作简单的介绍,以让大家对该技术有个初步的了解。然后在第三章中分析该技术中图层符号(Symbol)在设计、编程、管理、复用上存在的一些问题,及其将对开发过程产生的影响。接着,在第四章中介绍本项目对这些问题的解决思路和已有成果,并在第五章中介绍本项目下一步还需要做的一些工作。最后,在第六章中笔者将列出本项目系列文章的目录,以方便笔者自己系列写作计划的推进和便于大家对本系列的查阅。
ArcGIS Server WPF/Silverlight API是ESRI公司推出的一套基于微软最新WPF/Silverlight技术的应用程序开发接口,它充分综合了ArcGIS Server强大的地图发布能力和微软WPF技术带来的绝佳的用户体验,从而把地图数据浏览和应用的用户体验带到了一个新的高度,同时,它提供的大量的控件和丰富的对象模型也加快了开发人员应用程序构建的效率。目前该接口的版本出到了2.0。在该版本中包含了四个动态库,如下:
ArcGIS Silverlight/WPF Assembly |
Description |
ESRI.ArcGIS.Client.dll |
Core library. Contains map, ArcGIS Service layer, graphics, geometry, and symbol components. Also contains common workflow tasks that support query, find, identify, and geospatial and geoprocessing operations. |
ESRI.ArcGIS.Client.Behaviors.dll |
Contains a set of behaviors and actions that enable element defined interactivity with a Map and its contents. |
ESRI.ArcGIS.Client.Bing.dll |
Adds support for using Bing layers and services. |
ESRI.ArcGIS.Client.Toolkit.dll |
Contains a set of common controls for navigating and interacting with the map, such as a Toolbar, Navigation controls, and a MapTips control. |
上表摘自官方文档http://resources.esri.com/help/9.3/arcgisserver/apis/silverlight/help/index.html
在下载的安装包中均提供了基于.net3.5和.net4.0的dll。同时,这些dll并不依赖esri的AO对象模型,是纯.NET的应用,可以通过Reflactor看全部源代码。因此,如果各位希望扩展该API,或参考该API构建针对自己服务(非ArcGIS Server的服务)的客户端对象模型,这都将是一个利好的消息。介于目前市面上还没有深入介绍该API对象模型的文章或书籍,所以笔者准备在下一个系列的文章《深入浅出ArcGIS Server Silverlight/WPF API系列》中详细剖析该API内部的设计原理和运行机理,希望能够对大家有所帮助。
在该API中图层符号(Symbol)的设计一改原来基于ArcGIS Style文件的做法,完全使用.NET中的Xaml来定义,这主要有三个方面的好处:
同时,该技术又带来了一些缺点,也主要体现在三个方面:
如下图:
图 1ArcGIS Server Silverlight/WPF API 存在的问题
因此,为了解决以上的问题,并进一步消除Symbol在使用、设计和复用等过程上的不顺畅,笔者设计了这个基于Xaml的ArcGIS Server WPF/Silverlight API的Symbol编辑管理工具(项目名为:SymbolEditor)。使用这个工具可以帮助Symbol的设计人员、开发人员更方便、有效地设计、管理和复用Symbol。总体来说,该工具提供了三个方便的功能:
该工具在部署时将是以Visual Studio 2010的Add-in的方式嵌入到VS2010中,当启动了 C#或VB.NET项目后,在项目代码文档的右键菜单中会发现名为"Symbol Selector"的菜单 项,如下图:
图 2自动插入的代码文件右键菜单项
当程序员需要引用Symbol时,只需要将光标移到代码文档的目标位置,然后在右键菜单中点击该菜单项,则会弹出Symbol 管理器界面,如下图:
图 3Symbol管理器界面
在该界面中可以看到,Symbol Library对应的下拉框中管理了包括数据库和Xaml文件形式的所有符号库。当选择某符号库后,系统将自动加载该符号库中所对应的所有符号,并以可视化的方式在下拉框下方的视图中显示出来。同时,该管理器还支持新符号库的创建、新符号的创建、符号的修改,以及 Strong Type Symbol的自动生成。当用户需要修改某以有Symbol时,只需要对着该Symbol点击右键,并选择"Edit It"菜单项即可进入Symbol 编辑器对话框,如下图:
图 4Symbol编辑器界面
注:目前,由于该项目还处于原型阶段,所以开发目标主要定位在确保流程的完整性上,因此还需要在文本框中以Xaml的形式来定义Symbol。
该Symbol编辑器能够支持对自定义的Symbol进行预览,以及保存会符号库的功能。
同时,在Symbol管理器上还可以通过点击某Symbol右键菜单上的"Generate Stronger Symbol"按钮,自动地在项目中生成该Symbol对应的强类型代码,并将该代码的引用直接插入到代码文件的光标所在处,如下图:
图 5自动生成的强类型代码文件结构
图 6自动插入代码文件的强型Symbol引用代码
注:代码中的"BasicFillSymbol"是Symbol所在的符号库名;
"BasicFillSymbol_Green_6"是Symbol名。
图 7自动生成的强型Symbol的代码结构
目前,该项目基本将笔者所设想的Symbol的设计、管理、使用流程串联起来,但在一些功能细节上还存在需要进一步完善的地方,这也就是笔者下一阶段要进行的工作,主要分以下四个方面:
为了使得大家能够对该项目所涉及的技术有个更透彻的了解,笔者决定推出《ArcGIS Server Silverlight/WPF API 符号设计利器SymbolEditor系列》,本文是该系列的第一篇,系列的后几篇会在近期向大家推出。
《ArcGIS Server Silverlight/WPF API 符号设计利器SymbolEditor(一)——产品介绍》
《ArcGIS Server Silverlight/WPF API 符号设计利器SymbolEditor(二)——Symbol的可视化技术的实现原理》
《ArcGIS Server Silverlight/WPF API 符号设计利器SymbolEditor(三)——强类型Symbol自动生成技术的实现原理》
《ArcGIS Server Silverlight/WPF API 符号设计利器SymbolEditor(四)——Symbol的数据库管理技术的实现原理》
《ArcGIS Server Silverlight/WPF API 符号设计利器SymbolEditor(五)——Symbol的搜索技术的实现原理》
《ArcGIS Server Silverlight/WPF API 符号设计利器SymbolEditor(六)——Symbol的可视化设计技术的实现原理》
《ArcGIS Server Silverlight/WPF API 符号设计利器SymbolEditor(七)——Symbol设计工作流技术的实现原理》