Hi Preeti,
thanks for staying on this. I've edited your sample and found out it will have similar results:
private async void addGraphics_Click(object sender, EventArgs e)
{
SolidStrokeSymbolLayer lineSymbol = new SolidStrokeSymbolLayer(1, Color.Black);
List<SymbolLayer> symbolLayers = new List<SymbolLayer>
{
lineSymbol
};
MultilayerPolylineSymbol multilayerPolylineSymbol = new MultilayerPolylineSymbol(symbolLayers);
List<MapPoint> mapPoints = new List<MapPoint>();
MapPoint[] coordinatesArray = new MapPoint[] { new MapPoint(0, 0), new MapPoint(5, 0), new MapPoint(5, 2), new MapPoint(5, -2) };
foreach (MapPoint coordinate in coordinatesArray)
{
mapPoints.Add(coordinate);
}
VectorMarkerSymbolElement symLyrEl = new VectorMarkerSymbolElement(new Polyline(mapPoints), multilayerPolylineSymbol);
List<VectorMarkerSymbolElement> vectorMarkerSymbolElements = new List<VectorMarkerSymbolElement>();
//add custom element to vectormarker symbol
vectorMarkerSymbolElements.Add(symLyrEl);
SimpleMarkerSymbol pointSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Circle, Color.Transparent, 5)
{
Color = Color.Transparent,
Outline = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, Color.Black, 1)
};
pointSymbol.Style = SimpleMarkerSymbolStyle.Circle;
MultilayerPointSymbol multilayerPointSymbol = pointSymbol.ToMultilayerSymbol();
VectorMarkerSymbolElement vectorMarkerSymbolElement = new VectorMarkerSymbolElement(new MapPoint(0, 10), multilayerPointSymbol);
//add circle symbol to vectormarker symbol
vectorMarkerSymbolElements.Add(vectorMarkerSymbolElement);
VectorMarkerSymbolLayer symLyr = new VectorMarkerSymbolLayer(vectorMarkerSymbolElements);
List<VectorMarkerSymbolLayer> vectorMarkerSymbolLayers = new List<VectorMarkerSymbolLayer>();
vectorMarkerSymbolLayers.Add(symLyr);
MultilayerPointSymbol sym = new MultilayerPointSymbol(vectorMarkerSymbolLayers)
{
AngleAlignment = SymbolAngleAlignment.Map,
};
var sr = SpatialReference.Create(4839);
var map = new Map(sr);
map.ReferenceScale = 445;
GeographicMapView.Map = map;
var UVrenderer = new UniqueValueRenderer()
{
RotationExpression = "[RotationField]",
RotationType = RotationType.Arithmetic,
};
GeographicMap = map;
UVrenderer.FieldNames.Add("Asset_Type");
UVrenderer.UniqueValues.Add(new UniqueValue("Asset_Type", "Asset_Type", sym, "whatever"));
UVrenderer.DefaultSymbol = new SimpleMarkerSymbol(style: SimpleMarkerSymbolStyle.Cross, Color.Red, size: 20);
Field f1 = new Field(FieldType.Int32, "RotationField", "RotationField", 0, null, true, true);
Field f2 = new Field(FieldType.Text, "Asset_Type", "Asset_Type", 16, null, true, true);
var ftable = new FeatureCollectionTable(new Field[] { f1, f2 }, GeometryType.Point, sr);
FeatureCollection fcoll = new FeatureCollection();
fcoll.Tables.Add(ftable);
FeatureCollectionLayer fcollayer = new FeatureCollectionLayer(fcoll);
var f = ftable.CreateFeature();
f.Geometry = new MapPoint(0, 0, ftable.SpatialReference);
f.Attributes["RotationField"] = 140;
f.Attributes["Asset_Type"] = "whatever";
await ftable.AddFeatureAsync(f);
var f0 = ftable.CreateFeature();
f0.Geometry = new MapPoint(10, 10, ftable.SpatialReference);
f0.Attributes["RotationField"] = 240;
f0.Attributes["Asset_Type"] = "whatever2";
await ftable.AddFeatureAsync(f0);
ftable.Renderer = UVrenderer;
await fcoll.LoadAsync();
fcollayer.Layers[0].RenderingMode = FeatureRenderingMode.Dynamic;
fcollayer.Layers[0].ScaleSymbols = true;
map.OperationalLayers.Add(fcollayer);
}
the difference is that you don't set the "Scale Symbols" property of the feature collection layer's layers. That is crucial for keeping the symbol the correct size when zooming in and out. Size relative to the base map that is.
please review my changes, and try it out, it does not render at my end. Your sample without my changes does render, but the symbol changes size relative to basemap.