public void ConvertLayerProperties_MapPointDataWithStyle_ConvertsStyleToMapPointLayer(
            [Values(KnownColor.AliceBlue, KnownColor.Azure)]
            KnownColor color,
            [Values(1, 5)] int width,
            [Values(PointSymbol.Circle, PointSymbol.Square)]
            PointSymbol pointStyle)
        {
            // Setup
            var   converter     = new MapPointDataConverter();
            var   mapPointLayer = new MapPointLayer();
            Color expectedColor = Color.FromKnownColor(color);
            var   mapPointData  = new MapPointData("test", new PointStyle
            {
                Color           = expectedColor,
                Size            = width,
                Symbol          = pointStyle,
                StrokeColor     = expectedColor,
                StrokeThickness = 1
            });

            // Call
            converter.ConvertLayerProperties(mapPointData, mapPointLayer);

            // Assert
            PointShape expectedPointShape = pointStyle == PointSymbol.Circle
                                                ? PointShape.Ellipse
                                                : PointShape.Rectangle;

            var expectedSymbolizer = new PointSymbolizer(expectedColor, expectedPointShape, width);

            expectedSymbolizer.SetOutline(expectedColor, 1);

            AssertAreEqual(expectedSymbolizer, mapPointLayer.Symbolizer);
        }
        private static PointSymbolizer CreatePointSymbolizer(PointStyle style)
        {
            var symbolizer = new PointSymbolizer(style.Color, MapDataHelper.Convert(style.Symbol), style.Size);

            symbolizer.SetOutline(style.StrokeColor, style.StrokeThickness);
            return(symbolizer);
        }
        private static PointSymbolizer CreateExpectedSymbolizer(PointStyle expectedPointStyle)
        {
            PointShape expectedPointShape = MapDataHelper.Convert(expectedPointStyle.Symbol);

            var expectedSymbolizer = new PointSymbolizer(expectedPointStyle.Color, expectedPointShape, expectedPointStyle.Size);

            expectedSymbolizer.SetOutline(expectedPointStyle.StrokeColor, expectedPointStyle.StrokeThickness);

            return(expectedSymbolizer);
        }
        private static IPointScheme CreateSymbology(string servCode, IFeatureSet featureSet)
        {
            Debug.Assert(featureSet != null);

            var scheme = new PointScheme();

            scheme.ClearCategories();

            var settings = scheme.EditorSettings;

            settings.ClassificationType = ClassificationType.Custom;

            const string valueField = "ValueCount";
            // Find min/max value in valueField
            var minValue = int.MaxValue;
            var maxValue = int.MinValue;

            foreach (DataRow row in featureSet.DataTable.Rows)
            {
                int value;
                try
                {
                    value = Convert.ToInt32(row[valueField]);
                }
                catch
                {
                    value = 0;
                }
                if (value < minValue)
                {
                    minValue = value;
                }
                if (value > maxValue)
                {
                    maxValue = value;
                }
            }
            if (minValue == int.MaxValue)
            {
                minValue = 0;
            }
            if (maxValue == int.MinValue)
            {
                maxValue = 0;
            }

            // Calculate number of categories
            int categoriesCount;
            var length = maxValue - minValue;

            if (length < 50)
            {
                categoriesCount = 1;
            }
            else if (length < 100)
            {
                categoriesCount = 2;
            }
            else
            {
                categoriesCount = 3;
            }

            var       categorieStep = (maxValue - minValue) / categoriesCount + 1; // value step in filter
            const int imageStep     = 5;
            var       imageSize     = 5;

            var imageHelper = new WebServices.ServiceIconHelper(Settings.Instance.SelectedHISCentralURL); // we need it only to get image
            var image       = imageHelper.GetImageForService(servCode);

            const string seriesID = "SeriesID";
            var          needDownloadedCategories = featureSet.DataTable.Columns.Contains(seriesID);

            for (int i = 0; i < categoriesCount; i++)
            {
                var min = minValue - 1;
                var max = minValue + categorieStep;
                if (max > maxValue)
                {
                    max = maxValue;
                }
                minValue = max + 1;

                imageSize += imageStep;

                var baseFilter = string.Format("[{0}] > {1} and [{0}] <= {2}", valueField, min, max);

                var filterEx = needDownloadedCategories
                                   ? baseFilter + string.Format(" AND ([{0}] is null)", seriesID)
                                   : baseFilter;

                var legendText   = string.Format("({0}, {1}]", min, max);
                var mySymbolizer = new PointSymbolizer(image, imageSize);
                var myCategory   = new PointCategory(mySymbolizer)
                {
                    FilterExpression    = filterEx,
                    LegendText          = legendText,
                    SelectionSymbolizer = new PointSymbolizer(image, imageSize + 2)
                };
                myCategory.SelectionSymbolizer.SetFillColor(Color.Yellow);
                scheme.AddCategory(myCategory);

                // add category for downloaded
                if (needDownloadedCategories)
                {
                    mySymbolizer = new PointSymbolizer(image, imageSize);
                    mySymbolizer.SetOutline(Color.Green, 3);

                    filterEx   = string.Format("{0} AND not([{1}] is null)", baseFilter, seriesID);
                    legendText = myCategory.LegendText + " (downloaded)";
                    var categorieForDownload = new PointCategory(mySymbolizer)
                    {
                        FilterExpression    = filterEx,
                        LegendText          = legendText,
                        SelectionSymbolizer = new PointSymbolizer(image, imageSize + 2)
                    };
                    categorieForDownload.SelectionSymbolizer.SetFillColor(Color.Yellow);
                    scheme.AddCategory(categorieForDownload);
                }
            }

            return(scheme);
        }