private void ChangeRenderer() { var renderer = new UniqueValueRenderer() { Fields = new ObservableCollection <string>(new List <string> { "Name" }) }; renderer.Infos = new UniqueValueInfoCollection(_states.Graphics .Select(g => g.Attributes["Name"]) .Distinct() .Select(obj => new UniqueValueInfo { Values = new ObservableCollection <object>(new object[] { obj }), Symbol = new SimpleFillSymbol() { Outline = new SimpleLineSymbol() { Color = Colors.BlueViolet, Width = 6 }, Color = Colors.Black } })); _states.Renderer = renderer; }
private void RendererType_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (RendererType.SelectedIndex == 0) { if (!(Renderer is SimpleRenderer)) { Renderer = new SimpleRenderer(new SimpleMarkerSymbol()); return; } } else if (RendererType.SelectedIndex == 1) { if (!(Renderer is UniqueValueRenderer)) { Renderer = new UniqueValueRenderer(); return; } } else if (RendererType.SelectedIndex == 2) { if (!(Renderer is ClassBreaksRenderer)) { Renderer = new ClassBreaksRenderer(); return; } } else if (RendererType.SelectedIndex == 3) { if ((Renderer is null) || HeatMapRendererEditor.HeatMapRendererModel.FromRenderer(Renderer).type != "heatmap") { Renderer = new HeatMapRendererEditor.HeatMapRendererModel().AsRenderer(); return; } } }
protected virtual void WriteRenderer(IRenderer renderer) { if (IsSerializable(renderer)) { ClassBreaksRenderer classBreaksRenderer = renderer as ClassBreaksRenderer; if (classBreaksRenderer != null) { writer.WriteStartElement("GraphicsLayer.Renderer", Namespaces[Constants.esriPrefix]); WriteClassBreaksRenderer(classBreaksRenderer); writer.WriteEndElement(); } else { UniqueValueRenderer uniqueValueRenderer = renderer as UniqueValueRenderer; if (uniqueValueRenderer != null) { writer.WriteStartElement("GraphicsLayer.Renderer", Namespaces[Constants.esriPrefix]); WriteUniqueValueRenderer(uniqueValueRenderer); writer.WriteEndElement(); } else { SimpleRenderer simpleRenderer = renderer as SimpleRenderer; if (simpleRenderer != null) { writer.WriteStartElement("GraphicsLayer.Renderer", Namespaces[Constants.esriPrefix]); WriteSimpleValueRenderer(simpleRenderer); writer.WriteEndElement(); } } } } }
private void WriteUniqueValueRenderer(UniqueValueRenderer uniqueValueRenderer) { writer.WriteStartElement("UniqueValueRenderer", Namespaces[Constants.esriPrefix]); if (!string.IsNullOrEmpty(uniqueValueRenderer.Field)) { WriteAttribute("Field", uniqueValueRenderer.Field); } WriteAttribute("DefaultLabel", uniqueValueRenderer.DefaultLabel); if (uniqueValueRenderer.DefaultSymbol != null) { writer.WriteStartElement("UniqueValueRenderer.DefaultSymbol", Namespaces[Constants.esriPrefix]); (new SymbolXamlWriter(writer, Namespaces)).WriteSymbol(uniqueValueRenderer.DefaultSymbol); writer.WriteEndElement(); } if (uniqueValueRenderer.Infos != null && uniqueValueRenderer.Infos.Count > 0) { writer.WriteStartElement("UniqueValueRenderer.Infos", Namespaces[Constants.esriPrefix]); foreach (ESRI.ArcGIS.Client.UniqueValueInfo uniqueValueInfo in uniqueValueRenderer.Infos) { WriteUniqueValueInfo(uniqueValueInfo); } writer.WriteEndElement();// UniqueValueRenderer.Infos } writer.WriteEndElement(); }
void optionsConfigControl_NewUniqueValueCreated(object sender, NewUniqueValueInfoEventArgs e) { if (RendererSymbolSetContainerControl != null) { UniqueValueRendererSymbolsConfigControl symbolsConfigControl = RendererSymbolSetContainerControl.Content as UniqueValueRendererSymbolsConfigControl; if (symbolsConfigControl != null) { FieldType fieldType = FieldType.Text; GraphicsLayer graphicsLayer = Layer as GraphicsLayer; if (graphicsLayer == null) { return; } UniqueValueRenderer uniqueValueRenderer = graphicsLayer.Renderer as UniqueValueRenderer; if (uniqueValueRenderer == null) { return; } Collection <FieldInfo> fields = ESRI.ArcGIS.Mapping.Core.LayerExtensions.GetFields(graphicsLayer); if (fields != null) { FieldInfo selectedField = fields.FirstOrDefault <FieldInfo>(f => f.Name == uniqueValueRenderer.Field); if (selectedField != null) { fieldType = selectedField.FieldType; symbolsConfigControl.AddNewUniqueValue(createNewUniqueValue(e.UniqueValue, fieldType), fieldType); graphicsLayer.Refresh(); } } } } }
public static void UniqueValueRender(IFeatureLayer pFLayer, string fieldName) { IUniqueValueRenderer uniqueValueRenderer = new UniqueValueRenderer(); uniqueValueRenderer.FieldCount = 1; uniqueValueRenderer.set_Field(0, fieldName); List <string> uniqueValues = GetLayerUniqueFieldValue(pFLayer, fieldName); Random rand = new Random(); foreach (string value in uniqueValues) { IFillSymbol fillSymbol = new SimpleFillSymbol(); fillSymbol.Color = new RgbColor() { Red = rand.Next(0, 255), Green = rand.Next(0, 255), Blue = rand.Next(0, 255) }; uniqueValueRenderer.AddValue(value, "", (ISymbol)fillSymbol); } var featureRenderer = (IFeatureRenderer)uniqueValueRenderer; var geoFeatureLayer = (IGeoFeatureLayer)pFLayer; geoFeatureLayer.Renderer = featureRenderer; }
private void Initialize() { // Create new Map with basemap Map myMap = new Map(Basemap.CreateTopographic()); // Create uri to the used feature service var serviceUri = new Uri( "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3"); // Create service feature table ServiceFeatureTable statesFeatureTable = new ServiceFeatureTable(serviceUri); // Create a new feature layer using the service feature table FeatureLayer statesLayer = new FeatureLayer(statesFeatureTable); // Create a new unique value renderer UniqueValueRenderer regionRenderer = new UniqueValueRenderer(); // Add the "SUB_REGION" field to the renderer regionRenderer.FieldNames.Add("SUB_REGION"); // Define a line symbol to use for the region fill symbols SimpleLineSymbol stateOutlineSymbol = new SimpleLineSymbol( SimpleLineSymbolStyle.Solid, System.Drawing.Color.White, 0.7); // Define distinct fill symbols for a few regions (use the same outline symbol) SimpleFillSymbol pacificFillSymbol = new SimpleFillSymbol( SimpleFillSymbolStyle.Solid, System.Drawing.Color.Blue, stateOutlineSymbol); SimpleFillSymbol mountainFillSymbol = new SimpleFillSymbol( SimpleFillSymbolStyle.Solid, System.Drawing.Color.LawnGreen, stateOutlineSymbol); SimpleFillSymbol westSouthCentralFillSymbol = new SimpleFillSymbol( SimpleFillSymbolStyle.Solid, System.Drawing.Color.SandyBrown, stateOutlineSymbol); // Add values to the renderer: define the label, description, symbol, and attribute value for each regionRenderer.UniqueValues.Add( new UniqueValue("Pacific", "Pacific Region", pacificFillSymbol, "Pacific")); regionRenderer.UniqueValues.Add( new UniqueValue("Mountain", "Rocky Mountain Region", mountainFillSymbol, "Mountain")); regionRenderer.UniqueValues.Add( new UniqueValue("West South Central", "West South Central Region", westSouthCentralFillSymbol, "West South Central")); // Set the default region fill symbol (transparent with no outline) for regions not explicitly defined in the renderer SimpleFillSymbol defaultFillSymbol = new SimpleFillSymbol( SimpleFillSymbolStyle.Null, System.Drawing.Color.Transparent, null); regionRenderer.DefaultSymbol = defaultFillSymbol; regionRenderer.DefaultLabel = "Other"; // Apply the unique value renderer to the states layer statesLayer.Renderer = regionRenderer; // Add created layer to the map myMap.OperationalLayers.Add(statesLayer); // Assign the map to the MapView _myMapView.Map = myMap; // Feature table initialization statesFeatureTable.RetryLoadAsync(); }
/// <summary> /// Handle FeatureLayer Initialization Event /// </summary> private void FeatureLayer_Initialized(object sender, EventArgs e) { FeatureLayer fLayer = sender as FeatureLayer; EditFeatureLayer editLayer = widgetConfig.EditableLayers.FirstOrDefault(layer => fLayer.ID.Equals(string.Format("edit_{0}", layer.ID.ToString()))); if (string.IsNullOrEmpty(editLayer.OutFields) || editLayer.OutFields == "*") { foreach (Field f in fLayer.LayerInfo.Fields) { fLayer.OutFields.Add(f.Name); } } else { string[] fields = editLayer.OutFields.Split(','); foreach (string field in fields) { fLayer.OutFields.Add(field); } } if (editLayer != null) { SymbolTypeGroup typeGroup = new SymbolTypeGroup(); typeGroup.LayerID = fLayer.ID; typeGroup.LayerName = editLayer.Title; typeGroup.LayerVisibility = editLayer.VisibleInitial; symbolTypeGroups.Add(typeGroup); if (fLayer.LayerInfo.Renderer is SimpleRenderer) { SimpleRenderer renderer = fLayer.LayerInfo.Renderer as SimpleRenderer; SymbolType symbolType = new SymbolType(fLayer.LayerInfo.Name, null, renderer.Symbol, ""); typeGroup.SymbolTypes.Add(symbolType); } if (fLayer.LayerInfo.Renderer is UniqueValueRenderer) { UniqueValueRenderer renderer = fLayer.LayerInfo.Renderer as UniqueValueRenderer; foreach (UniqueValueInfo valueInfo in renderer.Infos) { SymbolType symbolType = new SymbolType(valueInfo.Label, valueInfo.Value, valueInfo.Symbol, valueInfo.Description); typeGroup.SymbolTypes.Add(symbolType); } } else if (fLayer.LayerInfo.Renderer is ClassBreaksRenderer) { ClassBreaksRenderer renderer = fLayer.LayerInfo.Renderer as ClassBreaksRenderer; foreach (ClassBreakInfo classInfo in renderer.Classes) { SymbolType symbolType = new SymbolType(classInfo.Label, null, classInfo.Symbol, classInfo.Description); typeGroup.SymbolTypes.Add(symbolType); } } } if (symbolTypeGroups.Count == widgetConfig.EditableLayers.Count()) // All layers are initialized { FeatureTemplateList.ItemsSource = symbolTypeGroups; } }
public static Symbol GetDefaultSymbol(this IRenderer renderer) { if (renderer != null) { SimpleRenderer simpleRenderer = renderer as SimpleRenderer; if (simpleRenderer != null) { return(simpleRenderer.Symbol); } else { ClassBreaksRenderer classBreaksRenderer = renderer as ClassBreaksRenderer; if (classBreaksRenderer != null) { return(classBreaksRenderer.DefaultSymbol); } else { UniqueValueRenderer uniqueValueRenderer = renderer as UniqueValueRenderer; if (uniqueValueRenderer != null) { return(uniqueValueRenderer.DefaultSymbol); } } } } return(null); }
// Adds graphics in bulk and use a renderer - Demonstrates the most efficient approach private void AddGraphicsInBulk_Click(object sender, RoutedEventArgs e) { // Clear the existing Graphics ClearGraphicsFromGraphicsLayer(); BulkPerformanceDisplay.Text = defaultTime; // Create a stopwatch to time the add Stopwatch sw = new Stopwatch(); sw.Start(); // Create a instance of the Random class to generate random coordinate pairs. Random random = new Random(); // Add graphics to a List<Graphic> var graphicsList = new List<Graphic>(); for (int i = 0; i < 100000; i++) { var x = (random.NextDouble() * 40000000) - 20000000; var y = (random.NextDouble() * 40000000) - 20000000; var graphic = new Graphic() { // assign each graphic a number 0, 1, 2 - we''ll use this to represent he color Geometry = new MapPoint(x, y), Attributes = { { "Color", i % 3 } } }; graphicsList.Add(graphic); } // create a renderer with 3 symbols, rather than a symbol per graphic var renderer = new UniqueValueRenderer() { Field = "Color", Infos = { new UniqueValueInfo() { Value = 0, Symbol = new SimpleMarkerSymbol() { Color = Brushes.Red, Size=20 } }, new UniqueValueInfo() { Value = 1, Symbol = new SimpleMarkerSymbol() { Color = Brushes.Green, Style=SimpleMarkerSymbol.SimpleMarkerStyle.Diamond, Size=20 } }, new UniqueValueInfo() { Value = 2, Symbol = new SimpleMarkerSymbol() { Color = Brushes.Blue, Style=SimpleMarkerSymbol.SimpleMarkerStyle.Triangle, Size=20 } } } }; _graphicsLayer.Renderer = renderer; // Bulk add of graphics - more efficient than adding one graphic at a time _graphicsLayer.Graphics.AddRange(graphicsList); sw.Stop(); BulkPerformanceDisplay.Text = (sw.ElapsedMilliseconds / 1000.0).ToString() + " Seconds"; }
private static bool IsSerializable(IRenderer renderer) { ClassBreaksRenderer classBreaksRenderer = renderer as ClassBreaksRenderer; if (classBreaksRenderer != null) { if (classBreaksRenderer.Classes != null) { foreach (ClassBreakInfo info in classBreaksRenderer.Classes) { if (!SymbolXamlWriter.IsSerializable(info.Symbol)) { return(false); } } if (!SymbolXamlWriter.IsSerializable(classBreaksRenderer.DefaultSymbol)) { return(false); } } } else { UniqueValueRenderer uniqueValueRenderer = renderer as UniqueValueRenderer; if (uniqueValueRenderer != null) { if (uniqueValueRenderer.Infos != null) { foreach (UniqueValueInfo info in uniqueValueRenderer.Infos) { if (!SymbolXamlWriter.IsSerializable(info.Symbol)) { return(false); } } if (!SymbolXamlWriter.IsSerializable(uniqueValueRenderer.DefaultSymbol)) { return(false); } } } else { SimpleRenderer simpleRenderer = renderer as SimpleRenderer; if (simpleRenderer != null) { if (!SymbolXamlWriter.IsSerializable(simpleRenderer.Symbol)) { return(false); } } } } return(true); }
public static FieldInfo ChangeRenderer(this GraphicsLayer graphicsLayer, string rendererType, FieldInfo attributeField) { IRenderer newRenderer = null; GeometryType geometryType = ESRI.ArcGIS.Mapping.Core.LayerExtensions.GetGeometryType(graphicsLayer); LinearGradientBrush gradientBrush = ESRI.ArcGIS.Mapping.Core.LayerExtensions.GetGradientBrush(graphicsLayer); FieldInfo changedRenderAttributeField = null; List <Symbol> existingSymbolSet = null; if (Constants.ClassBreaksRenderer.Equals(rendererType)) { int classBreakCount = 5; ClassBreaksRenderer currentRenderer = graphicsLayer.Renderer as ClassBreaksRenderer; if (currentRenderer != null) { classBreakCount = currentRenderer.Classes.Count; existingSymbolSet = new List <Symbol>(); foreach (ClassBreakInfo classBreak in currentRenderer.Classes) { existingSymbolSet.Add(classBreak.Symbol); } } newRenderer = createClassBreakRendererBasedOnSelectedAttribute(graphicsLayer, attributeField, gradientBrush, geometryType, classBreakCount, existingSymbolSet, out changedRenderAttributeField); } else if (Constants.UniqueValueRenderer.Equals(rendererType)) { UniqueValueRenderer currentRenderer = graphicsLayer.Renderer as UniqueValueRenderer; if (currentRenderer != null) { existingSymbolSet = new List <Symbol>(); foreach (UniqueValueInfo uniqueValue in currentRenderer.Infos) { existingSymbolSet.Add(uniqueValue.Symbol); } } newRenderer = createUniqueValueRendererBasedOnSelectedAttribute(graphicsLayer, attributeField, gradientBrush, geometryType, existingSymbolSet, out changedRenderAttributeField); } else if (Constants.SimpleRenderer.Equals(rendererType)) { newRenderer = createNewDefaultSimpleRenderer(graphicsLayer); } assignNewRendererToLayer(graphicsLayer, newRenderer); if (changedRenderAttributeField != null) { ESRI.ArcGIS.Mapping.Core.LayerExtensions.SetRendererAttributeDisplayName(graphicsLayer, changedRenderAttributeField.DisplayName); } else if (attributeField != null) { ESRI.ArcGIS.Mapping.Core.LayerExtensions.SetRendererAttributeDisplayName(graphicsLayer, attributeField.DisplayName); } else { ESRI.ArcGIS.Mapping.Core.LayerExtensions.SetRendererAttributeDisplayName(graphicsLayer, null); } return(changedRenderAttributeField); }
private void ChangeRenderer() { var renderer = new UniqueValueRenderer() { Fields = new ObservableCollection<string>(new string[] { "sub_region" }) }; renderer.Infos = new UniqueValueInfoCollection(_states.Graphics .Select(g => g.Attributes["sub_region"]) .Distinct() .Select(obj => new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { obj }), Symbol = GetRandomSymbol() })); _states.Renderer = renderer; }
public void UniqueValueMultiCondition(IGeoFeatureLayer geoLayer, string aFieldName, string Value) { IUniqueValueRenderer MyIUniqueValueRenderer; MyIUniqueValueRenderer = new UniqueValueRenderer(); MyIUniqueValueRenderer.FieldCount = 1; MyIUniqueValueRenderer.set_Field(0, aFieldName); int intFieldIndex; intFieldIndex = geoLayer.FeatureClass.FindField(aFieldName); IFeatureCursor MyIFeatureCursor; IQueryFilter MyQueryFilter; MyQueryFilter = new QueryFilter(); int ValuesCount = ListofUniqueValues.Count; for (int i = 0; i < ValuesCount; i++) { MyQueryFilter.WhereClause = ListofUniqueValues[i]; MyIFeatureCursor = geoLayer.FeatureClass.Search(MyQueryFilter, true); IRandomColorRamp MyIRandomColorRamp; MyIRandomColorRamp = new RandomColorRamp(); MyIRandomColorRamp.Size = 16; bool CheckColor; MyIRandomColorRamp.CreateRamp(out CheckColor); if (!CheckColor) { return; } IEnumColors MyIEnumColors; MyIEnumColors = MyIRandomColorRamp.Colors; ISimpleMarkerSymbol MyISimpleMarkerSymbol; IColor MyIColor; IFeature MyIFeature = MyIFeatureCursor.NextFeature(); while (MyIFeature != null) { MyISimpleMarkerSymbol = new SimpleMarkerSymbolClass(); MyIColor = MyIEnumColors.Next(); if ((MyIColor == null)) { MyIEnumColors.Reset(); MyIColor = MyIEnumColors.Next(); } MyISimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCross; MyISimpleMarkerSymbol.Color = MyIColor; MyISimpleMarkerSymbol.Size = 22; MyIUniqueValueRenderer.AddValue(MyIFeature.get_Value(intFieldIndex).ToString(), "", ((ISymbol)(MyISimpleMarkerSymbol))); MyIFeature = MyIFeatureCursor.NextFeature(); } geoLayer.Renderer = MyIUniqueValueRenderer as IFeatureRenderer; axMapControl1.ActiveView.Refresh(); } }
private static UniqueValueRenderer createUniqueValueRendererBasedOnSelectedAttribute(GraphicsLayer graphicsLayer, FieldInfo attributeField, LinearGradientBrush defaultColorRampGradientBrush, GeometryType geometryType, IEnumerable <Symbol> existingSymbolSet, out FieldInfo changedAttributeField) { changedAttributeField = attributeField; UniqueValueRenderer uniqueValueRenderer = graphicsLayer.Renderer as UniqueValueRenderer; if (uniqueValueRenderer != null) // already using unique value renderer { if (attributeField != null && attributeField.Name != uniqueValueRenderer.Field) // check if attribute has been changed { IEnumerable <object> uniqueValues = getAllUniqueValues(graphicsLayer, attributeField); uniqueValueRenderer = createNewDefaultUniqueValueRenderer(graphicsLayer, uniqueValues, attributeField, defaultColorRampGradientBrush, existingSymbolSet); } } else { string attributeFieldName = null; if (graphicsLayer.Renderer is ClassBreaksRenderer) { // Check if the class breaks renderer had an attribute set. If so, honor that attribute name ClassBreaksRenderer classBreakRenderer = graphicsLayer.Renderer as ClassBreaksRenderer; if (classBreakRenderer != null) { attributeFieldName = classBreakRenderer.Field; } } if (string.IsNullOrEmpty(attributeFieldName)) // No attribute known .. use the first non-attachment field { FieldInfo field = null; Collection <FieldInfo> layerFields = ESRI.ArcGIS.Mapping.Core.LayerExtensions.GetFields(graphicsLayer); if (layerFields != null) { field = layerFields.FirstOrDefault <FieldInfo>(f => f.FieldType != FieldType.Attachment); } if (field != null) { changedAttributeField = field; attributeField = field; attributeFieldName = field.Name; } } if (string.IsNullOrEmpty(attributeFieldName)) // An attribute name must be specified { return(null); } IEnumerable <object> uniqueValues = getAllUniqueValues(graphicsLayer, attributeField); // Create a default unique value renderer uniqueValueRenderer = createNewDefaultUniqueValueRenderer(graphicsLayer, uniqueValues, attributeField, defaultColorRampGradientBrush, existingSymbolSet); } return(uniqueValueRenderer); }
private void CreateEndpointLayer() { var endpointLayer = new GraphicsLayer() { ID = "EndpointLayer", IsLabelingEnabled = true }; // We are adding start and endpoints to same layer so render them differently var endpointLayerRenderer = new UniqueValueRenderer() { DefaultSymbol = new SimpleMarkerSymbol { Color = Colors.Red, Size = 12 }, Fields = new ObservableCollection <string>() { "PointType" }, Infos = new UniqueValueInfoCollection() { new UniqueValueInfo("EndPoint", new SimpleMarkerSymbol() { Color = Colors.Blue, Size = 12 }) } }; endpointLayer.Renderer = endpointLayerRenderer; // Crate labeling definition for start and end locations. Shows Address attribute as a label text. var labelClass = new LabelClass() { Symbol = new TextSymbol() { Color = Colors.Yellow, BorderLineColor = Colors.Black, BorderLineSize = 2 }, TextExpression = "[Address]" }; endpointLayer.LabelClasses = new LabelClassCollection { labelClass }; Map.Layers.Add(endpointLayer); _graphicLayer = endpointLayer; }
private void SetRenderers() { SimpleRenderer simpleRenderer = new SimpleRenderer() { Description = "Rivers", Label = "Rivers", Symbol = new SimpleLineSymbol() { Color = Colors.Blue, Style = SimpleLineStyle.Dash, Width = 2 } }; (mapView1.Map.Layers["MyFeatureLayerSimple"] as FeatureLayer).Renderer = simpleRenderer; UniqueValueRenderer uvr = new UniqueValueRenderer(); uvr.Fields = new ObservableCollection<string>(new string [] { "STATE_NAME" }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] {"New Mexico" }), Symbol = new SimpleFillSymbol() { Color = Colors.Yellow } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "Texas" }), Symbol = new SimpleFillSymbol() { Color = Colors.PaleGreen } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "Arizona" }), Symbol = new SimpleFillSymbol() { Color = Colors.YellowGreen } }); (mapView1.Map.Layers["MyFeatureLayerUnique"] as FeatureLayer).Renderer = uvr; ClassBreaksRenderer CBR = new ClassBreaksRenderer() { DefaultLabel = "All Other Values", DefaultSymbol = new SimpleMarkerSymbol() { Color = Colors.Black, Style = SimpleMarkerStyle.Cross, Size = 10 }, Field = "POP1990", Minimum = 0 }; CBR.Infos.Add(new ClassBreakInfo() { Maximum = 30000, Label = "0-30000", Description = "Pop between 0 and 30000", Symbol = new SimpleMarkerSymbol() { Color = Colors.Yellow, Size = 8, Style = SimpleMarkerStyle.Circle } }); CBR.Infos.Add(new ClassBreakInfo() { Maximum = 300000, Label = "30000-300000", Description = "Pop between 30000 and 300000", Symbol = new SimpleMarkerSymbol() { Color = Colors.Red, Size = 10, Style = SimpleMarkerStyle.Circle } }); CBR.Infos.Add(new ClassBreakInfo() { Maximum = 5000000, Label = "300000-5000000", Description = "Pop between 300000 and 5000000", Symbol = new SimpleMarkerSymbol() { Color = Colors.Orange, Size = 12, Style = SimpleMarkerStyle.Circle } }); (mapView1.Map.Layers["MyFeatureLayerClassBreak"] as FeatureLayer).Renderer = CBR; }
// Adds graphics in an efficient way (bulk add) private void AddGraphics() { _graphicsLayer.Graphics.Clear(); Random random = new Random(); // Add graphics to a list and add in bulk (AddRange) var graphicsList = new List<Graphic>(); for (int i = 0; i < 5000; i++) { var x = (random.NextDouble() * 40000000) - 20000000; var y = (random.NextDouble() * 40000000) - 20000000; var graphic = new Graphic() { // assign each graphic a number 0, 1, 2 - we''ll use this to represent he color Geometry = new MapPoint(x, y), Attributes = { { "Color", i % 3 } } }; graphicsList.Add(graphic); } // Create a renderer with 3 symbols (as opposed to a symbol per graphic) var renderer = new UniqueValueRenderer() { Field = "Color", Infos = { new UniqueValueInfo() { Value = 0, Symbol = new SimpleMarkerSymbol() { Color = Brushes.Red, Size=20 } }, new UniqueValueInfo() { Value = 1, Symbol = new SimpleMarkerSymbol() { Color = Brushes.Green, Style=SimpleMarkerSymbol.SimpleMarkerStyle.Diamond, Size=20 } }, new UniqueValueInfo() { Value = 2, Symbol = new SimpleMarkerSymbol() { Color = Brushes.Blue, Style=SimpleMarkerSymbol.SimpleMarkerStyle.Triangle, Size=20 } } } }; // Assign the renderer _graphicsLayer.Renderer = renderer; // Bulk add Graphics to the GraphicsLayer - more efficient than adding one graphic at a time _graphicsLayer.Graphics.AddRange(graphicsList); }
public void Save(string save_path) { _filepath = save_path; FileStream fs = new FileStream(_filepath, FileMode.Create); StreamWriter sw = new StreamWriter(fs); string line = _map.MapName + " " + _Geocoordinate.ToString() + " " + _Procoordinate.ToString() + " " + _ratio.ToString("F2") + " " + _scaleindex.ToString() + " " + CenterPos.X.ToString() + " " + CenterPos.Y.ToString() + " " + _map.LayerNum.ToString(); sw.WriteLine(line); //对每一图层 for (int i = 0; i < _map.LayerNum; i++) { sw.WriteLine(_map.Layers[i].FilePath); sw.WriteLine(_map.Layers[i].Visible.ToString()); switch (_map.Layers[i].rendertype) { //唯一值渲染 case RendererType.UniqueValueRenderer: UniqueValueRenderer Urenderer = (UniqueValueRenderer)_map.Layers[i].Renderer; string filename_uvr = _map.Layers[i].rendertype.ToString() + " " + Urenderer.Field; sw.WriteLine(filename_uvr); break; //分级渲染 case RendererType.ClassBreakRenderer: ClassBreakRenderer Crenderer = (ClassBreakRenderer)_map.Layers[i].Renderer; string filename_cbr = _map.Layers[i].rendertype.ToString() + " " + Crenderer.Field; sw.WriteLine(filename_cbr); break; //简单渲染 default: sw.WriteLine(_map.Layers[i].rendertype.ToString()); break; } //判断是否有注记信息 bool hastext = _map.Layers[i].HasText; sw.WriteLine(hastext.ToString()); if (hastext == true) { sw.WriteLine(_map.Layers[i].Textrender.Field); } } sw.Close(); fs.Close(); }
private UniqueValueRenderer GetRenderer() { var renderer = new UniqueValueRenderer(); var yellowMarker = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Circle, System.Drawing.Color.FromArgb(128, 0, 0, 255), 3); var purpleMarker = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Circle, System.Drawing.Color.Purple, 15); renderer.FieldNames.Add("symbol"); renderer.UniqueValues.Add(new UniqueValue("", "", yellowMarker, "(#0000FF,3,0.5)")); renderer.UniqueValues.Add(new UniqueValue("", "", purpleMarker, "(#0000FF,5,0.5)")); renderer.DefaultSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Circle, System.Drawing.Color.Black, 10); renderer.DefaultLabel = "(#00FFFF,15,0.5)"; return(renderer); }
public static FieldInfo ChangeAttributeForRenderer(this GraphicsLayer graphicsLayer, FieldInfo newAttributeField) { IRenderer newRenderer = null; GeometryType geometryType = ESRI.ArcGIS.Mapping.Core.LayerExtensions.GetGeometryType(graphicsLayer); LinearGradientBrush gradientBrush = ESRI.ArcGIS.Mapping.Core.LayerExtensions.GetGradientBrush(graphicsLayer); FieldInfo changedAttribute = null; List <Symbol> existingSymbolSet; ClassBreaksRenderer classBreaksRenderer = graphicsLayer.Renderer as ClassBreaksRenderer; if (classBreaksRenderer != null) { existingSymbolSet = new List <Symbol>(); foreach (ClassBreakInfo classBreak in classBreaksRenderer.Classes) { existingSymbolSet.Add(classBreak.Symbol); } newRenderer = createClassBreakRendererBasedOnSelectedAttribute(graphicsLayer, newAttributeField, gradientBrush, geometryType, classBreaksRenderer.Classes.Count, existingSymbolSet, out changedAttribute); } else { UniqueValueRenderer uniqueValueRenderer = graphicsLayer.Renderer as UniqueValueRenderer; if (uniqueValueRenderer != null) { existingSymbolSet = new List <Symbol>(); foreach (UniqueValueInfo uniqueValue in uniqueValueRenderer.Infos) { existingSymbolSet.Add(uniqueValue.Symbol); } newRenderer = createUniqueValueRendererBasedOnSelectedAttribute(graphicsLayer, newAttributeField, gradientBrush, geometryType, existingSymbolSet, out changedAttribute); } } assignNewRendererToLayer(graphicsLayer, newRenderer); graphicsLayer.Refresh(); if (changedAttribute != null) { ESRI.ArcGIS.Mapping.Core.LayerExtensions.SetRendererAttributeDisplayName(graphicsLayer, changedAttribute.DisplayName); } else if (newAttributeField != null) { ESRI.ArcGIS.Mapping.Core.LayerExtensions.SetRendererAttributeDisplayName(graphicsLayer, newAttributeField.DisplayName); } else { ESRI.ArcGIS.Mapping.Core.LayerExtensions.SetRendererAttributeDisplayName(graphicsLayer, null); } return(changedAttribute); }
private void ChangeRenderer() { var renderer = new UniqueValueRenderer() { Fields = new ObservableCollection <string>(new string[] { "sub_region" }) }; renderer.Infos = new UniqueValueInfoCollection(_states.Graphics .Select(g => g.Attributes["sub_region"]) .Distinct() .Select(obj => new UniqueValueInfo { Values = new ObservableCollection <object>(new object[] { obj }), Symbol = GetRandomSymbol() })); _states.Renderer = renderer; }
void SymbolConfigControl_SymbolModified(object sender, SymbolSelectedEventArgs e) { // Some changes to ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleSymbols do not trigger the legendchanged event. Fix this by triggering the event by cloning the symbol. GraphicsLayer graphicsLayer = Layer as GraphicsLayer; if (graphicsLayer != null && graphicsLayer.Renderer is ILegendSupport) { SimpleRenderer simpleRenderer = graphicsLayer.Renderer as SimpleRenderer; if (simpleRenderer != null && (e.Symbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol || e.Symbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleLineSymbol || e.Symbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleFillSymbol)) { simpleRenderer.Symbol = e.Symbol.CloneSymbol(); } else { ClassBreaksRenderer classBreaksRenderer = graphicsLayer.Renderer as ClassBreaksRenderer; if (classBreaksRenderer != null && (e.Symbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol || e.Symbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleLineSymbol || e.Symbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleFillSymbol)) { if (_classBreakInfo != null) { _classBreakInfo.Symbol = e.Symbol.CloneSymbol(); } else { classBreaksRenderer.DefaultSymbol = e.Symbol.CloneSymbol(); } } else { UniqueValueRenderer uniqueValueRenderer = graphicsLayer.Renderer as UniqueValueRenderer; if (uniqueValueRenderer != null && (e.Symbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol || e.Symbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleLineSymbol || e.Symbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleFillSymbol)) { if (_uniqueValueInfo != null) { _uniqueValueInfo.Symbol = e.Symbol.CloneSymbol(); } else { uniqueValueRenderer.DefaultSymbol = e.Symbol.CloneSymbol(); } } } } } }
private static UniqueValueRenderer createNewDefaultUniqueValueRenderer(GraphicsLayer graphicsLayer, IEnumerable <object> uniqueValues, FieldInfo attributeField, LinearGradientBrush defaultColorRampGradientBrush, IEnumerable <Symbol> existingSymbolSet) { Symbol defaultSymbol = graphicsLayer.GetDefaultSymbol(); UniqueValueRenderer uniqueValueRenderer = new UniqueValueRenderer() { Field = attributeField != null ? attributeField.Name : null, DefaultSymbol = defaultSymbol, }; if (uniqueValues != null) { List <Symbol> symbols = new List <Symbol>(); int i = 0; foreach (object uniqueValue in uniqueValues) { Symbol symbol = null; if (existingSymbolSet != null) { symbol = existingSymbolSet.ElementAtOrDefault(i); } if (symbol == null) { symbol = graphicsLayer.GetDefaultSymbolClone(); } uniqueValueRenderer.Infos.Add(new UniqueValueInfoObj() { Symbol = symbol, SerializedValue = uniqueValue, FieldType = attributeField.FieldType, }); symbols.Add(symbol); i++; } if (defaultColorRampGradientBrush != null) { if (existingSymbolSet == null) // apply the gradient brush, only if symbols have not been pre-defined { applyLinearGradientBrushToSymbolSet(symbols, defaultColorRampGradientBrush, defaultSymbol); } } } return(uniqueValueRenderer); }
private static void UpdateGraphicsAndRenderer(KmlGraphicsLayer layer, UniqueValueRenderer renderer, string key) { foreach (var graphic in layer.Graphics) { var f = (PlacemarkDescriptor)graphic.GetValue(FeaturePlacemarkerDescriptorProperty); if (f.Symbol.style.IconHref != null && f.Symbol.style.IconHref.ToLower() == key) { graphic.Symbol = PointSymbolDescriptor.GetDefaultSymbol(); ComputeIconTranslationValues(f.Symbol.style, graphic.Symbol as KmlPlaceMarkerSymbol, ((graphic.Symbol as KmlPlaceMarkerSymbol).Fill as ImageBrush).ImageSource as BitmapImage); string l = null, d = null; GetRendererInfo(f, f.Symbol.style, out l, out d); var info = renderer.Infos.FirstOrDefault(i => i.Label == l); if (info != null) { info.Symbol = graphic.Symbol; } } } }
public static void SpecialLineRenderer2(ILayer layer, string field, string value, ILineSymbol lineSymbol) { var geoFeaLayer = layer as IGeoFeatureLayer; IUniqueValueRenderer uniValueRender = new UniqueValueRenderer(); IQueryFilter2 queryFilter = new QueryFilterClass(); uniValueRender.FieldCount = 1; uniValueRender.Field[0] = field; queryFilter.AddField(field); if (geoFeaLayer != null) { var fieldIndex = geoFeaLayer.FeatureClass.Fields.FindField(field); var customSymbol = (ISymbol)lineSymbol; var featureCursor = geoFeaLayer.FeatureClass.Search(queryFilter, true); var feature = featureCursor.NextFeature(); while (feature != null) { var sValue = Convert.ToString(feature.Value[fieldIndex]); if (sValue == value) { uniValueRender.AddValue(sValue, "", customSymbol); } else { var defaultSymbol = geoFeaLayer.Renderer.SymbolByFeature[feature]; uniValueRender.AddValue(sValue, "", defaultSymbol); } feature = featureCursor.NextFeature(); } } ComReleaser.ReleaseCOMObject(null); //System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor); //释放指针 if (geoFeaLayer != null) { geoFeaLayer.Renderer = uniValueRender as IFeatureRenderer; } }
public void AddUniqueValues(List <PointDTO> pointDTOList, List <UniqueValueInfoDTO> uniqueValueInfoDTOList) { Queue <SimpleMarkerSymbol> markerSymbolQueue = this.CreateSimpleMarkerSymbolQueue(); markerSymbolQueue.Reverse <SimpleMarkerSymbol>(); try { List <Graphic> graphicsList = new List <Graphic>(); // First create a list of graphics from the DTO foreach (PointDTO pointDTO in pointDTOList) { Graphic graphic = this.createStratifiedGraphic(pointDTO); this.graphicsLayer.Graphics.Add(graphic); } UniqueValueRenderer r = new UniqueValueRenderer(); r.Field = "StrataValue"; foreach (UniqueValueInfoDTO dto in uniqueValueInfoDTOList) { UniqueValueInfo x = new UniqueValueInfo(); SimpleMarkerSymbol simpleMarkerySymbol = markerSymbolQueue.Dequeue(); // x.Symbol = 7777 x.Symbol = simpleMarkerySymbol; x.Value = dto.Value; r.Infos.Add(x); } this.graphicsLayer.Renderer = r; } catch (Exception ex) { throw new Exception(string.Format("Problem with EwavMap.AddPoints \n{0}\n{1}", ex.Message, ex.StackTrace)); } }
public static Renderer CreateIconRenderer() { var values = new List <UniqueValue> { new UniqueValue("Normal", "Normal", CreateEntityCompositeSymbol("-", false), Values(1, 0)), new UniqueValue("Grayed", "Grayed", CreateEntityCompositeSymbol("-", true), Values(1, 1)), new UniqueValue("Normal2", "Normal2", CreateEntityCompositeSymbol("-\n-", false), Values(2, 0)), new UniqueValue("Grayed2", "Grayed2", CreateEntityCompositeSymbol("-\n-", true), Values(2, 1)), new UniqueValue("Normal3", "Normal3", CreateEntityCompositeSymbol("-\n-\n-", false), Values(3, 0)), new UniqueValue("Grayed3", "Grayed3", CreateEntityCompositeSymbol("-\n-\n-", true), Values(3, 1)), }; var uvr = new UniqueValueRenderer( new[] { Form1.LineCountAttribute, Form1.IsGrayedAttribute }, // attributes used to select the symbol values, defaultLabel: values[0].Label, defaultSymbol: values[0].Symbol ); return(uvr); }
/// <summary> /// 单一值渲染(多字段) /// </summary> /// <param name="layerName">图层名</param> /// <param name="RenderField">多字段名</param> /// <param name="FillStyle">样式</param> /// <param name="valueCount">每个字段中唯一值的个数</param> public void CreateUniqueValueRander(ILayer pLayer, string[] RenderField, esriSimpleFillStyle FillStyle, int[] valueCount) { IGeoFeatureLayer geoFeatureLayer; geoFeatureLayer = pLayer as IGeoFeatureLayer; IUniqueValueRenderer uniqueValueRenderer = new UniqueValueRenderer(); //可以设置多个字段 uniqueValueRenderer.FieldCount = RenderField.Length; //0-3个 for (int i = 0; i < RenderField.Length; i++) { uniqueValueRenderer.set_Field(i, RenderField[i]); } //简单填充符号 ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(); simpleFillSymbol.Style = FillStyle; IFeatureCursor featureCursor = geoFeatureLayer.FeatureClass.Search(null, false); IFeature feature; if (featureCursor != null) { for (int i = 0; i < RenderField.Length; i++) { IEnumColors enumColors = CreateAlgorithmicColorRamp(); int fieldIndex = geoFeatureLayer.FeatureClass.Fields.FindField(RenderField[i]); for (int j = 0; j < valueCount[i]; j++) { feature = featureCursor.NextFeature(); string nameValue = feature.get_Value(fieldIndex).ToString(); simpleFillSymbol = new SimpleFillSymbol(); simpleFillSymbol.Color = enumColors.Next(); uniqueValueRenderer.AddValue(nameValue, RenderField[i], simpleFillSymbol as ISymbol); } } } geoFeatureLayer.Renderer = uniqueValueRenderer as IFeatureRenderer; }
private void changeCursorForRenderer(bool isClickableCursor) { SimpleRenderer simpleRenderer = Renderer as SimpleRenderer; if (simpleRenderer != null) { changeCursorForSymbol(simpleRenderer.Symbol, isClickableCursor); } else { ClassBreaksRenderer classBreaksRenderer = Renderer as ClassBreaksRenderer; if (classBreaksRenderer != null) { changeCursorForSymbol(classBreaksRenderer.DefaultSymbol, isClickableCursor); if (classBreaksRenderer.Classes != null) { foreach (ClassBreakInfo classBreak in classBreaksRenderer.Classes) { changeCursorForSymbol(classBreak.Symbol, isClickableCursor); } } } else { UniqueValueRenderer uniqueValueRenderer = Renderer as UniqueValueRenderer; if (uniqueValueRenderer != null) { changeCursorForSymbol(uniqueValueRenderer.DefaultSymbol, isClickableCursor); if (uniqueValueRenderer.Infos != null) { foreach (UniqueValueInfo uniqueValue in uniqueValueRenderer.Infos) { changeCursorForSymbol(uniqueValue.Symbol, isClickableCursor); } } } } } }
private string getRendererAttributeName() { GraphicsLayer graphicsLayer = Layer as GraphicsLayer; if (graphicsLayer != null) { ClassBreaksRenderer classBreaksRenderer = graphicsLayer.Renderer as ClassBreaksRenderer; if (classBreaksRenderer != null) { return(classBreaksRenderer.Field); } else { UniqueValueRenderer uniqueValueRenderer = graphicsLayer.Renderer as UniqueValueRenderer; if (uniqueValueRenderer != null) { return(uniqueValueRenderer.Field); } } } return(null); }
public static void SpecialLineRenderer(ILayer layer, int id, ILineSymbol lineSymbol) { var geoFeaLayer = layer as IGeoFeatureLayer; IUniqueValueRenderer uniValueRender = new UniqueValueRenderer(); uniValueRender.FieldCount = 1; uniValueRender.Field[0] = "OBJECTID"; var customSymbol = (ISymbol)lineSymbol; //选择某个字段作为渲染符号值 if (geoFeaLayer != null) { var featureCursor = geoFeaLayer.FeatureClass.Search(null, true); var feature = featureCursor.NextFeature(); while (feature != null) { var nowId = feature.OID; if (nowId == id) { uniValueRender.AddValue(feature.OID.ToString(), "", customSymbol); } else { var defaultSymbol = geoFeaLayer.Renderer.SymbolByFeature[feature]; uniValueRender.AddValue(feature.OID.ToString(), "", defaultSymbol); } feature = featureCursor.NextFeature(); } } if (geoFeaLayer != null) { geoFeaLayer.Renderer = uniValueRender as IFeatureRenderer; } }
private void ApplyUniqueValueClick(object sender, RoutedEventArgs e) { UniqueValueRenderer newUniqueValueRenderer = new UniqueValueRenderer() { DefaultSymbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Gray) }, Field = "SUB_REGION" }; newUniqueValueRenderer.Infos.Add(new UniqueValueInfo() { Value = "Pacific", Symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Purple), BorderBrush = new SolidColorBrush(Colors.Transparent) } }); newUniqueValueRenderer.Infos.Add(new UniqueValueInfo() { Value = "W N Cen", Symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Green), BorderBrush = new SolidColorBrush(Colors.Transparent) } }); newUniqueValueRenderer.Infos.Add(new UniqueValueInfo() { Value = "W S Cen", Symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Cyan), BorderBrush = new SolidColorBrush(Colors.Transparent) } }); newUniqueValueRenderer.Infos.Add(new UniqueValueInfo() { Value = "E N Cen", Symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Yellow), BorderBrush = new SolidColorBrush(Colors.Transparent) } }); newUniqueValueRenderer.Infos.Add(new UniqueValueInfo() { Value = "Mtn", Symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Blue), BorderBrush = new SolidColorBrush(Colors.Transparent) } }); newUniqueValueRenderer.Infos.Add(new UniqueValueInfo() { Value = "N Eng", Symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Red), BorderBrush = new SolidColorBrush(Colors.Transparent) } }); newUniqueValueRenderer.Infos.Add(new UniqueValueInfo() { Value = "E S Cen", Symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Brown), BorderBrush = new SolidColorBrush(Colors.Transparent) } }); newUniqueValueRenderer.Infos.Add(new UniqueValueInfo() { Value = "Mid Atl", Symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Magenta), BorderBrush = new SolidColorBrush(Colors.Transparent) } }); newUniqueValueRenderer.Infos.Add(new UniqueValueInfo() { Value = "S Atl", Symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Orange), BorderBrush = new SolidColorBrush(Colors.Transparent) } }); LayerDrawingOptions layerDrawOptions = new LayerDrawingOptions(); layerDrawOptions.LayerID = 2; layerDrawOptions.Renderer = newUniqueValueRenderer; (MyMap.Layers["USA"] as ArcGISDynamicMapServiceLayer).LayerDrawingOptions = new LayerDrawingOptionsCollection() { layerDrawOptions }; (MyMap.Layers["USA"] as ArcGISDynamicMapServiceLayer).VisibleLayers = new int[] { 2 }; // Changing VisibleLayers will refresh the layer, otherwise an explicit call to Refresh is needed. //(MyMap.Layers["USA"] as ArcGISDynamicMapServiceLayer).Refresh(); }
// Creates the renderers in code private void initializeRenderers() { // Create simple renderer with one symbol for rivers layer SimpleRenderer simpleRenderer = new SimpleRenderer() { Description = "Rivers", Label = "Rivers", Symbol = new SimpleLineSymbol() { Color = Colors.Blue, Style = SimpleLineStyle.Dash, Width = 2 } }; RiversRenderer = simpleRenderer; // Create a unique value renderer that defines different symbols for New Mexico, Texas, // and Arizona UniqueValueRenderer uvr = new UniqueValueRenderer(); uvr.Fields = new ObservableCollection<string>(new string[] { "STATE_NAME" }); SimpleLineSymbol stateOutline = new SimpleLineSymbol() { Color = Colors.Black }; uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "New Mexico" }), Symbol = new SimpleFillSymbol() { Color = Colors.Yellow, Outline = stateOutline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "Texas" }), Symbol = new SimpleFillSymbol() { Color = Colors.Green, Outline = stateOutline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "Arizona" }), Symbol = new SimpleFillSymbol() { Color = Colors.LightGray, Outline = stateOutline } }); StatesRenderer = uvr; // Create a class breaks renderer to symbolize cities of different sizes ClassBreaksRenderer cbr = new ClassBreaksRenderer() { DefaultLabel = "All Other Values", DefaultSymbol = new SimpleMarkerSymbol() { Color = Colors.Black, Style = SimpleMarkerStyle.Cross, Size = 10 }, Field = "POP1990", Minimum = 0 }; // Create and add symbols SimpleLineSymbol cityOutline = new SimpleLineSymbol() { Color = Colors.White }; cbr.Infos.Add(new ClassBreakInfo() { Minimum = 100000, Maximum = 200000, Label = "100000 - 200000", Description = "Population between 100000 and 200000", Symbol = new SimpleMarkerSymbol() { Color = Color.FromArgb(255, 0, 210, 0), Outline = cityOutline, Size = 4, Style = SimpleMarkerStyle.Circle } }); cbr.Infos.Add(new ClassBreakInfo() { Minimum = 200001, Maximum = 1000000, Label = "200001 - 1000000", Description = "Population between 200001 and 1000000", Symbol = new SimpleMarkerSymbol() { Color = Color.FromArgb(255, 0, 127, 0), Outline = cityOutline, Size = 8, Style = SimpleMarkerStyle.Circle } }); cbr.Infos.Add(new ClassBreakInfo() { Minimum = 1000001, Maximum = 10000000, Label = "1000001 - 10000000", Description = "Population between 1000001 and 10000000", Symbol = new SimpleMarkerSymbol() { Color = Color.FromArgb(255, 0, 50, 0), Outline = cityOutline, Size = 12, Style = SimpleMarkerStyle.Circle } }); CitiesRenderer = cbr; }
public static void SpecialLineRenderer(ILayer layer, int id, ILineSymbol lineSymbol) { var geoFeaLayer = layer as IGeoFeatureLayer; IUniqueValueRenderer uniValueRender = new UniqueValueRenderer(); uniValueRender.FieldCount = 1; uniValueRender.Field[0] = "OBJECTID"; var customSymbol = (ISymbol)lineSymbol; //选择某个字段作为渲染符号值 if (geoFeaLayer != null) { var featureCursor = geoFeaLayer.FeatureClass.Search(null, true); var feature = featureCursor.NextFeature(); while (feature != null) { var nowId = feature.OID; if (nowId == id) { uniValueRender.AddValue(feature.OID.ToString(), "", customSymbol); } else { var defaultSymbol = geoFeaLayer.Renderer.SymbolByFeature[feature]; uniValueRender.AddValue(feature.OID.ToString(), "", defaultSymbol); } feature = featureCursor.NextFeature(); } } if (geoFeaLayer != null) geoFeaLayer.Renderer = uniValueRender as IFeatureRenderer; }
// Shows states by sub-region when the Unique Values button is clicked private void UniqueValueButton_Click(object sender, RoutedEventArgs e) { // Create a unique value renderer UniqueValueRenderer uvr = new UniqueValueRenderer(); // Symbolize based on the sub-region field uvr.Fields = new ObservableCollection <string>(new string[] { "SUB_REGION" }); uvr.DefaultSymbol = new SimpleFillSymbol() { Color = Colors.Gray }; SimpleLineSymbol outline = new SimpleLineSymbol() { Color = Colors.LightGray, Width = 2 }; #region Define Unique Values // Create unique value info for each sub-region uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection <object>(new object[] { "Pacific" }), Symbol = new SimpleFillSymbol() { Color = Colors.Purple, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection <object>(new object[] { "W N Cen" }), Symbol = new SimpleFillSymbol() { Color = Colors.Green, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection <object>(new object[] { "W S Cen" }), Symbol = new SimpleFillSymbol() { Color = Colors.Cyan, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection <object>(new object[] { "E N Cen" }), Symbol = new SimpleFillSymbol() { Color = Colors.Yellow, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection <object>(new object[] { "Mtn" }), Symbol = new SimpleFillSymbol() { Color = Colors.Blue, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection <object>(new object[] { "N Eng" }), Symbol = new SimpleFillSymbol() { Color = Colors.Red, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection <object>(new object[] { "E S Cen" }), Symbol = new SimpleFillSymbol() { Color = Colors.Brown, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection <object>(new object[] { "Mid Atl" }), Symbol = new SimpleFillSymbol() { Color = Colors.Magenta, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection <object>(new object[] { "S Atl" }), Symbol = new SimpleFillSymbol() { Color = Colors.Orange, Outline = outline } }); #endregion // Get the USA layer and apply the unique values renderer to the states layer var layer = map1.Layers["USA"] as ArcGISDynamicMapServiceLayer; if (layer.LayerDrawingOptions == null) { layer.LayerDrawingOptions = new LayerDrawingOptionCollection(); } layer.LayerDrawingOptions.Add(new LayerDrawingOptions() { LayerID = 2, // The states layer has an ID of 2 Renderer = uvr }); // Make the states layer the only visible one layer.VisibleLayers = new ObservableCollection <int>(new int[] { 2 }); }
private void ApplyUniqueValueClick(object sender, RoutedEventArgs e) { UniqueValueRenderer newUniqueValueRenderer = new UniqueValueRenderer() { DefaultSymbol = new SimpleFillSymbol() { Color = Colors.Gray }, Fields = new string[] { "SUB_REGION" } }; var Infos = new List<UniqueValueInfo>(); Infos.Add(new UniqueValueInfo() { Values = new object[] { "Pacific" }, Symbol = new SimpleFillSymbol() { Color = Colors.Purple, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); Infos.Add(new UniqueValueInfo() { Values = new object[] { "W N Cen" }, Symbol = new SimpleFillSymbol() { Color = Colors.Green, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); Infos.Add(new UniqueValueInfo() { Values = new object[] { "W S Cen" }, Symbol = new SimpleFillSymbol() { Color = Colors.Cyan, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); Infos.Add(new UniqueValueInfo() { Values = new object[] { "E N Cen" }, Symbol = new SimpleFillSymbol() { Color = Colors.Yellow, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); Infos.Add(new UniqueValueInfo() { Values = new object[] { "Mtn" }, Symbol = new SimpleFillSymbol() { Color = Colors.Blue, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); Infos.Add(new UniqueValueInfo() { Values = new object[] { "N Eng" }, Symbol = new SimpleFillSymbol() { Color = Colors.Red, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); Infos.Add(new UniqueValueInfo() { Values = new object[] { "E S Cen" }, Symbol = new SimpleFillSymbol() { Color = Colors.Brown, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); Infos.Add(new UniqueValueInfo() { Values = new object[] { "Mid Atl" }, Symbol = new SimpleFillSymbol() { Color = Colors.Magenta, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); Infos.Add(new UniqueValueInfo() { Values = new object[] { "S Atl" }, Symbol = new SimpleFillSymbol() { Color = Colors.Orange, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); newUniqueValueRenderer.Infos = Infos; var layer = MyMap.Layers["USA"] as ArcGISDynamicMapServiceLayer; layer.LayerDrawingOptions.Add(new LayerDrawingOptions() { LayerID = 2, Renderer = newUniqueValueRenderer }); layer.VisibleLayers = new int[] { 2 }; }
private static UniqueValueRenderer createNewDefaultUniqueValueRenderer(GraphicsLayer graphicsLayer, IEnumerable<object> uniqueValues, FieldInfo attributeField, LinearGradientBrush defaultColorRampGradientBrush, IEnumerable<Symbol> existingSymbolSet) { Symbol defaultSymbol = graphicsLayer.GetDefaultSymbol(); UniqueValueRenderer uniqueValueRenderer = new UniqueValueRenderer() { Field = attributeField != null ? attributeField.Name : null, DefaultSymbol = defaultSymbol, }; if (uniqueValues != null) { List<Symbol> symbols = new List<Symbol>(); int i = 0; foreach (object uniqueValue in uniqueValues) { Symbol symbol = null; if (existingSymbolSet != null) symbol = existingSymbolSet.ElementAtOrDefault(i); if (symbol == null) symbol = graphicsLayer.GetDefaultSymbolClone(); uniqueValueRenderer.Infos.Add(new UniqueValueInfoObj() { Symbol = symbol, SerializedValue = uniqueValue, FieldType = attributeField.FieldType, }); symbols.Add(symbol); i++; } if (defaultColorRampGradientBrush != null) { if (existingSymbolSet == null) // apply the gradient brush, only if symbols have not been pre-defined { applyLinearGradientBrushToSymbolSet(symbols, defaultColorRampGradientBrush, defaultSymbol); } } } return uniqueValueRenderer; }
public static IRenderer CloneRenderer(this IRenderer renderer) { if (renderer == null) return null; SimpleRenderer simpleRenderer = renderer as SimpleRenderer; if (simpleRenderer != null) { return new SimpleRenderer() { Symbol = simpleRenderer.Symbol != null ? simpleRenderer.Symbol.CloneSymbol() : null, }; } else { ClassBreaksRenderer classBreaksRenderer = renderer as ClassBreaksRenderer; if (classBreaksRenderer != null) { ClassBreaksRenderer clone = new ClassBreaksRenderer() { Field = classBreaksRenderer.Field, DefaultSymbol = classBreaksRenderer.DefaultSymbol != null ? classBreaksRenderer.DefaultSymbol.CloneSymbol() : null, }; if (classBreaksRenderer.Classes != null) { foreach (ClassBreakInfo classBreak in classBreaksRenderer.Classes) { clone.Classes.Add(new ClassBreakInfo() { Description = classBreak.Description, Label = classBreak.Label, MaximumValue = classBreak.MaximumValue, MinimumValue = classBreak.MinimumValue, Symbol = classBreak.Symbol != null ? classBreak.Symbol.CloneSymbol() : null, }); } } return clone; } else { UniqueValueRenderer uniqueValueRenderer = renderer as UniqueValueRenderer; if (uniqueValueRenderer != null) { UniqueValueRenderer clone = new UniqueValueRenderer() { Field = uniqueValueRenderer.Field, DefaultSymbol = uniqueValueRenderer.DefaultSymbol != null ? uniqueValueRenderer.DefaultSymbol.CloneSymbol() : null, }; if (uniqueValueRenderer.Infos != null) { foreach (UniqueValueInfo uniqueValue in uniqueValueRenderer.Infos) { clone.Infos.Add(new UniqueValueInfo() { Description = uniqueValue.Description, Label = uniqueValue.Label, Value = uniqueValue.Value, Symbol = uniqueValue.Symbol != null ? uniqueValue.Symbol.CloneSymbol() : null, }); } } return clone; } } } return null; }
void queryTaskPolygon_ExecuteCompleted(object sender, QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; if (featureSet == null || featureSet.Features.Count < 1) { MessageBox.Show("No features returned from query"); return; } GraphicsLayer graphicsLayer = MyMap.Layers["MyPolygonGraphicsLayer"] as GraphicsLayer; Random random = new Random(); // Random switch between class breaks and unique value renderers if (random.Next(0, 2) == 0) { ClassBreaksRenderer classBreakRenderer = new ClassBreaksRenderer(); classBreakRenderer.Field = "POP2000"; int classCount = 6; List<double> valueList = new List<double>(); foreach (Graphic graphic in args.FeatureSet.Features) { graphicsLayer.Graphics.Add(graphic); valueList.Add((int)graphic.Attributes[classBreakRenderer.Field]); } // LINQ IEnumerable<double> valueEnumerator = from aValue in valueList orderby aValue select aValue; int increment = Convert.ToInt32(Math.Ceiling(args.FeatureSet.Features.Count / classCount)); int rgbFactor = 255 / classCount; int j = 255; for (int i = increment; i < valueList.Count; i += increment) { ClassBreakInfo classBreakInfo = new ClassBreakInfo(); if (i == increment) classBreakInfo.MinimumValue = 0; else classBreakInfo.MinimumValue = valueEnumerator.ElementAt(i - increment); classBreakInfo.MaximumValue = valueEnumerator.ElementAt(i); SimpleFillSymbol symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Color.FromArgb(192, (byte)j, (byte)j, (byte)j)), BorderBrush = new SolidColorBrush(Colors.Transparent), BorderThickness = 1 }; classBreakInfo.Symbol = symbol; classBreakRenderer.Classes.Add(classBreakInfo); j = j - rgbFactor; } // Set maximum value for largest class break classBreakRenderer.Classes[classBreakRenderer.Classes.Count - 1].MaximumValue = valueEnumerator.ElementAt(valueList.Count - 1) + 1; graphicsLayer.Renderer = classBreakRenderer; } else { UniqueValueRenderer uniqueValueRenderer = new UniqueValueRenderer(); uniqueValueRenderer.DefaultSymbol = LayoutRoot.Resources["RedFillSymbol"] as Symbol; uniqueValueRenderer.Field = "STATE_NAME"; foreach (Graphic graphic in args.FeatureSet.Features) { graphicsLayer.Graphics.Add(graphic); UniqueValueInfo uniqueValueInfo = new UniqueValueInfo(); SimpleFillSymbol symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Color.FromArgb(192, (byte)random.Next(0, 255), (byte)random.Next(0, 255), (byte)random.Next(0, 255))), BorderBrush = new SolidColorBrush(Colors.Transparent), BorderThickness = 1 }; uniqueValueInfo.Symbol = symbol; uniqueValueInfo.Value = graphic.Attributes["STATE_NAME"]; uniqueValueRenderer.Infos.Add(uniqueValueInfo); } graphicsLayer.Renderer = uniqueValueRenderer; } }
// Shows states by sub-region when the Unique Values button is clicked private void UniqueValueButton_Click(object sender, RoutedEventArgs e) { // Create a unique value renderer UniqueValueRenderer uvr = new UniqueValueRenderer(); // Symbolize based on the sub-region field uvr.Fields = new ObservableCollection<string>(new string[] { "SUB_REGION" }); uvr.DefaultSymbol = new SimpleFillSymbol() { Color = Colors.Gray }; SimpleLineSymbol outline = new SimpleLineSymbol() { Color = Colors.LightGray, Width = 2 }; #region Define Unique Values // Create unique value info for each sub-region uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[]{ "Pacific" }), Symbol = new SimpleFillSymbol() { Color = Colors.Purple, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[]{ "W N Cen" }), Symbol = new SimpleFillSymbol() { Color = Colors.Green, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[]{ "W S Cen" }), Symbol = new SimpleFillSymbol() { Color = Colors.Cyan, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[]{ "E N Cen" }), Symbol = new SimpleFillSymbol() { Color = Colors.Yellow, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[]{ "Mtn" }), Symbol = new SimpleFillSymbol() { Color = Colors.Blue, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[]{ "N Eng" }), Symbol = new SimpleFillSymbol() { Color = Colors.Red, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[]{ "E S Cen" }), Symbol = new SimpleFillSymbol() { Color = Colors.Brown, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[]{ "Mid Atl" }), Symbol = new SimpleFillSymbol() { Color = Colors.Magenta, Outline = outline } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[]{ "S Atl" }), Symbol = new SimpleFillSymbol() { Color = Colors.Orange, Outline = outline } }); #endregion // Get the USA layer and apply the unique values renderer to the states layer var layer = map1.Layers["USA"] as ArcGISDynamicMapServiceLayer; if (layer.LayerDrawingOptions == null) layer.LayerDrawingOptions = new LayerDrawingOptionCollection(); layer.LayerDrawingOptions.Add(new LayerDrawingOptions() { LayerID = 2, // The states layer has an ID of 2 Renderer = uvr }); // Make the states layer the only visible one layer.VisibleLayers = new ObservableCollection<int>(new int[] { 2 }); }
private void ApplyUniqueValueClick(object sender, RoutedEventArgs e) { UniqueValueRenderer uvr = new UniqueValueRenderer(); uvr.Fields = new ObservableCollection<string>(new string[] { "SUB_REGION" }); uvr.DefaultSymbol = new SimpleFillSymbol() { Color = Colors.Gray }; uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "Pacific"}), Symbol = new SimpleFillSymbol() { Color = Colors.Purple, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "W N Cen"}), Symbol = new SimpleFillSymbol() { Color = Colors.Green, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "W S Cen"}), Symbol = new SimpleFillSymbol() { Color = Colors.Cyan, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "E N Cen"}), Symbol = new SimpleFillSymbol() { Color = Colors.Yellow, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "Mtn"}), Symbol = new SimpleFillSymbol() { Color = Colors.Blue, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "N Eng"}), Symbol = new SimpleFillSymbol() { Color = Colors.Red, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "E S Cen"}), Symbol = new SimpleFillSymbol() { Color = Colors.Brown, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "Mid Atl"}), Symbol = new SimpleFillSymbol() { Color = Colors.Magenta, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); uvr.Infos.Add(new UniqueValueInfo { Values = new ObservableCollection<object>(new object[] { "S Atl" }), Symbol = new SimpleFillSymbol() { Color = Colors.Orange, Outline = new SimpleLineSymbol() { Color = Colors.Transparent } } }); var layer = mapView1.Map.Layers["USA"] as ArcGISDynamicMapServiceLayer; LayerDrawingOptionCollection layerDrawingOptionCollection = new LayerDrawingOptionCollection() { new LayerDrawingOptions() { LayerID = 2, Renderer = uvr } }; layer.LayerDrawingOptions = layerDrawingOptionCollection; layer.VisibleLayers = new ObservableCollection<int> { 2 }; }
/// <summary> /// Creates graphic elements and adds them to the graphics layer. /// </summary> /// <param name="layer">Graphics layer that will have features added to it.</param> /// <param name="images">Dictionary of images coming from kmz content or from previous parsing</param> public void CreateGraphics(KmlGraphicsLayer layer, IDictionary<string, ImageBrush> images) { if (layer == null) return; GraphicCollection graphics = new GraphicCollection(); UniqueValueRenderer renderer = new UniqueValueRenderer(); // dummy renderer used to create the legend items (since creation of the swatches from the symbol is not that obvious) // Process each metadata feature in the list foreach (PlacemarkDescriptor feature in placemarks) { KMLStyle style = feature.Symbol.style; if (style.ZipFile != null) { // Look for the image in the zip file if (style.IconImage == null && !String.IsNullOrEmpty(style.IconHref)) { style.IconImage = GetIconImage(style.ZipFile, style.IconHref.ToLower()); } style.ZipFile.Dispose(); style.ZipFile = null; } // If the style has an HREF then it is associated with an image if (style.IconImage == null && !String.IsNullOrEmpty(style.IconHref)) { // If the image is already loaded in the image dictionary, use it if (images.ContainsKey(style.IconHref.ToLower())) style.IconImage = images[style.IconHref.ToLower()]; else { // Get the image using the HREF and store the image in the images dictionary so that if // other features reference it, it is cached style.IconImage = GetIconImage(style.IconHref); images.Add(style.IconHref.ToLower(), style.IconImage); } } // Create a new graphic from the metadata and construct the symbol using polymorphism Graphic g = new Graphic() { Geometry = feature.Geometry, Symbol = feature.Symbol.CreateSymbol() }; // Create legend entry string label = null; string description = null; if (string.IsNullOrEmpty(style.StyleId)) { //if the feature is not using a shared style -> create an entry by graphic with the name as ident if (feature.Attributes.ContainsKey("name")) label = feature.Attributes["name"].ToString(); if (feature.Attributes.ContainsKey("description")) description = feature.Attributes["description"].ToString(); } else { //if the feature is using a shared style -> create an entry for the style label = style.StyleId; } if (!string.IsNullOrEmpty(label) && !renderer.Infos.Any(info => info.Label == label)) renderer.Infos.Add(new UniqueValueInfo { Label = label, Description = description, Symbol = g.Symbol }); // Adjust and assign picture marker symbol properties if (g.Geometry is ESRI.ArcGIS.Client.Geometry.MapPoint && g.Symbol is KmlPlaceMarkerSymbol) { try { #if SILVERLIGHT string ext = style.IconHref.Substring(style.IconHref.LastIndexOf(".")).ToLower(); switch (ext) { case ".jpg": case ".jpeg": case ".png": break; default: throw new System.Exception(string.Format(Properties.Resources.FeatureDefinition_ImageTypeNotSupported, ext)); } #endif KmlPlaceMarkerSymbol ms = g.Symbol as KmlPlaceMarkerSymbol; // To match sizing of Google Earth, default size of point images is 40x40 ms.Height = 40; ms.Width = 40; ms.Fill = style.IconImage as ImageBrush; // Default to half the pixel size (width and height) if symbol offsets are 0 (supported in wpf and sl3) ImageBrush ib = ms.Fill; BitmapImage bi = ib.ImageSource as BitmapImage; #if SILVERLIGHT if (bi.PixelHeight == 0 || bi.PixelWidth == 0) { EventHandler<RoutedEventArgs> completed = null; completed = (s, e) => { bi.ImageOpened -= completed; ComputeIconTranslationValues(style, ms, bi); }; bi.ImageOpened += completed; } #else if (bi.IsDownloading) { EventHandler completed = null; completed = (s, e) => { bi.DownloadCompleted -= completed; ComputeIconTranslationValues(style, ms, bi); }; bi.DownloadCompleted += completed; } #endif else { ComputeIconTranslationValues(style, ms, bi); } } catch { g.Symbol = new SimpleMarkerSymbol(); } } // Copy attributes values from metadata to graphic foreach (var attribute in feature.Attributes) { g.Attributes.Add(attribute.Key, attribute.Value); } // If the balloontext property has been assigned a value in the style associated with this // graphic feature, then add it to the attributes collection. if (!String.IsNullOrEmpty(style.BalloonText)) { g.Attributes.Add("balloonText", style.BalloonText); } // Add graphic to graphics layer graphics.Add(g); } layer.Graphics = graphics; // Use the renderer to create the legend itens (asynchronously since creating a swatch from a symbol is asynchronous) renderer.QueryLegendInfos(layerLegendInfo => { layer.LegendInfo = layerLegendInfo;}, null); }
/// <summary> /// ����Ҫ�ط��Ż� /// </summary> /// <params name="layer"></params> /// <params name="field"></params> /// <params name="value"></params> /// <params name="pBitmap"></params> public static void SpecialPointRenderer(ILayer layer, string field, string value, Bitmap pBitmap) { IGeoFeatureLayer geoFeaLayer; IFeatureRenderer featureRenderer; ISymbol defaultSymbol; IUniqueValueRenderer uniValueRender; geoFeaLayer = layer as IGeoFeatureLayer; featureRenderer = geoFeaLayer.Renderer; uniValueRender = new UniqueValueRenderer(); ///ѡ��ij���ֶ���Ϊ��Ⱦ����ֵ IQueryFilter2 queryFilter = new QueryFilterClass(); int fieldIndex; uniValueRender.FieldCount = 1; uniValueRender.Field[0] = field; queryFilter.AddField(field); fieldIndex = geoFeaLayer.FeatureClass.Fields.FindField(field);//����ֶε�index ///��ȡ�Զ������ ISymbol customSymbol; IPictureMarkerSymbol pictureMarkerSymbol = new PictureMarkerSymbolClass(); pictureMarkerSymbol.Size = 55; string strFilePath = Application.StartupPath.ToString() + "\\temp.bmp"; pBitmap.Save(strFilePath); pictureMarkerSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPicturePNG, strFilePath); customSymbol = (ISymbol)pictureMarkerSymbol; ///������Ⱦ���Ž�����Ⱦ string sValue; IFeature feature = null; IFeatureCursor featureCursor; featureCursor = geoFeaLayer.FeatureClass.Search(queryFilter, true); feature = featureCursor.NextFeature(); while (feature != null) { sValue = Convert.ToString(feature.get_Value(fieldIndex)); if (sValue == value) { uniValueRender.AddValue(sValue, "", customSymbol); } else { ///�ǵ�ǰ��ѡҪ�أ�����ű��ֲ��� defaultSymbol = geoFeaLayer.Renderer.get_SymbolByFeature(feature); uniValueRender.AddValue(sValue, "", defaultSymbol); } feature = featureCursor.NextFeature(); } if (featureCursor != null) { featureCursor = null; ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(featureCursor); } geoFeaLayer.Renderer = uniValueRender as IFeatureRenderer; }
/// <summary> /// Creates graphic elements and adds them to the graphics layer. /// </summary> /// <param name="layer">Graphics layer that will have features added to it.</param> /// <param name="images">Dictionary of images coming from kmz content or from previous parsing</param> public void CreateGraphics(KmlGraphicsLayer layer, IDictionary<string, ImageBrush> images) { if (layer == null) return; GraphicCollection graphics = new GraphicCollection(); UniqueValueRenderer renderer = new UniqueValueRenderer(); // dummy renderer used to create the legend items (since creation of the swatches from the symbol is not that obvious) // Process each metadata feature in the list foreach (PlacemarkDescriptor feature in placemarks) { KMLStyle style = feature.Symbol.style; if (style.ZipFile != null) { // Look for the image in the zip file if (style.IconImage == null && !String.IsNullOrEmpty(style.IconHref)) { style.IconImage = GetIconImage(style.ZipFile, style.IconHref.ToLower()); } style.ZipFile.Dispose(); style.ZipFile = null; } //Define handlers upfront so we can unhook from them #if SILVERLIGHT EventHandler<RoutedEventArgs> #else EventHandler #endif imageCompleted = null; #if SILVERLIGHT EventHandler<ExceptionRoutedEventArgs> #else EventHandler<ExceptionEventArgs> #endif imageFailed = null; // If the style has an HREF then it is associated with an image if (style.IconImage == null && !String.IsNullOrEmpty(style.IconHref)) { // If the image is already loaded in the image dictionary, use it if (images.ContainsKey(style.IconHref.ToLower())) style.IconImage = images[style.IconHref.ToLower()]; else { // Get the image using the HREF and store the image in the images dictionary so that if // other features reference it, it is cached style.IconImage = GetIconImage(style.IconHref); if (style.IconImage != null && (style.IconImage as ImageBrush).ImageSource != null) { var bi = (style.IconImage as ImageBrush).ImageSource as BitmapImage; if (bi != null) { imageFailed = (s, e) => { var b = s as BitmapImage; #if SILVERLIGHT if (imageCompleted != null) b.ImageOpened -= imageCompleted; if(imageFailed != null) b.ImageFailed -= imageFailed; #else if (imageCompleted != null) b.DownloadCompleted -= imageCompleted; if (imageFailed != null) b.DownloadFailed -= imageFailed; #endif var key = b.GetValue(BitmapImageKeyProperty) as string; layer.Dispatcher.BeginInvoke((Action)delegate { UpdateGraphicsAndRenderer(layer, renderer, key); }); }; #if SILVERLIGHT bi.ImageFailed += imageFailed; #else bi.DownloadFailed += imageFailed; #endif } } images.Add(style.IconHref.ToLower(), style.IconImage); } } // Create a new graphic from the metadata and construct the symbol using polymorphism Graphic g = new Graphic() { Geometry = feature.Geometry, Symbol = feature.Symbol.CreateSymbol(), TimeExtent = feature.TimeExtent }; g.SetValue(FeaturePlacemarkerDescriptorProperty, feature); // Create legend entry string label; string description; GetRendererInfo(feature, style, out label, out description); if (!string.IsNullOrEmpty(label) && !renderer.Infos.Any(info => info.Label == label)) renderer.Infos.Add(new UniqueValueInfo { Label = label, Description = description, Symbol = g.Symbol }); // Adjust and assign picture marker symbol properties if (g.Geometry is ESRI.ArcGIS.Client.Geometry.MapPoint && g.Symbol is KmlPlaceMarkerSymbol) { try { KmlPlaceMarkerSymbol ms = g.Symbol as KmlPlaceMarkerSymbol; // To match sizing of Google Earth, default size of point images is 40x40 ms.Height = 40; ms.Width = 40; ms.Fill = style.IconImage; ms.IconColor = style.IconColor; // Default to half the pixel size (width and height) if symbol offsets are 0 (supported in wpf and sl3) ImageBrush ib = ms.Fill; BitmapImage bi = ib.ImageSource as BitmapImage; #if SILVERLIGHT if (bi.PixelHeight == 0 || bi.PixelWidth == 0) #else if (bi.IsDownloading) #endif { imageCompleted = (s, e) => { var b = s as BitmapImage; #if SILVERLIGHT if (imageCompleted != null) b.ImageOpened -= imageCompleted; if(imageFailed != null) b.ImageFailed -= imageFailed; #else if (imageCompleted != null) b.DownloadCompleted -= imageCompleted; if (imageFailed != null) b.DownloadFailed -= imageFailed; #endif ComputeIconTranslationValues(style, ms, b); }; #if SILVERLIGHT bi.ImageOpened += imageCompleted; #else bi.DownloadCompleted += imageCompleted; #endif } else { ComputeIconTranslationValues(style, ms, bi); } } catch { g.Symbol = PointSymbolDescriptor.GetDefaultSymbol(); ComputeIconTranslationValues(style, g.Symbol as KmlPlaceMarkerSymbol, ((g.Symbol as KmlPlaceMarkerSymbol).Fill as ImageBrush).ImageSource as BitmapImage); var info = renderer.Infos.FirstOrDefault(i => i.Label == label); if (info != null) { info.Symbol = g.Symbol; } } } // Copy attributes values from metadata to graphic foreach (var attribute in feature.Attributes) { g.Attributes.Add(attribute.Key, attribute.Value); } // If the balloontext property has been assigned a value in the style associated with this // graphic feature, then add it to the attributes collection. if (!String.IsNullOrEmpty(style.BalloonText)) { g.Attributes.Add("balloonText", style.BalloonText); } // Add graphic to graphics layer graphics.Add(g); } layer.Graphics = graphics; // keep the renderer for further usage (when QueryLegendInfos is called) layer.RendererBasedOnStyle = renderer; }
void queryTaskPolygon_ExecuteCompleted(object sender, QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; if (featureSet == null || featureSet.Features.Count < 1) { MessageBox.Show("No features returned from query"); return; } GraphicsLayer graphicsLayer = MyMap.Layers["MyPolygonGraphicsLayer"] as GraphicsLayer; Random random = new Random(); // Random switch between class breaks and unique value renderers if (random.Next(0, 2) == 0) { ClassBreaksRenderer classBreakRenderer = new ClassBreaksRenderer(); classBreakRenderer.Field = "POP2000"; int classCount = 6; List <double> valueList = new List <double>(); foreach (Graphic graphic in args.FeatureSet.Features) { graphicsLayer.Graphics.Add(graphic); valueList.Add((int)graphic.Attributes[classBreakRenderer.Field]); } // LINQ IEnumerable <double> valueEnumerator = from aValue in valueList orderby aValue select aValue; int increment = Convert.ToInt32(Math.Ceiling(args.FeatureSet.Features.Count / classCount)); int rgbFactor = 255 / classCount; int j = 255; for (int i = increment; i < valueList.Count; i += increment) { ClassBreakInfo classBreakInfo = new ClassBreakInfo(); if (i == increment) { classBreakInfo.MinimumValue = 0; } else { classBreakInfo.MinimumValue = valueEnumerator.ElementAt(i - increment); } classBreakInfo.MaximumValue = valueEnumerator.ElementAt(i); SimpleFillSymbol symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Color.FromArgb(192, (byte)j, (byte)j, (byte)j)), BorderBrush = new SolidColorBrush(Colors.Transparent), BorderThickness = 1 }; classBreakInfo.Symbol = symbol; classBreakRenderer.Classes.Add(classBreakInfo); j = j - rgbFactor; } // Set maximum value for largest class break classBreakRenderer.Classes[classBreakRenderer.Classes.Count - 1].MaximumValue = valueEnumerator.ElementAt(valueList.Count - 1) + 1; graphicsLayer.Renderer = classBreakRenderer; } else { UniqueValueRenderer uniqueValueRenderer = new UniqueValueRenderer(); uniqueValueRenderer.DefaultSymbol = LayoutRoot.Resources["RedFillSymbol"] as Symbol; uniqueValueRenderer.Field = "STATE_NAME"; foreach (Graphic graphic in args.FeatureSet.Features) { graphicsLayer.Graphics.Add(graphic); UniqueValueInfo uniqueValueInfo = new UniqueValueInfo(); SimpleFillSymbol symbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Color.FromArgb(192, (byte)random.Next(0, 255), (byte)random.Next(0, 255), (byte)random.Next(0, 255))), BorderBrush = new SolidColorBrush(Colors.Transparent), BorderThickness = 1 }; uniqueValueInfo.Symbol = symbol; uniqueValueInfo.Value = graphic.Attributes["STATE_NAME"]; uniqueValueRenderer.Infos.Add(uniqueValueInfo); } graphicsLayer.Renderer = uniqueValueRenderer; } }
private void CreateEndpointLayer() { var endpointLayer = new GraphicsLayer() { ID = "EndpointLayer", IsLabelingEnabled = true }; // We are adding start and endpoints to same layer so render them differently var endpointLayerRenderer = new UniqueValueRenderer() { DefaultSymbol = new SimpleMarkerSymbol { Color = Colors.Red, Size = 12 }, Fields = new ObservableCollection<string>() { "PointType" }, Infos = new UniqueValueInfoCollection() { new UniqueValueInfo("EndPoint", new SimpleMarkerSymbol() { Color = Colors.Blue, Size = 12 }) } }; endpointLayer.Renderer = endpointLayerRenderer; // Crate labeling definition for start and end locations. Shows Address attribute as a label text. var labelClass = new LabelClass() { Symbol = new TextSymbol() { Color = Colors.Yellow, BorderLineColor = Colors.Black, BorderLineSize = 2 }, TextExpression = "[Address]" }; endpointLayer.LabelClasses = new LabelClassCollection { labelClass }; Map.Layers.Add(endpointLayer); _graphicLayer = endpointLayer; }
private void WriteUniqueValueRenderer(UniqueValueRenderer uniqueValueRenderer) { writer.WriteStartElement("UniqueValueRenderer", Namespaces[Constants.esriPrefix]); if (!string.IsNullOrEmpty(uniqueValueRenderer.Field)) WriteAttribute("Field", uniqueValueRenderer.Field); WriteAttribute("DefaultLabel", uniqueValueRenderer.DefaultLabel); if (uniqueValueRenderer.DefaultSymbol != null) { writer.WriteStartElement("UniqueValueRenderer.DefaultSymbol", Namespaces[Constants.esriPrefix]); (new SymbolXamlWriter(writer, Namespaces)).WriteSymbol(uniqueValueRenderer.DefaultSymbol); writer.WriteEndElement(); } if (uniqueValueRenderer.Infos != null && uniqueValueRenderer.Infos.Count > 0) { writer.WriteStartElement("UniqueValueRenderer.Infos", Namespaces[Constants.esriPrefix]); foreach (ESRI.ArcGIS.Client.UniqueValueInfo uniqueValueInfo in uniqueValueRenderer.Infos) { WriteUniqueValueInfo(uniqueValueInfo); } writer.WriteEndElement();// UniqueValueRenderer.Infos } writer.WriteEndElement(); }
public static void SpecialLineRenderer2(ILayer layer, string field, string value, ILineSymbol lineSymbol) { var geoFeaLayer = layer as IGeoFeatureLayer; IUniqueValueRenderer uniValueRender = new UniqueValueRenderer(); IQueryFilter2 queryFilter = new QueryFilterClass(); uniValueRender.FieldCount = 1; uniValueRender.Field[0] = field; queryFilter.AddField(field); if (geoFeaLayer != null) { var fieldIndex = geoFeaLayer.FeatureClass.Fields.FindField(field); var customSymbol = (ISymbol)lineSymbol; var featureCursor = geoFeaLayer.FeatureClass.Search(queryFilter, true); var feature = featureCursor.NextFeature(); while (feature != null) { var sValue = Convert.ToString(feature.Value[fieldIndex]); if (sValue == value) { uniValueRender.AddValue(sValue, "", customSymbol); } else { var defaultSymbol = geoFeaLayer.Renderer.SymbolByFeature[feature]; uniValueRender.AddValue(sValue, "", defaultSymbol); } feature = featureCursor.NextFeature(); } } ComReleaser.ReleaseCOMObject(null); //System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor); //释放指针 if (geoFeaLayer != null) geoFeaLayer.Renderer = uniValueRender as IFeatureRenderer; }