ArcGIS Server Silverlight/WPF API 符号设计利器SymbolEditor(一)——产品介绍
一、写作背景
随着互联网技术的不断发展,公众对于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客户端技术简介
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来定义,这主要有三个方面的好处:
- 减少中间格式,使得开发人员对Symbol的具有更多的控制;
- 完全基于Xaml,使得Symbol能够更多地融入WPF中更炫、更高效的显示特性,如动画、3D效果等;
- 同时,由于减少了中间环节,将渲染完全交给WPF来完成,故提高了渲染的效果和效率。
同时,该技术又带来了一些缺点,也主要体现在三个方面:
- 缺乏可视化的设计界面:尽管该API中的Symbol是完全基于Xaml的语法实现,但由于其在对象的最顶层是esri的自定义对象,所以在Visual Studio的Xaml设计器中无法对Symbol进行预览,这就强制要求Symbol设计人员使用Xaml来编程,而这无疑增加了Symbol设计的难度;
- 缺乏有效地管理:由于Symbol分布在各Xaml文件中,使得Symbol缺乏集中式的管理,从而导致Symbol的复用非常不方便。同时,又由于Symbol以明码的形式存储,也不便于Symbol版本的维护;
- Symbol的使用不方便:这主要是由于以上两个缺点,导致了程序员在使用Symbol时,特别是在"想要Symbol"与"获得Symbol引用"之间的衔接过程上显得不顺畅。
如下图:
图 1ArcGIS Server Silverlight/WPF API 存在的问题
四、项目介绍
因此,为了解决以上的问题,并进一步消除Symbol在使用、设计和复用等过程上的不顺畅,笔者设计了这个基于Xaml的ArcGIS Server WPF/Silverlight API的Symbol编辑管理工具(项目名为:SymbolEditor)。使用这个工具可以帮助Symbol的设计人员、开发人员更方便、有效地设计、管理和复用Symbol。总体来说,该工具提供了三个方便的功能:
- 对于Symbol设计人员,该工具将能够提供一种可视化的方式来帮助其进行Symbol的创作,而无需陷入Xaml语言的细节当中;
- 对于Symbol管理人员,能够对Xaml文件和数据库两种形式的Symbol库进行统一的管理和展现;
- 对于开发人员,为了使得开发人员在编码过程中对Symbol的使用更加的顺畅,该工具还将SymbolEditor与微软最新的开发利器Visual Studio 2010进行了集成,从而使得开发人员可以在任何需要使用一个使用ArcGIS Server WPF/Silverlight API 的项目的代码文档中通过可视化的方式快速地定位所需的Symbol,并在项目中自动地生成该Symbol所对应的Strong Type Symbol,进一步地确保了编码的质量(目前支持C# 和VB.NET工程)。
该工具在部署时将是以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的设计、管理、使用流程串联起来,但在一些功能细节上还存在需要进一步完善的地方,这也就是笔者下一阶段要进行的工作,主要分以下四个方面:
- 添加对数据库的支持,并将基于数据库和Xaml文件的Symbol整合到一个统一的对象模型中,向用户提供一致的管理接口;
- 添加Symbol的搜索功能,如按关键字、目录、分类,以及基于Xaml语法的图形语义搜索;
- 添加Symbol的可视化编辑功能,即提供更多可视化的手段来辅助Xaml的动态生成;
- 添加对Symbol设计工作流的支持,以帮助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设计工作流技术的实现原理》
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权,作者将保留追究法律责任的权利。另外,也请转载者在评论处留下转载信息,谢谢合作。