• 概述
  • 入门指导
  • API参考
  • 代码示例
Silverlight API简介
        ArcGIS API for Silverlight用于在Silverlight平台上开发WebGIS应用的一套编程接口。ArcGIS API for Silverlight通过REST接口访问ArcGIS Server发布的地图服务、影像服务、几何服务、地理处理服务、要素服务、网络服务等,还可以访问OGC标准的WMS、WFS、WCS等服务,也可以访问Bing地图服务。主要功能包括加载地图服务或影像服务,展示服务数据;计算最优路径、临近设施和服务区域;基于属性和空间位置进行查询,支持关联查询;提供对图形进行符号化和对要素图层生成专题图的功能等。

天地图·四川 Silverlight JavaScript API具有如下特点:
1、开发简单快捷。
2、地图支持弹簧动画(地图缩放、平移等操作具有连续性)。
3、支持将任何界面元素(控件)作为地图要素,随地图缩放,支持要素按簇显示,提高显示性能和效果。
4、地图符号支持多种动画效果,地图更生动。
5、支持在客户端直接生成热点图,媒体元素(如视频)作为地图要素的符号。


功能介绍
  • 基础地图服务在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
  • 图层管理在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
  • 地图标绘在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
  • 路径导航在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
  • 地图工具在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
  • 地名搜索在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
silverlight 介绍
        微软SilverLight是一个跨浏览器、跨客户平台的技术,能够设计、开发和发布有多媒体体验与富交互(RIA,Rich Interface Application)的网络交互程序。 因为SilverLight提供了一个强大的平台,能够开发出具有专业图形、音频和视频的Web应用程序,增强了用户体验,所以SilverLight吸引了设计人员和开发人员的眼球。同时,SilverLight还提供了强大的工具来提高他们的工作效率。
silverlight 特点
        1. 在Web上提供丰富的用户体验
                * 空前的富媒体体验以及网络应用。
                * 强大的基于向量的图形。
                * 无敌的从Mobile到HD质量的视频以及音频。
                * 在有硬件加速支持下,最高达15倍的视频编码速度。
                * 移动设备支持。
        2. 快速,更具生产力的开发
                * 集成现有的网络开发技术及资源。
                * Web以及桌面一致的表现层,保证了开发的低成本性。
                * 基于标准的可验证的开发技术。
                * 为开发人员以及设计人员提供了广泛的工具支持,并且建立了相应的开发设计生态圈 。
        3. 快速部署
                * 简单按需安装的SilverLight浏览器插件 。
                * 灵活的基于视频及动画的广告嵌入方案。
                * 低成本的流媒体解决方案,基于荣获艾美奖荣誉的Windows Media技术。
                * 内容访问保护技术 。
                * 在Microsoft Expression Media Encoder的支持下,加速编码并且发布基于视频的体验 。
开发工具
        可以使用已经具有的技能和熟悉的工具来创建基于Silverlight的应用程序,在Web页面中,既可以使用HTML,也可以使用Silverlight的WPF元素,和HTML一样,在Web应用程序中XAML同样可以使用声明的标记来创建用户界面,不同的是,XAML提供了更强大的元素。
        可以使用强大的Visual Studio codename "Orcas" Beta1创建Silverlight应用。(Silverlight在编号为“Orcas”Visual Studio Beta1的IDE中作为一个插件而得到支持。)同样Visual Studio为Silverlight提供了开发工具,比如.NET Framework中已经为创建应用程序提供的强大的编辑器、项目管理、调试等等。
        设计人员可以轻松的拥有使用Expression Studio进行设计、编译和发布Silverlight应用程序。Expression Studio有创建图像、媒体,设计交互和产生体验需要的一切能力。Expression Blend能够生成XAML进行输出,这样使用Visual Studio的程序员和使用Expression Blend的设计人员可以共享同样的文件。
hello world

XAML关键代码

                     
                     <esri:Map x:Name="MyMap" IsLogoVisible="False">
                         
                         <scgc:TileLayer ID="MyTileMap" 
                         Url="http://www.scgis.net.cn/imap/iMapServer/DefaultRest/services/SCTileMap/mapserver"/>
                     </esri:Map>
            

代码解析

使用XAML语言添加地图控制,并在该标签对中添加天地图四川地图瓦片层。在使用天地图四川SilverLight之前,请下载天地图四川SilverLight开发包

C#关键代码

                private void Init()
                {
                    //声明地图图层对象
                    SCGC.iMap.Client.TileLayer layer = MyMap.Layers["MyTileMap"] as SCGC.iMap.Client.TileLayer;
                    //设置图层访问令牌
                    layer.Token = "-pxvYt1zsn3NWaFKnNvWv-6md1BiBVZIVzWFtYJBJhKp4gdrwhrOQn28tbtc87EW";
                }
        

代码解析

声明一个地图图层对象,将地图访问令牌字符串赋给该地图图层。声明一个访问服务的令牌(token),详细信息参见常见问题

XAML完整代码

                     <UserControl x:Class="SLSampleDemo.MainPage"
                        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                        xmlns:esri="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client"
                        xmlns:scgc="clr-namespace:SCGC.iMap.Client;assembly=SCGC.iMap.Client"
                        mc:Ignorable="d"
                        d:DesignHeight="400" d:DesignWidth="800" Loaded="UserControl_Loaded">
                        
                        <esri:Map x:Name="MyMap" IsLogoVisible="False">
                            
                            <scgc:TileLayer ID="MyTileMap" 
                            Url="http://www.scgis.net.cn/imap/iMapServer/DefaultRest/services/SCTileMap/mapserver"/>
                        </esri:Map>
                    </UserControl>
        

