大佬教程收集整理的这篇文章主要介绍了如何在ArcGIS Viewer for Silverlight中使用WCF服务完成降雨量专题图显示(一),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的工作中遇到有的用户喜欢使用ArcGIS Viewer for Silverlight搭建一些简单的工程,用来作为即将建立的系统的原型系统,或者尝试一些功能,这是一种很方便快捷的方式。但是并不是所有的功能都能够使用Viewer配置完成,有时候扩展开发是必须的。
尤其是有的用户在别的系统中已经有了一系列的数据访问封装好的WCF,只是需要在Viewer中完成数据的调用和显示,那么就更需要对Viewer进行灵活的扩展了。这个系列的文章中,笔者将利用WCF调用数据完成降雨量图的显示。
原本笔者想直接写WCF调用的那一小段,但是发现要是不讲清楚Viewer的扩展开发,后面的很多问题无法引出来。因此本系列将用3个篇幅完成对这个专题的阐述:
利用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 ConfigdataxDocument = XDocument.Load(sr); foreach (XElement layer in ConfigdataxDocument.Root.Elements("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>
<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>
<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服务完成降雨量专题图显示(一)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。