GVKun编程网logo

[supermap+silverlight]访问 SuperMap iServer Java 6R 地图服务

13

在这篇文章中,我们将为您详细介绍[supermap+silverlight]访问SuperMapiServerJava6R地图服务的内容。此外,我们还会涉及一些关于ArcGISAPIforSilver

在这篇文章中,我们将为您详细介绍[supermap+silverlight]访问 SuperMap iServer Java 6R 地图服务的内容。此外,我们还会涉及一些关于ArcGIS API for Silverlight 加载BingMap,GoogleMap,WorldImageryMap,OpenStreetMap,BaiduMap方法、ArcGIS API for Silverlight开发入门(0):为什么要用Silverlight API?、ArcGIS API for Silverlight部署本地地图服务、ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务的知识,以帮助您更全面地了解这个主题。

本文目录一览:

[supermap+silverlight]访问 SuperMap iServer Java 6R 地图服务

[supermap+silverlight]访问 SuperMap iServer Java 6R 地图服务

一直都是用的javascript访问 SuperMap iServer Java 6R 地图服务,今天第一次用silverlight,没想到在访问服务的时候就碰到了问题。
要使用silverlight访问 SuperMap iServer Java 6R 地图服务需要注意两点:

1、先安装SuperMap iClient 6R(2012) for Silverlight

2、如果是访问本地的地图服务的话,从安装好的文件夹里找到clientaccesspolicy.xml文件,这是跨域文件,把这个文件放在<SuperMap_iServer_Install_Location>\webapps\ROOT 路径下面。

第二点尤其需要注意,在help文件里面有提到,但没有仔细看,浪费了很多时间。

ArcGIS API for Silverlight 加载BingMap,GoogleMap,WorldImageryMap,OpenStreetMap,BaiduMap方法

ArcGIS API for Silverlight 加载BingMap,GoogleMap,WorldImageryMap,OpenStreetMap,BaiduMap方法

1.首先Silverlight前台加载esri:Map,示例代码如下:

//添加引用
xmlns:esri="http://schemas.esri.com/arcgis/client/2009"<pre name="code">
//添加esri:Map
<esri:Map x:Name="TestMap"  IslogoVisible="False"  MinimumResolution="0.01"  MouseMove="Subway_MouseMove"></span>
            <esri:Map.Layers>
                <esri:ArcGISDynamicMapServiceLayer ID="···" displayName="···" Initialized="···" Url="····" ></esri:ArcGISDynamicMapServiceLayer>
                <esri:Graphicslayer ID="MyGraphicslayer"  Opacity="1"/>
            </esri:Map.Layers>
        </esri:Map>

2.后台添加地图

Map MyMap = this.LayoutRoot.FindName("TestMap") as Map;

A.BingMap

ESRI.ArcGIS.Client.Bing.TileLayer bingLayer = new TileLayer();
bingLayer.ID = "BingMapLayer";
bingLayer.displayName = "BingMap";
bingLayer.LayerStyle = TileLayer.LayerType.AerialWithLabels;
bingLayer.Visible = true;
bingLayer.ServerType = ServerType.Production;
bingLayer.Token = "AjXYD5KFgNM650vi1Q9VKNWFBORxoux7Y_UFrmuwqs0RvXSkVyfaNueRlPkLctKN";
MyMap.Layers.Insert(0,bingLayer);

B.WordImagerMap

ArcGISTiledMapServiceLayer worldImageryLayer = new ArcGISTiledMapServiceLayer();
worldImageryLayer.ID = "WorldImageryLayer";
worldImageryLayer.displayName = "WorldImageryLayer";
worldImageryLayer.Visible = true;
worldImageryLayer.Url = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer";
worldImageryLayer.Visible = false;
MyMap.Layers.Insert(0,worldImageryLayer);
C.OpenStreetMap

OpenStreetMapLayer osLayer = new OpenStreetMapLayer();
osLayer.ID = "OpenStreetLayer";
osLayer.displayName = "OpenStreetLayer";
osLayer.Style = OpenStreetMapLayer.MapStyle.Mapnik;
osLayer.Visible = true;
osLayer.Opacity = 1;
MyMap.Layers.Insert(0,osLayer);
D.GoogleMap

