Пример #1
0
        public void ShowMapWithPointLayerBasedOnFeatureDataTable()
        {
            var table = new FeatureDataTable();

            table.Columns.Add("X", typeof(double));
            table.Columns.Add("Y", typeof(double));
            table.Columns.Add("Category", typeof(string));
            DataRow row = table.NewRow();

            table.Rows.Add(row);
            row.ItemArray = new object[] { 100000, 400000, "testCategory" };
            row           = table.NewRow();
            table.Rows.Add(row);
            row.ItemArray = new object[] { 200000, 400000, "TestCategory" };

            var dataTablePoint = new DataTablePoint(table, "Category", "X", "Y");
            var vectorLayer    = new VectorLayer("test", dataTablePoint);

            vectorLayer.Theme = ThemeFactory.CreateSingleFeatureTheme(vectorLayer.Style.GeometryType, Color.Blue, 10);
            var map = new Map {
                Name = "testmap"
            };

            map.Layers.Add(vectorLayer);
            map.Center = new Coordinate(150000, 400000);

            map.Zoom = 200000;
            //map.ZoomToExtents();
            //map.ZoomToFit(map.Envelope);

            MapTestHelper.ShowModal(map);
        }
Пример #2
0
        private void UpdateTheme()
        {
            // If there was no theme attached to the layer yet, generate a default theme
            if (featureCoverage == null || featureCoverage.Features == null || featureCoverage.Features.Count == 0)
            {
                return;
            }

            Style.GeometryType = GetFeatureGeometryType(featureCoverage.Features[0] as IFeature);

            // Values to base the theme on
            //List<IVariableFilter> filters = new List<IVariableFilter>();
            if (Coverage.Time != null)
            {
                if (CurrentTime == null && Coverage.Time.Values.Count != 0)
                {
                    CurrentTime = Coverage.Time.Values[0];
                }
                //filters.Add(new VariableValueFilter(featureCoverage.Time, CurrentTime));
            }
            IMultiDimensionalArray <double> values = featureCoverage.GetValues <double>();

            if (null == values)
            {
                return;
            }
            // NOTE: we're getting all values here!

            var featureValues = new List <double>(values.Where(v => !double.IsNaN(v)));

            if (0 == featureValues.Count)
            {
                log.Error("Unable to generate default theme; no values available");
                return;
                //throw new ArgumentException();
            }

            featureValues.Sort();
            double minValue = featureValues.Min();
            double maxValue = featureValues.Max();

            if (minValue == maxValue)
            {
                // Only a single value, so no gradient theme needed/wanted: create a 'blue' single feature theme
                Theme = ThemeFactory.CreateSingleFeatureTheme(Style.GeometryType, Color.Blue, 10);
            }
            else
            {
                // Create 'green to blue' gradient theme
                Theme = ThemeFactory.CreateGradientTheme(Coverage.Components[0].Name, Style,
                                                         new ColorBlend(new Color[] { Color.Green, Color.Blue },
                                                                        new float[] { 0f, 1f }),
                                                         (float)minValue, (float)maxValue, 1, 1, false, true);
            }
        }
        /// <summary>
        /// Generates theme for route type network coverage layers.
        /// </summary>
        /// <param name="groupLayer"></param>
        /// <param name="color"></param>
        public static void SetupRouteLayerTheme(INetworkCoverageGroupLayer groupLayer, Color?color)
        {
            if (null == color)
            {
                color = Color.FromArgb(100, Color.Green);
            }

            // customize theme
            var segmentTheme  = ThemeFactory.CreateSingleFeatureTheme(groupLayer.SegmentLayer.Style.GeometryType, (Color)color, 10);
            var locationTheme = ThemeFactory.CreateSingleFeatureTheme(groupLayer.LocationLayer.Style.GeometryType, (Color)color, 15);

            groupLayer.SegmentLayer.Theme  = segmentTheme;
            groupLayer.LocationLayer.Theme = locationTheme;

            var locationStyle = (VectorStyle)locationTheme.DefaultStyle;

            locationStyle.Fill      = Brushes.White;
            locationStyle.Shape     = ShapeType.Ellipse;
            locationStyle.ShapeSize = 15;

            var segmentStyle = (VectorStyle)segmentTheme.DefaultStyle;

            segmentStyle.Line.EndCap = LineCap.ArrowAnchor;
        }
