UniqueValueRenderer唯一值渲染

来源:互联网 发布:千语淘客助手软件下载 编辑:程序博客网 时间:2024/05/17 22:28

为了使地图更加美观,我们可以利用渲染来实现,比如要是某一图层中某一字段下的不同值的要素显示不同颜色,以此来区分,可以通过UniqueValueRender唯一值渲染器。唯一值渲染的定义是根据要素属性值来设置地图符号,具有相同属性值得要素采用相同的符号,而属性值不同的要素则采用不同的符号。由以上定义可知,唯一值渲染法的基本步骤是,设置要渲染的属性字段,找到该字段的不同值设置不同的符号。下面采用XAML和C#代码两种方式实现,具体如下:

一、XAML代码

  具体代码的实现时,与实现思路刚好是反的。

  1、设置不同值得不同符号

   以静态资源的方式实现:

  <Grid.Resources>
    <esri:PictureMarkerSymbol x:Key="PQT" Height="30" Width="30" OffsetX="15" OffsetY="15" Source="Images\Person24.png" /><!--用的是点图片符号-->
    <esri:PictureMarkerSymbol x:Key="PZYH" Height="30" Width="30" OffsetX="15" OffsetY="15" Source="Images\PersonGreen48.png" />
    <esri:PictureMarkerSymbol x:Key="PMY" Height="30" Width="30" OffsetX="15" OffsetY="15" Source="Images\PersonBlue48.png" />
    <esri:PictureMarkerSymbol x:Key="PMZ" Height="30" Width="30" OffsetX="15" OffsetY="15" Source="Images\PersonRed48.png" />

     <Grid.Resources>

  2、将符号赋值给不同值

   同样以静态资源形式实现

   <Grid.Resources>  

    <esri:UniqueValueRenderer x:Key="PeopleUniqueValueRenderer" Attribute="Class" >
    <esri:UniqueValueRenderer.Infos><!--设置不同符号的不同值-->
      <esri:UniqueValueInfo Value="类别1" Symbol="{StaticResource PZYH}" />
      <esri:UniqueValueInfo Value="类别2" Symbol="{StaticResource PMZ}" />
      <esri:UniqueValueInfo Value="类别3" Symbol="{StaticResource PMY}" />
      <esri:UniqueValueInfo Value="其他" Symbol="{StaticResource PQT}" />
    </esri:UniqueValueRenderer.Infos>
    </esri:UniqueValueRenderer>
   </Grid.Resources>

  3、将渲染器赋值给要渲染的图层

     <esri:FeatureLayer ID="People" DisableClientCaching="True" AutoSave="False" **** Renderer="{StaticResource PeopleUniqueValueRenderer }"  /><!--Render属性就是渲染属性-->

二、C#代码

  C#代码的实现思路与XAML一致,这里不再赘述,只贴代码

  /////设置符号信息

  UniqueValueInfo info1 = new UniqueValueInfo();
  info1.Value = "类别1";
  info1.Symbol = new PictureMarkerSymbol() { Height = 30, Width = 30, OffsetX = 15, OffsetY = 15, Source = new BitmapImage(new      Uri(@"1.png",      UriKind.Absolute)) };

  UniqueValueInfo info2 = new UniqueValueInfo();
  info2.Value = "类别2";
  info2.Symbol = new PictureMarkerSymbol() { Height = 30, Width = 30, OffsetX = 15, OffsetY = 15, Source = new BitmapImage(new        Uri(@"2.png",         UriKind.Absolute)) };

     UniqueValueInfo info3 = new UniqueValueInfo();
     info3.Value = "类别3";
     info3.Symbol = new PictureMarkerSymbol() { Height = 30, Width = 30, OffsetX = 15, OffsetY = 15, Source = new BitmapImage(new           Uri(@"3.png", UriKind.Absolute)) };

  ////设置渲染器信息

  UniqueValueRenderer render = new UniqueValueRenderer();
  render.Field = "Class";//这里建议用Field而不用Attribute设置渲染字段

  render.Infos.Add(info1);
  render.Infos.Add(info2);
  render.Infos.Add(info3);

  ////渲染图层

  (map1.Layers["People"] as FeatureLayer).Renderer = render;

效果如下

还有SimpleRender和ClassBreaksRender也可以用类似的方法实现。