首先添加一个类,命名为GoogletopographicLayer,类的代码如下:

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using ESRI.ArcGIS.Client;
using ESRI.ArcGIS.Client.Geometry;

namespace GoogleMap
{
    public class GoogletopographicLayer: TiledMapServiceLayer  
    {
        private const double cornerCoordinate = 20037508.3427892;
        private string _baseURL = "m@161000000"; //google街道图

        public override void Initialize()
        {
            ESRI.ArcGIS.Client.Projection.WebMercator mercator = new ESRI.ArcGIS.Client.Projection.WebMercator();
            this.FullExtent = new ESRI.ArcGIS.Client.Geometry.Envelope(-20037508.3427892,-20037508.3427892,20037508.3427892,20037508.3427892)
            {
                SpatialReference = new SpatialReference(102100)
            };
            //图层的空间坐标系  
            this.SpatialReference = new SpatialReference(102100);
            // 建立切片信息,每个切片大小256*256px,共16级.  
            this.TileInfo = new TileInfo()
            {
                Height = 256,Width = 256,Origin = new MapPoint(-cornerCoordinate,cornerCoordinate) { SpatialReference = new ESRI.ArcGIS.Client.Geometry.SpatialReference(102100) },Lods = new Lod[16]
            };
            //为每级建立方案,每一级是前一级别的一半.  
            double resolution = cornerCoordinate * 2 / 256;
            for (int i = 0; i < TileInfo.Lods.Length; i++)
            {
                TileInfo.Lods[i] = new Lod() { Resolution = resolution };
                resolution /= 2;
            }
            // 调用初始化函数  
            base.Initialize();
        }

        public override string GetTileUrl(int level,int row,int col)
        {
            string url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=" + _baseURL + "&v=w2.114&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&s=galil";
            if (_baseURL == "s@92")
            {
                url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=" + _baseURL + "&v=w2.114&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&s=galil"; //加载Google遥感图  
            }
            if (_baseURL == "t@128")
            {
                url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=" + _baseURL + ",r@169000000&v=w2.114&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&s=galil";//加载Google地形图  
            }
            if (_baseURL == "m@161000000")
            {
                url = "http://mt" + (col % 4) + ".google.cn/vt/lyrs=" + _baseURL + "&v=w2.114&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&s=galil"; //加载Google街道图  
            }
            return string.Format(url);

            //调用加载初始的Google街道地图  
            //string baseUrl = "http://mt2.google.cn/vt/v=w2.116&hl=zh-CN&gl=cn&x={0}&y={1}&z={2}&s=G";  
            //return string.Format(baseUrl,col,row,level);  
        }  

    }
}
        /// <summary>
        /// Initialization BaiduMap
        /// </summary>
        public void InitGoogleMap()
        {
            GoogletopographicLayer GoogleMaplayer = new GoogletopographicLayer();
            GoogleMaplayer.ID = "GoogleMapLayer";
            GoogleMaplayer.displayName = "GoogleMap";
            GoogleMaplayer.Visible = ture;
            MyMap.Layers.Insert(0,GoogleMaplayer);
        }

E.BaiduMap

首先添加一个类,命名为BaidutopographicLayer,类的代码如下:

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using ESRI.ArcGIS.Client;
using ESRI.ArcGIS.Client.Geometry;

namespace BaiduMap
{
    public class BaiduMapLayer : TiledMapServiceLayer  
    {
        private const double cornerCoordinate = 20037508.3427892;
        private string _baseURL = "POI"; //Baidu地形图  

