1. 支持加载到地图控件中的类型:
参考:http://hi.baidu.com/%B6%C5%B1%F8%B1%F8%B1%F8/blog/item/5d6aa1135fdb231ec83d6d89.html
2. 图层加载顺序
a) 图层加载由下往上,因此最先加载的图层最先绘制,位于最底层,按照加载的先后顺序由下向上叠加绘制。 如图:
|
b) 第一个图层定义了图层的参考系。
3. 加载地图服务的方法
a) 引用ESRI.ArcGIS.Client.dll,并定义命名空间
b) 增加ArcGIS地图服务图层,本例包括瓦片服务、影像服务与动态服务
c) 定义各图层的唯一标识,即ID
d) 引用服务地址
e) 代码如下:
<esri:Mapx:Name="MyMap" > <esri:Map.Layers> <esri:ArcGISTiledMapServiceLayerID="StreetMapLayer" Url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer"/> <esri:ArcGISImageServiceLayerID="SanFranciscoImageLayer" Url="http://serverapps.esri.com/ArcGIS/rest/services/SamplesNET/SanFranciscoImage/MapServer"/> <esri:ArcGISDynamicMapServiceLayerID="CaliforniaLayer" Url="http://serverapps.esri.com/ArcGIS/rest/services/California/MapServer"/> </esri:Map.Layers> </esri:Map>
说明:
-
如果地图的访问需要用户认证,则需要通过Token属性定义令牌,关于安全服务可参考: http://help.arcgis.com/en/webapi/silverlight/help/0166/016600000022000000.htm
-
地图的SnapToLevels属性用于设置是否仅在指定比例等级显示,默认为false,若为true,需要在瓦片图层中定义比例等级;
-
不支持多图层的缓存;
-
ArcGIS动态地图服务均为透明背景;
-
使用Opacity 属性定义图层的透明度。
-
4. 使用图层范围设置地图初始化范围
一旦地图服务图层被初始化,将可获得该图层的InitialExtent与FullExtent。可在后置代码中定义地图范围。步骤如下:
a) 在XAML中增加Layer的Initialized属性,定义处理方法名(在后置代码中将创建该方法);
b) 在处理方法中,sender传递初始化图层,可以将该图层对象转换为ESRI.ArcGIS.Client.Layer抽象类,因为该类定义了FullExtent属性;
c) 通过ZoomTo或PanTo方法,设置地图的初始化范围为地图的初始化范围。
d) 代码如下:
<esri:ArcGISDynamicMapServiceLayerID="CaliforniaLayer" Url="http://serverapps.esri.com/ArcGIS/rest/services/California/MapServer" Initialized="CaliforniaLayer_Initialized"/> privatevoid CaliforniaLayer_Initialized(object sender, EventArgs e) { Layer layer = senderas Layer; MyMap.ZoomTo(layer.FullExtent); }
5. 图层初始化失败的原因分析
图层初始化失败的原因包括:
Url值不正确; 地图服务无法获取; 发布服务的网站没有跨域认证文件(clientaccesspolicy.xml或crossdomain.xml) 地图服务要求安全认证,需要token(令牌)或凭证(credentials)。若图层初始化失败,则不会在地图中显示。可通过InitializationFailed事件进行监听,并通过图层的InitializationFailure属性判断异常原因。步骤如下:
a) 在XAML文件中增加layer InitializationFailed属性,定义处理方法名(在后置代码中将创建该方法)
b) 在处理方法中,sender参数传递初始化失败的图层,将之转换为ESRI.ArcGIS.Client.Layer抽象类,该类定义了InitializationFailure属性;
c) InitializationFailure即初始化异常,分析异常内容,确定原因,本例中 异常信息通过Silverlight的文本块显示。
d) 代码如下:
<esri:ArcGISDynamicMapServiceLayerID="CaliforniaLayer" Url="http://serverapps.esri.com/ArcGIS/rest/services/California/MapServer" InitializationFailed="CaliforniaLayer_InitializationFailed"/> privatevoid CaliforniaLayer_InitializationFailed(object sender, EventArgs e) { Layer layer = senderas Layer; stringexceptionMessage = layer.InitializationFailure.Message; MyTextBlock.Text = exceptionMessage; }