/// <summary>
        /// Create unique valueClasses based on the weather url's
        /// </summary>
        /// <param name="imagevalues"></param>
        /// <returns></returns>
        private static CIMUniqueValueClass[] CreateUniqueValueClasses(List <string> imagevalues)
        {
            List <CIMUniqueValueClass> cimclasses = new List <CIMUniqueValueClass>();

            foreach (string imageUrl in imagevalues)
            {
                CIMPictureMarker marker = new CIMPictureMarker()
                {
                    Size = 30,
                    URL  = BuildPictureMarkerURL(new Uri(imageUrl))
                };

                CIMUniqueValue uniqueValue = new CIMUniqueValue
                {
                    FieldValues = new string[] { imageUrl }
                };

                CIMUniqueValueClass uniqueValueClass = new CIMUniqueValueClass
                {
                    Symbol = SymbolFactory.Instance.ConstructPointSymbol(marker).MakeSymbolReference(),
                    Values = new CIMUniqueValue[] { uniqueValue }
                };

                cimclasses.Add(uniqueValueClass);
            }

            return(cimclasses.ToArray());
        }
示例#2
0
        public static void SetShipAngle()
        {
            var task = QueuedTask.Run(() =>
            {
                //Create a list of the above two CIMUniqueValueClasses
                List <CIMUniqueValueClass> listUniqueValueClasses = new List <CIMUniqueValueClass>();
                for (int i = 0; i < 360; i++)
                {
                    List <CIMUniqueValue> listUniqueValues = new List <CIMUniqueValue>();
                    CIMUniqueValue cuv = new CIMUniqueValue {
                        FieldValues = new string[] { i.ToString() }
                    };
                    //CIMMarker cm = SymbolFactory.Instance.ConstructMarker(ColorFactory.Instance.BlackRGB, GetShipSymbolSize(5,8,i), SetShipRotate(i));
                    CIMMarker cm = SymbolFactory.Instance.ConstructMarker(ColorFactory.Instance.BlackRGB, GetShipSymbolSize2(10, i), SetShipRotate(i));
                    listUniqueValues.Add(cuv);
                    CIMUniqueValueClass UniqueValueClass = new CIMUniqueValueClass
                    {
                        Editable = true,
                        Patch    = PatchShape.Default,
                        Symbol   = SymbolFactory.Instance.ConstructPointSymbol(cm).MakeSymbolReference(),
                        Visible  = true,
                        Values   = listUniqueValues.ToArray()
                    };
                    listUniqueValueClasses.Add(UniqueValueClass);
                }

                //Create a list of CIMUniqueValueGroup
                CIMUniqueValueGroup uvg = new CIMUniqueValueGroup
                {
                    Classes = listUniqueValueClasses.ToArray(),
                };
                List <CIMUniqueValueGroup> listUniqueValueGroups = new List <CIMUniqueValueGroup> {
                    uvg
                };
                CIMMarker cm1 = SymbolFactory.Instance.ConstructMarker(ColorFactory.Instance.BlackRGB, 8, SetShipRotate(0));
                //Create the CIMUniqueValueRenderer
                CIMUniqueValueRenderer uvr = new CIMUniqueValueRenderer
                {
                    UseDefaultSymbol = true,
                    DefaultSymbol    = SymbolFactory.Instance.ConstructPointSymbol(cm1).MakeSymbolReference(),
                    Groups           = listUniqueValueGroups.ToArray(),
                    Fields           = new string[] { ConstDefintion.ConstFieldName_cog }
                };
                //Set the feature layer's renderer.
                FeatureLayer featureLayer = MapView.Active.Map.GetLayersAsFlattenedList().First() as FeatureLayer;
                featureLayer.SetRenderer(uvr);
            });
        }
        /// <summary>
        /// Warning! You must call this method on the MCT!
        /// </summary>
        /// <returns></returns>
        private CIMRenderer CreateUniqueValueRendererForUSStates()
        {
            //All of these methods have to be called on the MCT
            if (Module1.OnUIThread)
            {
                throw new CalledOnWrongThreadException();
            }

            //Create the Unique Value Renderer
            CIMUniqueValueRenderer uniqueValueRenderer = new CIMUniqueValueRenderer()
            {
                // set the value field
                Fields = new string[] { "STATE_NAME" }
            };

            //Construct the list of UniqueValueClasses
            List <CIMUniqueValueClass> classes = new List <CIMUniqueValueClass>();

            // Alabama
            List <CIMUniqueValue> alabamaValues = new List <CIMUniqueValue>();
            CIMUniqueValue        alabamaValue  = new CIMUniqueValue()
            {
                FieldValues = new string[] { "Alabama" }
            };

            alabamaValues.Add(alabamaValue);

            var alabamaColor = CIMColor.CreateRGBColor(255, 170, 0);

            var alabama = new CIMUniqueValueClass()
            {
                Values   = alabamaValues.ToArray(),
                Label    = "Alabama",
                Visible  = true,
                Editable = true,
                Symbol   = new CIMSymbolReference()
                {
                    Symbol = SymbolFactory.Instance.ConstructPolygonSymbol(alabamaColor)
                }
            };

            classes.Add(alabama);

            // Alaska
            List <CIMUniqueValue> alaskaValues = new List <CIMUniqueValue>();
            CIMUniqueValue        alaskaValue  = new CIMUniqueValue()
            {
                FieldValues = new string[] { "Alaska" }
            };

            alaskaValues.Add(alaskaValue);

            var alaskaColor = CIMColor.CreateRGBColor(255, 0, 0);

            var alaska = new CIMUniqueValueClass()
            {
                Values   = alaskaValues.ToArray(),
                Label    = "Alaska",
                Visible  = true,
                Editable = true,
                Symbol   = new CIMSymbolReference()
                {
                    Symbol = SymbolFactory.Instance.ConstructPolygonSymbol(alaskaColor)
                }
            };

            classes.Add(alaska);

            // California
            List <CIMUniqueValue> californiaValues = new List <CIMUniqueValue>();
            CIMUniqueValue        californiaValue  = new CIMUniqueValue()
            {
                FieldValues = new string[] { "California" }
            };

            californiaValues.Add(californiaValue);

            var californiaColor = CIMColor.CreateRGBColor(85, 255, 0);

            var california = new CIMUniqueValueClass()
            {
                Values   = californiaValues.ToArray(),
                Label    = "California",
                Visible  = true,
                Editable = true,
                Symbol   = new CIMSymbolReference()
                {
                    Symbol = SymbolFactory.Instance.ConstructPolygonSymbol(californiaColor)
                }
            };

            classes.Add(california);

            // Colorado
            List <CIMUniqueValue> coloradoValues = new List <CIMUniqueValue>();
            CIMUniqueValue        coloradoValue  = new CIMUniqueValue()
            {
                FieldValues = new string[] { "Colorado" }
            };

            coloradoValues.Add(coloradoValue);

            var coloradoColor = CIMColor.CreateRGBColor(0, 92, 230);

            var colorado = new CIMUniqueValueClass()
            {
                Values   = coloradoValues.ToArray(),
                Label    = "Colorado",
                Visible  = true,
                Editable = true,
                Symbol   = new CIMSymbolReference()
                {
                    Symbol = SymbolFactory.Instance.ConstructPolygonSymbol(coloradoColor)
                }
            };

            classes.Add(colorado);

            // so on and so forth for all the 51.
            //....

            //Add the classes to a group (by default there is only one group or "symbol level")
            // Unique value groups
            CIMUniqueValueGroup groupOne = new CIMUniqueValueGroup()
            {
                Heading = "State Names",
                Classes = classes.ToArray()
            };

            uniqueValueRenderer.Groups = new CIMUniqueValueGroup[] { groupOne };

            //Draw the rest with the default symbol
            uniqueValueRenderer.UseDefaultSymbol = true;
            uniqueValueRenderer.DefaultLabel     = "All other values";

            var defaultColor = CIMColor.CreateRGBColor(215, 215, 215);

            uniqueValueRenderer.DefaultSymbol = new CIMSymbolReference()
            {
                Symbol = SymbolFactory.Instance.ConstructPolygonSymbol(defaultColor)
            };

            return(uniqueValueRenderer as CIMRenderer);
        }
        /// <summary>
        /// Warning! You must call this method on the MCT!
        /// </summary>
        /// <returns></returns>
        private CIMRenderer CreateUniqueValueRendererForUSStates() {
            //All of these methods have to be called on the MCT
            if (Module1.OnUIThread)
                throw new CalledOnWrongThreadException();

            //Create the Unique Value Renderer
            CIMUniqueValueRenderer uniqueValueRenderer = new CIMUniqueValueRenderer();

            // set the value field
            uniqueValueRenderer.Fields = new string[] { "STATE_NAME" };

            //Construct the list of UniqueValueClasses
            List<CIMUniqueValueClass> classes = new List<CIMUniqueValueClass>();

            // Alabama
            List<CIMUniqueValue> alabamaValues = new List<CIMUniqueValue>();
            CIMUniqueValue alabamaValue = new CIMUniqueValue();
            alabamaValue.FieldValues = new string[] { "Alabama" };
            alabamaValues.Add(alabamaValue);

            var alabamaColor = CIMColor.CreateRGBColor(255, 170, 0);

            var alabama = new CIMUniqueValueClass() {
                Values = alabamaValues.ToArray(),
                Label = "Alabama",
                Visible = true,
                Editable = true,
                Symbol = new CIMSymbolReference() {Symbol = SymbolFactory.ConstructPolygonSymbol(alabamaColor)}
            };

            classes.Add(alabama);

            // Alaska
            List<CIMUniqueValue> alaskaValues = new List<CIMUniqueValue>();
            CIMUniqueValue alaskaValue = new CIMUniqueValue();
            alaskaValue.FieldValues = new string[] { "Alaska" };
            alaskaValues.Add(alaskaValue);

            var alaskaColor = CIMColor.CreateRGBColor(255, 0, 0);

            var alaska = new CIMUniqueValueClass() {
                Values = alaskaValues.ToArray(),
                Label = "Alaska",
                Visible = true,
                Editable = true,
                Symbol = new CIMSymbolReference() { Symbol = SymbolFactory.ConstructPolygonSymbol(alaskaColor) }
            };

            classes.Add(alaska);

            // California
            List<CIMUniqueValue> californiaValues = new List<CIMUniqueValue>();
            CIMUniqueValue californiaValue = new CIMUniqueValue();
            californiaValue.FieldValues = new string[] { "California" };
            californiaValues.Add(californiaValue);

            var californiaColor = CIMColor.CreateRGBColor(85, 255, 0);

            var california = new CIMUniqueValueClass() {
                Values = californiaValues.ToArray(),
                Label = "California",
                Visible = true,
                Editable = true,
                Symbol = new CIMSymbolReference() { Symbol = SymbolFactory.ConstructPolygonSymbol(californiaColor) }
            };

            classes.Add(california);

            // Colorado
            List<CIMUniqueValue> coloradoValues = new List<CIMUniqueValue>();
            CIMUniqueValue coloradoValue = new CIMUniqueValue();
            coloradoValue.FieldValues = new string[] { "Colorado" };
            coloradoValues.Add(coloradoValue);

            var coloradoColor = CIMColor.CreateRGBColor(0, 92, 230);

            var colorado = new CIMUniqueValueClass() {
                Values = coloradoValues.ToArray(),
                Label = "Colorado",
                Visible = true,
                Editable = true,
                Symbol = new CIMSymbolReference() { Symbol = SymbolFactory.ConstructPolygonSymbol(coloradoColor) }
            };

            classes.Add(colorado);

            // so on and so forth for all the 51.
            //....

            //Add the classes to a group (by default there is only one group or "symbol level")
            // Unique value groups
            CIMUniqueValueGroup groupOne = new CIMUniqueValueGroup();
            groupOne.Heading = "State Names";
            groupOne.Classes = classes.ToArray();

            uniqueValueRenderer.Groups = new CIMUniqueValueGroup[] { groupOne };

            //Draw the rest with the default symbol
            uniqueValueRenderer.UseDefaultSymbol = true;
            uniqueValueRenderer.DefaultLabel = "All other values";

            var defaultColor = CIMColor.CreateRGBColor(215, 215, 215);
            uniqueValueRenderer.DefaultSymbol = new CIMSymbolReference() {
                Symbol = SymbolFactory.ConstructPolygonSymbol(defaultColor)
            };
            
            return uniqueValueRenderer as CIMRenderer;
        }
