private LegendAdornmentLayer GetEarthquakeLegendLayer(EarthquakeIsoLineFeatureLayer earthquakeFeatureLayer) { LegendAdornmentLayer isoLevelLegendLayer = null; if (mapControl.AdornmentOverlay.Layers.Contains(Resources.IsoLineLevelLegendLayerName)) { isoLevelLegendLayer = (LegendAdornmentLayer)mapControl.AdornmentOverlay.Layers[Resources.IsoLineLevelLegendLayerName]; } else if (earthquakeFeatureLayer != null) { isoLevelLegendLayer = new LegendAdornmentLayer(); isoLevelLegendLayer.Width = 85; isoLevelLegendLayer.Height = 320; isoLevelLegendLayer.Location = AdornmentLocation.LowerRight; isoLevelLegendLayer.ContentResizeMode = LegendContentResizeMode.Fixed; mapControl.AdornmentOverlay.Layers.Add(Resources.IsoLineLevelLegendLayerName, isoLevelLegendLayer); LegendItem flagLegendItem = new LegendItem(); flagLegendItem.TextStyle = new TextStyle("Magnitude", new GeoFont("Arial", 10), new GeoSolidBrush(GeoColor.StandardColors.Black)); flagLegendItem.TextLeftPadding = -20; isoLevelLegendLayer.LegendItems.Add(flagLegendItem); for (int i = 0; i < earthquakeFeatureLayer.IsoLineLevels.Count; i++) { LegendItem legendItem = new LegendItem(); legendItem.TextStyle = new TextStyle(earthquakeFeatureLayer.IsoLineLevels[i].ToString("f2"), new GeoFont("Arial", 10), new GeoSolidBrush(GeoColor.StandardColors.Black)); legendItem.ImageStyle = earthquakeFeatureLayer.LevelClassBreakStyle.ClassBreaks[i].DefaultAreaStyle; legendItem.ImageWidth = 25; isoLevelLegendLayer.LegendItems.Add(legendItem); } } return(isoLevelLegendLayer); }
private void AddThematicLegendItems(LegendAdornmentLayer legendAdornmentLayer) { ClassBreakStyle thematicStyle = (ClassBreakStyle)currentStyleBuilder.GetStyles(currentFeatureLayer.FeatureSource)[0]; for (int i = 0; i < thematicStyle.ClassBreaks.Count; i++) { LegendItem legendItem = new LegendItem(); if (i < thematicStyle.ClassBreaks.Count) { legendItem.ImageStyle = thematicStyle.ClassBreaks[i].DefaultAreaStyle; legendItem.ImageWidth = 20; legendItem.TextRightPadding = 5; legendItem.RightPadding = 5; string text = string.Empty; if (i != thematicStyle.ClassBreaks.Count - 1) { text = string.Format("{0:#,0.####} ~ {1:#,0.####}", TextFormatter.GetFormatedStringForLegendItem(thematicStyle.ColumnName, thematicStyle.ClassBreaks[i].Value), TextFormatter.GetFormatedStringForLegendItem(thematicStyle.ColumnName, thematicStyle.ClassBreaks[i + 1].Value)); } else { text = string.Format("> {0:#,0.####}", TextFormatter.GetFormatedStringForLegendItem(thematicStyle.ColumnName, thematicStyle.ClassBreaks[i].Value)); } legendItem.TextStyle = new TextStyle(text, new GeoFont("Segoe UI", 10), new GeoSolidBrush(GeoColor.SimpleColors.Black)); } legendAdornmentLayer.LegendItems.Add(legendItem); } }
/// <summary> /// Adds a ClassBreakStyle to the housingUnitsLayer that changes colors based on the numerical value of the H_UNITS column as they fall within the range of a ClassBreak /// </summary> private static void AddClassBreakStyle(ShapeFileFeatureLayer layer, LegendAdornmentLayer legend) { // Create the ClassBreakStyle based on the H_UNITS numerical column var housingUnitsStyle = new ClassBreakStyle("H_UNITS"); var classBreakIntervals = new double[] { 0, 1000, 2000, 3000, 4000, 5000 }; var colors = GeoColor.GetColorsInHueFamily(GeoColors.Red, classBreakIntervals.Count()).Reverse().ToList(); // Create ClassBreaks for each of the classBreakIntervals for (var i = 0; i < classBreakIntervals.Count(); i++) { // Create the classBreak using one of the intervals and colors defined above var classBreak = new ClassBreak(classBreakIntervals[i], AreaStyle.CreateSimpleAreaStyle(new GeoColor(192, colors[i]), GeoColors.White)); // Add the classBreak to the housingUnitsStyle ClassBreaks collection housingUnitsStyle.ClassBreaks.Add(classBreak); // Add a LegendItem to the legend adornment to represent the classBreak var legendItem = new LegendItem() { ImageStyle = classBreak.DefaultAreaStyle, TextStyle = new TextStyle($@">{classBreak.Value} units", new GeoFont("Verdana", 10), GeoBrushes.Black) }; legend.LegendItems.Add(legendItem); } // Add and apply the ClassBreakStyle to the housingUnitsLayer layer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(housingUnitsStyle); layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; }
private void UpdateLegend(DemographicStyleBuilder styleBuilder, Map map) { LegendAdornmentLayer legendAdornmentLayer = map.AdornmentOverlay.Layers[0] as LegendAdornmentLayer; legendAdornmentLayer.LegendItems.Clear(); if (styleBuilder is ThematicDemographicStyleBuilder) { AddThematicLegendItems(styleBuilder, legendAdornmentLayer, map); } else if (styleBuilder is DotDensityDemographicStyleBuilder) { AddDotDensityLegendItems(styleBuilder, legendAdornmentLayer, map); } else if (styleBuilder is ValueCircleDemographicStyleBuilder) { AddValueCircleLegendItems(styleBuilder, legendAdornmentLayer, map); } else if (styleBuilder is PieChartDemographicStyleBuilder) { AddPieGraphLegendItems(styleBuilder, legendAdornmentLayer, map); } legendAdornmentLayer.ContentResizeMode = LegendContentResizeMode.Fixed; legendAdornmentLayer.Height = GetLegendHeight(legendAdornmentLayer); legendAdornmentLayer.Width = GetLegendWidth(legendAdornmentLayer); }
private void AddDotDensityLegendItems(LegendAdornmentLayer legendAdornmentLayer) { CustomDotDensityStyle dotDensityStyle = (CustomDotDensityStyle)currentStyleBuilder.GetStyles(currentFeatureLayer.FeatureSource)[0]; // Here we generate 4 legend items, for 5, 10, 20 and 50 points seperately. int[] pointCounts = new int[] { 5, 10, 20, 50 }; foreach (int pointCount in pointCounts) { LegendItem legendItem = new LegendItem(); legendItem.ImageMask = new AreaStyle(new GeoPen(GeoColor.StandardColors.LightGray, 1), new GeoSolidBrush(GeoColor.SimpleColors.Transparent)); legendItem.ImageWidth = 48; legendItem.TextTopPadding = 16; legendItem.TextRightPadding = 5; legendItem.BottomPadding = 16; legendItem.TopPadding = 16; legendItem.RightPadding = 5; CustomDotDensityStyle legendDotDensityStyle = (CustomDotDensityStyle)dotDensityStyle.CloneDeep(); legendDotDensityStyle.DrawingPointsNumber = pointCount; legendItem.ImageStyle = legendDotDensityStyle; string text = string.Format(CultureInfo.InvariantCulture, "{0:0.####}", TextFormatter.GetFormatedStringForLegendItem(dotDensityStyle.ColumnName, (pointCount / dotDensityStyle.PointToValueRatio))); legendItem.TextStyle = new TextStyle(text, new GeoFont("Segoe UI", 10), new GeoSolidBrush(GeoColor.SimpleColors.Black)); legendAdornmentLayer.LegendItems.Add(legendItem); } }
private void AddValueCircleLegendItems(DemographicStyleBuilder styleBuilder, LegendAdornmentLayer legendAdornmentLayer, Map map) { ShapeFileFeatureLayer statesLayer = map.DynamicOverlay.Layers["usStatesLayer"] as ShapeFileFeatureLayer; ValueCircleStyle valueCircleStyle = (ValueCircleStyle)styleBuilder.GetStyle(statesLayer.FeatureSource); 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 = DemographicStyleTextFormatter.GetFormatedStringForLegendItem(valueCircleStyle.ColumnName, resultValue); legendItem.TextStyle = new TextStyle(text, new GeoFont("Segoe UI", 10), new GeoSolidBrush(GeoColor.SimpleColors.Black)); legendAdornmentLayer.LegendItems.Add(legendItem); } }
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); } }
private void AddThematicLegendItems(DemographicStyleBuilder styleBuilder, LegendAdornmentLayer legendAdornmentLayer, Map map) { ShapeFileFeatureLayer statesLayer = map.DynamicOverlay.Layers["usStatesLayer"] as ShapeFileFeatureLayer; ClassBreakStyle thematicStyle = (ClassBreakStyle)styleBuilder.GetStyle(statesLayer.FeatureSource); for (int i = 0; i < thematicStyle.ClassBreaks.Count; i++) { LegendItem legendItem = new LegendItem(); if (i < thematicStyle.ClassBreaks.Count) { legendItem.ImageStyle = thematicStyle.ClassBreaks[i].DefaultAreaStyle; legendItem.ImageWidth = 20; legendItem.TextRightPadding = 5; legendItem.RightPadding = 5; string text = string.Empty; if (i != thematicStyle.ClassBreaks.Count - 1) { text = string.Format("{0:#,0.####} ~ {1:#,0.####}", DemographicStyleTextFormatter.GetFormatedStringForLegendItem(thematicStyle.ColumnName, thematicStyle.ClassBreaks[i].Value), DemographicStyleTextFormatter.GetFormatedStringForLegendItem(thematicStyle.ColumnName, thematicStyle.ClassBreaks[i + 1].Value)); } else { text = string.Format("> {0:#,0.####}", DemographicStyleTextFormatter.GetFormatedStringForLegendItem(thematicStyle.ColumnName, thematicStyle.ClassBreaks[i].Value)); } legendItem.TextStyle = new TextStyle(text, new GeoFont("Segoe UI", 10), new GeoSolidBrush(GeoColor.SimpleColors.Black)); } legendAdornmentLayer.LegendItems.Add(legendItem); } }
private void AddDotDensityLegendItems(DemographicStyleBuilder styleBuilder, LegendAdornmentLayer legendAdornmentLayer, Map map) { ShapeFileFeatureLayer statesLayer = map.DynamicOverlay.Layers["usStatesLayer"] as ShapeFileFeatureLayer; CustomDotDensityStyle dotDensityStyle = (CustomDotDensityStyle)styleBuilder.GetStyle(statesLayer.FeatureSource); int[] pointCounts = new int[] { 5, 10, 20, 50 }; foreach (int pointCount in pointCounts) { LegendItem legendItem = new LegendItem(); legendItem.ImageMask = new AreaStyle(new GeoPen(GeoColor.StandardColors.LightGray, 1), new GeoSolidBrush(GeoColor.SimpleColors.Transparent)); legendItem.ImageWidth = 48; legendItem.TextTopPadding = 16; legendItem.TextRightPadding = 5; legendItem.BottomPadding = 16; legendItem.TopPadding = 16; legendItem.RightPadding = 5; CustomDotDensityStyle legendDotDensityStyle = (CustomDotDensityStyle)dotDensityStyle.CloneDeep(); legendDotDensityStyle.DrawingPointsNumber = pointCount; legendItem.ImageStyle = legendDotDensityStyle; string text = string.Format(CultureInfo.InvariantCulture, "{0:0.####}", DemographicStyleTextFormatter.GetFormatedStringForLegendItem(dotDensityStyle.ColumnName, (pointCount / dotDensityStyle.PointToValueRatio))); legendItem.TextStyle = new TextStyle(text, new GeoFont("Segoe UI", 10), new GeoSolidBrush(GeoColor.SimpleColors.Black)); legendAdornmentLayer.LegendItems.Add(legendItem); } }
private void InitializeMap() { mapControl.MapTools.Logo.IsEnabled = true; mapControl.MapTools.Logo.Margin = new Thickness(0, 0, 10, 5); mapControl.MapTools.MouseCoordinate.IsEnabled = true; mapControl.MapTools.MouseCoordinate.Visibility = Visibility.Hidden; mapControl.MapTools.MouseCoordinate.Margin = new Thickness(0, 0, 100, 5); mapControl.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.Custom; mapControl.Overlays.Add(new WorldMapKitWmsWpfOverlay()); censusStateFeatureLayer = new ShapeFileFeatureLayer(MapSuiteSampleHelper.GetValueFromConfiguration("UsShapefilePath")); censusStateFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; demographicLayerOverlay = new LayerOverlay(); demographicLayerOverlay.TileType = TileType.SingleTile; mapControl.Overlays.Add(demographicLayerOverlay); highlightOverlay = new HighlightOverlay(); mapControl.Overlays.Add(highlightOverlay); legendAdornmentLayer = new LegendAdornmentLayer(); legendAdornmentLayer.Location = AdornmentLocation.LowerLeft; legendAdornmentLayer.Title = new LegendItem(); legendAdornmentLayer.Title.ImageJustificationMode = LegendImageJustificationMode.JustifyImageRight; legendAdornmentLayer.Title.TopPadding = 10; legendAdornmentLayer.Title.BottomPadding = 10; legendAdornmentLayer.Title.TextStyle = new TextStyle("Population", new GeoFont("Segoe UI", 12), new GeoSolidBrush(GeoColor.SimpleColors.Black)); mapControl.AdornmentOverlay.Layers.Add(legendAdornmentLayer); DefaultFeatureLayer = censusStateFeatureLayer; MapControl.CurrentExtent = globeExtent; }
protected LegendAdornmentLayerViewModel(LegendAdornmentLayer legendLayer) { this.coreLayer = legendLayer; this.simpleCandidates = new Collection <SimpleCandidate>(); this.InitDelayRenderTimer(); this.legendItems = new GeoCollection <LegendItemViewModel>(); this.legendItems.CollectionChanged += (s, e) => { RaisePropertyChanged(() => CanMoveUp); RaisePropertyChanged(() => CanMoveDown); LazyRenderPreview(); if (e.NewItems != null) { foreach (LegendItemViewModel item in e.NewItems) { item.Parent = this; } } }; this.Width = legendLayer.Width; this.Height = legendLayer.Height; this.BackgroundMask = legendLayer.BackgroundMask; this.FixedSymbolWidth = 16; this.FixedSymbolHeight = 16; this.IsVisible = legendLayer.IsVisible; }
private void AddLegendLayer2() { //Set the legend for the new proposal on top of the map in the upper right corner. LegendItem titleLegendItem = new LegendItem(); titleLegendItem.TextStyle = new TextStyle("New Proposal", new GeoFont("Arial", 10, DrawingFontStyles.Bold), new GeoSolidBrush(GeoColors.Black)); LegendItem legendItem1 = new LegendItem(); legendItem1.ImageStyle = new AreaStyle(new GeoPen(GeoColors.DarkGreen, 4), new GeoSolidBrush(GeoColors.Transparent)); legendItem1.TextStyle = new TextStyle("Approved", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColors.Black)); LegendItem legendItem2 = new LegendItem(); legendItem2.ImageStyle = new AreaStyle(new GeoPen(GeoColors.DarkRed, 4), new GeoSolidBrush(GeoColors.Transparent)); legendItem2.TextStyle = new TextStyle("In Discussion", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColors.Black)); LegendAdornmentLayer legendAdornmentLayer = new LegendAdornmentLayer(); legendAdornmentLayer.BackgroundMask = new AreaStyle(new GeoPen(GeoColors.Black, 1), GeoBrushes.White); legendAdornmentLayer.Height = 100; legendAdornmentLayer.Width = 140; legendAdornmentLayer.Title = titleLegendItem; legendAdornmentLayer.LegendItems.Add(legendItem1); legendAdornmentLayer.LegendItems.Add(legendItem2); LegendPrinterLayer legendPrinterLayer = new LegendPrinterLayer(legendAdornmentLayer); legendPrinterLayer.SetPosition(2, 1, 2.9, 3.9, PrintingUnit.Inch); PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)mapView.InteractiveOverlays["PrintPreviewOverlay"]; printerInteractiveOverlay.PrinterLayers.Add("LegendPrinterLayer2", legendPrinterLayer); }
/// <summary> /// Set up the map with the ThinkGeo Cloud Maps overlay and a feature layer containing Frisco housing units data /// </summary> protected override async void OnAppearing() { base.OnAppearing(); // Create the background world maps using vector tiles requested from the ThinkGeo Cloud Service. ThinkGeoCloudVectorMapsOverlay thinkGeoCloudVectorMapsOverlay = new ThinkGeoCloudVectorMapsOverlay("9ap16imkD_V7fsvDW9I8r8ULxgAB50BX_BnafMEBcKg~", "vtVao9zAcOj00UlGcK7U-efLANfeJKzlPuDB9nw7Bp4K4UxU_PdRDg~~", ThinkGeoCloudVectorMapsMapType.Light); thinkGeoCloudVectorMapsOverlay.VectorTileCache = new FileVectorTileCache(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "cache"), "CloudMapsVector"); mapView.Overlays.Add(thinkGeoCloudVectorMapsOverlay); // Set the map's unit of measurement to meters (Spherical Mercator) mapView.MapUnit = GeographyUnit.Meter; // Create a new ShapeFileFeatureLayer using a shapefile containing Frisco Census data ShapeFileFeatureLayer housingUnitsLayer = new ShapeFileFeatureLayer(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Data/Shapefile/Frisco 2010 Census Housing Units.shp")); housingUnitsLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; // Create a new ProjectionConverter to convert between Texas North Central (2276) and Spherical Mercator (3857) ProjectionConverter projectionConverter = new ProjectionConverter(2276, 3857); housingUnitsLayer.FeatureSource.ProjectionConverter = projectionConverter; // Create a new overlay and add the census feature layer LayerOverlay housingUnitsOverlay = new LayerOverlay(); housingUnitsOverlay.Layers.Add("Frisco Housing Units", housingUnitsLayer); mapView.Overlays.Add("Frisco Housing Units Overlay", housingUnitsOverlay); // Create a legend adornment to display classbreaks LegendAdornmentLayer legend = new LegendAdornmentLayer(); // Set up the legend adornment legend.Title = new LegendItem() { TextStyle = new TextStyle("Housing Unit Counts", new GeoFont("Verdana", 10, DrawingFontStyles.Bold), GeoBrushes.Black) }; legend.Location = AdornmentLocation.LowerRight; mapView.AdornmentOverlay.Layers.Add("Legend", legend); // Get the exttent of the features from the housing units shapefile, and set the map extent. housingUnitsLayer.Open(); mapView.CurrentExtent = housingUnitsLayer.GetBoundingBox(); housingUnitsLayer.Close(); cboColorType.SelectedItem = "Hue"; cboDefaultColor.SelectedItem = "Blue"; // Initialize the ColorCloudClient using our ThinkGeo Cloud credentials colorCloudClient = new ColorCloudClient("FSDgWMuqGhZCmZnbnxh-Yl1HOaDQcQ6mMaZZ1VkQNYw~", "IoOZkBJie0K9pz10jTRmrUclX6UYssZBeed401oAfbxb9ufF1WVUvg~~"); // Set the initial color scheme for the housing units layer Collection <GeoColor> colors = await GetColorsFromCloud(); // If colors were successfully generated, update the map if (colors.Count > 0) { UpdateHousingUnitsLayerColors(colors); } }
private void AddLegendLayer() { LegendItem title = new LegendItem(); title.TextStyle = new TextStyle("Map Legend", new GeoFont("Arial", 10, DrawingFontStyles.Bold), new GeoSolidBrush(GeoColors.Black)); LegendItem legendItem1 = new LegendItem(); legendItem1.ImageStyle = new AreaStyle(new GeoSolidBrush(GeoColor.FromArgb(170, GeoColors.Green))); legendItem1.TextStyle = new TextStyle("Population > 70 million", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColors.Black)); LegendItem legendItem2 = new LegendItem(); legendItem2.ImageStyle = AreaStyle.CreateSimpleAreaStyle(GeoColors.Green); legendItem2.TextStyle = new TextStyle("Population < 70 million", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColors.Black)); LegendAdornmentLayer legendAdornmentLayer = new LegendAdornmentLayer(); legendAdornmentLayer.Height = 100; legendAdornmentLayer.Title = title; legendAdornmentLayer.LegendItems.Add(legendItem1); legendAdornmentLayer.LegendItems.Add(legendItem2); LegendPrinterLayer legendPrinterLayer = new LegendPrinterLayer(legendAdornmentLayer); legendPrinterLayer.SetPosition(2, 1, -2.9, 3.9, PrintingUnit.Inch); legendPrinterLayer.BackgroundMask = AreaStyle.CreateSimpleAreaStyle(new GeoColor(255, 230, 230, 230), GeoColors.Black, 1); PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"]; printerInteractiveOverlay.PrinterLayers.Add("LegendPrinterLayer", legendPrinterLayer); }
public LegendAdornmentLayer ToLegendAdornmentLayer() { LegendAdornmentLayer legendAdornmentLayer = new LegendAdornmentLayer(); legendAdornmentLayer.BackgroundMask = BackgroundMask; legendAdornmentLayer.Height = Height; legendAdornmentLayer.Location = Location; legendAdornmentLayer.Name = Name; legendAdornmentLayer.Width = Width; legendAdornmentLayer.XOffsetInPixel = XOffsetInPixel; legendAdornmentLayer.YOffsetInPixel = YOffsetInPixel; legendAdornmentLayer.IsVisible = IsVisible; //ApplySymbolSizeMode(legendAdornmentLayer.LegendItems); ApplySymbolSizeMode(LegendItems); foreach (var item in LegendItems) { if (item.LegendItemType == LegendItemType.Header) { legendAdornmentLayer.Title = item.ToLegendItem(); } else if (item.LegendItemType == LegendItemType.Footer) { legendAdornmentLayer.Footer = item.ToLegendItem(); } else { legendAdornmentLayer.LegendItems.Add(item.ToLegendItem()); } } var rect = Measure(new PlatformGeoCanvas()); legendAdornmentLayer.Width = rect.Width + 1; legendAdornmentLayer.Height = rect.Height + 1; var tmpItems = new Collection <LegendItem>(); if (legendAdornmentLayer.Title != null) { tmpItems.Add(legendAdornmentLayer.Title); } if (legendAdornmentLayer.Footer != null) { tmpItems.Add(legendAdornmentLayer.Footer); } foreach (var tmpItem in legendAdornmentLayer.LegendItems) { tmpItems.Add(tmpItem); } foreach (var tmpItem in tmpItems) { tmpItem.Width = rect.Width - tmpItem.LeftPadding - tmpItem.RightPadding; } return(legendAdornmentLayer); }
private void InitializeMap(Map map) { map.MapUnit = GeographyUnit.DecimalDegree; map.MapTools.Logo.Enabled = true; map.MapBackground = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF")); map.CurrentExtent = new RectangleShape(-128.17864375, 56.9286546875, -69.11614375, 20.1903734375); // base map layers WorldStreetsAndImageryOverlay worldMapKitOverlay = new WorldStreetsAndImageryOverlay(); map.CustomOverlays.Add(worldMapKitOverlay); // us states layer ShapeFileFeatureLayer statesLayer = new ShapeFileFeatureLayer(Server.MapPath(ConfigurationManager.AppSettings["UsShapefilePath"])); ThematicDemographicStyleBuilder selectedStyle = new ThematicDemographicStyleBuilder(new Collection <string>() { "Population" }); statesLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(selectedStyle.GetStyle(statesLayer.FeatureSource)); statesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; map.DynamicOverlay.Layers.Add("usStatesLayer", statesLayer); // highlight layers map.HighlightOverlay.HighlightStyle = new FeatureOverlayStyle(GeoColor.FromArgb(150, GeoColor.FromHtml("#449FBC")), GeoColor.FromHtml("#014576"), 1); map.HighlightOverlay.Style = new FeatureOverlayStyle(GeoColor.SimpleColors.Transparent, GeoColor.SimpleColors.Transparent, 0); statesLayer.Open(); foreach (Feature feature in statesLayer.FeatureSource.GetAllFeatures(ReturningColumnsType.NoColumns)) { map.HighlightOverlay.Features.Add(feature.Id, feature); } statesLayer.Close(); // Add hover-popup CloudPopup featureinfoPopup = new CloudPopup("featureInfoPopup", new PointShape(-98.64739375, 38.5595140625), "State Info"); // make the popup out of map view temporarily featureinfoPopup.AutoSize = true; map.Popups.Add(featureinfoPopup); // Add Legend adorment overlay LegendAdornmentLayer legendAdornmentLayer = new LegendAdornmentLayer(); legendAdornmentLayer.Location = AdornmentLocation.LowerLeft; legendAdornmentLayer.XOffsetInPixel = 10; legendAdornmentLayer.Title = new LegendItem(); legendAdornmentLayer.Title.ImageJustificationMode = LegendImageJustificationMode.JustifyImageRight; legendAdornmentLayer.Title.TopPadding = 10; legendAdornmentLayer.Title.BottomPadding = 10; legendAdornmentLayer.Title.TextStyle = new TextStyle("Population", new GeoFont("Segoe UI", 12), new GeoSolidBrush(GeoColor.SimpleColors.Black)); map.AdornmentOverlay.Layers.Add(legendAdornmentLayer); ThematicDemographicStyleBuilder initDemographicStyle = new ThematicDemographicStyleBuilder(new Collection <string>() { "Population" }); UpdateLegend(initDemographicStyle, map); }
// This method would be called whenever the style needs to updated private void dataSelectorUserControl_StyleUpdated(object sender, StyleUpdatedDataSelectorUserControlEventArgs e) { HideStyleControls(); DataSelectorUserControl dataSelectorUserControl = sender as DataSelectorUserControl; LegendAdornmentLayer legendAdornmentLayer = (LegendAdornmentLayer)map.AdornmentOverlay.Layers[0]; // Here we update the styleBuilder and UI according to the style builder type passed from the data selector user control. switch (e.DemographicStyleBuilderType) { case DemographicStyleBuilderType.ValueCircle: currentStyleBuilder = new ValueCircleDemographicStyleBuilder(); trackBarValueCirleRadio.Visible = true; lblValueCircle.Visible = true; legendAdornmentLayer.Title.TextStyle.TextColumnName = e.ActivatedStyleSelectors[0].LegendTitle; break; case DemographicStyleBuilderType.DotDensity: currentStyleBuilder = new DotDensityDemographicStyleBuilder(); lblFewer.Visible = true; lblMore.Visible = true; trackBarDots.Visible = true; lblDotDensityUnit.Visible = true; legendAdornmentLayer.Title.TextStyle.TextColumnName = e.ActivatedStyleSelectors[0].LegendTitle; break; case DemographicStyleBuilderType.PieChart: currentStyleBuilder = new PieChartDemographicStyleBuilder(); foreach (StyleSelectorUserControl item in e.ActivatedStyleSelectors) { ((PieChartDemographicStyleBuilder)currentStyleBuilder).SelectedColumnAliases.Add(item.Alias); } legendAdornmentLayer.Title.TextStyle.TextColumnName = dataSelectorUserControl.Title; break; case DemographicStyleBuilderType.Thematic: default: currentStyleBuilder = new ThematicDemographicStyleBuilder(); lblDisplayEndColor.Visible = true; lblColorWheelDirection.Visible = true; cbxActiveEndColor.Visible = true; cbxSelectColorWheelDirection.Visible = true; legendAdornmentLayer.Title.TextStyle.TextColumnName = e.ActivatedStyleSelectors[0].LegendTitle; lblDisplayColor.Text = "Display Start Color"; break; } foreach (StyleSelectorUserControl activatedStyleSelector in e.ActivatedStyleSelectors) { currentStyleBuilder.SelectedColumns.Add(activatedStyleSelector.ColumnName); } // Update UI and map. UpdateUIControls(currentStyleBuilder); UpdateMap(currentStyleBuilder); }
public void SetEarthquakeLegendsVisible(Layer currentLayer) { EarthquakeIsoLineFeatureLayer earthquakeFeatureLayer = currentLayer as EarthquakeIsoLineFeatureLayer; LegendAdornmentLayer earthquakeLegendLayer = GetEarthquakeLegendLayer(earthquakeFeatureLayer); if (earthquakeLegendLayer != null) { earthquakeLegendLayer.IsVisible = earthquakeFeatureLayer != null; } }
private void MainForm_Load(object sender, EventArgs e) { map.MapUnit = GeographyUnit.Meter; map.ZoomLevelSet = new ThinkGeoCloudMapsZoomLevelSet(); map.CurrentExtent = new RectangleShape(-13059527, 6484023, -8632838, 2982361); // Please input your ThinkGeo Cloud Client ID / Client Secret to enable the background map. ThinkGeoCloudRasterMapsOverlay thinkGeoCloudMapsOverlay = new ThinkGeoCloudRasterMapsOverlay("ThinkGeo Cloud Client ID", "ThinkGeo Cloud Client Secret"); map.Overlays.Add(thinkGeoCloudMapsOverlay); // Add Demographic Layer customFeatureLayer = new ShapeFileFeatureLayer(); censusStateFeatureLayer = new ShapeFileFeatureLayer(@"../../App_Data/usStatesCensus2010.shp"); censusStateFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; currentFeatureLayer = censusStateFeatureLayer; LayerOverlay demographicLayerOverlay = new LayerOverlay(); demographicLayerOverlay.Layers.Add(currentFeatureLayer); map.Overlays.Add("DemographicLayerOverlayKey", demographicLayerOverlay); // Add Highlight Overlay HighlightOverlay USDemographicOverlay = new HighlightOverlay(); map.Overlays.Add("HighlightOverlayKey", USDemographicOverlay); // Initialize style builder to Thematic currentStyleBuilder = new ThematicDemographicStyleBuilder(); currentStyleBuilder.SelectedColumns.Add("Population"); // Initialize the Legend LegendAdornmentLayer legendAdornmentLayer = new LegendAdornmentLayer(); legendAdornmentLayer.Location = AdornmentLocation.LowerLeft; legendAdornmentLayer.Title = new LegendItem(); legendAdornmentLayer.Title.ImageJustificationMode = LegendImageJustificationMode.JustifyImageRight; legendAdornmentLayer.Title.TopPadding = 10; legendAdornmentLayer.Title.BottomPadding = 10; legendAdornmentLayer.Title.TextStyle = new TextStyle("Population", new GeoFont("Segoe UI", 12), new GeoSolidBrush(GeoColor.SimpleColors.Black)); map.AdornmentOverlay.Layers.Add(legendAdornmentLayer); //map.ZoomToScale(map.ZoomLevelSet.ZoomLevel14.Scale); // Update the controls and map. UpdateUIControls(currentStyleBuilder); UpdateMap(currentStyleBuilder); LoadDataSelectorUserControls(); }
private void AddPieGraphLegendItems(LegendAdornmentLayer legendAdornmentLayer) { PieZedGraphStyle zedGraphStyle = (PieZedGraphStyle)currentStyleBuilder.GetStyles(currentFeatureLayer.FeatureSource)[0]; foreach (KeyValuePair <string, GeoColor> item in zedGraphStyle.PieSlices) { LegendItem legendItem = new LegendItem(); legendItem.ImageWidth = 20; legendItem.TextRightPadding = 5; legendItem.RightPadding = 5; legendItem.ImageStyle = new AreaStyle(new GeoSolidBrush(item.Value)); legendItem.TextStyle = new TextStyle(item.Key, new GeoFont("Segoe UI", 10), new GeoSolidBrush(GeoColor.SimpleColors.Black)); legendAdornmentLayer.LegendItems.Add(legendItem); } }
private void AddPieGraphLegendItems(DemographicStyleBuilder styleBuilder, LegendAdornmentLayer legendAdornmentLayer, Map map) { ShapeFileFeatureLayer statesLayer = map.DynamicOverlay.Layers["usStatesLayer"] as ShapeFileFeatureLayer; PieZedGraphStyle zedGraphStyle = (PieZedGraphStyle)styleBuilder.GetStyle(statesLayer.FeatureSource); foreach (KeyValuePair <string, GeoColor> item in zedGraphStyle.PieSlices) { LegendItem legendItem = new LegendItem(); legendItem.ImageWidth = 20; legendItem.TextRightPadding = 5; legendItem.RightPadding = 5; legendItem.ImageStyle = new AreaStyle(new GeoSolidBrush(item.Value)); legendItem.TextStyle = new TextStyle(item.Key, new GeoFont("Segoe UI", 10), new GeoSolidBrush(GeoColor.SimpleColors.Black)); legendAdornmentLayer.LegendItems.Add(legendItem); } }
private void UpdateMap(DemographicStyleBuilder styleBuilder) { if (!avoidUpdatingMap) { Collection <Style> activeStyles = styleBuilder.GetStyles(currentFeatureLayer.FeatureSource); currentFeatureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Clear(); foreach (Style activeStyle in activeStyles) { currentFeatureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(activeStyle); } LegendAdornmentLayer legendAdornmentLayer = (LegendAdornmentLayer)map.AdornmentOverlay.Layers[0]; UpdateLegend(currentStyleBuilder, legendAdornmentLayer); map.Refresh(); } }
private float GetLegendHeight(LegendAdornmentLayer legendAdornmentLayer) { PlatformGeoCanvas gdiPlusGeoCanvas = new PlatformGeoCanvas(); LegendItem title = legendAdornmentLayer.Title; float titleMeasuredHeight = gdiPlusGeoCanvas.MeasureText(title.TextStyle.TextColumnName, new GeoFont("Segoe UI", 12)).Height; float legendHeight = new[] { titleMeasuredHeight, title.ImageHeight, title.Height }.Max(); float height = legendHeight + Math.Max(title.ImageTopPadding, title.TextTopPadding) + title.TopPadding + Math.Max(title.ImageBottomPadding, title.TextBottomPadding) + title.BottomPadding; foreach (LegendItem legendItem in legendAdornmentLayer.LegendItems) { float itemLegendHeight = Math.Max(gdiPlusGeoCanvas.MeasureText(legendItem.TextStyle.TextColumnName, new GeoFont("Segoe UI", 10)).Height, legendItem.ImageHeight); float itemHeight = itemLegendHeight + Math.Max(legendItem.ImageTopPadding, legendItem.TextTopPadding) + legendItem.TopPadding + Math.Max(legendItem.ImageBottomPadding, legendItem.TextBottomPadding) + legendItem.BottomPadding; height += itemHeight; } return(height); }
public float GetLegendWidth(LegendAdornmentLayer legendAdornmentLayer) { PlatformGeoCanvas gdiPlusGeoCanvas = new PlatformGeoCanvas(); LegendItem title = legendAdornmentLayer.Title; float width = gdiPlusGeoCanvas.MeasureText(title.TextStyle.TextColumnName, new GeoFont("Segoe UI", 12)).Width + title.ImageWidth + title.ImageRightPadding + title.ImageLeftPadding + title.TextRightPadding + title.TextLeftPadding + title.LeftPadding + title.RightPadding; foreach (LegendItem legendItem in legendAdornmentLayer.LegendItems) { float legendItemWidth = gdiPlusGeoCanvas.MeasureText(legendItem.TextStyle.TextColumnName, new GeoFont("Segoe UI", 10)).Width + legendItem.ImageWidth + legendItem.ImageRightPadding + legendItem.ImageLeftPadding + legendItem.TextRightPadding + legendItem.TextLeftPadding + legendItem.LeftPadding + legendItem.RightPadding; if (width < legendItemWidth) { width = legendItemWidth; } } return(width); }
/// <summary> /// Setup the map with the ThinkGeo Cloud Maps overlay. Also, project and style the Frisco 2010 Census Housing Units layer /// </summary> protected override void OnAppearing() { base.OnAppearing(); // Set the map's unit of measurement to meters(Spherical Mercator) mapView.MapUnit = GeographyUnit.Meter; // Add Cloud Maps as a background overlay var thinkGeoCloudVectorMapsOverlay = new ThinkGeoCloudVectorMapsOverlay("9ap16imkD_V7fsvDW9I8r8ULxgAB50BX_BnafMEBcKg~", "vtVao9zAcOj00UlGcK7U-efLANfeJKzlPuDB9nw7Bp4K4UxU_PdRDg~~", ThinkGeoCloudVectorMapsMapType.Light); thinkGeoCloudVectorMapsOverlay.VectorTileCache = new FileVectorTileCache(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "cache"), "CloudMapsVector"); mapView.Overlays.Add(thinkGeoCloudVectorMapsOverlay); var housingUnitsLayer = new ShapeFileFeatureLayer(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Data/Shapefile/Frisco 2010 Census Housing Units.shp")); var legend = new LegendAdornmentLayer(); // Setup the legend adornment legend.Title = new LegendItem() { TextStyle = new TextStyle("Housing Units", new GeoFont("Verdana", 10, DrawingFontStyles.Bold), GeoBrushes.Black) }; legend.Location = AdornmentLocation.LowerRight; mapView.AdornmentOverlay.Layers.Add(legend); // Project the layer's data to match the projection of the map housingUnitsLayer.FeatureSource.ProjectionConverter = new ProjectionConverter(2276, 3857); AddClassBreakStyle(housingUnitsLayer, legend); // Add housingUnitsLayer to a LayerOverlay var layerOverlay = new LayerOverlay(); layerOverlay.Layers.Add(housingUnitsLayer); // Add layerOverlay to the mapView mapView.Overlays.Add(layerOverlay); // Set the map extent housingUnitsLayer.Open(); mapView.CurrentExtent = housingUnitsLayer.GetBoundingBox(); housingUnitsLayer.Close(); mapView.Refresh(); }
private void GenerateNewLegendItems(Collection <ClassBreak> classBreaks) { //// Clear the previous legend adornment LegendAdornmentLayer legend = (LegendAdornmentLayer)mapView.AdornmentOverlay.Layers["Legend"]; legend.LegendItems.Clear(); // Add a LegendItems to the legend adornment for each ClassBreak foreach (var classBreak in classBreaks) { var legendItem = new LegendItem() { ImageStyle = classBreak.DefaultAreaStyle, TextStyle = new TextStyle($@">{classBreak.Value} units", new GeoFont("Verdana", 10), GeoBrushes.Black) }; legend.LegendItems.Add(legendItem); } mapView.AdornmentOverlay.Refresh(); }
/// <summary> /// Setup the map with the ThinkGeo Cloud Maps overlay. Also, project and style the friscoCrime layer /// </summary> protected override void OnAppearing() { base.OnAppearing(); // Set the map's unit of measurement to meters(Spherical Mercator) mapView.MapUnit = GeographyUnit.Meter; // Add Cloud Maps as a background overlay var thinkGeoCloudVectorMapsOverlay = new ThinkGeoCloudVectorMapsOverlay("9ap16imkD_V7fsvDW9I8r8ULxgAB50BX_BnafMEBcKg~", "vtVao9zAcOj00UlGcK7U-efLANfeJKzlPuDB9nw7Bp4K4UxU_PdRDg~~", ThinkGeoCloudVectorMapsMapType.Light); thinkGeoCloudVectorMapsOverlay.VectorTileCache = new FileVectorTileCache(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "cache"), "CloudMapsVector"); mapView.Overlays.Add(thinkGeoCloudVectorMapsOverlay); ShapeFileFeatureLayer friscoCrime = new ShapeFileFeatureLayer(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Data/Shapefile/Frisco_Crime.shp")); LegendAdornmentLayer legend = new LegendAdornmentLayer(); // Project the layer's data to match the projection of the map friscoCrime.FeatureSource.ProjectionConverter = new ProjectionConverter(2276, 3857); // Add friscoCrimeLayer to a LayerOverlay var layerOverlay = new LayerOverlay(); layerOverlay.Layers.Add(friscoCrime); // Setup the legend adornment legend.Title = new LegendItem() { TextStyle = new TextStyle("Crime Categories", new GeoFont("Verdana", 10, DrawingFontStyles.Bold), GeoBrushes.Black) }; legend.Height = 600; legend.Location = AdornmentLocation.LowerRight; mapView.AdornmentOverlay.Layers.Add(legend); AddValueStyle(friscoCrime, legend); // Add layerOverlay to the mapView mapView.Overlays.Add(layerOverlay); // Set the map extent mapView.CurrentExtent = new RectangleShape(-10780196.9469504, 3916119.49665258, -10776231.7761301, 3912703.71697007); mapView.Refresh(); }
private void AddAdormentLayers(Map Map1) { // ScaleBar ScaleBarAdornmentLayer scaleBarAdormentLayer = new ScaleBarAdornmentLayer(); scaleBarAdormentLayer.XOffsetInPixel = 10; scaleBarAdormentLayer.XOffsetInPixel = 5; scaleBarAdormentLayer.UnitFamily = UnitSystem.Metric; Map1.AdornmentOverlay.Layers.Add("ScaleBarAdormentLayer", scaleBarAdormentLayer); // Isoline legend adorment layer LegendAdornmentLayer isoLevelLegendLayer = new LegendAdornmentLayer(); isoLevelLegendLayer.IsVisible = false; isoLevelLegendLayer.Width = 85; isoLevelLegendLayer.Height = 320; isoLevelLegendLayer.Location = AdornmentLocation.LowerRight; isoLevelLegendLayer.ContentResizeMode = LegendContentResizeMode.Fixed; LegendItem legendTitle = new LegendItem(); legendTitle.TextStyle = new TextStyle("Magnitude", new GeoFont("Arial", 10), new GeoSolidBrush(GeoColor.StandardColors.Black)); legendTitle.TextLeftPadding = -20; isoLevelLegendLayer.LegendItems.Add(legendTitle); // add legend title // Legend items LayerOverlay earthquakeOverlay = Map1.CustomOverlays["EarthquakeOverlay"] as LayerOverlay; EarthquakeIsoLineFeatureLayer isolineLayer = earthquakeOverlay.Layers["IsoLines Map"] as EarthquakeIsoLineFeatureLayer; for (int i = 0; i < isolineLayer.IsoLineLevels.Count; i++) { LegendItem legendItem = new LegendItem(); legendItem.TextStyle = new TextStyle(isolineLayer.IsoLineLevels[i].ToString("f2"), new GeoFont("Arial", 10), new GeoSolidBrush(GeoColor.StandardColors.Black)); legendItem.ImageStyle = isolineLayer.LevelClassBreakStyle.ClassBreaks[i].DefaultAreaStyle; legendItem.ImageWidth = 25; isoLevelLegendLayer.LegendItems.Add(legendItem); } Map1.AdornmentOverlay.Layers.Add("IsoLineLevelLegendLayer", isoLevelLegendLayer); }
private void AddLegendLayer1() { //Set the legend for the parcel type on top of the map in the upper left corner. LegendItem titleLegendItem = new LegendItem(); titleLegendItem.TextStyle = new TextStyle("Parcel Types", new GeoFont("Arial", 10, DrawingFontStyles.Bold), new GeoSolidBrush(GeoColors.Black)); LegendItem legendItem1 = new LegendItem(); legendItem1.ImageStyle = new AreaStyle(new GeoPen(GeoColors.Black), new GeoSolidBrush(GeoColors.PastelGreen)); legendItem1.TextStyle = new TextStyle("Residential", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColors.Black)); LegendItem legendItem2 = new LegendItem(); legendItem2.ImageStyle = new AreaStyle(new GeoPen(GeoColors.Black), new GeoSolidBrush(GeoColors.PastelRed)); legendItem2.TextStyle = new TextStyle("Industrial", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColors.Black)); LegendItem legendItem3 = new LegendItem(); legendItem3.ImageStyle = new AreaStyle(new GeoPen(GeoColors.Black), new GeoSolidBrush(GeoColors.PastelBlue)); legendItem3.TextStyle = new TextStyle("Commerial", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColors.Black)); LegendAdornmentLayer legendAdornmentLayer = new LegendAdornmentLayer(); legendAdornmentLayer.BackgroundMask = new AreaStyle(new GeoPen(GeoColors.Black, 1), GeoBrushes.White); legendAdornmentLayer.Height = 250; legendAdornmentLayer.Width = 250; legendAdornmentLayer.Title = titleLegendItem; legendAdornmentLayer.LegendItems.Add(legendItem1); legendAdornmentLayer.LegendItems.Add(legendItem2); legendAdornmentLayer.LegendItems.Add(legendItem3); LegendPrinterLayer legendPrinterLayer = new LegendPrinterLayer(legendAdornmentLayer); legendPrinterLayer.SetPosition(2, 1.2, -2.9, 3.8, PrintingUnit.Inch); PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)mapView.InteractiveOverlays["PrintPreviewOverlay"]; printerInteractiveOverlay.PrinterLayers.Add("LegendPrinterLayer1", legendPrinterLayer); }
private void SetPropertiesInGeneral(LegendAdornmentLayer legendLayer, LegendPrinterLayer legendPrinterLayer) { legendPrinterLayer.LegendItems.Clear(); foreach (var item in legendLayer.LegendItems) { var copiedItem = PrinterLayerHelper.CloneDeep <LegendItem>(item); if (copiedItem != null) { copiedItem.SetDrawingLevel(); legendPrinterLayer.LegendItems.Add(copiedItem); } } legendPrinterLayer.Width = legendLayer.Width; legendPrinterLayer.Height = legendLayer.Height; legendPrinterLayer.BackgroundMask = PrinterLayerHelper.CloneDeep <AreaStyle>(legendLayer.BackgroundMask); legendPrinterLayer.BackgroundMask.SetDrawingLevel(); legendPrinterLayer.Title = legendLayer.Title; legendPrinterLayer.Footer = legendLayer.Footer; legendPrinterLayer.XOffsetInPixel = legendLayer.XOffsetInPixel; legendPrinterLayer.YOffsetInPixel = legendLayer.YOffsetInPixel; }
private void InitializeMap() { mapControl.MapTools.Logo.IsEnabled = true; mapControl.MapTools.Logo.Margin = new Thickness(0, 0, 10, 5); mapControl.MapTools.MouseCoordinate.IsEnabled = true; mapControl.MapTools.MouseCoordinate.Visibility = Visibility.Hidden; mapControl.MapTools.MouseCoordinate.Margin = new Thickness(0, 0, 100, 5); mapControl.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.Custom; mapControl.Overlays.Add(new WorldMapKitWmsWpfOverlay()); censusStateFeatureLayer = new ShapeFileFeatureLayer(MapSuiteSampleHelper.GetValueFromConfiguration("UsShapefilePath")); censusStateFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; censusStateFeatureLayer.DrawingMarginPercentage = 100; demographicLayerOverlay = new LayerOverlay(); demographicLayerOverlay.TileType = TileType.SingleTile; mapControl.Overlays.Add(demographicLayerOverlay); highlightOverlay = new HighlightOverlay(); mapControl.Overlays.Add(highlightOverlay); legendAdornmentLayer = new LegendAdornmentLayer(); legendAdornmentLayer.Location = AdornmentLocation.LowerLeft; legendAdornmentLayer.Title = new LegendItem(); legendAdornmentLayer.Title.ImageJustificationMode = LegendImageJustificationMode.JustifyImageRight; legendAdornmentLayer.Title.TopPadding = 10; legendAdornmentLayer.Title.BottomPadding = 10; legendAdornmentLayer.Title.TextStyle = new TextStyle("Population", new GeoFont("Segoe UI", 12), new GeoSolidBrush(GeoColor.SimpleColors.Black)); mapControl.AdornmentOverlay.Layers.Add(legendAdornmentLayer); DefaultFeatureLayer = censusStateFeatureLayer; MapControl.CurrentExtent = globeExtent; }
private LegendAdornmentLayer GetEarthquakeLegendLayer(EarthquakeIsoLineFeatureLayer earthquakeFeatureLayer) { LegendAdornmentLayer isoLevelLegendLayer = null; if (mapControl.AdornmentOverlay.Layers.Contains(Resources.IsoLineLevelLegendLayerName)) { isoLevelLegendLayer = (LegendAdornmentLayer)mapControl.AdornmentOverlay.Layers[Resources.IsoLineLevelLegendLayerName]; } else if (earthquakeFeatureLayer != null) { isoLevelLegendLayer = new LegendAdornmentLayer(); isoLevelLegendLayer.Width = 85; isoLevelLegendLayer.Height = 320; isoLevelLegendLayer.Location = AdornmentLocation.LowerRight; isoLevelLegendLayer.ContentResizeMode = LegendContentResizeMode.Fixed; mapControl.AdornmentOverlay.Layers.Add(Resources.IsoLineLevelLegendLayerName, isoLevelLegendLayer); LegendItem flagLegendItem = new LegendItem(); flagLegendItem.TextStyle = new TextStyle("Magnitude", new GeoFont("Arial", 10), new GeoSolidBrush(GeoColor.StandardColors.Black)); flagLegendItem.TextLeftPadding = -20; isoLevelLegendLayer.LegendItems.Add(flagLegendItem); for (int i = 0; i < earthquakeFeatureLayer.IsoLineLevels.Count; i++) { LegendItem legendItem = new LegendItem(); legendItem.TextStyle = new TextStyle(earthquakeFeatureLayer.IsoLineLevels[i].ToString("f2"), new GeoFont("Arial", 10), new GeoSolidBrush(GeoColor.StandardColors.Black)); legendItem.ImageStyle = earthquakeFeatureLayer.LevelClassBreakStyle.ClassBreaks[i].DefaultAreaStyle; legendItem.ImageWidth = 25; isoLevelLegendLayer.LegendItems.Add(legendItem); } } return isoLevelLegendLayer; }
private void UpdateLegend(DemographicStyleBuilder styleBuilder, LegendAdornmentLayer legendAdornmentLayer) { legendAdornmentLayer.LegendItems.Clear(); if (styleBuilder is ThematicDemographicStyleBuilder) { AddThematicLegendItems(legendAdornmentLayer); } else if (styleBuilder is DotDensityDemographicStyleBuilder) { AddDotDensityLegendItems(legendAdornmentLayer); } else if (styleBuilder is ValueCircleDemographicStyleBuilder) { AddValueCircleLegendItems(legendAdornmentLayer); } else if (styleBuilder is PieChartDemographicStyleBuilder) { AddPieGraphLegendItems(legendAdornmentLayer); } legendAdornmentLayer.ContentResizeMode = LegendContentResizeMode.Fixed; legendAdornmentLayer.Height = GetLegendHeight(legendAdornmentLayer); legendAdornmentLayer.Width = GetLegendWidth(legendAdornmentLayer); }
private float GetLegendWidth(LegendAdornmentLayer legendAdornmentLayer) { GdiPlusGeoCanvas gdiPlusGeoCanvas = new GdiPlusGeoCanvas(); LegendItem title = legendAdornmentLayer.Title; float width = gdiPlusGeoCanvas.MeasureText(title.TextStyle.TextColumnName, new GeoFont("Segoe UI", 12)).Width + title.ImageWidth + title.ImageRightPadding + title.ImageLeftPadding + title.TextRightPadding + title.TextLeftPadding + title.LeftPadding + title.RightPadding; foreach (LegendItem legendItem in legendAdornmentLayer.LegendItems) { float legendItemWidth = gdiPlusGeoCanvas.MeasureText(legendItem.TextStyle.TextColumnName, new GeoFont("Segoe UI", 10)).Width + legendItem.ImageWidth + legendItem.ImageRightPadding + legendItem.ImageLeftPadding + legendItem.TextRightPadding + legendItem.TextLeftPadding + legendItem.LeftPadding + legendItem.RightPadding; if (width < legendItemWidth) { width = legendItemWidth; } } return width; }
private float GetLegendHeight(LegendAdornmentLayer legendAdornmentLayer) { GdiPlusGeoCanvas gdiPlusGeoCanvas = new GdiPlusGeoCanvas(); LegendItem title = legendAdornmentLayer.Title; float titleMeasuredHeight = gdiPlusGeoCanvas.MeasureText(title.TextStyle.TextColumnName, new GeoFont("Segoe UI", 12)).Height; float legendHeight = new[] { titleMeasuredHeight, title.ImageHeight, title.Height }.Max(); float height = legendHeight + Math.Max(title.ImageTopPadding, title.TextTopPadding) + title.TopPadding + Math.Max(title.ImageBottomPadding, title.TextBottomPadding) + title.BottomPadding; foreach (LegendItem legendItem in legendAdornmentLayer.LegendItems) { float itemLegendHeight = Math.Max(gdiPlusGeoCanvas.MeasureText(legendItem.TextStyle.TextColumnName, new GeoFont("Segoe UI", 10)).Height, legendItem.ImageHeight); float itemHeight = itemLegendHeight + Math.Max(legendItem.ImageTopPadding, legendItem.TextTopPadding) + legendItem.TopPadding + Math.Max(legendItem.ImageBottomPadding, legendItem.TextBottomPadding) + legendItem.BottomPadding; height += itemHeight; } return height; }
private void AddValueCircleLegendItems(LegendAdornmentLayer legendAdornmentLayer) { ValueCircleStyle valueCircleStyle = (ValueCircleStyle)CurrentStyleBuilder.GetStyles(mapModel.DefaultFeatureLayer.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); } }
private void AddThematicLegendItems(LegendAdornmentLayer legendAdornmentLayer) { ClassBreakStyle thematicStyle = (ClassBreakStyle)CurrentStyleBuilder.GetStyles(mapModel.DefaultFeatureLayer.FeatureSource)[0]; for (int i = 0; i < thematicStyle.ClassBreaks.Count; i++) { LegendItem legendItem = new LegendItem(); if (i < thematicStyle.ClassBreaks.Count) { legendItem.ImageStyle = thematicStyle.ClassBreaks[i].DefaultAreaStyle; legendItem.ImageWidth = 20; legendItem.TextRightPadding = 5; legendItem.RightPadding = 5; string text = string.Empty; if (i != thematicStyle.ClassBreaks.Count - 1) { text = string.Format("{0:#,0.####} ~ {1:#,0.####}", TextFormatter.GetFormatedStringForLegendItem(thematicStyle.ColumnName, thematicStyle.ClassBreaks[i].Value), TextFormatter.GetFormatedStringForLegendItem(thematicStyle.ColumnName, thematicStyle.ClassBreaks[i + 1].Value)); } else { text = string.Format("> {0:#,0.####}", TextFormatter.GetFormatedStringForLegendItem(thematicStyle.ColumnName, thematicStyle.ClassBreaks[i].Value)); } legendItem.TextStyle = new TextStyle(text, new GeoFont("Segoe UI", 10), new GeoSolidBrush(GeoColor.SimpleColors.Black)); } legendAdornmentLayer.LegendItems.Add(legendItem); } }
private void AddPieGraphLegendItems(LegendAdornmentLayer legendAdornmentLayer) { PieZedGraphStyle zedGraphStyle = (PieZedGraphStyle)CurrentStyleBuilder.GetStyles(mapModel.DefaultFeatureLayer.FeatureSource)[0]; foreach (KeyValuePair<string, GeoColor> item in zedGraphStyle.PieSlices) { LegendItem legendItem = new LegendItem(); legendItem.ImageWidth = 20; legendItem.TextRightPadding = 5; legendItem.RightPadding = 5; legendItem.ImageStyle = new AreaStyle(new GeoSolidBrush(item.Value)); legendItem.TextStyle = new TextStyle(item.Key, new GeoFont("Segoe UI", 10), new GeoSolidBrush(GeoColor.SimpleColors.Black)); legendAdornmentLayer.LegendItems.Add(legendItem); } }
private void AddDotDensityLegendItems(LegendAdornmentLayer legendAdornmentLayer) { CustomDotDensityStyle dotDensityStyle = (CustomDotDensityStyle)CurrentStyleBuilder.GetStyles(mapModel.DefaultFeatureLayer.FeatureSource)[0]; // Here we generate 4 legend items, for 5, 10, 20 and 50 points seperately. int[] pointCounts = new int[] { 5, 10, 20, 50 }; foreach (int pointCount in pointCounts) { LegendItem legendItem = new LegendItem(); legendItem.ImageMask = new AreaStyle(new GeoPen(GeoColor.StandardColors.LightGray, 1), new GeoSolidBrush(GeoColor.SimpleColors.Transparent)); legendItem.ImageWidth = 48; legendItem.TextTopPadding = 16; legendItem.TextRightPadding = 5; legendItem.BottomPadding = 16; legendItem.TopPadding = 16; legendItem.RightPadding = 5; CustomDotDensityStyle legendDotDensityStyle = (CustomDotDensityStyle)dotDensityStyle.CloneDeep(); legendDotDensityStyle.DrawingPointsNumber = pointCount; legendItem.ImageStyle = legendDotDensityStyle; string text = string.Format(CultureInfo.InvariantCulture, "{0:0.####}", TextFormatter.GetFormatedStringForLegendItem(dotDensityStyle.ColumnName, (pointCount / dotDensityStyle.PointToValueRatio))); legendItem.TextStyle = new TextStyle(text, new GeoFont("Segoe UI", 10), new GeoSolidBrush(GeoColor.SimpleColors.Black)); legendAdornmentLayer.LegendItems.Add(legendItem); } }