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 void UpdateUIControls(DemographicStyleBuilder activeStyleBuilder)
        {
            avoidUpdatingMap = true;
            foreach (var item in cbxActiveColor.SimpleColors)
            {
                GeoColor styleColor = activeStyleBuilder.Color;
                if (item.Value.R == styleColor.RedComponent &&
                    item.Value.G == styleColor.GreenComponent &&
                    item.Value.B == styleColor.BlueComponent)
                {
                    cbxActiveColor.SetSelectedColor(item.Key);
                    break;
                }
            }

            ThematicDemographicStyleBuilder activeThematicSetting = activeStyleBuilder as ThematicDemographicStyleBuilder;

            if (activeThematicSetting != null)
            {
                foreach (var item in cbxActiveEndColor.SimpleColors)
                {
                    GeoColor styleColor = activeThematicSetting.EndColor;
                    if (item.Value.R == styleColor.RedComponent &&
                        item.Value.G == styleColor.GreenComponent &&
                        item.Value.B == styleColor.BlueComponent)
                    {
                        cbxActiveEndColor.SetSelectedColor(item.Key);
                        break;
                    }
                }
                cbxSelectColorWheelDirection.SelectedIndex = (int)activeThematicSetting.ColorWheelDirection;
            }
            avoidUpdatingMap = false;
        }
        public void UpdateUIControls(DemographicStyleBuilder activeSettingViewModel)
        {
            GeoColor[] colors = GeoColorList.Select(c => c.GeoColor).ToArray();
            for (int i = 0; i < colors.Length; i++)
            {
                if (colors[i].Equals(activeSettingViewModel.Color))
                {
                    currentStyleBuilder = activeSettingViewModel;
                    SelectedColorItem   = GeoColorList[i];
                    break;
                }
            }
            ThematicDemographicStyleBuilder thematicDemographicStyleBuilder = activeSettingViewModel as ThematicDemographicStyleBuilder;

            if (thematicDemographicStyleBuilder != null)
            {
                GeoColor styleColor = thematicDemographicStyleBuilder.EndColor;
                for (int i = 0; i < colors.Length; i++)
                {
                    if (colors[i].Equals(styleColor))
                    {
                        currentStyleBuilder  = activeSettingViewModel;
                        SelectedEndColorItem = GeoColorList[i];
                        break;
                    }
                }
            }
        }
        // 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);
        }
        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 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 void RenderDemographicStyle(object sender, DemographicStyleBuilder demographicStyleBuilder)
        {
            FrameworkElement frameworkElement = (FrameworkElement)sender;
            ColumnViewModel  columnViewModel  = (ColumnViewModel)frameworkElement.DataContext;

            columnViewModel.IsSelected = true;
            foreach (var item in mainWindowViewModel.SelectedCategory.Columns)
            {
                item.CheckBoxVisiblity = Visibility.Hidden;
            }

            mainWindowViewModel.UpdateUIControls(demographicStyleBuilder);

            mainWindowViewModel.CurrentStyleBuilder.SelectedColumns.Clear();
            mainWindowViewModel.CurrentStyleBuilder.SelectedColumns.Add(columnViewModel.ColumnName);
            mapModel.LegendTitle = columnViewModel.LegendTitle;

            mainWindowViewModel.UpdateMap();
        }
        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);
        }
 public void UpdateUIControls(DemographicStyleBuilder activeSettingViewModel)
 {
     GeoColor[] colors = GeoColorList.Select(c => c.GeoColor).ToArray();
     for (int i = 0; i < colors.Length; i++)
     {
         if (colors[i].Equals(activeSettingViewModel.Color))
         {
             currentStyleBuilder = activeSettingViewModel;
             SelectedColorItem = GeoColorList[i];
             break;
         }
     }
     ThematicDemographicStyleBuilder thematicDemographicStyleBuilder = activeSettingViewModel as ThematicDemographicStyleBuilder;
     if (thematicDemographicStyleBuilder != null)
     {
         GeoColor styleColor = thematicDemographicStyleBuilder.EndColor;
         for (int i = 0; i < colors.Length; i++)
         {
             if (colors[i].Equals(styleColor))
             {
                 currentStyleBuilder = activeSettingViewModel;
                 SelectedEndColorItem = GeoColorList[i];
                 break;
             }
         }
     }
 }
        private void RenderDemographicStyle(object sender, DemographicStyleBuilder demographicStyleBuilder)
        {
            FrameworkElement frameworkElement = (FrameworkElement)sender;
            ColumnViewModel columnViewModel = (ColumnViewModel)frameworkElement.DataContext;
            columnViewModel.IsSelected = true;
            foreach (var item in mainWindowViewModel.SelectedCategory.Columns)
            {
                item.CheckBoxVisiblity = Visibility.Hidden;
            }

            mainWindowViewModel.UpdateUIControls(demographicStyleBuilder);

            mainWindowViewModel.CurrentStyleBuilder.SelectedColumns.Clear();
            mainWindowViewModel.CurrentStyleBuilder.SelectedColumns.Add(columnViewModel.ColumnName);
            mapModel.LegendTitle = columnViewModel.LegendTitle;

            mainWindowViewModel.UpdateMap();
        }