C#完整代码

                using System;
                using System.Collections.Generic;
                using System.Linq;
                using System.Net;
                using System.Windows;
                using System.Windows.Controls;
                using System.Windows.Documents;
                using System.Windows.Input;
                using System.Windows.Media;
                using System.Windows.Media.Animation;
                using System.Windows.Shapes;

                namespace SLSampleDemo
                {
                    public partial class MainPage : UserControl
                    {
                        public MainPage()
                        {
                            InitializeComponent();
                        }

                        private void UserControl_Loaded(object sender, RoutedEventArgs e)
                        {
                            //声明地图图层对象
                            SCGC.iMap.Client.TileLayer layer = MyMap.Layers["MyTileMap"] 
                                                               as SCGC.iMap.Client.TileLayer;
                            //设置图层访问令牌
                            layer.Token = "-pxvYt1zsn3NWaFKnNvWv39kQtowEoBOOtet8icLUd_-oRWPAX7mc5UIoHauLtOR";
                        }
                    }
                }
              

Silverlight API 参考



TileLayer 类

此类主要用于加载四川省基础地理中心发布的REST风格的切片地图服务。


构造函数


构造函数说明参数说明
TileLayer() 创建一个切片图层的实例

属性


属性说明
Token 获取或设置token,当访问令牌失效后重新设置令牌。

事件

调用控件触发的事件,如token过期等。具体使用方法都一样,参见如下:


事件说明原型
OnTokenExpired

当访问令牌失效后所触发的事件。

public delegate void TokenExpiredHandler(object sender,TokenExpiredEventArgs args);

OnServiceInvalidate

服务不存在或调用的服务停止等触发的事件。

public delegate void ServiceInvalidateHandler(object sender,ServiceInvalidateEventArgs args);

OnRequestFailed

远程主机不存在或不可以到达等触发的事件。

public delegate void RequestFailedHandler(object sender,RequestFailedEventArgs args);

OnUnknownException

未知的错误,除去上述事件外的所有错误事件都会触发此事件。

public delegate void UnknownExceptionHandler(object sender,UnknownExceptionEventArgs args);



NameSearchTask 类

用于调用检索地名地址的服务。


枚举


枚举类型说明

QueryTypes.Meta

返回服务查询的元数据。

QueryTypes.Data

返回服务查询的数据。

QueryTypes.Count

返回查询数据的总个数和最大能返回的数据个数。


构造函数


构造函数说明参数说明
public NameSearchTask() 创建一个检索地名地址的实例

方法


方法返回值说明参数说明
Execute()、Execute(TasksCallback callback) void 此函数会自动调用远程服务器的REST服务进行数据查询,将服务器的查询结果返回给客户端,如果有回调函数则调用回调函数。 如下:
callback:TasksCallback(可选)
   - 回调函数。
   - 函数原型:
     public delegate void TasksCallback(object value);     
               

属性


属性说明
Url 必选,获取或设置服务地址。
Token 可选(如果服务加密则必选),获取或设置访问令牌。
Keywords 必选,获取或设置查询关键词。
QueryType 必选,获取或设置查询的类型,参看枚举类型。
StatePAC 可选,获取或设置地市州的PAC,具体可参考服务的元数据。
CountyPAC 可选,获取或设置区县的PAC,具体可参考服务的元数据。
TypeCode 可选,获取或设置搜索的类型,如'政府'的为'zf',具体可参考服务的元数据。
IsOnlyName 可选,获取或设置是否只输出地名,具体可参考服务的元数据。
SearchEnvelope 可选,获取或设置查询的范围。
StartIndex 可选,获取或设置查询的开始索引值。
StopIndex 可选,获取或设置查询的最大索引值,默认为50。

事件

控件会触发的事件,如token过期等。具体参见如下:


事件说明原型

OnRequestComplete

服务调用成功所触发的事件。

public delegate void RequestCompleteHandler(object sender, object info);

OnRequestFailed

服务调用失败所触发的事件。

public delegate void RequestFailedHandler(object sender,RequestFailedEventArgs args);



BufferSearchTask 类

用于调用检索地名地址的服务。


枚举


枚举类型说明

QueryTypes.Meta

返回服务查询的元数据。

QueryTypes.Data

返回服务查询的数据。

QueryTypes.Count

返回查询数据的总个数和最大能返回的数据个数。


构造函数


构造函数说明参数说明
public BufferSearchTask() 创建一个检索地名地址的实例

方法


方法返回值说明参数说明
Execute()、Execute(TasksCallback callback) void 此函数会自动调用远程服务器的REST服务进行数据查询,将服务器的查询结果返回给客户端,如果有回调函数则调用回调函数。 如下:
callback:TasksCallback(可选)
   - 回调函数。
   - 函数原型:
     public delegate void TasksCallback(object value);     
               

属性


属性说明
Url 必选,获取或设置服务地址。
Token 可选(如果服务加密则必选),获取或设置访问令牌。
Keywords 必选,获取或设置查询关键词。
QueryType 必选,获取或设置查询的类型,参看枚举类型。
Center 必选,获取或设置查询的中心点。
Radius 必选,获取或设置查询的半径。
TypeCode 可选,获取或设置搜索的类型,如'政府'的为'zf',具体可参考服务的元数据。
StartIndex 可选,获取或设置查询的开始索引值。
StopIndex 可选,获取或设置查询的最大索引值,默认为50。

事件

控件会触发的事件。具体参见如下:


事件说明原型

OnRequestComplete

服务调用成功所触发的事件。

public delegate void RequestCompleteHandler(object sender, object info);

OnRequestFailed

服务调用失败所触发的事件。

public delegate void RequestFailedHandler(object sender,RequestFailedEventArgs args);



PathAnalysisTask 类

用于调用路径分析的服务。


枚举


枚举类型说明

QueryTypes.Meta

返回服务查询的元数据。

QueryTypes.Data

返回服务查询的数据。


构造函数


构造函数说明参数说明
public PathAnalysisTask() 创建一个检索地名地址的实例

方法


方法返回值说明参数说明
Execute()、Execute(TasksCallback callback) void 此函数会自动调用远程服务器的REST服务进行数据查询,将服务器的查询结果返回给客户端,如果有回调函数则调用回调函数。 如下:
callback:TasksCallback(可选)
   - 回调函数。
   - 函数原型:
     public delegate void TasksCallback(object value);     
               