示例#5
0
        internal async void UpdateCluster(bool isTolerance)
        {
            if (MapView.Active == null)
            {
                return;
            }
            // Get Layer Name
            string inputFC = SelectedLayer.Name;

            int  minPoints = 2;
            bool parsed    = Int32.TryParse(MinPoints, out minPoints);

            /// Set PYT path -This could be inserted as a resource file //
            string tool_path = "C:\\Dev_summit\\2018\\InteractiveAnalytics\\pyt\\UpdateCluster.pyt\\UpdateClusterTool";

            IReadOnlyList <string> args = null;

            if (isTolerance)
            {
                /// Arguments for executing process using Tolerance
                args = Geoprocessing.MakeValueArray(inputFC, minPoints, ValueSlider, -1);
            }
            else
            {
                /// Arguments for executing process using Threshold
                args = Geoprocessing.MakeValueArray(inputFC, minPoints, -1, ValueThreshold);
            }

            Task <IGPResult> task;

            /// Execute the Tool in the python toolbox
            task = Geoprocessing.ExecuteToolAsync(tool_path, args, flags: GPExecuteToolFlags.AddToHistory);


            StyleProjectItem style;
            CIMPointSymbol   pointSymbol = null;

            /// Get Pro Styles
            style = await QueuedTask.Run <StyleProjectItem>(() => Project.Current.GetItems <StyleProjectItem>().First(s => s.Name == "ArcGIS 2D"));


            await QueuedTask.Run(() =>
            {
                /// Search for a specific Symbol
                /// Other styles Arcgis/Resouces/Styles/Styles.stylx SQLite DB
                SymbolStyleItem symbolStyleItem = (SymbolStyleItem)style.LookupItem(StyleItemType.PointSymbol, "Circle 1_Shapes_3");
                pointSymbol = (CIMPointSymbol)symbolStyleItem.Symbol;

                /// Cluster Ids based in Color Schema
                int[] ids = new int[] { -1, 1, 2, 3, 4, 5, 6, 7, 8 };

                /// Set Colors
                string[] colors = new string[] { "156,156,156", "166,206,227", "31,120,180", "178,223,138",
                                                 "51,160,44", "251,154,153", "227,26,28", "253,191,111",
                                                 "255,127,0" };
                /// Color Field
                String[] fields = new string[] { "COLOR_ID" };

                /// Make a reference of the point symbol
                CIMSymbolReference symbolPointTemplate = pointSymbol.MakeSymbolReference();

                /// Get definition of type symbology unique values
                UniqueValueRendererDefinition uniqueValueRendererDef = new UniqueValueRendererDefinition(fields, symbolPointTemplate, null, symbolPointTemplate, false);

                /// Get Current renderer of the Selected Layer
                CIMUniqueValueRenderer renderer  = (CIMUniqueValueRenderer)SelectedLayer.CreateRenderer(uniqueValueRendererDef);
                CIMUniqueValueClass[] newClasses = new CIMUniqueValueClass[colors.Count()];

                /// Get Point Symbol as string for creating other point colors
                string point = pointSymbol.ToXml();

                /// Create Each Color
                for (int i = 0; i < ids.Length; i++)
                {
                    CIMPointSymbol npoint = CIMPointSymbol.FromXml(point);
                    if (ids[i] == -1)
                    {
                        npoint.SetSize(4);
                    }
                    else
                    {
                        npoint.SetSize(6);
                    }
                    CIMSymbolReference symbolPointTemplatei = npoint.MakeSymbolReference();
                    newClasses[i]                          = new CIMUniqueValueClass();
                    newClasses[i].Values                   = new CIMUniqueValue[1];
                    newClasses[i].Values[0]                = new CIMUniqueValue();
                    newClasses[i].Values[0].FieldValues    = new string[1];
                    newClasses[i].Values[0].FieldValues[0] = ids[i].ToString();
                    newClasses[i].Label                    = ids[i].ToString();
                    newClasses[i].Symbol                   = symbolPointTemplatei;
                    var color = colors[i].Split(',');
                    double r  = Convert.ToDouble(color[0]);
                    double g  = Convert.ToDouble(color[1]);
                    double b  = Convert.ToDouble(color[2]);
                    newClasses[i].Symbol.Symbol.SetColor(CIMColor.CreateRGBColor(r, g, b));
                }
                /// Add Colors into the renderer
                renderer.Groups[0].Classes = newClasses;

                /// Apply new renderer in the layer
                SelectedLayer.SetRenderer(renderer);

                //SelectedLayer.RecalculateRenderer();
            });
        }
