平台:Vs 2010,Blend 4,Silverlight 4
调用API: ArcGis for Silverligth API(ESRI.ArcGIS.Client)
OK,今天又有空来写点啦,这个例子自己不想拉的太长了,所以这节多写点东西,我尽量把东西都介绍全面,有不懂的可以留言~
有空大家共同讨论。
好进入正题,如今天标题所示,我们先来看画点,线,圆吧!
04 |
/// <param name="myMap"></param> |
05 |
/// <param name="point"></param> |
06 |
/// <param name="pointLine"></param> |
07 |
public void DrawAnimationCompleted(Map myMap, List<Graphic> point,ESRI.ArcGIS.Client.Geometry.PointCollection pointLine) |
09 |
GraphicsLayer gPointLayer = new GraphicsLayer(); |
10 |
GraphicsLayer lineLayer = new GraphicsLayer(); |
11 |
SimpleLineSymbol lineSymbol = new SimpleLineSymbol(); |
12 |
lineSymbol.Color = new SolidColorBrush(Colors.Brown); |
14 |
lineSymbol.Style = SimpleLineSymbol.LineStyle.Solid; |
17 |
GisMap.AddLayersToMap(myMap, new GraphicsLayer[] { lineLayer }); |
18 |
GisLine.DrawLineOnMap(pointLine, lineLayer, lineSymbol); |
20 |
GisMap.DrawAllLayers(myMap, new GraphicsLayer[] { gPointLayer }, point); |
21 |
GisMap.AddLayersToMap(myMap, new GraphicsLayer[] { gPointLayer }); |
好,看一下如何画圆吧。
04 |
/// <param name="myMap">地图</param> |
05 |
/// <param name="container">绘制容器</param> |
06 |
/// <param name="pt">要绘制的点</param> |
07 |
/// <param name="drawCircleLayer"></param> |
08 |
/// <param name="circleKm">直径</param> |
09 |
/// <param name="color">填充色</param> |
10 |
/// <param name="ellipseStroke">边框色</param> |
11 |
public void DrawEllipse(Map myMap, Canvas container, MapPoint pt, ref ElementLayer drawCircleLayer, double circleKm,Color color,Color ellipseStroke) |
13 |
if (!drawCircleLayer.Children.Contains(container)) |
15 |
drawCircleLayer.Children.Add(container); |
16 |
container.Opacity = 0.5; |
17 |
container.SetValue(ElementLayer.EnvelopeProperty, new Envelope(myMap.Extent.XMax, myMap.Extent.YMax, myMap.Extent.XMin, myMap.Extent.YMin)); |
20 |
Point ptFirst = myMap.MapToScreen( new MapPoint(Convert.ToDouble(pt.X), |
21 |
Convert.ToDouble(pt.Y))); |
23 |
Point pt7 = myMap.MapToScreen( new MapPoint((Convert.ToDouble(pt.X) + circleKm * kmToEN), |
24 |
Convert.ToDouble(pt.Y))); |
26 |
Ellipse ellipse7 = new Ellipse(); |
27 |
ellipse7.Width = (pt7.X - ptFirst.X) * 2; |
28 |
ellipse7.Height = ellipse7.Width; |
29 |
ellipse7.StrokeThickness = 1; |
30 |
ellipse7.Stroke = new SolidColorBrush(ellipseStroke); |
31 |
ellipse7.Fill = new SolidColorBrush(color); |
32 |
Canvas.SetLeft(ellipse7, ptFirst.X - ellipse7.Width / 2); |
33 |
Canvas.SetTop(ellipse7, ptFirst.Y - ellipse7.Width / 2); |
34 |
ellipse7.Opacity = 0.5; |
36 |
container.Children.Add(ellipse7); |
37 |
container.IsHitTestVisible = false ; |
38 |
container.SetValue(Canvas.ZIndexProperty, -10); |
这是一个画圆的方法,需要地图类,点,Canvas容器,Gis 的地图层ElementLayer和color
我前台是这样调用的
/// <param name="myMap"></param> |
/// <param name="sender"></param> |
public void DrawEllipse7And10WindCircle(Map myMap, object sender) |
if (GisMap.LayerExist(myMap, "WindCircleLayer" )) |
{ GisMap.DeleteLayersToMap(myMap, "WindCircleLayer" ); } |
ElementLayer circleLayer = new ElementLayer(); |
circleLayer.ID = "WindCircleLayer" ; |
Canvas circleCanvas = new Canvas(); |
Graphic tipGraphic = sender as Graphic; |
if (Convert.ToDouble(tipGraphic.Attributes[ "WindCircle7" ]) != 0) |
Color color = new Color(); |
DrawEllipse(myMap, circleCanvas, new MapPoint(Convert.ToDouble(tipGraphic.Attributes[ "Longitude" ]), |
Convert.ToDouble(tipGraphic.Attributes[ "Latitude" ])), ref circleLayer, |
Convert.ToDouble(300), color, Colors.Blue); |
if (Convert.ToDouble(tipGraphic.Attributes[ "WindCircle10" ]) != 0) |
Color color = new Color(); |
this .DrawEllipse(myMap, circleCanvas, new MapPoint(Convert.ToDouble(tipGraphic.Attributes[ "Longitude" ]), |
Convert.ToDouble(tipGraphic.Attributes[ "Latitude" ])), ref circleLayer, |
Convert.ToDouble(tipGraphic.Attributes[ "WindCircle10" ]), color, Colors.Blue); |
GisMap.AddLayersToMap(myMap, new ElementLayer[] { circleLayer }); |
这里的sender是一个Gis元素 Graphic,根据我的WebService 取到的实体后我把这个点加上了Attributes,一系列属性,所以在上面的代码可以看到tipGraphic.Attributes["WindCircle10"],
下面的代码就是在我从WebService取到实体后做添加点的代码:
/// <param name="model"></param> |
/// <param name="i"></param> |
private void AddPointToGraphic(TyphoonModel model, int i, List<Graphic> pointParam) |
SimpleMarkerSymbol symbol = new SimpleMarkerSymbol(); |
Color color = new Color(); |
if (Convert.ToDouble(model.WS) <= 17.1) |
symbol.Color = new SolidColorBrush(color); |
else if (Convert.ToDouble(model.WS) > 17.1 && Convert.ToDouble(model.WS) <= 24.4) |
symbol.Color = new SolidColorBrush(color); |
else if (Convert.ToDouble(model.WS) > 24.4 && Convert.ToDouble(model.WS) <= 32.6) |
symbol.Color = new SolidColorBrush(color); |
else if (Convert.ToDouble(model.WS) > 32.6 && Convert.ToDouble(model.WS) <= 41.4) |
color.B = 4; symbol.Color = new SolidColorBrush(color); |