Пример #4
0
        private void UpdateTheme()
        {
            // If there was no theme attached to the layer yet, generate a default theme
            if (featureCoverage == null || featureCoverage.Features == null || featureCoverage.Features.Count == 0)
            {
                return;
            }

            Style.GeometryType = GetFeatureGeometryType(featureCoverage.Features[0]);

            // Values to base the theme on
            if (Coverage.Time != null)
            {
                if (CurrentTime == null && Coverage.Time.Values.Count != 0)
                {
                    CurrentTime = Coverage.Time.Values[0];
                }
            }

            IMultiDimensionalArray <double> values = featureCoverage.GetValues <double>();

            if (null == values)
            {
                return;
            }

            // NOTE: we're getting all values here!
            var featureValues = new List <double>(values.Where(v => !double.IsNaN(v) && !double.IsInfinity(v)));

            if (0 == featureValues.Count)
            {
                Log.Error("Unable to generate default theme; no values available");
                return;
            }

            featureValues.Sort();
            double minValue = featureValues.Min();
            double maxValue = featureValues.Max();

            if (base.Theme == null)
            {
                // Create default Theme
                if (minValue == maxValue)
                {
                    // Only a single value, so no gradient theme needed/wanted: create a 'blue' single feature theme
                    Theme = ThemeFactory.CreateSingleFeatureTheme(Style.GeometryType, Color.Blue, 10);
                }
                else
                {
                    // Create 'green to blue' gradient theme
                    Theme = ThemeFactory.CreateGradientTheme(Coverage.Components[0].Name, Style,
                                                             new ColorBlend(new[] { Color.Green, Color.Blue },
                                                                            new[] { 0f, 1f }),
                                                             (float)minValue, (float)maxValue, 1, 1, false, true);
                }
            }
            else
            {
                if (AutoUpdateThemeOnDataSourceChanged)
                {
                    Theme.ScaleTo(minValue, maxValue);
                }
            }
        }
        private void CreateDefaultTheme()
        {
            // If there was no theme attached to the layer yet, generate a default theme
            if (Theme != null || networkCoverage == null || networkCoverage.Locations == null)
            {
                return;
            }

            //looks like min/max should suffice
            IList <double> values = GetAllValues();

            if (null == values)
            {
                return;
            }

            var minValue = networkCoverage.DefaultValue; // ???
            var maxValue = minValue;

            // NOTE: we should be getting al the values here!
            var featureValues = new List <double>(values);

            if (0 != featureValues.Count)
            {
                featureValues.Sort();
                minValue = featureValues[0];
                maxValue = featureValues[featureValues.Count - 1];
            }

            if (minValue == maxValue)
            {
                // Only a single value, so no gradient theme needed/wanted: create a 'blue' single feature theme
                if (networkCoverage.SegmentGenerationMethod != SegmentGenerationMethod.None)
                {
                    SegmentLayer.Theme = ThemeFactory.CreateSingleFeatureTheme(SegmentLayer.Style.GeometryType,
                                                                               Color.PaleTurquoise, 6);
                }
                LocationLayer.Theme = ThemeFactory.CreateSingleFeatureTheme(LocationLayer.Style.GeometryType, Color.Blue, 10);
            }
            else
            {
                int numberOfClasses = 12;
                if (networkCoverage.SegmentGenerationMethod != SegmentGenerationMethod.None)
                {
                    // Create flashy gradient theme
                    if (NetworkCoverage.SegmentGenerationMethod == SegmentGenerationMethod.SegmentPerLocation)
                    {
                        SegmentLayer.Theme = ThemeFactory.CreateGradientTheme(Coverage.Components[0].Name, SegmentLayer.Style,
                                                                              ColorBlend.Rainbow7,
                                                                              (float)minValue, (float)maxValue,
                                                                              10, 25, false,
                                                                              false, numberOfClasses);
                    }
                    else
                    {
                        SegmentLayer.Theme = ThemeFactory.CreateGradientTheme("Offset", SegmentLayer.Style,
                                                                              ColorBlend.Rainbow7,
                                                                              (float)minValue, (float)maxValue,
                                                                              10, 25, false,
                                                                              false, numberOfClasses);
                    }
                }

                LocationLayer.Theme = ThemeFactory.CreateGradientTheme(Coverage.Components[0].Name, LocationLayer.Style,
                                                                       ColorBlend.Rainbow7,
                                                                       (float)minValue, (float)maxValue,
                                                                       12, 25, false, false, numberOfClasses);
            }
        }