ArCGIS API for Silverlight 实现要素标注功能
时间:2012-10-11 19:47 来源:CSDN 作者:ArcgisServer_book 点击: 573次
1,作为每个标注作为元素进行添加,在ElmentLayer可以放任何SL的控件,可操作性比较强,用起来也比较灵活。可以利用Elment 实现,InfoWindow,tip等功能,当然实现标注可是小菜一碟, 先定义一个UserControl ,UserControl 里面可以添加我们要为要素的标注信息。XAML 如下 UserControlx:Class= VolunteerAction.MyInfoWind
1,作为每个标注作为元素进行添加,在ElmentLayer可以放任何SL的控件,可操作性比较强,用起来也比较灵活。可以利用Elment 实现,InfoWindow,tip等功能,当然实现标注可是小菜一碟,
先定义一个UserControl ,UserControl 里面可以添加我们要为要素的标注信息。XAML 如下
< UserControl x:Class= "VolunteerAction.MyInfoWindow" xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d= "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc= "http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable= "d" d:DesignHeight= "300" d:DesignWidth= "400"> < Grid x:Name= "LayoutRoot" Background= "{x:Null}" Height= "62" Width= "290"> < TextBlock HorizontalAlignment= "Right" TextWrapping= "Wrap" VerticalAlignment= "Top" Height= "61" Name= "textBlock1" Text= "TextBlock" Width= "114" FontSize= "18" FontStyle= "Italic" FontWeight= "Bold" FontFamily= "Arial" /> < /Grid> < /UserControl>
cs 文件如下
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace VolunteerAction { public partial class MyText : UserControl { public MyText() { InitializeComponent(); Storyboard sd = new Storyboard(); sd.AutoReverse = true; ColorAnimation c = new ColorAnimation(); c.From = Color.FromArgb(255, 255, 0, 0); c.To = Color.FromArgb(255, 255, 255, 255); c.Duration = new Duration( new TimeSpan(0,0,0,1,500)); c.RepeatBehavior = RepeatBehavior.Forever; Storyboard.SetTarget(c, textBlock1); Storyboard.SetTargetProperty(c, new PropertyPath( "(TextBlock.ForeGround).(SolidColorBrush.Color)")); sd.Children.Add(c); sd.Begin(); } } }
这里我只是放了一个 TestBlock,需要注意的是我给这个UIElement 增加了一个故事板来形成一个动画,形成颜色随着时间改变。关于故事板的内容,请参考其他相关资料
c.RepeatBehavior = RepeatBehavior.Forever 为了使动画一直循环
下面是把我们的Element 添加到地图上,让ElementLayer 来承载我们上面创建的用户控件
_elementLayer = new ElementLayer(); Mymap .Layers.Add(_elementLayer); MapPoint addpt =(MapPoint) g1.Geometry; MyInfoWindow m = new MyInfoWindow(); m.textBlock1.Text = g.Attributes[ "Name"].ToString(); ElementLayer.SetEnvelope(m, new Envelope(addpt, addpt)); _elementLayer.Children.Add(m)
运行程序
这样使文本框不断的处于闪烁效果。
2.我们知道 在ArcGIS API for Silverlight中的符号中 有一个是TextSymbol 我们可以利用这个来实现标注功能,TextSymbol 属于点的符号化。所以我们只要为 一个点的Graphic 的符号设置为 TextSymbol ,文本可以绑定到相应的属性,或者自己设置要显示的文本也是可以的。
关键代码如下
FeatureLayer mylayer = map.Layers[ "Mylayer"] as FeatureLayer; GraphicCollection gs = mylayer.Graphics; GraphicsLayer layer= new GraphicsLayer (); foreach (Graphic g in gs) { Graphic g1 = new Graphic(); g1.Geometry=g.Geometry; Brush b= new SolidColorBrush(Color.FromArgb(100,0,0,255)); g1.Symbol = new TextSymbol() { Text = g.Attributes[ "Name_PY"].ToString().Substring(0,5), Foreground=b, FontSize=20 }; layer.Graphics.Add(g1); } map.Layers.Add(layer);
以上两种实现标注 第一种实现比较灵活,当然第二种方式中我们也可以实现类似第一种的闪烁效果,但是使用Element我们可以添加任意的UIElement.比如 Chart。Datagrid。实现更丰富的标注
如果我们要为一个面增加标注,那门我们的标注位置如何获得呢。没关系,ArcGIS Server 提供了 GeometryServices利用几何服务的 LabelPoint方法既可以实现了
本文来自ArcgisServer_book的博客,原文地址:http://blog.csdn.net/ArcgisServer_book/article/details/8054742