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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在我的工作中遇到有的用户喜欢使用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 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>

再在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 Web 编辑中 只读字段和隐藏字段设置 1  需求来源 在与客户交流过程中,遇到这样个问题:在Web端(如Silverlight程序中)进行要素属性编辑时,如何设置字段的只读,或者隐藏某些字段呢? 当时听到这个问题,第反应是通过编辑模板来进行控制,但是并没有找到合适的地方。今天问了问其他同事,得知可以通过层属性进行设置,于是进行了测试,真就成功了,这里要谢谢北京的张文老师。 2  数据设置 要进行web编辑,数 阅读详情

相关推荐

ArcGIS Viewer for Silverlight 离线文档

ArcGIS Viewer for Silverlight 最新版 离线文档

ArcGIS Viewer for Silverlight 系列:扩展Viewer之自定义布局

前面篇博客讲了Application Builder快速构建应用,些简单的应用、只需要常用功能的GIS应用,使用Builder内置的布局、工具基本能够满足需求。但是,在这个讲究XXX特色的地方,甲方往往不喜欢千篇律的界面、样的弹窗、更不能容忍没有用户登录的系统。那么我们先来讲讲如何自定义Viewer的布局。 ArcGIS Viewer for SL系列的这篇博客及以后的博客都需要安装...

iteye_8029的博客 171

ArcGIS Viewer for Silverlight 系列:使用Application Builder快速构建GIS应用

ArcGIS Viewer for Silverlight 的Application Builder是个用于快速构建基于ArcGIS Viewer的向导式应用,是所见即所得的应用。接下来我们来步操作下。 Application Builder初次安装完成后,在点击“开始”菜单——“所有程序”——“ArcGIS”——“ArcGIS Viewer for Silverlight 1.0.1...

iteye_8029的博客 207

ArcGIS API for Silverlight 点沿着线流动

ArcGIS API for Silverlight 点沿着线流动概述

mytudousi的专栏 4241

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

节我们建立了Viewer for Silverlight的空工具,并且让它能够在我们配置的Viewer框架中调用,接下来我们就讲述怎么在这个工具中调用WCF服务。 首先完善下QueryToolWindow,让它能够查询发出的服务层的数据,并能将数据在Viewer生成的应用程序中显示出来。 关键代码为: public partial class QueryToolWindow :

esricd的专栏 2288

ArcGIS Viewer for Silverlight 开发环境

1、ArcGIS API for Microsoft Silverlight 3.0 地址:http://www.esri.com/apps/products/download/index.cfm?fuseaction=download.main&downloadid=714 ArcGIS Extensibility SDK for Silverlight 3.0 地址:http:/...

weixin_30438813的博客 158

ArcGIS Viewer for Silverlight 系列:简介

本内容转自:http://support.esrichina-bj.cn/2011/0512/1108.html ArcGIS Viewer for Microsoft Silverlight  是个可立即部署,可配置的,富因特网应用,它基于 ArcGIS API for Microsoft Silverlight 。 ArcGIS Viewer for Silv

esricd的专栏 2129

Silverlight动态设置WCF服务Endpoint

去年12月收到位朋友的邮件,咨询Silverlight使用WCF服务,应用部署后直无法访问的问题,通过几次交流,才发现在他的项目中,全部使用静态URL作为WCF服务的Endpoint地址,后来修改为动态地址后,问题解决。本篇简单介绍如何创建动态WCF Endpoint。 Silverlight项目中通过WCF服务进行客户端与服务器端数据交互,其方法是在Silverlight客户端添加服务...

weixin_34043301的博客 183

“天气之子”:GIS预测降雨

