如何在ArcGIS Viewer for Silverlight中使用WCF服务完成降雨量专题图显示(一)

如何在ArcGIS Viewer for Silverlight中使用WCF服务完成降雨量专题图显示(一),第1张

概述在我的工作中遇到有的用户喜欢使用ArcGIS Viewer for Silverlight搭建一些简单的工程,用来作为即将建立的系统的原型系统,或者尝试一些功能,这是一种很方便快捷的方式。但是并不是所有的功能都能够使用Viewer配置完成,有时候扩展开发是必须的。 尤其是有的用户在别的系统中已经有了一系列的数据访问封装好的WCF,只是需要在Viewer中完成数据的调用和显示,那么就更需要对View

在我的工作中遇到有的用户喜欢使用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服务完成降雨量专题图显示(一)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1019191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存