Beispiel #1
0
        private async Task <CIMLabelClass> CreateAndApplyLabelClassAsync(FeatureLayer featureLayer)
        {
            var labelClass = await QueuedTask.Run(() =>
            {
                var labelSelectedFeaturesWithLength = new CIMLabelClass
                {
                    Name             = "LabelSelectedManyFeaturesWithLength",
                    ExpressionEngine = LabelExpressionEngine.Arcade,
                    Expression       = "$feature.MILES",
                    WhereClause      = $"LabelOn = 'Yes'",
                    TextSymbol       = SymbolFactory.Instance.ConstructTextSymbol().MakeSymbolReference(),
                    Visibility       = true
                };
                var lyrDefn          = featureLayer.GetDefinition() as CIMFeatureLayer;
                var listLabelClasses = lyrDefn.LabelClasses.ToList();
                listLabelClasses.Add(labelSelectedFeaturesWithLength);
                lyrDefn.LabelClasses = listLabelClasses.ToArray();
                featureLayer.SetDefinition(lyrDefn);
                return(labelSelectedFeaturesWithLength);
            });

            return(labelClass);
        }
        /// <summary>
        /// Create a label for the weather feature layer.
        /// </summary>
        /// <param name="weatherLayer"></param>
        public static void SetLabeling(FeatureLayer weatherLayer)
        {
            // Get the CIMFeatureLayer definition.
            CIMFeatureLayer weatherLayerDefinition = weatherLayer.GetDefinition() as CIMFeatureLayer;

            // Get the label classes - we need the first one
            CIMLabelClass weatherLabelClass = weatherLayerDefinition.LabelClasses.FirstOrDefault();

            if (weatherLabelClass != null)
            {
                // Create a new Arcade label expression.
                if (DamlSettings.Default.Celius)
                {
                    weatherLabelClass.Expression = "$feature.Temperature + \" c \\r\" +$feature.Humidity + \" % \"";
                }
                else
                {
                    weatherLabelClass.Expression = "(($feature.Temperature * 1.8) + 32)+ \" F \\r\" +$feature.Humidity + \" % \"";
                }

                // Create a polygon symbol for the halo
                CIMPolygonSymbol textHalo = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.WhiteRGB, SimpleFillStyle.Solid);

                // Create text symbol using the halo polygon
                CIMTextSymbol weatherTextSymbol = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlackRGB, 14, "Corbel", "Regular");
                weatherTextSymbol.HaloSymbol = textHalo;
                weatherTextSymbol.HaloSize   = 1;
                weatherTextSymbol.HaloSymbol.SetOutlineColor(ColorFactory.Instance.WhiteRGB);

                // Set the text symbol
                weatherLabelClass.TextSymbol.Symbol = weatherTextSymbol;

                // Update the layer definition
                weatherLayer.SetDefinition(weatherLayerDefinition);
            }
        }