一、创建地图
假设你已经在VS中创建了一个Silverlight应用程序,已打开一个主页,如MainPage.xaml。
- 增加引用 ESRI.ArcGIS.Client.dll
在 XAML中增加对esri命名空间的引用,这样可以在程序中使用 ESRI.ArcGIS.Client、 ESRI.ArcGIS.Client.Behaviors、and ESRI.ArcGIS.Client.Toolkit等类与控件。
<UserControl x:Class="SilverlightApplication.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:esri="http://schemas.esri.com/arcgis/client/2009">
2. 删除该页面中定义的UserControl的Width与Height属性。这样页面内容可以填满整个浏览器。
3. 往容器中增加Map控件,这里的容器为Grid控件。使用ESRI.ArcGIS.Client的命名空间标识esri及Map控件,使用x:Name属性给Map控件命名。
<Grid x:Name="LayoutRoot" Background="White">
<esri:Map x:Name="MyMap" >
</esri:Map>
</Grid>
<esri:Map x:Name="MyMap" >
<esri:Map.Layers>
<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"
Url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer" />
</esri:Map.Layers>
</esri:Map>
<esri:Map x:Name="MyMap" Extent="-120, 20, -100, 40" >
二、初始地图范围与属性
以下属性可以在初始化地图时定义:
- 初始范围
- 空间参考
- 最小与最大分辨率
说明:
- 地图的空间参考一旦被设定,则不能被修改。
- 如果地图包含瓦片图层,分辨率范围由瓦片图层集决定。
- 这些属性均可以在地图初始化时被设定。
三、设置初始化范围
在XAML文件中,通过Map的Extent属性定义,由四个由逗号隔开的数字表示,分别表示minX,minY,MaxX,maxY
<esri:Map x:Name="MyMap" Extent="-120,20,-100,40" >
<esri:Map.Layers>
<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"
Url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer" />
</esri:Map.Layers>
</esri:Map>
四、定义地图的参考系
默认情况下,第一个有效的图层定义了该地图的空间参考系, ArcGIS Server的动态地图与影像图层以及对象图层(FeatureLayer)会重投影到地图的参考系,瓦片地图不会被重投影,因此地图机其他图层要尽量与瓦片图层的参考系保持一致。若要自定义地图参考系,创建Envelope,给SpatialReferencef赋值。如:
<esri:Map x:Name="MyMap">
<esri:Map.Extent>
<esri:Envelope XMin="661140" YMin="-1420246" XMax="3015668" YMax="1594451" >
<esri:Envelope.SpatialReference>
<esri:SpatialReference WKID="26777"/>
</esri:Envelope.SpatialReference>
</esri:Envelope>
</esri:Map.Extent>
也可以在地图控件的构造函数中通过代码实现不同坐标系之间的转换,前提是增加对ESRI.ArcGIS.Client.Bing的引用,代码如下:
ESRI.ArcGIS.Client.Geometry.Envelope initialExtent = new
ESRI.ArcGIS.Client.Geometry.Envelope(ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator( new
ESRI.ArcGIS.Client.Geometry.MapPoint(-130, 20)),
ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new ESRI.ArcGIS.Client.Geometry.MapPoint(-65, 55)));
initialExtent.SpatialReference = new ESRI.ArcGIS.Client.Geometry.SpatialReference(102100);
MyMap.Extent = initialExtent;