使用特定颜色

时间:2015-04-27 17:32:26

标签: c# wpf arcgis

我正在尝试构建一个功能,让用户可以使用特定颜色绘制特定要素图层。通过更改FeatureLayer.Renderer,图层上的所有注释都会更改为指定的颜色,甚至是前一个会话中的注释。我希望能够在那里使用特定颜色的旧注释,并使用它们的特定颜色(可能不同)绘制新的注释。

这是定义地图和要素图层的XAML

    <UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="GraphicsDictionary.xaml" x:Name="LineSymbolResourceDictionary"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

<Grid Name="MapGrid">
    <esri:Map x:Name="MyMap">

        <esri:ArcGISTiledMapServiceLayer 
            ID="StreetMapLayer" 
            x:Name="BaseMap"
            Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" 
            >
        </esri:ArcGISTiledMapServiceLayer>

        <esri:FeatureLayer 
            ID="MyFeatureLayer" 
            x:Name="MyFeatureLayer"
            Url="http://123.123.123.12:6080/arcgis/rest/services/Prj/FeatureServer/0" 
            Renderer="{StaticResource BlueSimpleRenderer}"
            EndSaveEdits="drawLayer_EndSaveEdits" 
            >
        </esri:FeatureLayer>
    </esri:Map>
</Grid>

资源字典:

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:esriSymbols="clr-namespace:ESRI.ArcGIS.Client.Symbols;assembly=ESRI.ArcGIS.Client" 
xmlns:esri="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client"
x:Class="ClassName.GraphicsDictionary"
>

<esri:SimpleRenderer x:Key="BlueSimpleRenderer">
    <esri:SimpleRenderer.Symbol>
        <esriSymbols:SimpleLineSymbol x:Name="BlueLineSymbol" Color="#00007F" Width="5"/>
    </esri:SimpleRenderer.Symbol>
</esri:SimpleRenderer>

C#绘图代码:

public void StartDrawing(FeatureLayer inputLayer, string inputColorInHex)
{
    MyMap.Cursor = System.Windows.Input.Cursors.Pen;
    //Below's the color that might be different from the original renderer
    SimpleRenderer newRend= new SimpleRenderer 
    { 
       Symbol = new SimpleLineSymbol((Color)ColorConverter.ConvertFromString(inputColorInHex), 12)        
    };
    inputLayer.Renderer = newRend as IRenderer;
    MyDrawObject.DrawMode = ESRI.ArcGIS.Client.DrawMode.Freehand;
    MyDrawObject.IsEnabled = true;
}

1 个答案:

答案 0 :(得分:0)

渲染器适用于图层中的所有要素(图形),因此如果要使用渲染器,可以使用唯一值渲染器并为不同的属性值设置不同的样式,但这意味着您知道在定义时要使用的值颜色。同样,如果要根据一系列值控制颜色,则可以使用类分解渲染器。

在您的情况下,您可能只想为要素设置特定符号,因为符号会覆盖渲染器。您只需将符号应用于图形即可使用。 e.g。

var markerSym = new Esri.ArcGISRuntime.Symbology.SimpleMarkerSymbol
{
    Style = Esri.ArcGISRuntime.Symbology.SimpleMarkerStyle.Diamond,
    Color = Colors.Green,
    Size = 18
};

var pointGraphic = new Esri.ArcGISRuntime.Layers.Graphic(point, markerSym);

graphicsLayer.Graphics.Add(pointGraphic);