属性


属性说明
Url 必选,获取或设置服务地址。
Token 可选(如果服务加密则必选),获取或设置访问令牌。
PowerColumn 必选,获取或设置路径分析的权,权重类型查看服务元数据。
QueryType 必选,获取或设置查询的类型,参看枚举类型。
Start 必选,获取或设置开始坐标。
Stop 必选,获取或设置终点坐标。
IsOutputDirection 可选,获取或设置是否输出文本描述,默认为false。
ViaPoints 可选,获取或设置途经点。
BarriePoints 可选,获取或设置障碍点。

事件

控件会触发的事件。具体参见如下:


事件说明原型

OnRequestComplete

服务调用成功所触发的事件。

public delegate void RequestCompleteHandler(object sender, object info);

OnRequestFailed

服务调用失败所触发的事件。

public delegate void RequestFailedHandler(object sender,RequestFailedEventArgs args);



DataSearchTask 类

用于调用要素查询的服务。


枚举


枚举类型说明

QueryTypes.Meta

返回服务查询的元数据。

QueryTypes.Data

返回服务查询的数据。

SpatialRels.None

没有任何空间关系。

SpatialRels.SpatialRelIntersects

Intersects。

SpatialRels.SpatialRelContains

Contains。

SpatialRels.SpatialRelOverlaps

Overlaps。

SpatialRels.SpatialRelWithin

Within。


构造函数


构造函数说明参数说明
public DataSearchTask() 创建一个检索地名地址的实例

方法


方法返回值说明参数说明
Execute()、Execute(TasksCallback callback) void 此函数会自动调用远程服务器的REST服务进行数据查询,将服务器的查询结果返回给客户端,如果有回调函数则调用回调函数。 如下:
callback:TasksCallback(可选)
   - 回调函数。
   - 函数原型:
     public delegate void TasksCallback(object value);     
               

属性


属性说明
Url 必选,获取或设置服务地址。
Token 可选(如果服务加密则必选),获取或设置访问令牌。
LayerId 必选,获取或设置查询的图层的ID,具体图层ID参考服务的元数据。
QueryType 必选,获取或设置查询的类型,参看枚举类型。
Geometry 可选,获取或设置过滤的几何要素。
SpatialRel 可选,获取或设置要查询的要素和输入的几何要素(Geometry)的空间关系,具体查看枚举类型里面的列举类型。
Radius 可选,获取或设置缓冲区半径,为null表示不进行缓冲区分析。
WhereClause 可选,获取或设置查询条件。
ReturnGeometry 可选,获取或设置是否返回几何对象,默认为true(null)。
OutFields 可选,获取或设置输出的列的名,为空表示全部输出。

事件

控件会触发的事件。具体参见如下:


事件说明原型

OnRequestComplete

服务调用成功所触发的事件。

public delegate void RequestCompleteHandler(object sender, object info);

OnRequestFailed

服务调用失败所触发的事件。

public delegate void RequestFailedHandler(object sender,RequestFailedEventArgs args);

Silverlight API 示例



iMap Hello World

XAML关键代码


                     
                     <esri:Map x:Name="MyMap" IsLogoVisible="False">
                         
                         <scgc:TileLayer ID="MyTileMap" 
                         Url="http://www.scgis.net.cn/imap/iMapServer/DefaultRest/services/SCTileMap/mapserver"/>
                     </esri:Map>
            

代码解析


使用XAML语言添加地图控制,并在该标签对中添加天地图四川地图瓦片层。在使用天地图四川SilverLight之前,请下载天地图四川SilverLight开发包

C#关键代码


                private void Init()
                {
                    //声明地图图层对象
                    SCGC.iMap.Client.TileLayer layer = MyMap.Layers["MyTileMap"] as SCGC.iMap.Client.TileLayer;
                    //设置图层访问令牌
                    layer.Token = "-pxvYt1zsn3NWaFKnNvWv-6md1BiBVZIVzWFtYJBJhKp4gdrwhrOQn28tbtc87EW";
                }
        

代码解析


声明一个地图图层对象,将地图访问令牌字符串赋给该地图图层。声明一个访问服务的令牌(token),详细信息参见常见问题

XAML完整代码


                     <UserControl x:Class="SLSampleDemo.MainPage"
                        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                        xmlns:esri="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client"
                        xmlns:scgc="clr-namespace:SCGC.iMap.Client;assembly=SCGC.iMap.Client"
                        mc:Ignorable="d"
                        d:DesignHeight="400" d:DesignWidth="800" Loaded="UserControl_Loaded">
                        
                        <esri:Map x:Name="MyMap" IsLogoVisible="False">
                            
                            <scgc:TileLayer ID="MyTileMap" 
                            Url="http://www.scgis.net.cn/imap/iMapServer/DefaultRest/services/SCTileMap/mapserver"/>
                        </esri:Map>
                    </UserControl>
        

C#完整代码


                using System;
                using System.Collections.Generic;
                using System.Linq;
                using System.Net;
                using System.Windows;
                using System.Windows.Controls;
                using System.Windows.Documents;
                using System.Windows.Input;
                using System.Windows.Media;
                using System.Windows.Media.Animation;
                using System.Windows.Shapes;

                namespace SLSampleDemo
                {
                    public partial class MainPage : UserControl
                    {
                        public MainPage()
                        {
                            InitializeComponent();
                        }

                        private void UserControl_Loaded(object sender, RoutedEventArgs e)
                        {
                            //声明地图图层对象
                            SCGC.iMap.Client.TileLayer layer = MyMap.Layers["MyTileMap"] 
                                                               as SCGC.iMap.Client.TileLayer;
                            //设置图层访问令牌
                            layer.Token = "-pxvYt1zsn3NWaFKnNvWv39kQtowEoBOOtet8icLUd_-oRWPAX7mc5UIoHauLtOR";
                        }
                    }
                }
        

运行代码



地名搜索服务