示例#6
0
        public async void Example6()
        {
            Map map = MapView.Active.Map;
            await QueuedTask.Run(() =>
            {
                StreamLayer streamLayer = null;
                //https://geoeventsample1.esri.com:6443/arcgis/rest/services/AirportTraffics/StreamServer

                #region Defining a unique value renderer definition

                var uvrDef = new UniqueValueRendererDefinition()
                {
                    ValueFields    = new string[] { "ACTYPE" },
                    SymbolTemplate = SymbolFactory.Instance.ConstructPointSymbol(
                        ColorFactory.Instance.RedRGB, 10, SimpleMarkerStyle.Hexagon)
                                     .MakeSymbolReference(),
                    ValuesLimit = 5
                };
                //Note: CreateRenderer can only create value classes based on
                //the current events it has received
                streamLayer.SetRenderer(streamLayer.CreateRenderer(uvrDef));

                #endregion

                #region Setting a unique value renderer for latest observations

                //Define the classes by hand to avoid using CreateRenderer(...)
                CIMUniqueValueClass uvcB727 = new CIMUniqueValueClass()
                {
                    Values = new CIMUniqueValue[] { new CIMUniqueValue()
                                                    {
                                                        FieldValues = new string[] { "B727" }
                                                    } },
                    Visible = true,
                    Label   = "Boeing 727",
                    Symbol  = SymbolFactory.Instance.ConstructPointSymbol(CIMColor.CreateRGBColor(255, 0, 0), 8, SimpleMarkerStyle.Hexagon).MakeSymbolReference()
                };

                CIMUniqueValueClass uvcD9 = new CIMUniqueValueClass()
                {
                    Values = new CIMUniqueValue[] { new CIMUniqueValue()
                                                    {
                                                        FieldValues = new string[] { "DC9" }
                                                    } },
                    Visible = true,
                    Label   = "DC 9",
                    Symbol  = SymbolFactory.Instance.ConstructPointSymbol(CIMColor.CreateRGBColor(0, 255, 0), 8, SimpleMarkerStyle.Hexagon).MakeSymbolReference()
                };
                //Assign the classes to a group
                CIMUniqueValueGroup uvGrp = new CIMUniqueValueGroup()
                {
                    Classes = new CIMUniqueValueClass[] { uvcB727, uvcD9 }
                };
                //assign the group to the renderer
                var UVrndr = new CIMUniqueValueRenderer()
                {
                    Fields           = new string[] { "ACTYPE" },
                    Groups           = new CIMUniqueValueGroup[] { uvGrp },
                    UseDefaultSymbol = true,
                    DefaultLabel     = "Others",
                    DefaultSymbol    = SymbolFactory.Instance.ConstructPointSymbol(
                        CIMColor.CreateRGBColor(185, 185, 185), 8, SimpleMarkerStyle.Hexagon).MakeSymbolReference()
                };
                //set the renderer. Depending on the current events recieved, the
                //layer may or may not have events for each of the specified
                //unique value classes
                streamLayer.SetRenderer(UVrndr);

                #endregion

                #region Setting a unique value renderer for previous observations
                //The layer must be track aware and spatial
                if (streamLayer.TrackType != TrackType.Spatial)
                {
                    return;
                }
                //Must be on QueuedTask!
                //Define unique value classes same as we do for current observations
                //or use "CreateRenderer(...)" to assign them automatically
                CIMUniqueValueClass uvcB727Prev = new CIMUniqueValueClass()
                {
                    Values = new CIMUniqueValue[] { new CIMUniqueValue()
                                                    {
                                                        FieldValues = new string[] { "B727" }
                                                    } },
                    Visible = true,
                    Label   = "Boeing 727",
                    Symbol  = SymbolFactory.Instance.ConstructPointSymbol(
                        CIMColor.CreateRGBColor(255, 0, 0), 4, SimpleMarkerStyle.Hexagon)
                              .MakeSymbolReference()
                };

                CIMUniqueValueClass uvcD9Prev = new CIMUniqueValueClass()
                {
                    Values = new CIMUniqueValue[] { new CIMUniqueValue()
                                                    {
                                                        FieldValues = new string[] { "DC9" }
                                                    } },
                    Visible = true,
                    Label   = "DC 9",
                    Symbol  = SymbolFactory.Instance.ConstructPointSymbol(
                        CIMColor.CreateRGBColor(0, 255, 0), 4, SimpleMarkerStyle.Hexagon)
                              .MakeSymbolReference()
                };

                CIMUniqueValueGroup uvGrpPrev = new CIMUniqueValueGroup()
                {
                    Classes = new CIMUniqueValueClass[] { uvcB727Prev, uvcD9Prev }
                };

                var UVrndrPrev = new CIMUniqueValueRenderer()
                {
                    Fields           = new string[] { "ACTYPE" },
                    Groups           = new CIMUniqueValueGroup[] { uvGrpPrev },
                    UseDefaultSymbol = true,
                    DefaultLabel     = "Others",
                    DefaultSymbol    = SymbolFactory.Instance.ConstructPointSymbol(
                        CIMColor.CreateRGBColor(185, 185, 185), 4, SimpleMarkerStyle.Hexagon)
                                       .MakeSymbolReference()
                };

                #endregion

                #region Setting a simple renderer to draw track lines
                //The layer must be track aware and spatial
                if (streamLayer.TrackType != TrackType.Spatial)
                {
                    return;
                }
                //Must be on QueuedTask!
                //Note: only a simple renderer with solid line symbol is supported for track
                //line renderer
                var trackRenderer = new SimpleRendererDefinition()
                {
                    SymbolTemplate = SymbolFactory.Instance.ConstructLineSymbol(
                        ColorFactory.Instance.BlueRGB, 2, SimpleLineStyle.Solid)
                                     .MakeSymbolReference()
                };
                streamLayer.SetRenderer(
                    streamLayer.CreateRenderer(trackRenderer),
                    FeatureRendererTarget.TrackLines);

                #endregion

                #region Check Previous Observation and Track Line Visibility

                //The layer must be track aware and spatial for these settings
                //to have an effect
                if (streamLayer.TrackType != TrackType.Spatial)
                {
                    return;
                }
                //Must be on QueuedTask
                if (!streamLayer.AreTrackLinesVisible)
                {
                    streamLayer.SetTrackLinesVisibility(true);
                }
                if (!streamLayer.ArePreviousObservationsVisible)
                {
                    streamLayer.SetPreviousObservationsVisibility(true);
                }

                #endregion

                #region Make Track Lines and Previous Observations Visible
                //The layer must be track aware and spatial for these settings
                //to have an effect
                if (streamLayer.TrackType != TrackType.Spatial)
                {
                    return;
                }
                //Must be on QueuedTask
                //Note: Setting PreviousObservationsCount larger than the
                //"SetExpirationMaxCount()" has no effect
                streamLayer.SetPreviousObservationsCount(6);
                if (!streamLayer.AreTrackLinesVisible)
                {
                    streamLayer.SetTrackLinesVisibility(true);
                }
                if (!streamLayer.ArePreviousObservationsVisible)
                {
                    streamLayer.SetPreviousObservationsVisibility(true);
                }
                #endregion


                #region Retrieve the current observation renderer

                //Must be on QueuedTask!
                var renderer = streamLayer.GetRenderer();

                #endregion

                #region Retrieve the previous observation renderer
                //The layer must be track aware and spatial
                if (streamLayer.TrackType != TrackType.Spatial)
                {
                    return;
                }
                //Must be on QueuedTask!
                var prev_renderer = streamLayer.GetRenderer(
                    FeatureRendererTarget.PreviousObservations);

                #endregion

                #region Retrieve the track lines renderer
                //The layer must be track aware and spatial
                if (streamLayer.TrackType != TrackType.Spatial)
                {
                    return;
                }
                //Must be on QueuedTask!
                var track_renderer = streamLayer.GetRenderer(
                    FeatureRendererTarget.TrackLines);

                #endregion
            });
        }