1.基础底图通常使用TiledLayer或者ArcGISDynamicLayer。
本质上都是在本地加载栅格图片。后台生成策略不同而已。从Vs2010的控件栏上拖过来的Map控件默认添加的底图是Esri的:
<esri:ArcGISTiledMapServiceLayer Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
如果使用代码在初始化的时候可以这么写:
ArcGISTiledMapServiceLayer tiledLayer = new ArcGISTiledMapServiceLayer() {
Url = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer",
ID="tiledLayer"
};
2.绘制图层: GraphicLayer是最容易出现交互操作的图层。
在这上面可以添加点、线、面。三种不同的图形需要不同的符号来渲染。不同的符号系统需要使用代码,不过SilverLight提供了一种
更为简单易见的形式:使用XML配置。如下:
<Grid.Resources>
<esri:SimpleMarkerSymbol x:Key="BlackMarkerSymbol" Color="Black" Style="Cross" Size="12" />
<esri:PictureMarkerSymbol x:Key="GlobePictureSymbol" OffsetX="8" OffsetY="8" Source="/Assets/images/globe-16x16.png" />
<esri:SimpleLineSymbol x:Key="DefaultLineSymbol" Color="Green" Style="DashDot" Width="4" />
<esri:SimpleFillSymbol x:Key="DefaultFillSymbol" Fill="Green" BorderBrush="Blue" BorderThickness="3" />
</Grid.Resources>
节点<Grid.Resources>是指明为资源文件,之下放置了实例化的各个Symbol组件。使用x:Key来标识。接下来看如何解析该资源:
1 Symbol makersymbol = LayoutRoot.Resources["BlackMarkerSymbol"] as Symbol; 2 marker.Style = SimpleMarkerSymbol.SimpleMarkerStyle.Square; 3 graphic.Symbol = makersymbol; 4 graphic.Geometry = e.Geometry; 5 graphicLayer.Graphics.Add(graphic);
3.事件操作
交互操作免不了有各种事件实现。有些事件是可以通过vs的事件钩子实现,例如按钮点击事件。有些就需要另外一种策略实现:事件订阅也就是eventHandler。这是一种将方法封装成事件处理程序的方式
每一个定义了事件的类都可以用+=来添加相应的evenHandler来处理。如:
1 void initGraphic() 2 { 3 drawable = new Draw(map1); 4 drawable.DrawMode = DrawMode.Point; 5 drawable.DrawComplete += new EventHandler<DrawEventArgs>(drawable_DrawComplete); 6 } 7 void drawable_DrawComplete(object sender, DrawEventArgs e) 8 { 9 Graphic graphic = new Graphic(); 10 SimpleMarkerSymbol marker = new SimpleMarkerSymbol(); 11 marker.Size = 10; 12 Symbol makersymbol = LayoutRoot.Resources["BlackMarkerSymbol"] as Symbol; 13 marker.Style = SimpleMarkerSymbol.SimpleMarkerStyle.Square; 14 graphic.Symbol = makersymbol; 15 graphic.Geometry = e.Geometry; 16 graphicLayer.Graphics.Add(graphic); 17 }