暴雨前夕 “叮”,听到短信声,我放下了手里的方便面桶,打开手机:(注:是8月12日也就是今天才截的) 看到短信,身在西二旗的我心中紧,不尽回忆起里让我回忆起了,两年前的西二旗的守望者: 回龙观的小红车,小黄车,还有如同我们终将逝去的青春样的的“小黄车押金”。 究竟会下多大的雨呢,让我们化身“天气之子”来掌控晴雨吧! 不过细想起来,改变天气给自身带来的副作用太明显了,而预测降雨的门槛则要略低,并且毫无副作用。让我们使用ArcGIS Pro来尝试下预测降雨吧! 预测降雨 数据 如果是桌面端软件的数

长歌行 2052

Windows 7 配置ArcGIS Viewer for Silverlight

步骤:在Windows7上安装ArcGIS Viewer for Microsoft Silverlight,系统必须开启某些系统功能,需要:1、ASP.NET2、Static Content3、IIS Management Console在“打开或关闭Windows 功能”列表的顺序如下。同时,因为在安装完成ArcGIS9.3之后会因为系统注册表大小被限制的情况,导致在打开“打开或关闭Windows功能”时显示个空列表的情况。所以需要修改下注册表的相关键值。步骤二:同时因为ArcGIS Viewer

marine008的专栏 2008

ArcGIS API for Silverlight应用开发系列(1)自定义专题

ArcGIS API for Silverlight 中提供的内置专题渲染类型包括简单符号化、唯值符号化和分级符号化,如果想要实现其他的专题类型,如饼、柱状、仪表盘等,则需要 通过自定义开发的方式进行扩展。 自定义专题类型的基本思路是使用ElementLayer与表控件(如开源的 Visifire)相结合,在 ElementLayer 的 Children集合中添加表对象(UI元

esricd的专栏 7533

多源在线与离线数据读取之五(Android移动端开发读取四川地理信息中心地名搜索服务

本实例在前博客的基础上,主要是针对四川地理信息中心的地名搜索服务,如果利用ArcGIS for Android API进行解析,并接入地理编码信息进行搜索定位。 1)基础准备:下载Java版的Json库(http://code.google.com/p/json-simple/)、熟悉四川地理信息中心地名搜索规则 2)关于地理地理信息中心地名搜索服务规则,说见其网站,这里不多介绍(http:

esricd的专栏 7047

ArcGIS Server 客户端开发中如何使用自定义坐标系

1  场景描述 本文的应用场景,是要通过某市的行政区划,去查询覆盖指定县市的影像数据。其中行政区划采用Xian80地理坐标系,而影像数据则采用了该市的地方平面坐标系,因此需要进行坐标转换。 下文将为您介绍如何在ArcGIS Server开发中进行坐标系转换。 2  关于自定义坐标系 本文所谓的自定义坐标系,是指没有包含在ArcGIS自带的坐标系中的坐标系。比如你通过ArcGIS

esricd的专栏 6822

扩展ArcGIS API for Silverlight/WPF 中的TextSymbol支持角度标注

ArcGIS API for Silverlight/WPF中原版的TextSymbol只能支持文字正向显示。在很多实际项目中,往往需要文字标注有些角度甚至是沿线标注,下面我们来看下原装的TextSymbol和扩展后的TextSymbol的比较和实现思路。 要实现右的效果只需要从TextSymbol继承个Symbol并增加Rotation属性,并加载相应的控件模板就行了。 以下是

esricd的专栏 5075

ArcGIS API for Silverlight应用开发系列(2)客户端读取Shapefile

系统是死的,数据是活的,在些涉及敏感数据的地方,可能需要提供访问客户端数据的功能。例如:在某单位内部有个基于ArcGIS  Silverlight  API的WebGIS系统,提供了些常用的业务功能,能够访问些基础地理数据和基本的业务数据。而有的业务数据,由于保密要求,可能不通过系统直接提供,需要在客户端直接访问。 在客户端访问Shapefile,可以通过直接读取的方式,以及将数据传回服

esricd的专栏 5028
上一篇: 影像管理技术——专题一:原始影像建库入库
下一篇: 一种移动GIS离线数据采集的方法
Esri成都
博客等级 码龄14年 1017粉丝 257原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值