zoukankan      html  css  js  c++  java
  • 【转】ArCGIS API for Silverlight 实现闪烁标注功能

    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方法既可以实现了

     

    原文链接:http://blog.csdn.net/arcgisserver_book/article/details/8054742

  • 相关阅读:
    Flink--Window apply
    Flink--time-window 的高级用法
    Flink的Windows
    Flink的流处理--KeyBy
    Flink的分布式缓存
    Flink的广播变量
    Flink--本地执行和集群执行
    Flink-- 数据输出Data Sinks
    存储管理-页式管理
    存储管理-覆盖技术和交换技术
  • 原文地址:https://www.cnblogs.com/dwf07223/p/3055481.html
Copyright © 2011-2022 走看看