XAML关键代码


                        <!--添加地图控制-->
                        <esri:Map x:Name="MyMap" IsLogoVisible="False" Margin="1">
                            <!--添加天地图四川地图瓦片层-->
                            <scgc:TileLayer ID="myTileMap" 
                                Url="http://www.scgis.net.cn/imap/iMapServer/DefaultRest/services/SCTileMap/mapserver" />
                            <!--添加图形层-->
                            <esri:GraphicsLayer ID="myGraLayer"/>
                        </esri:Map>
                  

代码解析


使用XAML语言添加地图控制,并在该标签对中添加天地图四川地图瓦片层及图形层。图形层用于添加图片或点,线,面矢量图形。在使用天地图四川SilverLight之前,请下载天地图四川SilverLight开发包

C#关键代码


                        //声明地图图层对象 
                        SCGC.iMap.Client.TileLayer layer = MyMap.Layers["myTileMap"] as SCGC.iMap.Client.TileLayer;
                        //设置图层访问令牌 
                        layer.Token = "-pxvYt1zsn3NWaFKnNvWv59lai_izMn8MAN5oeYSklJDuoL_j6zjbz6zRm1FDRas";
                        //设置地图瓦片显示范围
                        MyMap.Extent = new ESRI.ArcGIS.Client.Geometry.Envelope(103.992, 30.58, 104.081, 30.636);
                        //使用天地图四川地名搜索类申明一个对象,并设置参数
                        SCGC.iMap.Client.Tasks.NameSearchTask nt = new NameSearchTask()
                        {
                            QueryType = NameSearchTask.QueryTypes.Data, //查询的数据的类型 
                            Url = "http://www.scgis.net.cn/iMap/iMapServer/DefaultRest/services/scNameSearch/", //查询服务的地址 
                            Token = "-pxvYt1zsn3NWaFKnNvWvyG20fREgTpXrcm92sFSjIoCuEGjKFTRNXa4zcI0fHlj", //查询服务的访问令牌
                            CountyPAC = "510107", //市级的行政区代码(5101为成都市) 
                            StatePAC = "5101", //县级的行政区划代码(510107为武侯区) 
                            Keywords = "医院", //要查询关键字 
                            StartIndex = 0, //返回的数据的开始的索引值 
                            StopIndex = 12, //返回的数据的结束的索引值 
                            TypeCode = "yl" //要查询的类型(yl为医院) 
                        };
                   

代码解析


使用地名搜索类NameSearchTask可获得全省73万条地名点数据信息。声明一个访问服务的令牌(token),详细信息参见常见问题

XAML完整代码


                         <UserControl x:Class="SLSampleDemo.namesearchTest"
                            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                            xmlns:esri="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client"
                            xmlns:scgc="clr-namespace:SCGC.iMap.Client;assembly=SCGC.iMap.Client"
                            mc:Ignorable="d"
                            d:DesignHeight="300" d:DesignWidth="400" Loaded="Page_Loaded"> 
                            <Grid x:Name="LayoutRoot" Background="White">
                                <!--添加地图控制-->
                                <esri:Map x:Name="MyMap" IsLogoVisible="False" Margin="1">
                                    <!--添加天地图四川地图瓦片层-->
                                    <scgc:TileLayer ID="myTileMap" Url="http://www.scgis.net.cn/imap/iMapServer/DefaultRest/services/SCTileMap/mapserver">
                                    <!--添加图形层-->
                                    <esri:GraphicsLayer ID="myGraLayer"/>
                                </esri:Map>
                         
                            </Grid>
                        </UserControl>

                   

C#完整代码


                        using System;
                        using System.Collections.Generic;
                        using System.Linq;
                        using System.Net;
                        using System.Windows;
                        using System.Windows.Controls;
                        using System.Windows.Documents;
                        using System.Windows.Input;
                        using System.Windows.Media;
                        using System.Windows.Media.Animation;
                        using System.Windows.Shapes;
                        using System.Windows.Navigation;
                        using SCGC.iMap.Client.Tasks;
                        using SCGC.iMap.Client.Tasks.Json.NameSearch;
                        using SCGC.iMap.Client.Tasks.Json.SearchBase;
                        using System.Windows.Media.Imaging;

                        namespace SLSampleDemo
                        {
                            public partial class namesearchTest : UserControl
                            {
                                public namesearchTest()
                                {
                                    InitializeComponent();
                                }

                                private void Page_Loaded(object sender, RoutedEventArgs e)
                                {
                                    //声明地图图层对象 
                                    SCGC.iMap.Client.TileLayer layer = MyMap.Layers["myTileMap"] as SCGC.iMap.Client.TileLayer;
                                    //设置图层访问令牌 
                                    layer.Token = "-pxvYt1zsn3NWaFKnNvWv0_6CupvWrt8wBeUwFhS9ak6fliqF8ig5R6JT9yIsu2y";
                                    //设置地图瓦片显示范围
                                    MyMap.Extent = new ESRI.ArcGIS.Client.Geometry.Envelope(103.992, 30.58, 104.081, 30.636);
                                    //使用天地图四川地名搜索类申明一个对象,并设置参数
                                    SCGC.iMap.Client.Tasks.NameSearchTask nt = new NameSearchTask()
                                    {
                                        QueryType = NameSearchTask.QueryTypes.Data, //查询的数据的类型 
                                        Url = "http://www.scgis.net.cn/iMap/iMapServer/DefaultRest/services/scNameSearch/", //查询服务的地址 
                                        Token = "-pxvYt1zsn3NWaFKnNvWvxJCQUZe5ytGQhAzPsEgS9DNNw_h4vF4BaFqnKDH6r_x", //查询服务的访问令牌
                                        CountyPAC = "510107", //市级的行政区代码(5101为成都市) 
                                        StatePAC = "5101", //县级的行政区划代码(510107为武侯区) 
                                        Keywords = "医院", //要查询关键字 
                                        StartIndex = 0, //返回的数据的开始的索引值 
                                        StopIndex = 12, //返回的数据的结束的索引值 
                                        TypeCode = "yl" //要查询的类型(yl为医院) 
                                    };
                                    //请求成功后开始加载数据在地图上的显示,设置在OnDataSuccess函数中
                                    nt.OnRequestComplete += OnDataSuccess;
                                    nt.Execute();
                                }

                                private void OnDataSuccess(object sender, object info)
                                {
                                    //声明图形图层对象(用于放置图形要素) 
                                    ESRI.ArcGIS.Client.GraphicsLayer graLayer = MyMap.Layers["myGraLayer"] as ESRI.ArcGIS.Client.GraphicsLayer;
                                    //设置返回的JSON数据
                                    SuccessJsonNS<SuccessDataMsgNS> sjn = info as SuccessJsonNS<SuccessDataMsgNS>;
                                    //设置图片样式
                                    BitmapImage image = new BitmapImage();
                                    image.CreateOptions = BitmapCreateOptions.None;
                                    image.UriSource = new Uri(@"assets/images/end.png", UriKind.RelativeOrAbsolute);
                                    ESRI.ArcGIS.Client.Symbols.PictureMarkerSymbol pms = new ESRI.ArcGIS.Client.Symbols.PictureMarkerSymbol()
                                    {
                                        Source = image,
                                        Width = 40,
                                        Height = 40,
                                        OffsetX = 13,
                                        OffsetY = 40
                                    };
                                    //遍历返回的数据,将图片样式添加给每个数据
                                    sjn.Message.Features.ForEach(item =>
                                    {
                                        ESRI.ArcGIS.Client.Graphic gra = new ESRI.ArcGIS.Client.Graphic()
                                        {
                                           Geometry = new ESRI.ArcGIS.Client.Geometry.MapPoint(double.Parse(item.Attributes[1].ToString()), double.Parse(item.Attributes[2].ToString())),
                                           Symbol = pms 
                                        };
                                        graLayer.Graphics.Add(gra);
                                    });
                                }
                            }
                        }
                   

