• ArCGIS API for Silverlight 实现要素标注功能


    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
  • 相关阅读:
    5款强大的Java Web开发工具
    [Visual Studio] 重置默认设置 还原默认设置
    [Visual Studio] VS2012调试时很慢的解决方案
    SQL 语句与性能之执行顺序
    SQL 语句与性能之联合查询和联合分类查询
    使用SHFB(Sandcastle Help File Builder)建立MSDN风格的代码文档
    循序渐进地代码重构
    博客收藏
    [已解决]:调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "c:WindowsMicrosoft.NETFrameworkv4.0.30319\aspnet_filter.
    [Visual Studio] .vsix项目模板制作
  • 原文地址:https://www.cnblogs.com/devgis/p/16531120.html
Copyright © 2020-2023  润新知