在我的工作中遇到有的用户喜欢使用ArcGIS VIEwer for Silverlight搭建一些简单的工程,用来作为即将建立的系统的原型系统,或者尝试一些功能,这是一种很方便快捷的方式。但是并不是所有的功能都能够使用VIEwer配置完成,有时候扩展开发是必须的。
尤其是有的用户在别的系统中已经有了一系列的数据访问封装好的WCF,只是需要在VIEwer中完成数据的调用和显示,那么就更需要对VIEwer进行灵活的扩展了。这个系列的文章中,笔者将利用WCF调用数据完成降雨量图的显示。
原本笔者想直接写WCF调用的那一小段,但是发现要是不讲清楚VIEwer的扩展开发,后面的很多问题无法引出来。因此本系列将用3个篇幅完成对这个专题的阐述:
第一篇讲述如何对VIEwer进行工具的扩展开发;
第二篇讲述如何调用WCF服务进行数据查询;
第三篇讲述查询到的数据如何进行专题图的显示。
利用ArcGIS VIEwer for Silverlight配置工程我就不讲述了,各位应该比我还拿手,直接从扩展开发开始:
1.建立一个Silveright工程。
注意选择ASP.Net网站作为Silverlight的宿主。为什么这么做呢?如果大家注意过利用VIEwer配置生成的应用程序,那就清楚,它其实是一个站点,我们在工程中也将使用这个站点作为我们调试的宿主。
呵呵,正如上面所说,用站点,因此需要把不需要的文件清空。
我们看到两个工程,上面的工程是Silverlight的宿主站点,下面的是Silverlight的应用程序。宿主站点我们清空后就将利用VIEwer生成的站点文件整个拷贝下来;而应用程序则可以将两个xaml都删除。做完这一步,将上面的站点设置成为启动项目,且将index.htm设置成为起始页面。F5运行一下,OK站点顺利显示出来了。
2.设置Silverlight程序的扩展。
在这里提醒大家注意,VIEwer的版本要等于或者高于使用的ArcGIS API for Silverlight版本,否者建立的Silverlight扩展是无法添加到VIEwer里面的。
首先,在宿主站点中添加Silverlight程序。注意不要勾选“添加引用该控件的测试页”,因为这样做的话,会多出两个没用的页面(勾选了也没关系,删掉多余的页面就是了)。
之后给Silverlight应用程序添加引用
最重要的是以下两个:
最好设置一下这两个动态库不复制到本地,否者在VIEwer里面添加您做的扩展会提示警告,说这两个dll已经打包在VIEwer里面了。这么做也是让扩展包更小的方法。
做完这些之后就能建立我们自己的扩展工具了!
3.建立类型(以queryTool为例)
queryTool继承于ICommand和ISupportsConfiguration,可以直接点击“实现接口”来生成必须的接口。
扩展工具一般有两个类,一个是.cs类,是上述的queryTool,但是queryTool并没有用户交互界面,所以还必须有一个类来显示,一般是个xaml,可以继承于任意的UIElement。
下面是我注释的接口作用:using System;using System.Collections.Generic;using System.IO;using System.windows.input;using System.Xml.linq;using ESRI.ArcGIS.ClIEnt.Extensibility;namespace WCFSilverlight{ public class queryTool:ICommand,ISupportsConfiguration { /// <summary> /// 用于用户交互的查询窗口界面 /// </summary> queryToolWindow ThequeryToolWindow = null; /// <summary> /// 存储配置的图层 /// </summary> public Dictionary<string,string> LayersDic = new Dictionary<string,string>(); /// <summary> /// 判断是否可以执行Command的方法 /// </summary> /// <param name="parameter">用于判断的参数</param> /// <returns></returns> public bool CanExecute(object parameter) { //返回是否可以执行 return true; } /// <summary> /// 是否可以执行的值更改了的事件 /// </summary> public event EventHandler CanExecuteChanged; /// <summary> /// 执行命令 /// </summary> /// <param name="parameter">执行命令传递的参数</param> public voID Execute(object parameter) { this.ThequeryToolWindow = new queryToolWindow(this); //将ThequeryToolWindow作为工具交互界面显示出来 MapApplication.Current.ShowWindow("调用WCF",this.ThequeryToolWindow); } /// <summary> /// 配置 /// </summary> public voID Configure() { //在这根据配置信息对工具进行配置 } /// <summary> /// 读取工具的配置信息,这个信息在Tools.xml文件中有 /// </summary> /// <param name="configData">标签"Tool.ConfigData"内的值</param> public voID LoadConfiguration(string configData) { //笔者是因为将配置信息写成xml格式的了,因此需要这么配置,要是使用普通字符串则可以免除这个 *** 作,直接使用 using (StringReader sr = new StringReader(configData)) { Xdocument Config@R_301_5580@document = Xdocument.Load(sr); foreach (XElement layer in Config@[email protected]("layer")) { string url = layer.Attribute("url").Value; string ID = layer.Attribute("ID").Value; LayersDic.Add(ID,url); } } } /// <summary> /// 退出Tools的时候进行的配置文件保存 /// </summary> /// <returns></returns> public string SaveConfiguration() { //将需要保存的配置文件以字符串形式传递出去,比如笔者比较喜欢使用xml配置,也必须转换成字符串 return string.Empty; } }}在这一步完成后,我们先不看交互界面里面的类如何写(要是调试出错,可以随意建立一个类名为“queryToolWindow”的xaml不用做任何 *** 作),我们先到宿主站点中,将Tool配置到VIEwer生成的站点中去。
4.配置Tool
首先打开Config/Application.xml,在节点中添加对xap的引用。<Extensions> <Extension Url="ClIEntBin/WCFSilverlight.xap" /></Extensions>
再在Config/Tools.xml中配置工具的引用
<Tools> <Tool Label="查询降水量" Icon="Images/toolbar/ToggleSearchCommand16.png" Description="调用WCF查询降水量,并生成专题图"> <Tool.Class> <queryTool xmlns="clr-namespace:WCFSilverlight;assembly=WCFSilverlight" /> </Tool.Class> <Tool.ConfigData> <queryConfig> <layer ID="Point" url="http://localhost:6080/arcgis/rest/services/CenterValue/MapServer/0"></layer> </queryConfig> </Tool.ConfigData> </Tool> </Tools>
我们可以看到,Tools节点中添加了Tool;在Tool下面有Tool.Class节点和Tool.ConfigData节点,前者是配置工具使用的类,格式为:
<Tool.Class> <类名xmlns="clr-namespace:命名空间;assembly=程序集" /></Tool.Class>
有朋友会问:需要把Silverlight的程序集添加到上面的宿主站点中吗?答案是不用!因为在Application.xml中配置了xap的引用,因此,VIEwer的VIEwer.xap其实会去解析这些引用的xap,而生成我们的扩展工具自己的xap的时候已经将自己的程序集打包传过去了。感兴趣的朋友可以将xap包的扩展名改为.zip再打开看看。
下面的Tool.ConfigData标签内是随意填什么都行的,我这里是用xml格式表示了一个图层和查询的配置。
配置完成后,运行看看,应该在主窗体右侧工具拦中出现我们自定义的工具了。点开试试,是否出现我们自己定义的queryToolWindow了? 总结以上是内存溢出为你收集整理的如何在ArcGIS Viewer for Silverlight中使用WCF服务完成降雨量专题图显示(一)全部内容,希望文章能够帮你解决如何在ArcGIS Viewer for Silverlight中使用WCF服务完成降雨量专题图显示(一)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)