运行代码



路径分析服务

XAML关键代码


                        <!--添加地图控制-->
                        <esri:Map x:Name="MyMap" IsLogoVisible="False">
                            <!--添加天地图四川地图瓦片层-->
                            <scgc:TileLayer ID="myTileMap" Url="http://www.scgis.net.cn/imap/iMapServer/DefaultRest/services/SCTileMap/mapserver">
                            <!--添加图形层-->
                            <esri:GraphicsLayer ID="myGraLayer"/>
                        </esri:Map>
                  

代码解析


使用XAML语言添加地图控制,并在该标签对中添加天地图四川地图瓦片层及图形层。图形层用于添加图片或点,线,面矢量图形。在使用天地图四川SilverLight之前,请下载天地图四川SilverLight开发包

C#关键代码


                         SCGC.iMap.Client.Tasks.PathAnalysisTask pa = new PathAnalysisTask()
                        {
                            QueryType = SCGC.iMap.Client.Tasks.PathAnalysisTask.QueryTypes.Data, //返回的数据的类型 
                            Start = new ESRI.ArcGIS.Client.Geometry.MapPoint(104.0703, 30.7128), //起始点 
                            Stop = new ESRI.ArcGIS.Client.Geometry.MapPoint(104.1318, 30.6838), //终止点
                            Url = "http://www.scgis.net.cn/iMap/iMapServer/DefaultRest/services/scShortpath/", //路径分析服务的地址 
                            PowerColumn = "1", //求最短路径所使用的权值,即可根据用户的需求选择不同的路径方案。 
                            Token = "-pxvYt1zsn3NWaFKnNvWvwUErPdEcW3_24jodnAgwtxn7gZAqDHSNDNHKJECP6rC" //向服务器发出分析请求的令牌 
                        }; 
                   

代码解析


使用路径分析类PathAnalysisTask可以对四川省路网进行多种分析,并获得分析结果,参数的设定请参考路径分析服务中元数据说明。声明一个访问服务的令牌(token),详细信息参见常见问题

XAML完整代码


                        <UserControl x:Class="SLSampleDemo.shortpathTest"
                            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                            mc:Ignorable="d"
                            xmlns:esri="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client"
                            xmlns:scgc="clr-namespace:SCGC.iMap.Client;assembly=SCGC.iMap.Client"
                            d:DesignHeight="300" d:DesignWidth="400" Loaded="Page_Loaded">
                            
                            <Grid x:Name="LayoutRoot" Background="White">
                                <!--添加地图控制-->
                                <esri:Map x:Name="MyMap" IsLogoVisible="False">
                                    <!--添加天地图四川地图瓦片层-->
                                    <scgc:TileLayer ID="myTileMap" Url="http://www.scgis.net.cn/imap/iMapServer/DefaultRest/services/SCTileMap/mapserver">
                                    <!--添加图形层-->
                                    <esri:GraphicsLayer ID="myGraLayer"/>
                                </esri:Map>
                            </Grid>
                        </UserControl>
                   

