arcgis silverlight api 应用开发教程


ArcGIS API for Silverlight 应用开发教程 Esri 中国(北京)有限公司 2011 年 04 月 文档版本信息 版本 日期 修改说明 作者 V0.1 2011-01-24 创建文档及目彔结构 黄东 V0.2 2011-01-26 撰写基本概念章节内容 黄东 V0.3 2011-01-27 撰写应用开収起步和学习资源章节内容 黄东 V0.4 2011-01-27 撰写应用开収入门章节部分内容 黄东 V0.41 2011-02-11 撰写应用开収入门 章节部分内容 黄东 V0.5 2011-02-27 撰写应用开収迕阶章节部分内容 黄东 V0.51 2011-03-09 撰写应用开収迕阶章节部分内容 黄东 V0.6 2011-03-09 重新觃划目彔结构, 撰写应用开収入门部分内容 黄东 V0.61 2011-03-15 撰写应用开収入门章节部分内容 赵智宽、黄东 V0.62 2011-03-15 撰写应用开収迕阶章节部分内容 黄东 V0.63 2011-03-23 撰写应用开収入门章节部分内容 赵智宽、黄东 V0.64 2011-03-26 撰写应用开収入门章节部分内容 赵智宽、黄东 V0.65 2011-03-27 撰写应用开収入门章节部分内容 赵智宽、黄东 V0.66 2011-04-03 补充完善应用开収入门章节部分内容 黄东 V0.67 2011-04-04 撰写应用开収迕阶章节部分内容 黄东 V0.7 2011-04-06 撰写应用程序部署章节 黄东 V0.8 2011-04-09 撰写附彔,完善文档格式 黄东 V0.9 2011-04-11 补充完善应用开収入门章节部分内容 黄东 V0.91 2011-04-13 补充完善应用开収入门章节部分内容 黄东 序 I 目 录 1 基本概念 ........................................................................................................................ - 1 - 1.1 SILVERLIGHT .................................................................................................................. - 1 - 1.1.1 关于 RIA ............................................................................................................ - 1 - 1.1.2 什么是 Silverlight................................................................................................ - 2 - 1.1.3 Silverlight 主要特色 ............................................................................................. - 2 - 1.1.4 Silverlight 版本历史 ............................................................................................. - 2 - 1.2 ARCGIS API FOR SILVERLIGHT ............................................................................................. - 3 - 1.2.1 认识 ArcGIS Server REST 接口 .............................................................................. - 3 - 1.2.2 什么是 ArcGIS API for Silverlight ........................................................................... - 7 - 1.2.3 ArcGIS API for Silverlight 功能特色......................................................................... - 8 - 1.2.4 ArcGIS API for Silverlight 版本历史......................................................................... - 9 - 1.3 ARCGIS SERVER 中的各种服务........................................................................................ - 9 - 1.3.1 服务类型概览 .................................................................................................... - 9 - 1.3.2 服务与资源的关系 ............................................................................................. - 9 - 1.3.3 服务具备的能力............................................................................................... - 10 - 2 应用开发起步 ............................................................................................................... - 13 - 2.1 配置开发环境 ......................................................................................................... - 13 - 2.1.1 配置 Silverlight 开发环境 .................................................................................. - 13 - 2.1.2 安装 ArcGIS Silverlight API.................................................................................. - 13 - 2.2 搭建第一个应用程序............................................................................................... - 13 - 3 应用开发入门 ............................................................................................................... - 20 - 3.1 地图图层 ................................................................................................................ - 20 - 3.1.1 Map ................................................................................................................. - 20 - 3.1.2 Layers ............................................................................................................... - 26 - 3.1.3 ArcGISDynamicMapServiceLayer .......................................................................... - 30 - 3.1.4 ArcGISTiledMapServiceLayer ............................................................................... - 32 - 3.1.5 ArcGISImageServiceLayer .................................................................................... - 35 - 3.1.6 GraphicsLayer .................................................................................................... - 43 - 3.1.7 FeatureLayer...................................................................................................... - 46 - 3.1.8 ElementLayer..................................................................................................... - 53 - 3.1.9 SpatialReference ................................................................................................ - 56 - 3.2 常用控件 ................................................................................................................ - 57 - 3.2.1 Legend.............................................................................................................. - 58 - 3.2.2 Bookmark.......................................................................................................... - 60 - II 3.2.3 MapProgressBar................................................................................................. - 61 - 3.2.4 MapTip/InfoWindow .......................................................................................... - 62 - 3.2.5 Toolbar ............................................................................................................. - 66 - 3.2.6 OverviewMap .................................................................................................... - 68 - 3.2.7 Navigation ......................................................................................................... - 70 - 3.2.8 MagnifyingGlass/Magnifier ................................................................................. - 71 - 3.2.9 ScaleLine/ScaleBar ............................................................................................. - 73 - 3.2.10 其他控件 ....................................................................................................... - 75 - 3.3 行为动作 ................................................................................................................ - 76 - 3.3.1 Behaviors .......................................................................................................... - 77 - 3.3.2 Actions ............................................................................................................. - 77 - 3.4 图形绘制 ................................................................................................................ - 80 - 3.4.1 Graphic ............................................................................................................. - 80 - 3.4.2 Geometry.......................................................................................................... - 81 - 3.4.3 Draw................................................................................................................. - 82 - 3.4.4 示例:绘制图形............................................................................................... - 83 - 3.5 符号渲染 ................................................................................................................ - 87 - 3.5.1 Symbol.............................................................................................................. - 87 - 3.5.2 Renderer ........................................................................................................... - 88 - 3.5.3 Clusterer ........................................................................................................... - 94 - 3.6 查询检索 ................................................................................................................ - 98 - 3.6.1 IdentifyTask ....................................................................................................... - 99 - 3.6.2 ImageServiceIdentifyTask .................................................................................. - 101 - 3.6.3 FindTask .......................................................................................................... - 105 - 3.6.4 QueryTask ....................................................................................................... - 107 - 3.6.5 各种查询方式的异同...................................................................................... - 112 - 3.7 几何操作 ...............................................................................................................- 113 - 3.7.1 几何操作概述 ................................................................................................ - 113 - 3.7.2 如何使用几何操作 ......................................................................................... - 114 - 3.7.3 几何操作示例 ................................................................................................ - 115 - 3.8 在线编辑 ...............................................................................................................- 123 - 3.8.1 Web 编辑概述................................................................................................. - 123 - 3.8.2 为应用添加编辑功能...................................................................................... - 124 - 3.8.3 编辑功能工作原理 ......................................................................................... - 133 - 3.8.4 设计自己的编辑体验...................................................................................... - 135 - 3.9 网络分析 ...............................................................................................................- 136 - III 3.9.1 网络分析概述 ................................................................................................ - 136 - 3.9.2 最优路径分析 ................................................................................................ - 138 - 3.9.3 最近设施分析 ................................................................................................ - 144 - 3.9.4 服务区域分析 ................................................................................................ - 147 - 3.10 时态感知 .............................................................................................................- 150 - 3.10.1 时态感知概述 .............................................................................................. - 150 - 3.10.2 播放历史变化 .............................................................................................. - 151 - 3.10.3 基于时间查询 .............................................................................................. - 154 - 3.10.4 TemporalRenderer .......................................................................................... - 154 - 3.11 地址定位 .............................................................................................................- 158 - 3.11.1 地址定位概述 .............................................................................................. - 158 - 3.11.2 使用 Locator 任务 ......................................................................................... - 159 - 3.12 地理处理 .............................................................................................................- 172 - 3.12.1 地理处理概述 .............................................................................................. - 172 - 3.12.2 Geoprocessor................................................................................................. - 174 - 3.12.3 参数类型 ..................................................................................................... - 175 - 3.12.4 执行状态 ..................................................................................................... - 177 - 3.12.5 使用地理处理服务 ....................................................................................... - 178 - 3.13 打印输出 .............................................................................................................- 182 - 3.13.1 导出图片 ..................................................................................................... - 182 - 3.13.2 导出 PDF ...................................................................................................... - 184 - 3.13.3 导出 Shapefile .............................................................................................. - 184 - 3.13.4 地图打印 ..................................................................................................... - 185 - 4 应用开发进阶 ............................................................................................................. - 187 - 4.1 自定义专题图 ........................................................................................................- 187 - 4.1.1 自定义专题图概述 ......................................................................................... - 187 - 4.1.2 示例:创建自定义专题图............................................................................... - 188 - 4.2 访问 SHAPEFILE.........................................................................................................- 191 - 4.2.1 访问 Shapefile 概述 ........................................................................................ - 191 - 4.2.2 示例:访问客户端 Shapefile ........................................................................... - 192 - 4.3 客户端热点分析.....................................................................................................- 194 - 4.3.1 HeatMapLayer ................................................................................................. - 194 - 4.3.2 示例:生成客户端热点图............................................................................... - 194 - 4.4 OGC 标准支持.........................................................................................................- 196 - 4.4.1 WMS .............................................................................................................. - 196 - IV 4.4.2 KML................................................................................................................ - 200 - 4.4.3 GeoRSS ........................................................................................................... - 203 - 4.5 在线地图访问 ........................................................................................................- 207 - 4.5.1 Bing 地图 ........................................................................................................ - 207 - 4.5.2 OpenStreetMap ............................................................................................... - 216 - 4.5.3 Google 地图 .................................................................................................... - 219 - 4.5.4 天地图........................................................................................................... - 222 - 4.5.5 eMapZone....................................................................................................... - 225 - 4.6 业务数据整合 ........................................................................................................- 226 - 4.6.1 常规的关系数据库访问 .................................................................................. - 227 - 4.6.2 ArcGIS 用户的特殊优势 .................................................................................. - 229 - 4.6.3 业务数据整合方式总结 .................................................................................. - 230 - 4.7 服务器推送............................................................................................................- 231 - 4.7.1 创建双工服务 ................................................................................................ - 231 - 4.7.2 调用双工服务 ................................................................................................ - 233 - 4.8 网页交互 ...............................................................................................................- 237 - 4.8.1 参数传递 ....................................................................................................... - 237 - 4.8.2 HTML 访问 Silverlight ....................................................................................... - 237 - 4.8.3 Silverlight 访问 HTML ....................................................................................... - 238 - 4.8.4 JavaScript 访问 Silverlight ................................................................................. - 238 - 4.8.5 Silverlight 访问 JavaScript ................................................................................. - 239 - 4.9 访问 REST 接口 ......................................................................................................- 239 - 4.9.1 清除 REST 缓存 .............................................................................................. - 239 - 4.9.2 影像数据下载 ................................................................................................ - 241 - 4.9.3 访问 REST 接口小结....................................................................................... - 246 - 4.10 使用 SOE ..............................................................................................................- 246 - 4.10.1 SOE 概述....................................................................................................... - 246 - 4.10.2 REST SOE 调用 ............................................................................................... - 247 - 4.10.3 示例:使用 SOE ........................................................................................... - 248 - 4.11 服务安全 .............................................................................................................- 256 - 4.11.1 基于令牌的认证........................................................................................... - 256 - 4.11.2 HTTP/Windows 认证 ...................................................................................... - 259 - 4.11.3 注意事项 ..................................................................................................... - 260 - 5 应用程序部署 ............................................................................................................. - 261 - 5.1 在 IIS 上部署 ..........................................................................................................- 261 - V 5.1.1 部署流程概述 ................................................................................................ - 261 - 5.1.2 重要步骤说明 ................................................................................................ - 262 - 5.1.3 常见问题解决 ................................................................................................ - 274 - 5.2 在 APACHE 上部署 ....................................................................................................- 275 - 6 学习资源 .................................................................................................................... - 277 - 6.1 SILVERLIGHT 学习资源 ................................................................................................- 277 - 6.2 ARCGIS API FOR SILVERLIGHT 学习资源 ...........................................................................- 277 - 6.3 ARCGIS 系列微博 .....................................................................................................- 277 - 7 参考资料 .................................................................................................................... - 279 - 7.1 官方文档 ...............................................................................................................- 279 - 7.2 讲座 PPT ................................................................................................................- 279 - 7.3 博客文章 ...............................................................................................................- 279 - 8 附录 ........................................................................................................................... - 281 - 8.1 示例代码下载 ........................................................................................................- 281 - 8.2 常见问题处理 ........................................................................................................- 281 - 8.3 SILVERLIGHT VIEWER .....................................................................................................- 282 - 8.3.1 Silverlight Viewer ............................................................................................. - 282 - 8.3.2 ArcGIS Viewer for Silverlight .............................................................................. - 283 - 8.4 数据库访问............................................................................................................- 283 - 8.4.1 Silverlight-enabled WCF Service ......................................................................... - 283 - 8.4.2 WCF Data Services............................................................................................ - 291 - 8.4.3 WCF RIA Services ............................................................................................. - 305 - - 1 - 1 基本概念 在开始学习 ArcGIS API for Silverlight 应用开发之前,首先来了解一些基本概念, 以便为后面的学习奠定坚实的理论基础。 本章主要将首先介绍 Silverlight 相关的概念,然后介绍 ArcGIS API for Silverlight 相 关概念,最后为您介绍 ArcGIS Server 中的各种服务类型。 1.1 Silverlight 1.1.1 关于 RIA RIA(Rich Internet Applications),即富互联网应用,具有高度互动性、丰富用户体验 以及功能强大的客户端。 为了让客户端具有更丰富的表现力和交互能力,RIA 通常需要在客户端浏览器中安 装插件(例如 Flash Player、Silverlight)。通过插件,RIA 可以充分利用客户端的运算能 力,因此可以将传统 Web 应用中很多在服务器上执行的操作分散到客户端,从而既减 轻了服务器的压力,又提高了客户端的展现、交互和处理能力。 RIA 的另外一个重要特点就是其标准性,在不同的操作系统、浏览器中,呈现出来 的内容是没有差别的。相对于传统 Web 应用在不同的操作系统和浏览器中可能呈现出 千差万别的页面,RIA 的这个特性免除了开发人员为让应用在不同浏览器中兼容而花费 的额外精力。 总的来说,RIA 相比传统 Web 应用的优势主要集中在以下几点:  表现力更丰富  网络效率更高  交互能力更强  面向操作系统和浏览器透明  沙箱环境提供更可靠的安全性  易于与现有系统集成 - 2 - 1.1.2 什么是 Silverlight 普通用户:Silverlight 是类似于 Flash Player 的浏览器插件; 开发者:Silverlight 是类似于 Flex 的 Web 应用开发技术; 微软:Silverlight 是俺们力推的 RIA(富互联网应用)解决方案,用于设计、开发、 部署具有富交互体验的 Web 应用。 1.1.3 Silverlight 主要特色  丰富的用户体验  强大的基于矢量的图形技术  丰富的动画效果、透视化 3D 效果  特有的 Deep Zoom 和数据透视技术  支持多种格式音频和高清视频  支持访问网络摄像机和麦克风  快速、更具生产力的开发  支持多种开发语言(C#、VB.NET、IronPython 等)  与现有网站轻松集成(与 HTML、JavaScript 轻松交互)  商务应用程序开发的首选(多种数据库访问方式)  跨平台、跨浏览器,部署简便  支持 IE、Firefox、Opera、Safari、Chrome 等浏览器  支持 Windows、MacOS、Linux 以及 Windows Mobile、Symbian 等系统  插件小巧、安装方便快捷  支持浏览器外运行应用程序 1.1.4 Silverlight 版本历史 Silverlight 的版本历史如下表所示: 表 1-1 Silverlight 版本历史 - 3 - 版本 推出日期 Silverlight 1 2007 年 9 月 Silverlight 2 2008 年 6 月 Silverlight 3 2009 年 7 月 Silverlight 4 2010 年 4 月 Silverlight 5 beta 2011 年 4 月 Moonlight Linux 平台上的 Silverlight,2009 年 2 月推出 1.0 版本,截止 2011 年 1 月,最新版是 Moonlight 3.0 Preview 9。 1.2 ArcGIS API for Silverlight 1.2.1 认识 ArcGIS Server REST 接口 ArcGIS API for Silverlight 是基于 ArcGIS Server REST 接口工作的,首先介绍一下 REST 的基本概念。 REST(Representational State Transfer)是 Roy Fielding 博士在 2000 年他的博士论文 中提出来的一种软件架构风格。REST本身并不涉及任何新的技术,它基于 HTTP 协议, 比起 SOAP 和 XML-RPC 来说它更加地简洁、高效,现在越来越多的大型网站正在使用 REST 风格来设计和实现。 REST 最突出的特点就是用 URI 来描述互联网上所有的资源,Roy Fielding 博士通 过观察互联网的运作方式对其进行了抽象,他认为:设计良好的网络应用表现为一系列 的虚拟“网页”,或者说这些虚拟网页就是资源状态的表现(Representational);用户选 择这些链接导致下一个虚拟的“网页”传输到用户端展现给使用的人,而这正代表了资 源状态的转发(State Transfer)。 REST 主要有以下的特点:  资源通过 URI 来指定和操作  对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应 HTTP 协 议提供的 GET、POST、PUT 和 DELETE 方法  连接是无状态性的 - 4 -  能够利用 Cache 机制来提高性能 接下来介绍 ArcGIS Server 是如何通过 REST 接口来暴露 GIS 资源的。 服务目录:使用 REST 接口最重要的就是 REST 服务目录,它是将 ArcGIS Server 提供的 REST 资源通过 HTML 表现出来的 URL。 ArcGIS Server for Java 版本的服务目录地址为:http://:8399/arcgis/rest/services; ArcGIS Server for .Net 版本的服务目录地址为:http:///arcgis/rest/services; 在浏览器中输入上述 URL 后就可以看到当前所有的服务及其这些服务超链接到的 资源和操作,如下图所示: 图 1-1 ArcGIS Server REST 服务根目录 在这个目录中,有若干文件夹和根目录下的服务,文件夹下还有其他的服务。 - 5 - 在这里顺便提一下使用 REST 接口的一个特别需要注意的地方,或许你有时新发布 了一个服务,然后随即进入 REST 服务目录查看,但是却看布到这个服务。这是由于 REST 的缓存机制造成的,你需要去清空一下旧的缓存,方法就是进入 REST 管理界面 http:///arcgis/rest/admin,然后使用 ArcGIS Server 管理员帐号登录: 图 1-2 ArcGIS Server REST API 管理员登录页面 登录后,点击“立即清除缓存”链接即可立即清除旧的 REST 缓存: 图 1-3 ArcGIS Server REST API 管理页面 下面我们进入 Basemap 目录,查看其中的 Base_China 服务。其 URL 地址为 http://localhost/ArcGIS/rest/services/Basemap/Base_Overview/MapServer,特别需要注意的 是 URL 中的目录名称 Basemap,以及服务类型 MapServer,是区分大小写的,其余如机 器名(localhost)、实例名(ArcGIS)、服务根目录(rest/services)、服务名(Base_Overview) 都不区分大小写: - 6 - 图 1-4 ArcGIS 服务信息页面 - 7 - 下面就让我们点击“导出地图”链接去使用地图服务的“export”操作。你会发现, 这个操作的 URL 是这样的: http://localhost/ArcGIS/rest/services/Basemap/Base_Overview/MapServer/export?bbox=69.9 345971813891,3.95667693580766,138.598193956693,55.9198904276267。在浏览器中访问 这个 URL 的结果如下: 图 1-5 地图服务的 export 操作返回结果 从这个例子中,我们可以总结出:在 ArcGIS Server REST 接口中,请求服务的 URL 一般应该是这样的:http://[:]/arcgis/rest/services/<服务名称>/<服务类型>/< 操作>?<参数>。关于 REST 接口支持的资源类型和具体操作参数,你可以查阅 ArcGIS Server 的 REST SDK 文档,在这里就不赘述了。 1.2.2 什么是 ArcGIS API for Silverlight ArcGIS API for Silverlight 是由美国 Esri 公司推出的,用于在 Silverlight 平台上开发 WebGIS 应用的一套编程接口。ArcGIS API for Silverlight 通过 REST 接口访问 ArcGIS Server 发布的地图服务、影像服务、几何服务、地理处理服务、要素服务、网络服务等, - 8 - 还可以访问 OGC 标准的 WMS、WFS、WCS 等服务,也可以访问 Bing 地图服务。 1.2.3 ArcGIS API for Silverlight 功能特色  ArcGIS Silverlight API 主要功能:  空间数据展示:加载地图服务或影像服务,展示服务数据。  客户端 Mashup:将来自不同服务器、不同类型的服务在客户端聚合后统一呈现 给客户。  图形绘制:在地图上交互式地绘制查询范围或地理标记等。  符号渲染:提供对图形进行符号化和对要素图层生成专题图的功能。  查询检索:基于属性和空间位置进行查询,支持关联查询。  地理处理:调用 ArcGIS Server 发布的地理处理服务(GP 服务),执行空间分析、 地理处理或其他需要服务器端执行的工具、模型、运算等。  网络分析:计算最优路径、临近设施和服务区域。  在线编辑:通过要素服务编辑要素的图形、属性和附件。  时态感知:展示、查询具有时间特征的地图服务或影像服务数据。  影像处理:提供动态镶嵌、实时栅格函数处理等功能。  地图输出:提供多种地图图片导出功能。  ArcGIS Silverlight API 主要特色:  充分利用微软.NET 技术的优势,开发简单快捷。  地图支持弹簧动画(地图缩放、平移等操作具有连续性)。  支持将任何界面元素(控件)作为地图要素,随地图缩放。  地图符号支持多种动画效果,地图更生动。  支持要素按簇显示,提高显示性能和效果。  支持在客户端直接生成热点图。  支持将媒体元素(如视频)作为地图要素的符号。 - 9 - 1.2.4 ArcGIS API for Silverlight 版本历史 表 1-2 ArcGIS API for Silverlight 版本历史 版本 推出日期 对应 Silverlight 版本 1.0 2007 年 9 月 Silverlight 2、Silverlight 3 beta 1.1 2008 年 6 月 Silverlight 3 1.2 2009 年 7 月 Silverlight 3 2.0 2010 年 4 月 Silverlight 4 2.1 2010 年 12 月 Silverlight 4 2.2 beta 2011 年 3 月 Silverlight 4 1.3 ArcGIS Server 中的各种服务 1.3.1 服务类型概览 表 1-3 ArcGIS Server 中的服务类型 服务类型 说明 Map Service 提供劢态的,或经过缓存处理的 2D 地图服务。 Image Service 提供对栅格、影像数据的访问服务。 Globe Service 提供 3D 球体服务。 Geocode Service 提供地址不地理位置查询服务。 Geodata Service 提供对 Geodatabase 的访问、查询、更新和管理服务。 Geoprocessing Service 提供空间分析和地理处理服务。 Geometry Service 提供对几何图形的操作。 Search Service 提供对企业级 GIS 数据资源的检索服务。 目前叧能在 ArcGIS Desktop 软件中使用该服务。 1.3.2 服务与资源的关系 表 1-4 ArcGIS Server 服务与资源的对应关系 - 10 - 服务类型 所需资源 Map Service 地图文档(.mxd, .pmf); 地图服务定义文件(msd)。 Image Service 栅格数据集/镶嵌数据集; 引用了栅格数据集/镶嵌数据集的图层文件; 已编译的影像服务定义文件(.ISCDef)。 Globe Service Globe 文档(.3dd, .pmf)。 Geocode Service 地址定位器(.loc, .mxs, SDE batch locator)。 Geodata Service 数据库连接文件(.sde)、PGDB 或 File GDB; 引用了版本数据库中数据的地图文档。 Geoprocessing Service 包含工具图层的地图文档; 工具箱(.tbx)。 Geometry Service 丌需要 GIS 数据资源。 Search Service 包含 GIS 数据的文件夹或 Geodatabase。 1.3.3 服务具备的能力  地图服务 表 1-5 地图服务具备的能力 服务能力 功能描述 Mapping 提供对地图文档内容的访问。地图服务自劢具备该能力。 Feature Access 提供对地图上矢量要素的访问。 Mobile Data Access 允许从秱劢设备访问地图 文档中的数据。 WMS 创建符合 OGC WMS 标准的服务。 KML 使用地图文档创建 KML 要素。 Network Analysis 使用网绚分析扩展模块解决交通网绚的分析问题。 WFS 创建符合 OGC WFS 标准的服务。 WCS 创建符合 OGC WCS 标准的服务。 - 11 - Geodata Access 允许用户在 ArcMap 中迕行数据复制和数据提叏。启用该能力 将创建一个关联的 Geodata Service。 Geoprocessing 提供对工具箱或工具图层中地理处理模型的访问。工具图层指代 已添加到地图文档 TOC 中的模型。启用该能力将创建关联的 Geoprocessing 服务。  影像服务 表 1-6 影像服务具备的能力 服务能力 功能描述 Imaging 提供对栅格数据集或镶嵌数据集的访问,包括像素值、属性、元 数据和波段。影像服务自劢具备该能力 。 JPIP 当使用 JPEG 2000 文件和配置来自 ITTVIS 的 JPIP 服务器时提 供 JPIP 流能力。 WMS 创建符合 OGC WMS 标准的服务。 WCS 创建符合 OGC WCS 标准的服务。  球体服务 表 1-7 球体服务具备的能力 服务能力 功能描述 Globe 提供对 Globe 文档内容的访问。Globe 服务自劢具备该能力 。  地理编码服务 表 1-8 地理编码服务具备的能力 服务能力 功能描述 Geocoding 提供对地址定位器的访问。Geocode 服务自劢具备该能力 。  空间数据服务 表 1-9 空间数据服务具备的能力 服务能力 功能描述 Geodata 提供对 Geodatabase 数据的查询、提叏和复制。 Geodata 服务自劢具备该能力 。 - 12 - WFS 创建符合 OGC WFS 标准的服务。 WCS 创建符合 OGC WCS 标准的服务。  地理处理服务 表 1-10 地理处理服务具备的能力 服务能力 功能描述 Geoprocessing 提供对工具箱或工具图层中地理处理模型的访问。 Geoprocessing 服务自劢具备该能力 。  几何服务 表 1-11 几何服务具备的能力 服务能力 功能描述 Geometry 提供执行几何计算的一个内部引擎,如投影、生成缓冲区等。  数据检索服务 表 1-12 数据检索服务具备的能力 服务能力 功能描述 Search 提供对企业级 GIS 数据资源的检索。Search 服务自劢具备该能力。 - 13 - 2 应用开发起步 通过上一章了解了基本概念之后,现在开始进入应用开发相关的内容。本章的内容 主要包括两个部分,首先介绍如何配置开发环境,然后以一个简单的示例带您体验 ArcGIS API for Silverlight 应用开发的魅力。 2.1 配置开发环境 工欲善其事,必先利其器。在摩拳擦掌,准备大展拳脚之前,首先需要准备好我们 的装备——开发环境。 ArcGIS API for Silverlight的开发环境配置主要包括两个部分,首先是配置Silverlight 开发环境,然后安装 ArcGIS Silverlight API,以下介绍开发环境的配置步骤。 2.1.1 配置 Silverlight 开发环境 按照以下步骤配置 Silverlight 开发环境: 1) 安装集成开发环境:Visual Studio 2010 或 Visual Web Developer 2010 2) 安装 Silverlight 开发包:Silverlight 4 Tools for Visual Studio 2010(内含 SDK) 3) 安装专业界面设计软件(可选,建议安装):Expression Blend 4 4) 安装扩展控件包(可选,建议安装):Silverlight Toolkit 4 5) 安装 Silverlight 插件(开发人员版,方便调试):Silverlight_Developer 注:关于 Silverlight 开发环境配置,可参考下面的文章: 轻松建立 Silverlight 开发环境:http://silverlightchina.net/html/tips/2009/0706/5.html 2.1.2 安装 ArcGIS Silverlight API 6) 安装 Silverlight API:ArcGIS API for Microsoft Silverlight/WPF 2.1 下载地址:http://help.arcgis.com/en/webapi/silverlight/index.html 2.2 搭建第一个应用程序 按照以下步骤,可以快速搭建第一个应用程序。 - 14 - 1) 启动 Visual Studio 2010,新建一个项目,如下图,选择 Silverlight Application; 图 2-1 新建 Silverlight 应用程序 2) 点击 OK 后将弹出 Web 网站配置页面,这里接受默认参数; - 15 - 图 2-2 新建 Silverlight 应用程序的 Web 工程配置 点击 OK 后,新建的 Silverlight 应用程序如下图所示,工作区的上半部分是页面设 计视图,下班部分是页面标记代码视图,右侧解决方案目录中有两个工程,一个是 Silverlight 工程,另一个是 ASP.NET 网站(包含 aspx、html 网页和 web.config 配置文件), 咱们的 Silverlight 应用程序,将依托这个网站来运行; 图 2-3 新建的 Silverlight 应用程序结构 3) 在 Silverlight 工程引用中添加对 ArcGIS Silverlight API 类库的引用; - 16 - 图 2-4 添加 ArcGIS Silverlight API 类库引用 4) 在标记代码中(.xaml 文件)添加对“命名空间”的引用; 5) 添加地图控件 - 17 - 6) 添加服务图层(XAML 代码) 7) 添加后台代码(使用 C#) using System; using System.Windows; using System.Windows.Input; using System.Windows.Controls; using ESRI.ArcGIS.Client; namespace HelloWorld { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void Layer_InitializationFailed(object sender, EventArgs e) { //获取图层对象 Layer layer = sender as Layer; //显示图层加载失败原因的提示 MessageBox.Show("加载图层失败:" + layer.InitializationFailure.Message); } } } 8) 编译运行,效果如下(由于示例使用了 ArcGIS 在线地图服务,所以需连接到 Internet): - 18 - 图 2-5 Hello World 运行效果 9) 拔掉网线再试将提示加载图层失败,如下图所示: - 19 - 图 2-6 图层加载失败 10) 看不见地图?揉了揉眼睛还是没看见?可能因为没有跨域访问策略文件!  文件名:clientaccesspolicy.xml  文件位置 :ArcGIS Server SOM 所在 机器的 wwwroot 目 录下, 例如: C:\inetpub\wwwroot  文件内容: 至此,一个简单的 ArcGIS Silverlight API 应用就搭建好了。GIS 的 Hello World 有图 有真相,比纯编程语言的 Hello World 有意思多了吧? 还等什么,赶紧翻开下一章,开始你的 Web GIS 开发之旅吧! - 20 - 3 应用开发入门 本章主要介绍 ArcGIS API for Silverlight 应用开发的基础知识,内容涉及地图与图 层数据加载、常用的控件、行为与动作、图形的绘制、符号化与专题图、查询检索、几 何操作、在线编辑、时态感知、地址定位、地理处理以及地图打印输出。形式包括功能 说明,类介绍,代码演示等。 对于刚开始接触 ArcGIS API for Silverlight 应用开发的读者,建议按顺序通读本章, 以掌握应用开发必须的基础知识,同时为进一步学习打好基础。 3.1 地图图层 3.1.1 Map Map 是 ArcGIS API for Silverlight 中的核心组件,主要用于呈现地图服务、影像服 务中的空间数据,此外还可以展示 WMS 服务、热点图(HeatMap)、Bing 地图、 OpenStreetMap、GeoRSS、KML 数据等,并且 Map 可以与用户交互,接受用户输入。 Map 的主要属性、方法、事件如下表所示: 表 3-1 Map 类的主要成员 属性 说明 Extent 地图外包矩形的范围,即四个角点坐标范围。 IsLogoVisible 是否显示 esri 的 logo。 Layers 地图中的图层集合,先加入的图层在底部,最后加入的图层在最上 层显示。 PanDuration/ZoomDuration 平秱 /缩放时劢画持续时间。 SpatialReference 空间参考,通过 WKID(空间参考的编号)或 WKT(空间参考的 名称)指定。默认为加入地图中的第一个具有空间参考的图层的 空间参考。 WrapAround 设置地图是否经向循环,即通过平秱工具,一直向左或一直向右秱 劢地图,地图将模拟球体旋转,永迖丌会到达边界。 注:v2.2 beta 新增。 方法 说明 - 21 - MapToScreen/ScreenToMap 地图不屏幕之间的坐标转换。 PanTo/ZoomTo 平秱 /缩放到指定范围。 事件 说明 ExtentChanged 地图范围改变事件。 MouseClick 地图上的单击事件。 Progress 地图数据加载迕度事件。 PropertyChanged 地图属性变化事件。 Map 控件包含了定义和加强在运行时导航行为的选项。下面将讨论如何在设计时或 运行时导航地图。 3.1.1.1 设置平移和缩放的动画时间间隔 Silverlight 平台为使用 UI 内容提供了丰富的动画功能。ArcGIS API for Silverlight 利用这些功能加强了在 Map 控件上进行缩放和平移操作时的用户体验。你可以选择动 画功能应用到的地图内容级别。Map 控件上的 ZoomDuration 和 PanDuration 属性定义了 动画功能在导航和缩放操作上持续的时间。这两个属性的值是 TimeSpan,并且这个值 可以在 XAML 中使用"d.hh:mm:ss.ff"格式的字符串来表示。其中较高的属性值表示慢的, 平滑的缩放和平移操作,而较低的属性值表示快速的缩放和平移操作。默认的缩放操作 持续时间是 1.5 秒,默认的平移操作持续时间是 0.75 秒。下面的示例代码描述了如何禁 用缩放和平移操作中的动画功能。 3.1.1.2 转到特定切片级别 Silverlight 平台包含了适合富 Web 客户端环境的高效图像重采样能力。ArcGIS Silverlight API Map 控件使用 Silverlight 重采样引擎渲染来自地图服务图层的图片,比如 ArcGISTiledMapServiceLayer 的缓存切片或 ArcGISDynamicMapServiceLayer 的动态地图 图片。这提供了平滑,灵活的用户体验和允许客户端在选定的比例尺查看缓存切片。你 可以使用 SnapToLevels 属性将地图强制转到到第一个切片地图服务图层的某个比例尺 级别(LOD)。注意,如果你将 SnapToLevels 属性设置为 true 时,地图只能在切片服务 图层定义的某个比例尺(LOD)下可见。 - 22 - 每个 TiledMapServiceLayer 都具有一个 TileInfo 对象,其中存储地图服务的一组有 效的 LOD 值。每个 LOD 具有一个分辨率值,该值表示了一个图像像素代表的地图单位 的数量。为了缩放到某个特定了比例尺级别,首先访问 LOD 数组,获取感兴趣的比例 尺级别和其分辨率,然后将其传递给 Map.ZoomToResolution()方法。 3.1.1.3 在运行时获取地图初始范围 也许在运行之前并不知道地图的初始范围,因此你如果需要使用地图的初始范围, 必须在应用程序第一次加载时获取之。地图控件提供了两个事件用于监听地图范围的改 变。在地图范围改变的过程中(由缩放和平移操作导致)和地图范围改变结束时会分别 触发 ExtentChanging 和 ExtentChanged 两个事件。当设置了初始地图范围时会触发 ExtentChanged 事件。你可以通过监听这个事件来获取地图的初始范围。注意,为了获 取地图控件的初始物理大小(以像素为单位),请监听第一个 SizeChanged 事件。如果初 始地图范围没有在地图控件或其容器控件上设置,你可能无法知道地图的初始物理大小。 void MyMap_ExtentChanged(object sender, ExtentEventArgs e) { if (e.OldExtent == null) Envelope initialExtent = e.NewExtent; } 3.1.1.4 在运行时改变地图范围 默认情况下,一系列的预定义键盘和鼠标快捷方式已经在地图控件上启用。下表列 出了与地图操作关联的快捷方式。 表 3-2 地图支持的鼠标键盘快捷操作方式 键盘操作 鼠标操作 地图操作 按下左,右,上,下键 无 根据方向键按下方向平秱 +/- 无 放大(+)或缩小(-)一个缩放系数。缩 放系数由 Map.ZoomFactor 属性定义。 无 鼠标左键按下幵 拖劢 在地图上平秱(默认操作) 无 鼠标左键双击 放大一个缩放系数 - 23 - Shift 键按下 鼠标左键按下和拖劢 定义一个放大的范围 Shift + Ctrl 键按下 鼠标左键按下和拖劢 定义一个缩小的范围 你也可以通过设置地图控件的 Extent 属 性 或 调 用 Zoom() , ZoomTo() , ZoomToResolution(),或者 PanTo()方法来更改地图的范围。 3.1.1.5 设置地图环绕模式 通过设置 Map 的 WrapAround 属性,可使地图处于环绕模式(Map.WrapAround=true) 或普通模式(Map.WrapAround=false)。 如下代码: 运行效果见下图: 图 3-1 默认视图,美洲在左 - 24 - 图 3-2 向左平移后,美洲从右侧循环出现 图 3-3 继续向左平移,欧洲和非洲从右侧循环出现 - 25 - 除了使用 ArcGIS Online 提供的切片地图服务,也可以叠加本机发布的动态地图服 务,如下代码所示: 运行效果如下图: 图 3-4 中国图层和世界底图在地图上循环延续 也可以去掉底图,只使用本机发布的动态地图服务,代码如下: 运行效果: - 26 - 图 3-5 中国图层在地图上循环延续 3.1.2 Layers 3.1.2.1 Layers 综述 Map 表示一个地图控件,提供一个 Layers 属性作为图层容器,而真正的数据则存 储在相应的图层中。ArcGIS API for Silverlight 提供了若干种图层类型来承载不同来源的 数据。 图层对象结构如下图所示: - 27 - 图 3-6 图层对象结构 各种图层类型说明如下表所示: 表 3-3 各种图层类型说明 图层 说明 Layer 抽象基类,表示所有可以添加到 Map 控件中的地理数据。图层是地理数 据借劣文本标注和符号渲染的表现形式。 TiledLayer 抽象基类,表示切片/缓存地图服务图层。当需要自定义一个切片图层类 型,但缓存图片丌能通过简单的 URL 直接引用时,应考虑实现 TiledLayer。 TiledMapServiceLayer 抽象基类,表示切片/缓存地图服务图层。当需要自定义一个切片图层类 型,幵且缓存图片可以通过简单的 URL 直接引用时,应考虑实现 TiledMapServiceLayer。 ArcGISTiledMapServic eLayer ESRI.ArcGIS.Client.ArcGISTiledMapServiceLayer 表示可以通过 REST 接口访问的 ArcGIS 缓存地图服务图层。缓存服务访问预先创建好的图 片资源,而丌是根据客户端请求劢态产生图片。 OpenStreetLayer ESRI.ArcGIS.Client.Toolkit.DataSources.OpenStreetMapLayer 表示 由 OpenStreetMap 组织提供的缓存 image 服务数据。该组织拥有一份 可供公众免费使用和自由编辑的全球地图数据。一共支持 4 种 OpenStreetMapLayer 类型:Mapnik,Osmarenderer,Cycle Map 和 NoName。OpenStreetMap 数据使用 WGS84 基准,经纬度坐标。 - 28 - TileLayer ESRI.ArcGIS.Client.Bing.TileLayer 表示缓存的微软必应地图服务数据。 使用 Bing 服务要求生成幵提供令牉。 DynamicLayer 抽象基类,表示劢态图层类型。如果想创建自定 义劢态图层类型,幵需 要管理创建、操作或自己下载源图片数据,请实现 DynamicLayer。 DynamicMapServiceLa yer 抽象基类,表示劢态图层类型。如果想创建自定义的劢态图层类型,通 过指向在线服务的 URL 访问劢态生成的图片,请实现 DynamicMapServiceLayer。 HeatMapLayer ESRI.ArcGIS.Client.Toolkit.DataSources.HeatMapLayer 是由客户端 生成的位图图层,显示热点颜色图(从蓝色到红色,再到黄色),用于 展示一组点(HeatMapPoints)的空间聚集程度。蓝色表示轻度聚集, 红色表示中度,黄色表示高度聚集。 ArcGISDynamicMapSer viceLayer ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer 表示可以通过 REST 接口访问的 ArcGIS 劢态地图服务图层。劢态地图服务根据客户端 请求实时生成图片。ArcGISDynamicMapServiceLayer 的背景色始终 透明。 ArcGISImageServiceLa yer ESRI.ArcGIS.Client.ArcGISImageServiceLayer 表示可以通过 REST 接 口访问的 ArcGIS 影像服务图层。影像服务是分収原始影像或 成果影像 数据的最佳选择,支持 RGB,全色,多光谱,DEM 等影像数据,影像 数据可以存储在 Geodatabase 或文件系统中。影像服务的数据源可以 是栅格数据集或镶嵌数据集。 GPResultImageLayer ESRI.ArcGIS.Client.Tasks.GPResultImageLayer 表示由地理处理任务 (Geoprocessing Task)产生的结果图层。如果迒回的要素数量超过 500 个,将由 ArcGIS Server MapServer 负责渲染图片,如果少于 500 个,应由开収人员编码使用 GraphicsLayer 显 示 要 素 。 GPResultImageLayer 要求通过后台代码使用。 WMSLayer ESRI.ArcGIS.Client.Toolkit.DataSources.WmsLayer 表示符合 OGC标 准的劢态服务图层。目前在 ArcGIS Silverlight API 2.1 中,支持 WMS 1.1.1 和 WMS 1.3。 GeoRssLayer ESRI.ArcGIS.Client.Toolkit.DataSources.GeoRssLayer 是一种 GraphicsLayer,其图形几何体由 GeoRSS-Simple 数据源迒回,使用 WGS84 地理坐标系。如果 GeoRssLayer 不地图空间参考丌一致,则 需要迕行投影转换。迒回的 Graphic 都没有符号,需要编码设置其符号。 为了使 GeoRssLayer 跟踪实时事件(数据),客户端代码要求使用 Update 方法。 - 29 - GraphicsLayer ESRI.ArcGIS.Client.GraphicsLayer 是一种客户端图层,用于绘制基于 矢量数据的图形,幵指定符号迕行渲染。 FeatureLayer ESRI.ArcGIS.Client.FeatureLayer 是 GraphicsLayer 的特殊类型,可以 丌编写后台代码即显示要素。不 GraphicsLayer 相比,FeatureLayer 有以下特性: Url—地图服务地址(加上图层 ID),要素图层自劢获叏图层中的数据。 FeatureSymbol—要素渲染的符号。 ClusterFeatures—是否允许对点要素迕行聚簇显示。 KmlLayer ESRI.ArcGIS.Client.Toolkit.DataSources.KmlLayer 也 是 一 种 GraphicsLayer,其图形几何体由基于 XML 语法的数据源迒回,可以 是 KML、KMZ 或服务。 ElementLayer ESRI.ArcGIS.Client.ElementLayer 是一种客户端图层类型,允许将 Silverlight 中任意 System.Windows.UIElement 对象放在地图里的某 个地理位置。如果为 UIElement 指定高宽,则其将随地图缩放,如果 仅指定点位置,则丌随地图缩放。 3.1.2.2 Layer Layer 是所有图层类型的基类,定义了任何类型的图层都具有的一些通用的属性、 方法、事件,如下表所示: 表 3-4 Layer 类的成员 属性 说明 FullExtent 获叏图层的全图范围。 ID 获叏或设置 图层的标识符,可用于在地图图层集合中查找指定图层。 InitializationFailure 包含图层初始化失败信息。 MaximumResolution/ MinimumResolution 在图层可见时获叏或设置图层的最大和最小分辨率( map unit per pixel)。 Opacity 获叏或设置图层的透明度。 SpatialReference 获叏图层的空间参考。 Visible 获叏或设置图层的可见性。 方法 说明 - 30 - Initialize 初始化图层数据,可重写该方法以添加自己的初始化逡辑。 ToBitmap 将当前图层渲染为 WritableBitmap 对象。 事件 说明 InitializationFailed 图层初始化失败事件。 Initialized 图层初始化结束事件。 在调试应用程序时,InitializationFailed 事件非常重要,该事件在图层初始化失败时 触发,将返回图层初始化失败原因,便于找到问题所在。示例代码请参考第二章“应用 开发起步”中的 Hello World 示例。 3.1.3 ArcGISDynamicMapServiceLayer ArcGISDynamicMapServiceLayer(动态地图服务图层)提供对由 ArcGIS Server REST API 暴露的动态地图服务资源的访问。动态地图服务实时生成地图图片。 如果将 ImageFormat 设置为 PNG 等无损压缩格式,ArcGISDynamicMapServiceLayer 的背景色将始终透明。 3.1.3.1 定义的属性、方法、事件 表 3-5 ArcGISDynamicMapServiceLayer 类的成员 属性 说明 Capabilities 获叏地图服务的能力。 CopyrightText 获叏 ArcGISDynamicServiceLayer 包含的版权信息。 Description 获叏地图 数据框中包含的描述信息。 DisableClientCaching 禁止在客户端缓存 ArcGISDynamicServiceLayer 图片。 ImageFormat 获叏或设置 ArcGISDynamicServiceLayer 生成的图片格式。 LayerDefinitions LayerDefinition 对象集合,允许过滤 ArcGISDynamicServiceLayer 中各 个子图层的要素。 Layers 获叏 ArcGISDynamicServiceLayer 中子图层信息,迒回 LayerInfo 对象 集合。 MapName 获叏 ArcGISDynamicServiceLayer 的名称。 - 31 - ProxyURL 获叏或设置代理请求的 URL。 ServiceDescription 获叏 ArcGISDynamicServiceLayer 的服务描述。 TimeExtent 获叏 ArcGISDynamicServiceLayer 的时间范围,如果丌支持时间查询, 则迒回 null/Nothing。 Token 获叏或设置一个令牉以访问启用安全性的 ArcGIS 服务。 Units ArcGISDynamicServiceLayer 默认空间参考使用的地图单位。 Url 获叏或设置 ArcGISDynamicServiceLayer 的 URL,非缓存(劢态)的地 图服务。 Version 获叏収布地图服务的 ArcGIS Server 的版本号。 VisibleLayers 获叏或设置 ArcGISDynamicServiceLayer 中可见的子图层。 方法 说明 Get/SetLayerVisibility 获叏 /设置子图层的可见性。 QueryLegendInfos 查询图层的图例信息。 事件 说明 LegendChanged 图层的图例改变时触収。 VisibilityChanged 可见子图层改变时触収。 3.1.3.2 RestImageFormat ArcGISDynamicServiceLayer 默认生成的图片格式为 PNG24,可选的图片格式有以 下 4 种:JPG、PNG8、PNG24、PNG32。 如果 ImageFormat 属性设置为使用无损的图片压缩格式,如 PNG 等,则 ArcGISDynamicMapServiceLayer 的背景色始终为透明。JPG 是有损压缩格式,因此无法 将背景色做透明显示,这样会导致背景图层相互压盖。 3.1.3.3 LayerDefinition 对于 ArcGISDynamicMapServiceLayer 中的子图层,通过 LayerDefinition 指定定义 表达式可以设置过滤某些要素。LayerDefinition 定义了如下两个属性: 表 3-6 LayerDefinition 类的属性 属性 说明 - 32 - Definition 获叏或设置定义表达式。 LayerID 获叏或设置定义表达式关联的图层 ID。 例如: POP2000 > 1000000 3.1.3.4 示例代码:加载动态服务图层  XAML 方式 通过在 XAML 标记代码中添加 ArcGISDynamicMapServiceLayer,实现向地图中添 加动态服务图层的功能,代码如下所示:  后台代码方式 通过在后台代码(如 C#)中创建 ArcGISDynamicMapServiceLayer 并将其添加到 Map 对象中,实现向地图中添加动态服务图层的功能,代码如下所示: public MainPage() { InitializeComponent(); // 创建动态服务图层 ArcGISDynamicMapServiceLayer usaMapLayer = new ArcGISDynamicMapServiceLayer(); usaMapLayer.ID = "usaMap";// 指定图层ID // 指定图层URL usaMapLayer.Url = "http://sampleserver1.arcgisonline.com/ArcGIS/ rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer"; // 将图层添加到地图中 myMap.Layers.Add(usaMapLayer); } 3.1.4 ArcGISTiledMapServiceLayer ArcGISTiledMapServiceLayer(切片地图服务图层)提供对由 ArcGIS Server REST API 暴露的缓存地图服务资源的访问。缓存服务访问缓存文件夹中预先创建好的切片图 片,而不是动态生成图片。 - 33 - Map 控件的空间参考(ESRI.ArcGIS.Client.Geometry.SpatialReference)由添加到 Map 中的第一个定义了空间参考的可见图层指定。如果 Map 控件的空间参考与切片图层的 不一致,则切片图层将不会被显示。 3.1.4.1 定义的属性、方法 表 3-7 ArcGISTiledMapServiceLayer 类的成员 成员 说明 Capabilities 获叏 ArcGISTiledMapServiceLayer 对应的地图服务的能力。 CopyrightText 获叏地图数据框中包含的版权信息。 Description 获叏地图数据框中包含的描述信息。 InitialExtent 服务的初始范围。 Layers 获叏切片地图服务中的子图层。 ProxyURL 获叏或设置代理请求的 URL。 ServiceDescription 获叏服务的描述信息。 Token 获叏或设置一个令牉以访问启用安全性的 ArcGIS 服务。 Units 图层默认空间参考使用的地图单位。 Url 获叏或设置缓存的 ArcGIS REST 地图服务的 URL。 Version 获叏収布地图服务的 ArcGIS Server 的版本号。 GetTileUrl() 迒回 ArcGISTiledMapServiceLayer 中指定切片图片的 URL。 3.1.4.2 TileInfo TileInfo 包含 TiledMapServiceLayer 的切片模式定义信息。TileInfo 定义的属性如下 表所示: 表 3-8 TileInfo 类的属性 属性 说明 Height/Width 获叏或设置每个切片的像素高度 /宽度。 Lods 获叏或设置一个用于定义切片模式 LOD(levels of detail)数组。 Origin 获叏或设置切片模式的原点。 SpatialReference 获叏或设置切片模式的空间参考。 - 34 - 3.1.4.3 Lod TiledMapServiceLayer 的 Levels of detail (LOD)。每个 LOD 对应地图的特定比例尺 或分辨率。 表 3-9 Lod 类的属性 属性 说明 Resolution 获叏或设置切片中每个像素对应的分辨率(地图单位)。 3.1.4.4 示例代码:加载切片服务图层  XAML 方式 通过在 XAML 标记代码中添加 ArcGISTiledMapServiceLayer,实现向地图中添加切 片服务图层的功能,代码如下所示: 代码说明:XAML(eXtensible Application Markup Language,可扩展应用程序标记 语言)是类似于 XML、HTML 结构的一种标记语言,本段代码的含义如下: esri::命名空间引用 Map、ArcGISTiledMapServiceLayer:ArcGIS Silverlight API 中的地图和切片服 务图层对象 ID、Url:切片服务图层的属性  后台代码方式 通过在后台代码(如 C#)中创建 ArcGISTiledMapServiceLayer 并将其添加到 Map 对象中,实现向地图中添加切片服务图层的功能,代码如下所示: public MainPage() { InitializeComponent(); // 创建切片服务图层 ArcGISTiledMapServiceLayer worldMapLayer = new ArcGISTiledMapServiceLayer(); worldMapLayer.ID = "worldMap";// 指定图层ID // 指定图层URL - 35 - worldMapLayer.Url = "http://server.arcgisonline.com/ArcGIS/rest/ services/ESRI_StreetMap_World_2D/MapServer"; // 将图层添加到地图中(地图通过XAML方式添加) myMap.Layers.Add(worldMapLayer); }  从多个子域或服务器分布式加载数据 默认情况下大多数浏览器每次仅对单个域名发出两个请求。这对于从同一个服务器 加载大量图片时的请求次数具有不利影响。为了解决这个问题,你可以将你的 ArcGIS REST Web 服务器设置为在多个资源下工作,或者在多个 Web 服务器上宿主 ArcGIS REST Web 服务。这 使得浏览器可以克服单个域名两次请求的限制。 ArcGISTiledMapServiceLayer 本身不支持多个子域,但可以轻松地扩展以支持(创建它 的子类,重写 GetTileUrl 方法)。在下面的示例代码中,通过将“http://www.”替换为多 个域名而实现对多个子域的支持。 public class MultiDomainArcGISTiledMapServiceLayer : ArcGISTiledMapServiceLayer { private static string[] subDomains = { "http://sub1.", "http://sub2.", "http://sub3." }; public override string GetTileUrl(int level, int row, int col) { // 多个子域使得用户可以同时加载更多的切片。 //为了利用浏览器缓存,下面的表达式基于level/row/column选择子域, //确保了特定切片始终来自相同子域 string subdomain = subDomains[(level + col + row) % subDomains.Length]; string url = base.GetTileUrl(level, row, col); return url.Replace("http://www.", subdomain); } } 3.1.5 ArcGISImageServiceLayer ArcGISImageServiceLayer允许你使用由 ArcGIS Server REST API暴露的影像服务资 源。影像服务是 ArcGIS 9.3 中新增的服务类型,用于分发原始或处理后的影像数据。影 像数据可以是存储在 Geodatabase 或文件系统中的 RGB、全色、多光谱或高程数据。影 像服务的数据源可以使栅格数据集,例如 TIFF、MrSID、IMAGINE(IMG),或者 JPEG2000, 也可以是镶嵌数据集。 - 36 - 3.1.5.1 定义的属性、方法、事件 ArcGISImageServiceLayer 定义的属性、事件、方法如下表所示: 表 3-10 ArcGISImageServiceLayer 类的成员 属性 说明 BandCount 获叏 ArcGISImageServiceLayer 中可用的波段数量。 BandIds 获叏或设置 ArcGISImageServiceLayer 中哪些波段将被显示(可见的)。 CompressionQuality 控制压缩算法将导致的图片数据损失比例。合理的值域是 0 到 100。 CopyrightText 获叏 ArcGISImageServiceLayer 包含的版权信息。 Description 获叏 ArcGISImageServiceLayer 包含的描述信息。 Fields 获叏基于镶嵌数据集的影像服务属性表的字段列表。 ImageFormat 获叏或设置 ArcGISImageServiceLayer 的图片格式。 Interpolation 重采样处理方法,用于在转换栅格数据集时(经历变形或改变坐标空间) 推算像素值。 MaxValues MeanValues MinValues 为 ArcGISImageServiceLayer 中每个波段设置最大值、平均值和最小值。 MosaicRule 获叏或设置镶嵌觃则。 Name 获叏 ArcGISImageServiceLayer 的名称。 NoData 获叏或设置标识无数据的像素值。 ObjectIdField 获叏 ObjectID 字段名称。 PixelSizeX/PixelSizeY 获叏 ArcGISImageServiceLayer 中每个像素的宽度和高度(地图单位)。 ProxyURL 获叏或设置代理请求的 URL。 RenderingRule 获叏或设置渲染觃则,提供一组预定义的栅格凼数用于劢态改变 ArcGISImageServiceLayer 的显示。 ServiceDataType 获叏影像服务的数据类型。 ServiceDescription 获叏 ArcGISImageServiceLayer 的服务描述信息。 StdvValues 获叏 ArcGISImageServiceLayer 每个波段的标准差。 - 37 - TimeExtent 获叏 ArcGISImageServiceLayer 的时间范围,如果丌支持时间查询,则迒 回 null/Nothing。 Token 获叏或设置一个令牉以访问启用安全性的 ArcGIS 服务。 Url 获叏或设置 ArcGISImageServiceLayer 的 URL。 Version 获叏収布 影像服务的 ArcGIS Server 的版本号。 3.1.5.2 ImageServiceImageFormat 默认的图片格式是 JPG(JPEG)。可用的图片格式有以下 4 种:PNG24、JPG、PNG8、 JPGPNG。 其中对 JPGPNG 格式的支持是从 ArcGIS Server 10.0 开始引入的。如果请求的区域 没有透明的像素,则返回 JPG 格式,否则返回 PNG 格式。 JPG 是有损压缩的图片格式,而 PNG 则是无损压缩的格式。 如果将 ArcGISImageServiceLayer.NoData 属性设置为一个有效的像素值,则在返回 图片中所有 NoData 像素值都作为透明显示。透明像素只能在无损压缩的图片类型中显 示。因此要想将NoData作为透明处理,需要设置NoData属性,此外还需要将ImageFormat 属性设置为 PNG8、PNG24 或 JPGPNG 格式。 3.1.5.3 ImageServiceInterpolation 默认的插值算法是 NearestNeighbor,总共有如下 4 种可用的插值算法:  NearestNeighbor  BilinearInterpolation  CubitConvolution  Majority 3.1.5.4 MosaicRule 镶嵌规则定义镶嵌数据集中的单个影像如何显示。可用于指定选择集、镶嵌方法、 排序方式以及覆盖像素分辨率,等等。 表 3-11 MosaicRule 类的成员 成员 说明 - 38 - Ascending 获叏或设置一个值,指示 MosaicRule 是否为升序。 FIDs 获叏或设置要显示的 raster ids。 LockRasterIds 获叏或设置要锁定的 raster ids。 MosaicMethod 获叏或设置镶嵌方法。 MosaicOperation 获叏或设置镶嵌操作。 SortField 获叏或设置排序字段。 SortValue 获叏或设置排序值。 Viewpoint 获叏或设置规点。 Where 获叏或设置过滤条件。 3.1.5.5 RenderingRule 为 ArcGISImageServiceLayer 指定渲染规则,指定如何其中的影像如何渲染。 RenderingRule 类只能对 ArcGIS Sever 10.0 及之后的版本发布的服务使用。其中定 义的属性如下表所示: 表 3-12 RenderingRule 类的成员 成员 说明 RasterFunctionArguments 获叏或设置栅格凼数的参数。 RasterFunctionName 获叏或设置栅格凼数的名称。 VariableName 获叏或设置变量名称。 下表列出了 RenderingRule 可用的栅格函数: 表 3-13 REST API 提供的栅格函数 栅格函数 说明 Aspect 计算幵生成 坡向图。 Colormap 生成颜色带图。 Hillshade 计算幵生成 山影图。 NDVI 计算幵生成 归一化植被指数图。 ShadedRelief 生成地貌晕渲图。 - 39 - Slope 计算幵生成坡度 图。 Statistics 计算栅格统计值。 Stretch 对影像迕行拉伸增强。 在定义 RenderingRule 对象实例时,每个栅格函数都要求不同的参数。都要求设置 RenderingRule.RasterFunctionName 属性。除了“Aspect”,其他的栅格函数还要求设置 RenderingRule.RasterFunctionArguments 和 RenderingRule.VariableName 属 性 。 创 建 RenderingRule 对象时需要格外注意,所有的输入参数都采用 String 类 型或者 String/Object 键值对,而不是枚举或其他强类型,所以容易出错。 下文将描述各栅格函数及其参数说明。 3.1.5.5.1 Aspect Aspect(坡向)识别沿斜坡方向的每个单元格(cell)与其相邻单元格之间值变化的 最大比例。Aspect 可以理解为斜坡的方向。 Arguments: { "RasterFunctionName" : "Aspect" } 注意:只使用 RasterFunctionName 属性,不要使用 RasterFunctionArguments 或 VariableName 属性。 3.1.5.5.2 Colormap Colormap(颜色带)函数对像素值进行转换,将栅格数据显示为灰度图或基于 RGB 颜色的图像。 Arguments: { "RasterFunctionName" : "Colormap", "RasterFunctionArguments" : { // 不能和Colormap一起使用 "ColormapName" : "", "Colormap" : // 不能和ColormapName一起使用 [ // [integer, integer, integer, integer] [, , , ], [, , , ], [, , , ], ] }, "VariableName" : "Raster" - 40 - } 注意:只能单独使用 ColormapName 或者 Colormap 作为 RasterFunctionArgument 属 性的值。如果使用 Colormap,则其中像素值的大小范围是 0 到 255。 3.1.5.5.3 Hillshade Hillshade(山影)是在考虑太阳位置的情况下生成的地表 3D 灰度图(包括阴影部 分和光照部分)。 Arguments: { "RasterFunctionName" : "Hillshade", "RasterFunctionArguments" : { "Azimuth" : , // double (e.g. 215.0) "Altitude" : , // double (e.g. 75.0) "ZFactor" : // double (e.g. 0.3) }, "VariableName" : "DEM" } 注意:Azimuth(太阳方位角)的范围是 0 到 360(度)。Altitude(太阳高度角)的 范围是 0 到 90(度)。ZFactor(缩放因子)表示一个缩放比例,用于对表面进行垂直夸 张,以提升可视化效果。 3.1.5.5.4 NDVI NDVI(Normalized Difference Vegetation Index,归一化植被指数)是一个标准的指 数,允许你生成一张图片显示绿度(关联生物量)。该指数利用多光谱栅格数据集的两 个波段特性进行对比获得:红色波段的叶绿素色素吸收率和近红外(NIR)波段的植物 体高反射率。 Arguments: { "RasterFunctionName" : "NDVI", "RasterFunctionArguments" : { "VisibleBandID" : , // integer (zero-based band id, e.g. 2) "InfraredBandID" : // integer (zero-based band id, e.g. 1) }, "VariableName" : "Raster" } 注意:NDVI 函数不能对单波段影像使用。 - 41 - 3.1.5.5.5 ShadedRelief 通过将高程编码计算得到的影像和山影方法生成的影像进行融合,生成的彩色 3D 地形图,即地貌晕渲图。 Arguments: { "RasterFunctionName" : "ShadedRelief", "RasterFunctionArguments" : { "Azimuth" : , // double (e.g. 215.0) "Altitude" : , // double (e.g. 75.0) "ZFactor" : // double (e.g. 0.3) "Colormap" : [ // [integer, integer, integer, integer] [, , , ], [, , , ], [, , , ], ] }, "VariableName" : "Raster" } 注意:Azimuth(太阳方位角)的范围是 0 到 360(度)。Altitude(太阳高度角)的 范围是 0 到 90(度)。ZFactor(缩放因子)表示一个缩放比例,用于对表面进行垂直夸 张,以提升可视化效果。Colormap 中像素值的大小范围是 0 到 255。 3.1.5.5.6 Slope Slope(坡度)表示 DEM 中每个单元格的高程变化率。 Arguments: { "RasterFunctionName" : "Slope", "RasterFunctionArguments" : { "ZFactor" : // double (e.g. 0.3) }, "VariableName" : "DEM" } 注意:ZFactor(缩放因子)表示一个缩放比例,用于对表面进行垂直夸张,以提升 可视化效果。 3.1.5.5.7 Statistics Statistics(统计)函数计算影像(基于已定义的焦点邻域)每个像素的焦点统计值。 Arguments: { - 42 - "RasterFunctionName" : "Statistics", "RasterFunctionArguments" : { "Type" : "", "KernelColumns" : , // integer (e.g. 3) "KernelRows" : // integer (e.g. 3) }, "VariableName" : "Raster" } 注意:典型做法是为 KernalColumns 和 KernalRows 设置相同的整数值。 3.1.5.5.8 Stretch Stretch(拉伸)函数通过改变亮度、对比度、反差系数(gamma)等多种拉伸类型 设置影像的属性,从而对影像进行增强。 Arguments: { "RasterFunctionName" : "Stretch", "RasterFunctionArguments" : { "StretchType" : , // integer (0 = None, 3 = StandardDeviation, 4 = Histogram Equalization, 5 = MinMax) "NumberOfStandardDeviations" : , // integer (e.g. 2) "Statistics" : [ // [double, double, double, double] [, , , ], [, , , ], [, , , ], ] "Gamma" : [, , ] // array of doubles }, "VariableName" : "Raster" } 注意:Statistics 中的每个数组的值只能从镶嵌数据集获得,如:  Min = ArcGISImageServiceLayer.MinValues 属性  Max = ArcGISImageServiceLayer.MaxValues 属性  Mean = ArcGISImageServiceLayer.MeanValues 属性  StandardDeviation = ArcGISImageServiceLayer.StdvValues 属性 3.1.5.6 示例代码:加载影像服务图层  XAML 方式 - 43 - 通过在 XAML 标记代码中添加 ArcGISImageServiceLayer,实现向地图中添加影像 服务图层的功能,代码如下所示:  后台代码方式 通过在后台代码(如 C#)中 创建 ArcGISImageServiceLayer 并将其添加到 Map 对象 中,实现向地图中添加影像服务图层的功能,代码如下所示: public MainPage() { InitializeComponent(); // 创建影像服务图层 ArcGISImageServiceLayer portlandImageLayer = new ArcGISImageServiceLayer(); portlandImageLayer.ID = "portlandLayer";// 指定图层ID // 指定图层URL portlandImageLayer.Url = "http://sampleserver3.arcgisonline.com/ ArcGIS/rest/services/Portland/CascadeLandsat/ImageServer"; // 设置输出图片格式 portlandImageLayer.ImageFormat = ArcGISImageServiceLayer.ImageServiceImageFormat.JPGPNG; // 将图层添加到地图中 myMap.Layers.Add(portlandImageLayer); } 3.1.6 GraphicsLayer GraphicLayer 是一种客户端图层,用于在客户端展现各种数据,如绘制的图形,查 询返回的结果等。GraphicLayer 中的数据以 Graphic 对象表示,Graphic 包含几何图形、 属性信息和符号设置,并且可以像其他界面元素一样响应用户选择和鼠标事件。关于 Graphic 更多信息,请参考 3.4 图形绘制。 GraphicLayer 定义的属性、方法、事件如下表所示: 表 3-14 GraphicLayer 类的成员 属性 说明 Clusterer 获叏或设置应用到要素上 的聚簇符号。 - 44 - Graphics 获叏或设置 Graphic 对象集合。 IsHitTestVisible 获叏或设置 GraphicLayer 包含的区域是否在点击测试时迒回 真实值。 MapTip 获叏或设置鼠标悬停在 Graphic 上方时的地图提示信息。 Renderer 获叏或设置用于生成符号的渲染器。如果指定了渲染器,则为 Graphic 设置的任何符号都将被忽略。 SelectedGraphics 选择的 Graphic 对象列表。 SelectionCount 选择集中的 Graphic 个数。 方法 说明 ClearGraphics 清除所有的 Graphic。 FromGraphics 从 Graphic 对象集合创建 GraphicLayer。 Get/SetMapTipHideDelay 获叏 /设置鼠标离开 Graphic 后地图提示隐藏的延迟时间。 Get/SetMapTipHorizontalOffset 获叏 /设置 Graphic 关联的地图提示控件的水平偏秱量。 Get/SetMapTipVerticalOffset 获叏 /设置 Graphic 关联的地图提示控件的垂直偏秱量。 Refresh 迫使重新绘制所有的 Graphic 要素。 事件 说明 MouseEnter/Leave 鼠标指针迕入 /离开 GraphicsLayer 区域时触収的事件。 MouseLeftButtonDown/Up 鼠标左键按下/松开时触収的事件。 MouseMove 鼠标指针秱劢时触収的事件。 MouseRightButtonDown/Up 鼠标右键按下/松开时触収的事件。 3.1.6.1 Graphics 集合管理 GraphicsLayer.Graphics 是 GraphicCollection 对象,包含了 GraphicsLayer 中所有的 数据。GraphicCollection 定义了如下表所示的属性、方法: 表 3-15 GraphicCollection 类的成员 属性 说明 Count 获叏集合中的元素个数。 Item 获叏或设置指定索引的元素。 - 45 - 方法 说明 Add 向集合中添加 Graphic 对象。 Clear 清空集合中的所有元素。 Contains 判断给定的元素是否包含在集合中。 CopyTo 将集合中的所有元素拷贝到数组中。 IndexOf 获叏给定元素在集合中的索引。 Insert 将 Graphic 对象揑入到集合中的指定位置。 Remove 从集合中秱除给定的 Graphic 对象。 RemoveAt 从集合中秱除指定索引处的元素。 通过 GraphicsLayer.Graphics.Clear()方法和 GraphicsLayer.ClearGraphics()方法均可清 空 Graphic 对象集合。 3.1.6.2 选择集管理 ArcGIS Silverlight API 提供一个 Editor 组件,可以通过 Editor 组件交互式管理 GraphicsLayer 的选择集。 Editor 组件提供以下属性和命令管理选择集: 表 3-16 Editor 组件提供的选择命令 属性 说明 AutoSelect 指示是否自劢选择要素。 ClearSelection 清空选择集。 DeleteSelected 删除选择的要素。 Select 选择要素。 在进行交互式选择时,支持 3 种选择模式:  添加到现有选择集(按下 Ctrl 选择 Graphic);  创建新选择集(默认模式);  从选择集移除(按下 Shift 选择 Graphic); GraphicsLayer 仅支持点选和矩形框选的选择方式。(后面讲到的 FeatureLayer 支持 - 46 - 线选和多边形选择等全部方式) GraphicsLayer 通过 SelectedGraphics 属性和 SelectionCount 属性维护选择集信息。 3.1.7 FeatureLayer FeatureLayer(要素图层)是一种特殊类型的 GraphicsLayer,可以显示 ArcGIS Server 地图服务图层中的要素,或者 ArcGIS Server 要素服务中的要素,或者将 MapIt 空间数 据服务中的表格作为要素显示。像 GraphicsLayer 一样,FeatureLayer 可以包含和显示图 形要素(由几何体和属性组成)。此外,FeatureLayer 还对以下方面提供支持:  编辑—FeatureLayer 是能够在 Web 上编辑要素的关键。包含在 ArcGIS Toolkit 库 中的编辑控件是专门为 FeatureLayer 设计的。只能在引用了要素服务的 FeatureLayer 上执行编辑操作。  定义表达式—你可能经常只需要使用满足一定属性条件的要素而忽略其他的要 素。在这种情况下,你可以在 FeatureLayer 设置一个 Where 子句来获取你需要 的要素。另外,ArcGIS Server 要素图层具有一个默认的定义表达式,这个定义 表达式来自源地图文档的查询表达式。定义了定义表达式后,你将无法获取地 图文档中不满足条件的其他要素。  时间定义—你可以使用时间条件来过滤 FeatureLayer 中的要素。比如,你只想 显示建于 1930 年以前的房子。如果你的住房图层是时态感知的,你可以定义一 个时间条件只显示修建于 1930 年以前的房子。  选择集—FeatureLayer 支持选择集,这些选择集代表了用户想要用于单独查看, 编辑或分析目的的要素子集。用户可以使用空间或属性条件向选择集中添加或 从选择集中删除要素。FeatureLayer 使得使用不同类型的符号来区别选择集非 常容易。选择集可以用来进行统计计算,GP 工具和制图,以及交互式 GIS 分 析和研究。例如,选择集允许用户在一系列建筑周围绘制一个多边形来计算这 些建筑的太阳能潜力。选择集在某些编辑流程中也扮演了重要的角色,比如只 将需要编辑的要素显示出来。你可以使用单独要素集的 Select()方法,也可以使 用 Editor 的 Select 命令来生成选择集。注意,定义了选择表达式后,你将无法 获取地图文档中不满足条件的其他要素。 下表中突出了 API 支持的 FeatureLayer 数据源: - 47 - 表 3-17 支持 FeatureLayer 的数据源 数据源 描述 ArcGIS Server 地图服务 ArcGIS Server 劢态 地图服务可以包含多个图层,每个图层通过一个明 确的 Url 来表示,返个 Url 包含的地图服务的名称,以及地图服务分 配给图层的 id。返个 Url 通常通过 ArcGIS Server 服务目彔 来获叏。 比如: http://serverapps.esri.com/ArcGIS/rest/services/California/Map Server/8 California 地图服务包含了一个 id 为 8 的图层。 ArcGIS Server 要素服务 ArcGIS Server 要素服务引用的单独的要素图层。每个图层通过一个明 确的 Url 来表示,返个 Url 包含要素服务的名称,以及要素服务分配 给图层的 id。返个 Url 通常通过 ArcGISServer 服务目彔 来获叏。比 如: http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Pet roleum/KSFields/FeatureServer/0 返个简单的服务表示了 Kansas 州的石油和天然气字段。 该要素服务包含了一个具有唯一 id 的要素图层。 当要素图层存储在 ArcSDE 数据库中时,ArcGIS Server 要素服务支持 Web 编辑。如果想要使用服务的源地图文档中的高级符号或要素模 板,请使用要素服务。 MapIt MapIt 包含了叨做 Spatial Data Service 的 REST Web Service。他提 供了访问数据库(如:SQL Server)中的表的途径。返些表可以是包 含了几何形状信息的空间表。例如: http://serverapps.esri.com/SDS/databases/Demo/dbo.USStates _Geographic. 该 Demo 数据库中包含了一个空间表 dbo.USStates_Geographic MapIt 图层现在迓丌支持编辑和时态感知。 FeatureLayer 具有几个属性可以支持 GraphicsLayer 不具备的功能。下表列出了 FeatureLayer 中的重要成员: 表 3-18 FeatureLayer 的成员 成员 描述 - 48 - Url 表示 ArcGIS Server 地图服务中的图层或宿主在 MapIt 空间数据服务中 的表的地址(参见上表中的例子)。要素图层由数据源中的要素构成。 Where 查询定义了将要显示特定图层中的哪些要素。如果没有指定该属性,将可 以获叏所有要素(“ 1=1”) OnDemandCacheSize 当 Mode = OnDemand 时,该属性定义了存储在客户端缓存中当前地图 范围以外的要素个数。当某个要素被获叏幵存储在缓存中,除非其被从缓 存中删除,否则丌需要重新从服务器上获叏该要素。缓存丌能跨 会话保留。 FeatureSymbol 该属性定义了在图层中渲染单个图形所引用的简单符号。 TimeExtent 该属性引用了要素图层中的时间点或范围。该属性由 ArcGIS Server 地图 服务或 ArcGIS Server 要素服务定义,幵且 为叧读属性。 Mode 定义了从服务中获叏要素的方式。 Snapshot(快照)模式下会在图层加载到地图以后立即获叏图层中的所有 要素。返种模式排除了从服务器获叏任何信息的需要,但是当图层的要素 过多时,会造成徆大的负担。在返种情冴下,绘制大量的要素可能会导致 浏觅器 崩溃,或者超过服务一次能够迒回的要素数量的限制(默认情冴下, ArcGIS Server 9.3.1 的限制为 500,ArcGIS Server 10 的限制为 1000, MapIt 的限制为 1000)。仅当数据集较小或处理时态数据时才使用 Snapshot 模式。 On Demand(按需)模式将会按需获叏要素,叧迒回 当前可规范围内的 要素。On Demand 模式需要在服务器和客户端迕行多次通信, 丌适合显 示时态劢画数据。然而,返种模式保证你丌会获叏超过你的需求的要素。 Selection Only(选择集)模式在初始情冴下丌会获叏任何要素。叧有在 生成了选择集的情冴下才会添加要素。返种模式在你丌想将 所有要素加载 到客户端,而叧想突出显示一个或某些要素时非常有用。多数情冴下 返种 模式会和劢态地图服务图层联合使用,用来显示某个位置上选择的要素。 SelectionColor 该属性定义了一种颜色或可规状态来显示要素图层中选择的要素图形。注 意每个图形要素都有一个 Selected 属 性。而 SelectedGraphics 和 SelectionCount 属性(继承自 GraphicsLayer)将迒回所选图形的信息。 DisableClientCaching 默认情冴下,要素图层会使用浏觅器缓存来提高性能。 如果要素图层中的 要素収生改变,幵且你想立即在客户端看到返些变化 ,请将该属性设置为 true。 Update() 该方法会重新查询要素图层中的数据。如果图层或表格在服务器端迕行了 更新,通过调用该方法,可以立即在客户端看到返些变化。注意,返种情 冴下你丌能启用客户端缓存。 - 49 - 3.1.7.1 添加要素图层 就像 GraphicsLayer 一样,通常会在 XAML 中声明 FeatureLayer。FeatureLayer 应当 位于地图控件中所有底图图层之上。如下所示: Url 属性定义了 Feature layer 所使用的地图服务图层。你可以从 ArcGISServer 服务 目录中查找服务的 URL,下面的代码指定了 ESRI_StatesCitiesRivers_USA 服务中的城市 图层(cities)。 3.1.7.2 要素过滤 Where 属性定义了一个应用于地图服务图层的过滤条件。只有当要素的属性符合过 滤条件时才会进行绘制。下面的过滤条件指定了 Feature layer 中的 POP1990 字段值大于 75000 的要素,这将过滤出 1990 年人口大于 75000 的城市。注意,如果你想显示特定图 层中的所有要素,将过滤条件表达式定义为永远为 true,例如“1=1”。 - 50 - 3.1.7.3 设置要素符号 FeatureSymbol 属性定义了图层中所有要素的符号。为了指定该属性,首先需要声 明一个 Symbol。例如,你可以在资源中定义一个绿色的菱形标记符号: 现在你可以使用这个标记符号来指定 FeatureSymbol 属性。注意当绑定符号属性时 需要使用 x:Name: 如果运行该应用程序,你将看到美国所有的 1990 年人口大于 75000 的城市被渲染 成绿色的菱形符号,如下图所示。 图 3-7 FeatureSymbol - 51 - 呃,为什么完全一样的代码就是看不见符号效果呢?这个问题曾经也困扰着编者。 事实上,在 FeatureLayer 初始化的过程中,如果要素服务定义了符号化渲染 (Renderer),而你没有定义(未设置 Renderer 属性,或者将其设置为 null),则要素服 务中定义的 Renderer 将成为 FeatureLayer 中的 Renderer 属性值,通过监听图层初始化完 成事件,可以证明上述说法,如下图所示: 图 3-8 通过 Debug 发现 Renderer 属性已经被设置 而问题的关键在于,Renderer 属性的优先级要高于 FeatureSymbol 属性!所以,真 相就是,我们设置的 FeatureSymbol 被要素服务自带的 Renderer 给覆盖了! 由此我们就推断出解决问题的办法:在图层初始化完成之后,将 FeatureLayer 的 Renderer 属性设为 null,事实证明该方法确实可行。代码如下所示: XAML 代码只需为 FeatureLayer 添加 Initialized 事件处理函数即可,下面是该事件 处理函数代码: private void FeatureLayer_Initialized(object sender, EventArgs e) { FeatureLayer featureLayer = Map.Layers[1] as FeatureLayer; featureLayer.Renderer = null;//Renderer不发飙,FeatureSymbol称王 } - 52 - 除此之外,还可以通过为 FeatureLayer 指定 Renderer 的方式,例如指定 SimpleRenderer 引用我们定义菱形标记符号,同样可以实现显示我们自定义要素符号的 需求(要素服务的 Renderer 就无法覆盖要素符号了)。感兴趣的同学可以自己试试,这 里就不再赘述。 虽然最终设置要素符号成功,但是通过这种方式显示这些城市有两个问题。首先, 许多地区的城市点符号有压盖现象,导致无法看清楚显示的城市数量。其次,图上显示 了相当多的图形。如果运行应用程序的计算机的处理能力不足,绘制过多的图形还会导 致性能问题。 这些问题可以通过设置 FeatureLayer 的 Clusterer 属性,聚合要素以得到更友好的界 面和用户体验。XAML 代码如下(C#后台代码不变): 像上面这种情况,使用聚合效果可以将大量的点图形聚合成比较少的点,每个点上 显示所聚合的点的个数。对点图形进行聚合后,城市图层会显示成如下图所示效果。 - 53 - 图 3-9 进行点聚合后的效果 3.1.7.4 指定输出字段 还可以通过 OutFields 属性指定 FeatureLayer 中的图形所包含的字段。这里指定的字 段的值可以通过 Silverlight 将其绑定到 MapTips、InfoWindow 控件或其他数据控件(如: DataGrid)上进行显示。 说明:直接通过由逗号分隔的字段名列表,即可指定输出字段。 3.1.8 ElementLayer ElementLayer 是一种客户端图层,用于放置 UI 界面元素。放置在 ElementLayer 中 的元素可随地图平移、缩放。 3.1.8.1 定义的属性、方法、事件 表 3-19 ElementLayer 类的成员 属性 说明 Children 获叏图层中的元素 集合。 - 54 - 方法 说明 GetEnvelope 获叏指定对象的 ElementLayer.Envelope 值。 SetEnvelope 设置指定对象的 ElementLayer.Envelope 值。该值定义元素对象在地图上的空间 位置。 3.1.8.2 示例代码:添加元素图层  XAML 方式 通过在XAML标记代码中添加ElementLayer并将Silverlight中的 UI元素如 Button、 TextBox等添加到 ElementLayer 的Children集合中,实现向地图中添加元素图层的功能, 代码如下所示: Measure 显示距离,半径 和面积的测量 值 PanTo 平秱到指定的 geometry Redline 在地图上绘制图 形,幵将其添加 GraphicsLaye r 中 - 79 - SpatialQuery 通过在地图上绘 制图形查询要 素图层中的要 素,幵将返些要 素绘制到 Graphics Layer 中 ToggleLayer 切换图层的可见 性 UpdateFeature 刷新 Featurelayer 中的内容 ZoomTo 缩放到某个 geometry,如 果 geometry 对象是点,则会 将地图平秱到 该点上。 ZoomToFullExtent 缩放到所有图层 的最大范围 - 80 - ZoomToLayer 缩放到指定图层 的范围 3.4 图形绘制 图形绘制首先需要创建一个 GraphicsLayer,然后将 Graphic 添加上去以显示数据。 多数情况下,你将由通过执行查询返回的结果、在地图上绘制图形等方式得到的几何体 生成 Graphic。添加 Graphic 的主要步骤包括: 1) 获取添加 Graphic 的目标 GraphicsLayer; 2) 创建或者获取 Graphic; 3) 设置 Graphic 的 Geometry 属性; 4) 为 Graphic 应用符号; 5) 将 Graphic 添加到 GraphicsLayer。 下文将介绍 Graphic、Geometry 和 Draw 对象,Symbol 将在下一节进行介绍。 3.4.1 Graphic Graphic 对象表示可以在 GraphicsLayer 上绘制的要素,同时 FeatureLayer 中的要素、 几何服务操作的参数等大多以 Graphic 对象来表示。 Graphic 对象主要成员如下表所示: 表 3-36 Graphic 主要成员 属性 说明 Attributes 要素的属性字典(key-value,key 是属性名称,value 是属性值)。 Geometry 获叏或设置要素的图形几何体。 MapTip 获叏或设置当鼠标悬停在要素上方时显示的地图提示。 Selected 获叏或设置要素是否被选中。 - 81 - Symbol 获叏或设置用于渲染当前要素的符号。 TimeExtent 获叏或设置当前要素的时间范围。 方法 说明 Select/UnSelect 选择/叏消选择当前要素。 事件 说明 AttributeValueChanged 当前要素属性収生变化时触収的事件 。 MouseEnter/MouseLeave MouseLeftButtonDown MouseLeftButtonUp MouseMove MouseRightButtonDown MouseRightButtonUp 鼠标相关事件。 3.4.2 Geometry 几何体对象用于表示要素的图形,如点、线、矩形、多边形等,几何体对象结构如 下图所示: 图 3-23 Geometry 对象结构 几何体主要对象说明如下表: 表 3-37 Geometry 类型说明 - 82 - 几何体 说明 Geometry 抽象类,定义几何体的图形。 MapPoint 点对象。 MultiPoint 多点对象。 Polyline 多义线对象,由路径(Path)组合而成。 Envelope 矩形对象,长宽方向分别平行于 X、Y 轴。 Polygon 多边形对象,由环(Ring)组合而成。 3.4.3 Draw Draw 是绘图工具,主要用于在地图上绘制 Graphic。 Draw 对象的主要属性、方法、事件如下表所示: 表 3-38 Draw 主要成员 属性 说明 DrawMode 获叏或设置绘图工具的绘制模式。 FillSymbol 获叏或设 置绘制面状图形(多边形、矩形)时使用的符号。 IsEnabled 获叏或设置一个值指示 绘图工具是否可用。 LineSymbol 获叏或设置绘制线状图形时使用的符号。 Map 获叏或设置绘图工具绘制的地图(可以理解为画布)。 方法 说明 AddVertex 添加节点。 CompleteDraw 完成绘制操作。 UndoLastVertex 撤销最后一个节点。 事件 说明 DrawBegin 绘制操作开始前触収的事件。 DrawComplete 绘制操作结束时触収的事件。 VertexAdded 添加节点后触収的事件。 - 83 - DrawMode 枚举的成员及说明如下表所示: 表 3-39 DrawMode 枚举成员 DrawMode 说明 Freehand 设置自由绘制模式。 None 禁用绘制模式。 Point 设置点绘制模式,单击在地图上添加点。 Polygon 设置多边形绘制模式。 Polyline 设置线绘制模式。 Rectangle 设置矩形绘制模式。 Arrow 设置箭头(几何体是多边形)绘制模式。注:v2.2 beta 新增。 Circle 设置圆形(几何体是多边形)绘制模式。注:v2.2 beta 新增。 Ellipse 设置椭圆(几何体是多边形)绘制模式。注:v2.2 beta 新增。 Triangle 设置三角形(几何体是多边形)绘制模式。注:v2.2 beta 新增。 3.4.4 示例:绘制图形  XAML 代码: - 84 -