微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ArCGIS API for Silverlight 实现闪烁标注功能

1,作为每个标注作为元素进行添加,在ElmentLayer可以放任何SL的控件,可操作性比较强,用起来也比较灵活。可以利用Elment 实现,InfoWindow,tip等功能,当然实现标注可是小菜一碟,

先定义一个UserControl ,UserControl 里面可以添加我们要为要素的标注信息。XAML 如下

[csharp]   view plain copy
  1. <UserControl x:Class="VolunteerAction.MyInfoWindow"  
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  4.     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
  5.     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
  6.     mc:Ignorable="d"  
  7.     d:DesignHeight="300" d:DesignWidth="400">  
  8.     <Grid x:Name="LayoutRoot" Background="{x:Null}" Height="62" Width="290">  
  9.     <TextBlock  HorizontalAlignment="Right" textwrapping="Wrap"  VerticalAlignment="Top"  Height="61" Name="textBlock1" Text="TextBlock"  Width="114" FontSize="18" FontStyle="Italic" FontWeight="Bold" FontFamily="Arial" />  
  10.     </Grid>  
  11. </UserControl>  

cs 文件如下

copy
    using System;  
  1. using System.Collections.Generic;  
  2. using System.Linq;  
  3. using System.Net;  
  4. using System.Windows;  
  5. using System.Windows.Controls;  
  6. using System.Windows.Documents;  
  7. using System.Windows.Input;  
  8. using System.Windows.Media;  
  9. using System.Windows.Media.Animation;  
  10. using System.Windows.Shapes;  
  11.   
  12.   
  13. namespace VolunteerAction  
  14. {  
  15.     public partial class MyText : UserControl  
  16.     {  
  17.         public MyText()  
  18.         {  
  19.             InitializeComponent();  
  20.             Storyboard sd = new Storyboard();  
  21.             sd.AutoReverse = true;  
  22.             ColorAnimation c = new ColorAnimation();  
  23.             c.From = Color.FromArgb(255, 255, 0, 0);  
  24.             c.To = Color.FromArgb(255, 255);  
  25.             c.Duration = new Duration(new TimeSpan(0,1,500));  
  26.             c.RepeatBehavior = RepeatBehavior.Forever;  
  27.             Storyboard.SetTarget(c, textBlock1);  
  28.             Storyboard.SetTargetProperty(c, new PropertyPath("(TextBlock.ForeGround).(SolidColorBrush.Color)"));  
  29.             sd.Children.Add(c);  
  30.             sd.Begin();  
  31.         }  
  32.     }  
  33. }  

这里我只是放了一个 TestBlock,需要注意的是我给这个UIElement 增加一个故事板来形成一个动画,形成颜色随着时间改变。关于故事板的内容,请参考其他相关资料
copy
    c.RepeatBehavior = RepeatBehavior.Forever 为了使动画一直循环  

下面是把我们的Element 添加到地图上,让ElementLayer 来承载我们上面创建的用户控件

copy
     _elementLayer = new ElementLayer();    
  1. Mymap .Layers.Add(_elementLayer);    
  2. MapPoint addpt =(MapPoint) g1.Geometry;    
  3. MyInfoWindow m = new MyInfoWindow();    
  4. m.textBlock1.Text = g.Attributes["Name"].ToString();    
  5. ElementLayer.SetEnvelope(m, new Envelope(addpt, addpt));    
  6. _elementLayer.Children.Add(m)  

运行程序

这样使文本框不断的处于闪烁效果。 


2.我们知道 在ArcGIS API for Silverlight中的符号中 有一个是TextSymbol  我们可以利用这个来实现标注功能,TextSymbol 属于点的符号化。所以我们只要为 一个点的Graphic 的符号设置为 TextSymbol ,文本可以绑定到相应的属性,或者自己设置要显示的文本也是可以的。

关键代码如下 

        

copy
    FeatureLayer mylayer = map.Layers["Mylayer"as FeatureLayer;    
  1.            GraphicCollection gs = mylayer.Graphics;    
  2.            Graphicslayer layer=new Graphicslayer ();    
  3.    
  4.            foreach (Graphic g in gs)    
  5.            {    
  6.                Graphic g1 = new Graphic();    
  7.                g1.Geometry=g.Geometry;    
  8.                Brush  b=new SolidColorBrush(Color.FromArgb(100,255));    
  9.                g1.Symbol = new TextSymbol() { Text = g.Attributes["Name_PY"].ToString().Substring(0,5), Foreground=b, FontSize=20  };    
  10.                    
  11.                layer.Graphics.Add(g1);    
  12.            }    
  13.            map.Layers.Add(layer);    

以上两种实现标注 第一种实现比较灵活,当然第二种方式中我们也可以实现类似第一种的闪烁效果,但是使用Element我们可以添加任意的UIElement.比如 Chart。Datagrid。实现更丰富的标注



如果我们要为一个增加标注,那门我们的标注位置如何获得呢。没关系,ArcGIS Server 提供了 GeometryServices利用几何服务的 LabelPoint方法既可以实现了

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