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); } }