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);
            }
        }
Пример #3
0
        /// <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;
        }
Пример #4
0
        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);
            }
        }
Пример #6
0
        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);
            }
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
        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;
        }
Пример #11
0
        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;
        }
Пример #12
0
        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);
        }
Пример #13
0
        /// <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);
            }
        }
Пример #14
0
        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);
        }
Пример #15
0
        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);
        }
Пример #16
0
        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);
            }
        }
Пример #21
0
        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);
        }
Пример #24
0
        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);
        }
Пример #25
0
        /// <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();
        }
Пример #26
0
        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();
        }
Пример #27
0
        /// <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();
        }
Пример #28
0
        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);
        }
Пример #29
0
        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;
 }
Пример #31
0
        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;
        }
Пример #32
0
        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);
            }
        }