C#完整代码


                        using System;
                        using System.Collections.Generic;
                        using System.Linq;
                        using System.Net;
                        using System.Windows;
                        using System.Windows.Controls;
                        using System.Windows.Documents;
                        using System.Windows.Input;
                        using System.Windows.Media;
                        using System.Windows.Media.Animation;
                        using System.Windows.Shapes;
                        using SCGC.iMap.Client.Tasks;
                        using System.Windows.Media.Imaging;
                        using SCGC.iMap.Client.Tasks.Json.PathAnalysis;

                        namespace SLSampleDemo
                        {
                            public partial class shortpathTest : UserControl
                            {
                                public shortpathTest()
                                {
                                    InitializeComponent();
                                }

                                private void Page_Loaded(object sender, RoutedEventArgs e)
                                {
                                    InitMap();
                                }

                                private void InitMap()
                                {
                                    //声明地图图层对象 
                                    SCGC.iMap.Client.TileLayer layer = MyMap.Layers["myTileMap"] as SCGC.iMap.Client.TileLayer;
                                    //设置图层访问令牌 
                                    layer.Token = "-pxvYt1zsn3NWaFKnNvWvyJtcpNULz59Szrb9-xCxCKcyk0pL8T5h68RxvJhMxCh";
                                    //设置地图瓦片显示范围
                                    MyMap.Extent = new ESRI.ArcGIS.Client.Geometry.Envelope(104.051, 30.672, 104.148, 30.728);
                                    //声明图形图层对象(用于放置图形要素) 
                                    ESRI.ArcGIS.Client.GraphicsLayer graLayer = MyMap.Layers["myGraLayer"] as ESRI.ArcGIS.Client.GraphicsLayer;
                                    //设置图片样式
                                    BitmapImage image = new BitmapImage();
                                    image.CreateOptions = BitmapCreateOptions.None;
                                    image.UriSource = new Uri(@"assets/images/vias.png", UriKind.RelativeOrAbsolute);
                                    ESRI.ArcGIS.Client.Symbols.PictureMarkerSymbol vpms = new ESRI.ArcGIS.Client.Symbols.PictureMarkerSymbol()
                                    {
                                        Source = image,
                                        Width = 64,
                                        Height = 64,
                                        OffsetX = 32,
                                        OffsetY = 64
                                    };
                                    //声明设置路径起始点并设置参数
                                    ESRI.ArcGIS.Client.Graphic startPoint = new ESRI.ArcGIS.Client.Graphic()
                                    {
                                        Geometry = new ESRI.ArcGIS.Client.Geometry.MapPoint(104.0703, 30.7128),
                                        Symbol = vpms,
                                    };
                                    //将路径起始点添加进图形层
                                    graLayer.Graphics.Add(startPoint);
                                    //声明设置路径终止点并设置参数
                                    ESRI.ArcGIS.Client.Graphic stopPoint = new ESRI.ArcGIS.Client.Graphic()
                                    {
                                        Geometry = new ESRI.ArcGIS.Client.Geometry.MapPoint(104.1318, 30.6838),
                                        Symbol = vpms,
                                    };
                                    //将路径终止点添加进图形层
                                    graLayer.Graphics.Add(stopPoint);
                                   //使用天地图四川路径分析类申明一个对象,并设置参数
                                    SCGC.iMap.Client.Tasks.PathAnalysisTask pa = new PathAnalysisTask()
                                    {
                                        QueryType = SCGC.iMap.Client.Tasks.PathAnalysisTask.QueryTypes.Data, //返回的数据的类型 
                                        Start = new ESRI.ArcGIS.Client.Geometry.MapPoint(104.0703, 30.7128), //起始点 
                                        Stop = new ESRI.ArcGIS.Client.Geometry.MapPoint(104.1318, 30.6838), //终止点
                                        Url = "http://www.scgis.net.cn/iMap/iMapServer/DefaultRest/services/scShortpath/", //路径分析服务的地址 
                                        PowerColumn = "1", //求最短路径所使用的权值,即可根据用户的需求选择不同的路径方案。 
                                        Token = "-pxvYt1zsn3NWaFKnNvWvw5Isqnvp5bu04QjaOnVPcNWsnfI-p7kAbaJz4874Onh" //向服务器发出分析请求的令牌 
                                    };
                                    //获取返回路线数据,并渲染成矢量线显示在图形层中
                                    pa.OnRequestComplete += (source, evt) =>
                                    {
                                        SuccessJsonPA<SuccessDataMsgPA> json = evt as SuccessJsonPA<SuccessDataMsgPA>;
                                        if (json != null)
                                        {
                                            // 画出线路图
                                            ESRI.ArcGIS.Client.Geometry.Polyline pl = new ESRI.ArcGIS.Client.Geometry.Polyline();
                                            pl.Paths = json.Message.Route.Paths;
                                            var symbol = new ESRI.ArcGIS.Client.Symbols.SimpleLineSymbol(System.Windows.Media.Color.FromArgb(255, 0, 0, 0), 4);

                                            ESRI.ArcGIS.Client.Graphic gra = new ESRI.ArcGIS.Client.Graphic()
                                            {
                                                Geometry = pl,
                                                Symbol = symbol,
                                            };
                                            graLayer.Graphics.Add(gra);
                                        }
                                    };
                                    pa.Execute();
                                }
                            }
                        }

                   

运行代码



要素查询服务

XAML关键代码


                    <!--添加地图控制-->
                    <esri:Map x:Name="MyMap" IsLogoVisible="False">
                        <!--添加天地图四川地图瓦片层-->
                        <scgc:TileLayer ID="myTileMap" Url="http://www.scgis.net.cn/imap/iMapServer/DefaultRest/services/SCTileMap/mapserver"/>
                        <!--添加图形层-->
                        <esri:GraphicsLayer ID="myGraLayer" />
                    </esri:Map>
                

代码解析


使用XAML语言添加地图控制,并在该标签对中添加天地图四川地图瓦片层及图形层。图形层用于添加图片或点,线,面矢量图形。在使用天地图四川SilverLight之前,请下载天地图四川SilverLight开发包

C#关键代码


                     SCGC.iMap.Client.Tasks.DataSearchTask dt = new DataSearchTask()
                    {
                        QueryType = SCGC.iMap.Client.Tasks.DataSearchTask.QueryTypes.Data, //查询的数据的类型 
                        Token = "-pxvYt1zsn3NWaFKnNvWv5mgJDC-O-TiZUN_FwxAdKULyZlLZI8E03XccIP0RBwe", //查询服务的访问令牌
                        LayerId = layerId, //请求图层 
                        SpatialRel = SCGC.iMap.Client.Tasks.DataSearchTask.SpatialRels.None, //空间关系 
                        Url = "http://www.scgis.net.cn/iMap/iMapServer/DefaultRest/services/SClocation/", //查询服务的地址 
                        WhereClause = string.Format("name like '%{0}%'", name) //条件语句 
                    };
                

代码解析


