- 概述
- 入门指导
- API参考
- 代码示例
天地图·四川 Silverlight JavaScript API具有如下特点:
1、开发简单快捷。
2、地图支持弹簧动画(地图缩放、平移等操作具有连续性)。
3、支持将任何界面元素(控件)作为地图要素,随地图缩放,支持要素按簇显示,提高显示性能和效果。
4、地图符号支持多种动画效果,地图更生动。
5、支持在客户端直接生成热点图,媒体元素(如视频)作为地图要素的符号。
- 基础地图服务在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
- 图层管理在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
- 地图标绘在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
- 路径导航在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
- 地图工具在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
- 地名搜索在网页中显示地图,支持矢量、影像、透明注记等地图,支持多种事件和控件操作。
* 空前的富媒体体验以及网络应用。
* 强大的基于向量的图形。
* 无敌的从Mobile到HD质量的视频以及音频。
* 在有硬件加速支持下,最高达15倍的视频编码速度。
* 移动设备支持。
2. 快速,更具生产力的开发
* 集成现有的网络开发技术及资源。
* Web以及桌面一致的表现层,保证了开发的低成本性。
* 基于标准的可验证的开发技术。
* 为开发人员以及设计人员提供了广泛的工具支持,并且建立了相应的开发设计生态圈 。
3. 快速部署
* 简单按需安装的SilverLight浏览器插件 。
* 灵活的基于视频及动画的广告嵌入方案。
* 低成本的流媒体解决方案,基于荣获艾美奖荣誉的Windows Media技术。
* 内容访问保护技术 。
* 在Microsoft Expression Media Encoder的支持下,加速编码并且发布基于视频的体验 。
可以使用强大的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的设计人员可以共享同样的文件。
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("请选择市或县"); } } } }