private void AddValueCircleLegendItems(LegendAdornmentLayer legendAdornmentLayer) { ValueCircleStyle valueCircleStyle = (ValueCircleStyle)currentStyleBuilder.GetStyles(currentFeatureLayer.FeatureSource)[0]; // Here we generate 4 legend items, with the area of 160, 320, 640 and 1280 square pixels seperately. int[] circleAreas = new int[] { 160, 320, 640, 1280 }; foreach (int circleArea in circleAreas) { LegendItem legendItem = new LegendItem(); double radius = Math.Sqrt(circleArea / Math.PI); legendItem.ImageStyle = new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(valueCircleStyle.InnerColor), new GeoPen(new GeoSolidBrush(valueCircleStyle.OuterColor)), (int)(radius * 2)); AreaStyle maskStyle = new AreaStyle(new GeoPen(GeoColor.StandardColors.LightGray, 1), new GeoSolidBrush(GeoColor.SimpleColors.Transparent)); legendItem.ImageMask = maskStyle; legendItem.ImageWidth = 48; legendItem.TextTopPadding = 16; legendItem.TextRightPadding = 5; legendItem.BottomPadding = 16; legendItem.TopPadding = 16; legendItem.RightPadding = 5; double drawingRadius = circleArea / valueCircleStyle.DrawingRadiusRatio * valueCircleStyle.BasedScale / valueCircleStyle.DefaultZoomLevel.Scale; double ratio = (valueCircleStyle.MaxValidValue - valueCircleStyle.MinValidValue) / (valueCircleStyle.MaxCircleAreaInDefaultZoomLevel - valueCircleStyle.MinCircleAreaInDefaultZoomLevel); double resultValue = (drawingRadius - valueCircleStyle.MinCircleAreaInDefaultZoomLevel) * ratio + valueCircleStyle.MinValidValue; string text = TextFormatter.GetFormatedStringForLegendItem(valueCircleStyle.ColumnName, resultValue); legendItem.TextStyle = new TextStyle(text, new GeoFont("Segoe UI", 10), new GeoSolidBrush(GeoColor.SimpleColors.Black)); legendAdornmentLayer.LegendItems.Add(legendItem); } }
protected override Collection <Style> GetStylesCore(FeatureSource featureSource) { // here we generate a ValueCircle Style. double minValue = double.MaxValue; double maxValue = double.MinValue; featureSource.Open(); for (int i = 0; i < featureSource.GetCount(); i++) { Feature feature = featureSource.GetFeatureById((i + 1).ToString(CultureInfo.InvariantCulture), SelectedColumns); double columnValue; if (double.TryParse(feature.ColumnValues[SelectedColumns[0]], out columnValue)) { if (columnValue < minValue) { minValue = columnValue; } else if (columnValue > maxValue) { maxValue = columnValue; } } } featureSource.Close(); ValueCircleStyle valueCircleStyle = new ValueCircleStyle(); valueCircleStyle.ColumnName = SelectedColumns[0]; valueCircleStyle.DrawingRadiusRatio = radiusRatio; valueCircleStyle.MinValidValue = minValue; valueCircleStyle.MaxValidValue = maxValue; valueCircleStyle.MinCircleAreaInDefaultZoomLevel = 80; valueCircleStyle.MaxCircleAreaInDefaultZoomLevel = 10000; valueCircleStyle.InnerColor = GeoColor.FromArgb(this.Opacity, Color); valueCircleStyle.OuterColor = GeoColor.SimpleColors.White; return(new Collection <Style>() { valueCircleStyle }); }
protected override Collection<Style> GetStylesCore(FeatureSource featureSource) { // here we generate a ValueCircle Style. double minValue = double.MaxValue; double maxValue = double.MinValue; featureSource.Open(); for (int i = 0; i < featureSource.GetCount(); i++) { Feature feature = featureSource.GetFeatureById((i + 1).ToString(CultureInfo.InvariantCulture), SelectedColumns); double columnValue; if (double.TryParse(feature.ColumnValues[SelectedColumns[0]], out columnValue)) { if (columnValue < minValue) { minValue = columnValue; } else if (columnValue > maxValue) { maxValue = columnValue; } } } featureSource.Close(); ValueCircleStyle valueCircleStyle = new ValueCircleStyle(); valueCircleStyle.ColumnName = SelectedColumns[0]; valueCircleStyle.DrawingRadiusRatio = radiusRatio; valueCircleStyle.MinValidValue = minValue; valueCircleStyle.MaxValidValue = maxValue; valueCircleStyle.MinCircleAreaInDefaultZoomLevel = 80; valueCircleStyle.MaxCircleAreaInDefaultZoomLevel = 10000; valueCircleStyle.InnerColor = GeoColor.FromArgb(this.Opacity, Color); valueCircleStyle.OuterColor = GeoColor.SimpleColors.White; return new Collection<Style>(){valueCircleStyle}; }
protected override void DrawCore(GeoCanvas geoCanvas, Style style) { Bitmap bitmap = new Bitmap(50, 50); RectangleShape worldExtent = new RectangleShape(-180, 90, 180, -90); ValueCircleStyle valueCircleStyle = style as ValueCircleStyle; double radius = Math.Sqrt(circleArea / Math.PI); // Draw Icon geoCanvas.BeginDrawing(bitmap, worldExtent, GeographyUnit.DecimalDegree); if (valueCircleStyle != null) { geoCanvas.DrawEllipse(new PointShape(0, 0), (float)(radius * 2), (float)(radius * 2), new GeoPen(new GeoSolidBrush(valueCircleStyle.OuterColor)), new GeoSolidBrush(valueCircleStyle.InnerColor), DrawingLevel.LevelOne); } geoCanvas.DrawArea(worldExtent, new GeoPen(GeoColor.FromHtml("#cccccc"), 2), DrawingLevel.LabelLevel); geoCanvas.EndDrawing(); //Calculate the value of radius double drawingRadius = circleArea / valueCircleStyle.DrawingRadiusRatio * valueCircleStyle.BasedScale / valueCircleStyle.DefaultZoomLevel.Scale; double dCircleArea = valueCircleStyle.MaxCircleAreaInDefaultZoomLevel - valueCircleStyle.MinCircleAreaInDefaultZoomLevel; double dValue = valueCircleStyle.MaxValidValue - valueCircleStyle.MinValidValue; double ratio = dValue / dCircleArea; double resultValue = (drawingRadius - valueCircleStyle.MinCircleAreaInDefaultZoomLevel) * ratio + valueCircleStyle.MinValidValue; if (resultValue > 0) { Image = bitmap; Title = MapSuiteSampleHelper.GetFormatedStringForLegendItem(valueCircleStyle.ColumnName, resultValue); } else { Image = null; Title = null; } }