使用要素查询类DataSearchTask可以对四川省区域进行多种空间分析,并获得分析结果,参数的设定请参考路径分析服务中元数据说明。声明一个访问服务的令牌(token),详细信息参见常见问题

XAML完整代码


                    <navigation:Page x:Class="SLSampleDemo.DataSearchPage" 
                        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                        mc:Ignorable="d"
                        xmlns:esri="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client"
                        xmlns:scgc="clr-namespace:SCGC.iMap.Client;assembly=SCGC.iMap.Client"
                        xmlns:dataInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input"
                        xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
                        d:DesignWidth="640" d:DesignHeight="480"
                        Title="DataSearchPage Page" Loaded="Page_Loaded">
                        <Grid x:Name="LayoutRoot">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="*" />
                            </Grid.RowDefinitions>
                            <Grid Grid.Row="0">
                                <StackPanel Orientation="Horizontal">
                                    <dataInput:Label Height="16" Margin="15,2,5,5" Name="label2" Width="64" Content="地区选择:" FontSize="14" />
                                    <ComboBox Height="23" Name="StateCombox" Width="180" FontSize="13" Margin="5,5,5,5" SelectionChanged="StateCombox_SelectionChanged" />
                                    <ComboBox Height="23" Name="CountyCombox" Width="180" Margin="5,5,5,5" />
                                    <Button Content="地区定位" Height="23" Name="LocationButton" Width="80" FontSize="13" Margin="5,5,5,5" Cursor="Hand" Click="LocationButton_Click" />
                                </StackPanel>
                            </Grid>
                            
                            <Grid Grid.Row="1">
                                <!--添加地图控制-->
                                <esri:Map x:Name="MyMap" IsLogoVisible="False">
                                    <!--添加天地图四川地图瓦片层-->
                                    <scgc:TileLayer ID="myTileMap" Url="http://www.scgis.net.cn/imap/iMapServer/DefaultRest/services/SCTileMap/mapserver"/>
                                    <!--添加图形层-->
                                    <esri:GraphicsLayer ID="myGraLayer" />
                                </esri:Map>
                            </Grid>
                        </Grid>
                    </navigation:Page>
                

C#完整代码


                        using System;
                        using System.Collections.Generic;
                        using System.Linq;
                        using System.Net;
                        using System.Windows;
                        using System.Windows.Controls;
                        using System.Windows.Documents;
                        using System.Windows.Input;
                        using System.Windows.Media;
                        using System.Windows.Media.Animation;
                        using System.Windows.Shapes;
                        using System.Windows.Navigation;
                        using SCGC.iMap.Client.Tasks;
                        using SCGC.iMap.Client.Tasks.Json.NameSearch;
                        using SCGC.iMap.Client.Tasks.Json.SearchBase;
                        using SCGC.iMap.Client.Tasks.Json.DataSearch;
                        using System.Windows.Media.Imaging;
                        using SCGC.iMap.Client.Geometry;

                        namespace SLSampleDemo
                        {
                            public partial class DataSearchPage : Page
                            {

                                // 地名查询服务的元数据
                                private SuccessJsonNS<SuccessMetaMsgNS> m_successJsonNS;
                                //声明图形图层对象(用于放置图形要素) 
                                ESRI.ArcGIS.Client.GraphicsLayer graLayer = null;

                                public DataSearchPage()
                                {
                                    InitializeComponent();
                                }

                                private void Page_Loaded(object sender, RoutedEventArgs e)
                                {
                                    HanderPan();
                                    InitMap();
                                }

                                private void HanderPan()
                                {
                                    // 加载地名查询的元数据
                                    SCGC.iMap.Client.Tasks.NameSearchTask nt = new NameSearchTask()
                                    {
                                        QueryType = NameSearchTask.QueryTypes.Meta,
                                        Url = "http://www.scgis.net.cn/iMap/iMapServer/DefaultRest/services/scNameSearch/",
                                        Token = "-pxvYt1zsn3NWaFKnNvWv8IYUdY7OLNcDfyE-iNP218nEE33K42JYXxr7_FyGJgb"
                                    };
                                    nt.OnRequestComplete += OnMetaSuccess;
                                    nt.Execute();
                                }

                                private void InitMap()
                                {
                                    //声明图形图层对象(用于放置图形要素) 
                                    SCGC.iMap.Client.TileLayer layer = MyMap.Layers["myTileMap"] as SCGC.iMap.Client.TileLayer;
                                    //设置图层访问令牌 
                                    layer.Token = "-pxvYt1zsn3NWaFKnNvWv0i72MlkB1H-g8OKavVXjSquukWYPotj1Wm7dBKteV1I";
                                    //声明图形图层对象(用于放置图形要素)
                                    graLayer = MyMap.Layers["myGraLayer"] as ESRI.ArcGIS.Client.GraphicsLayer;
                                    //设置地图瓦片显示范围
                                    MyMap.Extent = new ESRI.ArcGIS.Client.Geometry.Envelope(95.8898, 24.8632, 110.2101, 35.2020);
                                }

                                private void OnMetaSuccess(object sender, object data)
                                {
                                    //将返回的数据加入市州下拉框
                                    if (data.GetType() == typeof(SuccessJsonNS<SuccessMetaMsgNS>))
                                    {
                                        SuccessJsonNS<SuccessMetaMsgNS> json = data as SuccessJsonNS<SuccessMetaMsgNS>;
                                        m_successJsonNS = json;
                                        // 地区列表
                                        StateCombox.Items.Clear();
                                        for (int i = 0, l = json.Message.DiQuName.Count; i < l; i++)
                                        {
                                            StateCombox.Items.Add(json.Message.DiQuName[i].Name);
                                        }
                                        StateCombox.Items.Insert(0, "全省");
                                        
                                        // 选中默认
                                        StateCombox.SelectedIndex = 0;
                                        
                                    }
                                }

                                private void StateCombox_SelectionChanged(object sender, SelectionChangedEventArgs e)
                                {
                                    //将返回的数据加入县区下拉框
                                    ListBox lb = sender as ListBox;

                                    if (m_successJsonNS != null)
                                    {
                                        CountyCombox.Items.Clear();
                                        List<string> list = FindCounty(StateCombox.SelectedItem as string);
                                        foreach (string s in list)
                                            CountyCombox.Items.Add(s);

                                        CountyCombox.Items.Insert(0, "全市");
                                    }
                                    CountyCombox.SelectedIndex = 0;
                                }

                                /// <summary>
                                /// 通过地区名称获取该地区的所有区县名称
                                /// </summary>
                                /// <param name="state">地区名称</param>
                                /// <returns>查询地区的所有区县名称</returns>
                                private List<string> FindCounty(string state)
                                {
                                    List<string> list = new List<string>();
                                    string pac = string.Empty;
                                    for (int i = 0, l = m_successJsonNS.Message.DiQuName.Count; i < l; i++)
                                    {
                                        if (m_successJsonNS.Message.DiQuName[i].Name == state)
                                            pac = m_successJsonNS.Message.DiQuName[i].Pac;
                                    }
                                    if (string.IsNullOrEmpty(pac))
                                        return list;
                                    else
                                    {
                                        for (int i = 0, l = m_successJsonNS.Message.QuXianName.Count; i < l; i++)
                                        {
                                            if (m_successJsonNS.Message.QuXianName[i].Pac.Substring(0, 4) == pac)
                                                list.Add(m_successJsonNS.Message.QuXianName[i].Name);
                                        }
                                        return list;
                                    }
                                }
                                /// <summary>
                                /// 通过名称获取PAC
                                /// </summary>
                                /// <param name="name">地区或区县的名称</param>
                                /// <returns>对应的地区或区县名的PAC</returns>
                                private string GetPac(string name)
                                {
                                    if (string.IsNullOrEmpty(name))
                                        return string.Empty;

                                    string pac = string.Empty;
                                    foreach (DiQuNameItem di in m_successJsonNS.Message.DiQuName)
                                    {
                                        if (di.Name == name)
                                            pac = di.Pac;
                                    }
                                    if (string.IsNullOrEmpty(pac))
                                    {
                                        foreach (QuXianNameItem qi in m_successJsonNS.Message.QuXianName)
                                            if (qi.Name == name)
                                                pac = qi.Pac;
                                    }
                                    return pac;
                                }

                                private void LocationButton_Click(object sender, RoutedEventArgs e)
                                {
                                    //清楚图形层的内容
                                    graLayer.ClearGraphics();
                                    string name = string.Empty;
                                    int layerId = 0;
                                    if (CountyCombox.SelectedIndex > 0)
                                    {
                                        // 区县名称不为空
                                        name = CountyCombox.SelectedItem as string;
                                        //设置查询层ID
                                        layerId = 0;
                                    }
                                    else if (StateCombox.SelectedIndex > 0)
                                    {
                                        // 地区名不为空
                                        name = StateCombox.SelectedItem as string;
                                        //设置查询层ID
                                        layerId = 1;
                                    }

                                    if (!string.IsNullOrEmpty(name))
                                    {
                                        //如果选择了地区或区县则进行查询
                                        //使用天地图四川要素查询类申明一个对象,并设置参数
                                        SCGC.iMap.Client.Tasks.DataSearchTask dt = new DataSearchTask()
                                        {
                                            QueryType = SCGC.iMap.Client.Tasks.DataSearchTask.QueryTypes.Data, //查询的数据的类型 
                                            Token = "-pxvYt1zsn3NWaFKnNvWv9rJGW_umVrH9EIV3gmkMQoThS7nZ1PQ8TlRBFIk1zve", //查询服务的访问令牌
                                            LayerId = layerId, //请求图层 
                                            SpatialRel = SCGC.iMap.Client.Tasks.DataSearchTask.SpatialRels.None, //空间关系 
                                            Url = "http://www.scgis.net.cn/iMap/iMapServer/DefaultRest/services/SClocation/", //查询服务的地址 
                                            WhereClause = string.Format("name like '%{0}%'", name) //条件语句 
                                        };
                                        dt.OnRequestComplete += (s, data) =>
                                        {
                                            //获得返回的数据,将图片与数据绑定,在图形层进行显示
                                            SuccessJsonDS<SuccessDataMsgDS> json = data as SuccessJsonDS<SuccessDataMsgDS>;
                                            if (json.Success)
                                            {
                                                if (MyMap != null)
                                                {
                                                  //  MyMap.ZoomToResolution(tiledLayer.TileInfo.Lods[tiledLayer.TileInfo.Lods.Length - 5].Resolution, json.Message.Features[0].Geometry as ESRI.ArcGIS.Client.Geometry.MapPoint);
                                                    BitmapImage image = new BitmapImage();
                                                    image.CreateOptions = BitmapCreateOptions.None;
                                                    image.UriSource = new Uri(@"assets/images/vias.png", UriKind.RelativeOrAbsolute);
                                                    ESRI.ArcGIS.Client.Symbols.PictureMarkerSymbol vpms = new ESRI.ArcGIS.Client.Symbols.PictureMarkerSymbol()
                                                    {
                                                        Source = image,
                                                        Width = 64,
                                                        Height = 64,
                                                        OffsetX = 32,
                                                        OffsetY = 64
                                                    };
                                                    ESRI.ArcGIS.Client.Graphic startPoint = new ESRI.ArcGIS.Client.Graphic()
                                                    {
                                                        Geometry = json.Message.Features[0].Geometry,//new ESRI.ArcGIS.Client.Geometry.MapPoint((MapPoint)json.Message.Features[0].Geometry),
                                                        Symbol = vpms,
                                                    };
                                                    graLayer.Graphics.Add(startPoint);
                                                }
                                            }
                                        };
                                        dt.Execute();
                                    }
                                    else
                                    {
                                        // 没有选择则什么提示选择
                                        MessageBox.Show("请选择市或县");
                                    }
                                }
                            }
                        }

                

运行代码