        public override void Initialize()
        {
            ESRI.ArcGIS.Client.Projection.WebMercator mercator = new ESRI.ArcGIS.Client.Projection.WebMercator();
            this.FullExtent = new ESRI.ArcGIS.Client.Geometry.Envelope(5916776.8,1877209.3,19242502.6,7620381.8)
            {
                SpatialReference = new SpatialReference(102100)
            };
            //图层的空间坐标系  
            this.SpatialReference = new SpatialReference(102100);
            // 建立切片信息,每个切片大小256*256px,共16级.  
            this.TileInfo = new TileInfo()
            {
                Height = 256,int col)
        {
            int zoom = level - 1;
            int offsetX =Convert.ToInt16(Math.Pow(2,zoom));
            int offsetY = offsetX - 1;
            int numX = col - offsetX;
            int numY = (-row) + offsetX;
            zoom = level + 1;
            int num = (col + row) % 8 + 1;


            string url = "";
            if (_baseURL == "Vector")
            {
                url = "http://q" + num + ".baidu.com/it/u=x=" + numX + ";y=" + numY + ";z=" + zoom + ";v=013;type=web&fm=44"; //加载Baidu遥感图  
            }
            if (_baseURL == "Image")
            {
                url = "http://q" + num + ".baidu.com/it/u=x=" + numX + ";y=" + numY + ";z=" + zoom + ";v=009;type=sate&fm=46";//加载Baidu地形图  
            }
            if (_baseURL == "POI")
            {
                url = "http://online" + num + ".map.bdimg.com/tile/?qt=tile&x=" + numX + "&y=" + numY + "&z=" + zoom + "&styles=pl&udt=20140819";  //加载Baidu街道图  
            }
            return string.Format(url);

        }  

    }
}
/// <summary>
        /// Initialization BaiduMap
        /// </summary>
        public void InitBaiduMap()
        {
            BaiduMapLayer Baidulayer = new BaiduMapLayer();
            Baidulayer.ID = "BaiduMapLayer";
            Baidulayer.displayName = "Baidu";
            Baidulayer.Visible = true;
            MyMap.Layers.Insert(0,Baidulayer);
        }

ArcGIS API for Silverlight开发入门(0):为什么要用Silverlight API?

ArcGIS API for Silverlight开发入门(0):为什么要用Silverlight API?

你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我都没关系。但你不能否认3G是一种趋势,最终我们每个人都会被包裹在3G网络中。1100也不是一成不变,没准哪天为了打击犯罪,会在你的1100上强制装上GPS。GIS工作既然建立在计算机的基础上,当然也得随着IT行业与时俱进。
       看看现在计算机应用的趋势吧。云(计算),这个东西可讲不清楚,因为云嘛,飘忽不定的。不过可以这样来看它,以后计算机网络上就有一坨(或者几坨)万能的云,有什么需求云都可以满足我们,包括各种资源或者计算工作,就不需要在自己的机器上安装任何软件了(甚至操作系统都可以由天边那朵云来提供给你)。更具体点,SaaS(Software as a Service),各种的网页邮件系统,google docs(一个在线的office)都是SaaS。收发邮件登陆一个网页就行,而不需要在自己机器上安装一个软件。这就是计算机应用的一个趋势,把所有东西都做到网上。再来看看网上的趋势:RIA(Rich InternetApplication)。RIA简单来讲就是一个网页(网络应用),在完成基本功能的同时,会让你觉得很漂亮,操作起来很舒服,效果很炫,而不是打开后立刻就想关掉它。其实大受欢迎的开心网(各种插件)和twitter,甚至QQ空间等,都有RIA的身影。
       好了,ArcGIS之所以在行业领先,特点之一就是它能紧跟计算机发展的趋势。ArcGIS Online就是那朵天边的浮云;JavaScript API,Flex API,Siverlight API就是ArcGIS自己RIA的三驾马车。
       这里还得插一句,我觉得ArcGIS Server的主角本来是ADF,通过它我们可以完成一个无所不能的ServerGIS。但在大多数情况下,GIS都是作为特定的业务嵌入在一些MIS中的,相比购买ADF这辆悍马来说,还是直接驾驭三套车跑的更轻快一些。
       现在看看我们的主角。其实是ArcGIS API forSilverlight/WPF(以下专注Siverlight部分),那么Silverlight和WPF的关系如何呢?Silverlight原来叫WPF/E,E就是Everywhere,从命名可以看出它们的关系:Silverlight是WPF的一个子集。WPF是.NETFramework 3.0的组成部分之一,微软视其为下一代用户界面,总之很高档就是了(在Vista和Windows7中看到的大量与XP不同的界面,就是WPF的身影);Silverlight可以看做是WPF在浏览器里的一个外挂,用于向网络用户展示自己的强大能力,由于受限于网络环境,所以是WPF的一部分核心功能。Siverlight的设计初衷是跨平台,跨浏览器的。
       如果这些还是比较抽象,那么可以造一个排比句来进一步说明。之前先肯定一点,Flash现在在网络中的的主导地位。开始造句。Adobe有Flash,微软有Silverlight;Adobe有AIR,微软有WPF;Flex有mxml,Silverlight有xaml;Adobe有ActionScript,微软有Code-Behind(C#/VB.NET)或者JavaScript;Adobe有CS(包括Dreamweaver,Flash,Fireworks,Photoshop,Illustrator),微软有ExpressionStudio(包括Blend,Web,Design,Media,Encoder)。现在,能够看来Siverlight到底是何方神圣了吧?
       最后再来说说ArcGIS这三驾马车(JavaScript API,Flex API,SiverlightAPI)。国外有人说,随着Siverlight API的推出,与Flex API一起,将会使JavaScriptAPI慢慢退出历史舞台,因为前两者就是为RIA而生的。但其实也不然,随着Google和Mozilla工程师的推进,他们能够使JavaScript的执行速度提高非常多,Chrome就是例子。在这种背景下,一些非常cool的程序员会让古老的JavaScript获得重生。到底哪匹马跑得更快?别回答这种问题,赶紧挑一匹自己的马儿,快马扬鞭吧~~       在今年的ESRI开发用户大会上,一阵鼓声过后,ESRI隆重推出了ArcGIS API for Silverlight/WPF(beta)。接下来我将把自己在学习Silverlight API中的一些经历和大家分享,与大伙共同进步。

ArcGIS API for Silverlight部署本地地图服务

ArcGIS API for Silverlight部署本地地图服务

ArcGIS API for Silverlight部署本地地图服务

首先介绍下我们的开发和部署环境:

部署环境:

Windows 7 旗舰版32位操作系统

IIS 6.0

开发环境:

Visual Studio 2010

Visual Studio 2010 SP1

Siverlight 4

Net Framework 4

第一步:搭建ArcGIS API for Silverlight开发环境。检验是否搭建成功的标志是建立一个自己的Silverlight应用程序,添加一个Map控件加载ArcGIS Online上的地图服务成功显示。此时显示的是ArcGIS Online上的地图资源,对于一个项目来说我们很多时候需要的是吧我们自己发布的地图服务放在我们的项目里,接下来看怎样连接到我们的本机地图服务;

第二步:将clientaccesspolicy.xmlcrossdomain.xml两个跨域文件copy到网站根目录下,具体是.NET下放在C:\inetpub\wwwroot或网站根目录下;

文件下载地址:

http://services.arcgisonline.com/clientaccesspolicy.xml

http://services.arcgisonline.com/crossdomain.xml

第三步:在要发布的那个图层那里加一个InitializationFailed事件。

添加方法:

<esri:Map Name="MyMap">

 

            <esri:Map.Layers>

 

                <esri:LayerCollection>

 

                    <esri:ArcGISDynamicMapServiceLayer ID="ChinaMap" InitializationFailed="ArcGISDynamicMapServiceLayer_InitializationFailed"          

 

    Url=" http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer">

 

                    </esri:ArcGISDynamicMapServiceLayer>

 

                </esri:LayerCollection>

 

            </esri:Map.Layers>

 

 </esri:Map>

右击MainPage.xaml 查看代码,C#后台代码如下:

privatevoid ArcGISDynamicMapServiceLayer_InitializationFailed(object sender,EventArgs e)

 

{

 

            ESRI.ArcGIS.Client.Layer layer = sender as ESRI.ArcGIS.Client.Layer;

 

            MessageBox.Show(layer.InitializationFailure.Message);

 

}

第四步:更改地图服务器地址Url

将上面的Url地址换成自己的地图服务地址,如:

Url="http://shaoyong-pc/ArcGIS/rest/services/ChinaMap/MapServer"

Visual Studio 2010调试程序即可。

ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务

ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务

平台:Vs 2010,Blend 4,Silverlight 4

调用API: ArcGis for Silverligth API(ESRI.ArcGIS.Client)


本来准备晚上或下午写的,早上公司服务器挂了,地图服务用不了干脆就来写一点吧!有个朋友问我动态配置 WebService,Wcf服务的问题,正好也把这个一并写了!

 

好了不说废话了,进下正题。

 

先来看一下如何动态的配置WebService,Wcf 服务,实现方式:从 Web.Config 文件中读取地址,然后在 Silverlight 实现绑定。

首先我们还是添加服务引用,引用远程或本机的Web服务。然后在 silverlight 加下以下代码

 
 
  1. <SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">    /// <summary> 
  2.         /// 动态引用WebServices  
  3.         /// </summary> 
  4.         /// <returns></returns> 
  5.         public Service.typhoonServiceSoapClient GetDynamicclient()  
  6.         {  
  7.             BasicHttpBinding binding = new BasicHttpBinding(  
  8.                 Application.Current.Host.source.Equals("https") ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None);  
  9.     // 这里可以设置你接收消息的大小,为int最大值  
  10.             binding.MaxReceivedMessageSize = int.MaxValue;  
  11.             binding.MaxBufferSize = int.MaxValue;  
  12.  
  13.  
  14.             EndpointAddress client;  
  15.             if (webServicePath == String.Empty)  
  16.             {  
  17.                 try  
  18.                 {  
  19.                     ScriptObject myScript = HtmlPage.Window.GetProperty("GetWebServiceUrl") as ScriptObject;  
  20.                     webServicePath = myScript.InvokeSelf("typhoonSL").ToString();  
  21.  
  22.                     client = new EndpointAddress(webServicePath);  
  23.                 }  
  24.                 catch  
  25.                 {  
  26.                     client = new EndpointAddress("http://localhost:7629/typhoonService.asmx");  
  27.                 }  
  28.             }  
  29.             else  
  30.             {  
  31.                 client = new EndpointAddress(webServicePath);  
  32.             }  
  33.  
  34.             return new Service.typhoonServiceSoapClient(binding, client);  
  35.         }  
  36. </SPAN> 

 

 

注意把 public Service.typhoonServiceSoapClient GetDynamicclient() 这行改成你自己的服务实例也就是改 Service.typhoonServiceSoapClient,

同样也要改最后一行的 return new Service.typhoonServiceSoapClient(binding,client);


大家可能注意到上面的两句话。

  ScriptObject myScript = HtmlPage.Window.GetProperty("GetWebServiceUrl") as ScriptObject;

webServicePath = myScript.InvokeSelf("typhoonSL").ToString();

这里的 HtmlPage.Window.GetProperty("GetWebServiceUrl"),表示外部 JavaScript 方法,也就是承载 Silverlight 页面中的JavaScript函数。

webServicePath是一个全局的string型变量,是用来保存WebService地址。

 myScript.InvokeSelf("typhoonSL").ToString();是表示调用外部JavaScript方法并传一个值"typhoonSL"进去.


好Silverlight程序里大功告成,我们看下承载 Silverlight 页面中的JavaScript函数。


 

   
   
  1. <SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"><script type="text/javascript"> 
  2.       //获取WebService地址  
  3.       function GetWebServiceUrl(args) {  
  4.           var a = '';  
  5.  
  6.           if (args.toString() == 'typhoonSL') {  
  7.               a = '<%=GetAppSetting("typhoonSL")%>';  
  8.           }  
  9.  
  10.           return a;  
  11.       }  
  12.     </script> 
  13. </SPAN> 
 


里面有个托管代码函数GetAppSetting();我们看下他的代码:


 


   
   
  1. <SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">        /// <summary> 
  2.         /// 获取配置字串  
  3.         /// </summary> 
  4.         /// <param name="key">字段名称</param> 
  5.         /// <returns>配置字串</returns> 
  6.         public static string GetAppSetting(string key)  
  7.         {  
  8.             try  
  9.             {  
  10.                 if (key != null)  
  11.                 {  
  12.                     return System.Configuration.ConfigurationSettings.AppSettings[key].ToString();  
  13.                 }  
  14.                 else  
  15.                 {  
  16.                     return String.Empty;  
  17.                 }  
  18.             }  
  19.             catch  
  20.             {  
  21.                 return String.Empty;  
  22.             }  
  23.         }</SPAN> 

我们看他了他调用了ConfigurationSettings.AppSetting中的key.那再来看下他调用的Web.Config文件中的节点:


 

 
1 <SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"><appSettings><add key="typhoonSL" value="http://localhost:7629/typhoonService.asmx"/<SPAN style="LINE-HEIGHT: 17px">></appSettings></SPAN></SPAN>

 

 

这样动态的WebService、Wcf调用就完成了!



然后就是动态调用地图,其实和动态调用WebService、Wcf差不多。我简单发下他们的代码:


 
 
  1. <SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">   /// <summary> 
  2.         /// 添加底图  
  3.         /// </summary> 
  4.         private void TiledLayerInit()  
  5.         {  
  6.             ArcGISTiledMapServiceLayer tiledLayer = new ArcGISTiledMapServiceLayer();  
  7.             ArcGISTiledMapServiceLayer imageLayer = new ArcGISTiledMapServiceLayer();  
  8.             try  
  9.             {  
  10.                 ScriptObject myScr = HtmlPage.Window.GetProperty("GetSLTiledLayer") as ScriptObject;  
  11.                 string url = myScr.InvokeSelf("TiledLayer").ToString();  
  12.                 tiledLayer.Url = url;  
  13.             }  
  14.             catch (Exception ex)  
  15.             {  
  16.                 MessageBox.Show("请配置 Gis 底图!" + ex.ToString(), "温馨提示", MessageBoxButton.OK);  
  17.             }  
  18.             finally  
  19.             {  
  20.                // tiledLayer.Url = "http://demo.augow.com/ArcGIS/rest/services/Map001/World/MapServer";  
  21.             }  
  22.             imageLayer.Url = "http://services.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer";  
  23.  
  24.             tiledLayer.ID = "StreetMapLayer";  
  25.             imageLayer.ID = "ImageMapLayer";  
  26.         
  27.             myMap.Layers.Add(tiledLayer);  
  28.             myMap.Layers.Add(imageLayer);  
  29.           
  30.             myMap.Layers["ImageMapLayer"].Visible = false;  
  31.         }  
  32. </SPAN> 

 

我的代码里调用了两个地图层,两个都是 ArcGisTiledMapServiceLayer,这是切片的ArcGis地图服务,也就是把图片切成一块一块,然后下载到客户端来显示。


我们同样看到了 HtmlPage.Window.GetProperty("GetSLTiledLayer") as ScriptObject; 这行代码来调用外部 JavaScript 代码来获取切片服务的 Url。


设置了tiledLayer和imageLayer的Url后我们再设置下他们的 ID号,然后在我们的 Map实例中(也就是myMap)把他们加到地图层上来,然后这两个层就显示在地图上了。


继续看承载页面JavaScript代码:


 
 
  1. <SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">  <script type="text/javascript"> 
  2.  
  3.       //获取  
  4.       function GetSLTiledLayer(key) {  
  5.           if (key.toString() == 'TiledLayer') {  
  6.               var a = '<%=GetAppSetting("TiledLayer")%>';  
  7.           }  
  8.  
  9.           return a;  
  10.       }  
  11. </script> 
  12. </SPAN> 

 

GetAppSetting方法和上面给出的托管代码一样。


Web.Config中的配置:


 

   
   
  1. <SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"><appSettings> 
  2.         <add key="TiledLayer" value="http://bbs.gao00.com/ArcGIS/rest/services/Map001/World/MapServer"/> 
  3.         <add key="typhoonSL" value="http://localhost:7629/typhoonService.asmx"/> 
  4.     </appSettings> 
  5. </SPAN> 
 

这时候我们就把动态服务和动态地图都配置好了!


纠结了半天的排版,我还是决定放弃了,本来想写那个ElementLayer在ArcGis上显示Silverlight原生元素了,我最终还是被博客园这个文字排版小工具给打败了,可能是我不太会用吧!下一讲再写那个东西吧!

转自:http://www.cnblogs.com/Royal_WH/archive/2010/11/04/1868873.html

今天关于[supermap+silverlight]访问 SuperMap iServer Java 6R 地图服务的分享就到这里,希望大家有所收获,若想了解更多关于ArcGIS API for Silverlight 加载BingMap,GoogleMap,WorldImageryMap,OpenStreetMap,BaiduMap方法、ArcGIS API for Silverlight开发入门(0):为什么要用Silverlight API?、ArcGIS API for Silverlight部署本地地图服务、ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务等相关知识,可以在本站进行查询。

本文标签: