大佬教程收集整理的这篇文章主要介绍了ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
平台:Vs 2010,Blend 4,Silverlight 4
调用API: ArcGis for Silverligth API(ESRI.ArcGIs.CLIENt)
本来准备晚上或下午写的,早上公司服务器挂了,地图服务用不了干脆就来写一点吧!有个朋友问我动态配置 Web@R_874_9260@ce,Wcf服务的问题,正好也把这个一并写了!
好了不说废话了,进下正题。
先来看一下如何动态的配置Web@R_874_9260@ce,Wcf 服务,实现方式:从 Web.Config 文件中读取地址,然后在 Silverlight 实现绑定。
首先我们还是添加服务引用,引用远程或本机的Web服务。然后在 silverlight 加下以下代码
- <SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"> /// <sumMary>
- /// 动态引用Web@R_874_9260@ces
- /// </sumMary>
- /// <returns></returns>
- public @R_874_9260@ce.Typhoon@R_874_9260@ceSoapClient GetDynamicClient()
- {
- BasichttpBinding binding = new BasichttpBinding(
- Application.Current.Host.source.Equals("https") ? BasichttpS@L_914_6@mode.Transport : BasichttpS@L_914_6@mode.NonE);
- // 这里可以设置你接收消息的大小,为int最大值
- binding.MaxReceivedmessageSize = int.MaxValue;
- binding.MaxBufferSize = int.MaxValue;
- EndpointAddress client;
- if (web@R_874_9260@cePath == String.Empty)
- {
- try
- {
- ScriptObject @H_217_61@myScript = HtmlPage.Window.GetProperty("GetWeb@R_874_9260@ceUrl") as ScriptObject;
- web@R_874_9260@cePath = @H_542_65@myScript.InvokeSelf("TyphoonSL").ToString();
- client = new EndpointAddress(web@R_874_9260@cePath);
- }
- catch
- {
- client = new EndpointAddress("http://localhost:7629/Typhoon@R_874_9260@ce.asmx");
- }
- }
- else
- {
- client = new EndpointAddress(web@R_874_9260@cePath);
- }
- return new @R_874_9260@ce.Typhoon@R_874_9260@ceSoapClient(binding, client);
- }
- </SPAN>
注意把 public @R_874_9260@ce.Typhoon@R_874_9260@ceSoapClient GetDynamicClient() 这行改成你自己的服务实例也就是改 @R_874_9260@ce.Typhoon@R_874_9260@ceSoapClient,
同样也要改最后一行的 return new @R_874_9260@ce.Typhoon@R_874_9260@ceSoapClient(binding,client);
大家可能注意到上面的两句话。
ScriptObject myScript = HtmlPage.Window.GetProperty("GetWeb@R_874_9260@ceUrl") as ScriptObject;
web@R_874_9260@cePath = myScript.InvokeSelf("TyphoonSL").ToString();
这里的 HtmlPage.Window.GetProperty("GetWeb@R_874_9260@ceUrl"),表示外部 JavaScript 方法,也就是承载 Silverlight 页面中的JavaScript函数。
web@R_874_9260@cePath是一个全局的String型变量,是用来保存Web@R_874_9260@ce地址。
@H_298_325@myScript.InvokeSelf("TyphoonSL").ToString();是表示调用外部JavaScript方法并传一个值"typhoonSL"进去.
好Silverlight程序里大功告成,我们看下承载 Silverlight 页面中的JavaScript函数。
里面有个托管代码函数GetAppSetTing();我们看下他的代码:
- <SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"> /// <sumMary>
- /// 获取配置字串
-
/// </sumMary>
-
/// <param name="key">字段名称</param>
-
/// <returns>配置字串</returns>
- public static String GetAppSetTing(String key)
- {
- try
- {
- if (key != null)
- {
- return System.Configuration.ConfigurationSetTings.AppSetTings[key].ToString();
- }
- else
- {
- return String.Empty;
- }
- }
- catch
- {
- return String.Empty;
- }
-
}</SPAN>
我们看他了他调用了ConfigurationSetTings.AppSetTing中的key.那再来看下他调用的Web.Config文件中的节点:
这样动态的Web@R_874_9260@ce、Wcf调用就完成了!
然后就是动态调用地图,其实和动态调用Web@R_874_9260@ce、Wcf差不多。我简单发下他们的代码:
- <SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"> /// <sumMary>
- /// 添加底图
- /// </sumMary>
- private void TiledLayerInit()
- {
- arcGISTiledMap@R_874_9260@ceLayer tiledLayer = new arcGISTiledMap@R_874_9260@ceLayer();
- arcGISTiledMap@R_874_9260@ceLayer imageLayer = new arcGISTiledMap@R_874_9260@ceLayer();
- try
- {
- ScriptObject @H_217_61@myScr = HtmlPage.Window.GetProperty("GetSLTiledLayer") as ScriptObject;
- String url = @H_542_65@myScr.InvokeSelf("TiledLayer").ToString();
- tiledLayer.Url = url;
- }
- catch (Exception eX)
- {
- messageBox.Show("请配置 Gis 底图!" + ex.ToString(), "温馨提示", messageBoxButton.oK);
- }
- finally
- {
- // tiledLayer.Url = "http://demo.augow.com/ArcGIS/rest/@R_874_9260@ces/Map001/World/MapServer";
- }
- imageLayer.Url = "http://@R_874_9260@ces.arcgisonline.com/ArcGIS/rest/@R_874_9260@ces/NGS_Topo_US_2D/MapServer";
- tiledLayer.ID = "StreetMapLayer";
- imageLayer.ID = "ImageMapLayer";
- mymap.Layers.Add(tiledLayer);
- mymap.Layers.Add(imageLayer);
- mymap.Layers["ImageMapLayer"].Visible = false;
- }
- </SPAN>
我的代码里调用了两个地图层,两个都是 ArcGisTiledMap@R_874_9260@ceLayer,这是切片的ArcGis地图服务,也就是把图片切成一块一块,然后下载到客户端来显示。
我们同样看到了 HtmlPage.Window.GetProperty("GetSLTiledLayer") as ScriptObject; 这行代码来调用外部 JavaScript 代码来获取切片服务的 Url。
设置了tiledLayer和imageLayer的Url后我们再设置下他们的 ID号,然后在我们的 Map实例中(也就是mymap)把他们加到地图层上来,然后这两个层就显示在地图上了。
Web.Config中的配置:
这时候我们就把动态服务和动态地图都配置好了!
纠结了半天的排版,我还是决定放弃了,本来想写那个ElementLayer在ArcGis上显示Silverlight原生元素了,我最终还是被@L_673_56@园这个文字排版小工具给打败了,可能是我不太会用吧!下一讲再写那个东西吧!
转自:http://www.cnblogs.com/Royal_WH/archive/2010/11/04/1868873.html
以上是大佬教程为你收集整理的ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务全部内容,希望文章能够帮你解决ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。