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); }
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; }
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); } }