Ejemplo n.º 1
0
        private static LayerOverlay GetFilterStyleOverlay(string accessId)
        {
            LayerOverlay layerOverlay = OverlayBuilder.GetOverlayWithFilterStyle();

            Dictionary <string, string> savedFilterStyles = GetSavedStyle(accessId);

            if (savedFilterStyles == null)
            {
                return(layerOverlay);
            }

            string filterExpression = savedFilterStyles["filterExpression"];
            string filterValue      = savedFilterStyles["filterValue"];

            if (filterExpressions.ContainsKey(filterExpression) && layerOverlay.Layers.Count > 0)
            {
                // Get the filter style applied to the drawing Overlay.
                FilterStyle filterStyle = ((FeatureLayer)layerOverlay.Layers[0]).ZoomLevelSet.ZoomLevel01.CustomStyles[0] as FilterStyle;
                if (filterStyle != null)
                {
                    filterStyle.Conditions.Clear();

                    // Create the filter expression based on the values from client side.
                    string          expression      = string.Format("{0}{1}{2}", filterExpressions[filterExpression].Item1, filterValue, filterExpressions[filterExpression].Item2);
                    FilterCondition filterCondition = new FilterCondition("Population", expression);
                    filterStyle.Conditions.Add(filterCondition);
                }
            }

            return(layerOverlay);
        }
Ejemplo n.º 2
0
        private void ZoomToFilterMenuItem_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            MenuItem      menuItem      = (MenuItem)sender;
            LayerListItem layerListItem = (LayerListItem)menuItem.Tag;
            LayerListItem tempItem      = layerListItem;

            while (!(tempItem.ConcreteObject is FeatureLayer))
            {
                tempItem = tempItem.Parent;
            }
            FeatureLayer selectedLayer = tempItem.ConcreteObject as FeatureLayer;

            if (selectedLayer != null)
            {
                Collection <Feature> resultFeatures = new Collection <Feature>();
                selectedLayer.SafeProcess(() =>
                {
                    resultFeatures = selectedLayer.QueryTools.GetAllFeatures(ReturningColumnsType.AllColumns);
                });

                FilterStyle filterStyle = (FilterStyle)layerListItem.ConcreteObject;
                foreach (var condition in filterStyle.Conditions)
                {
                    resultFeatures = condition.GetMatchingFeatures(resultFeatures);
                }
                if (resultFeatures.Count > 0)
                {
                    RectangleShape boundingBox = ExtentHelper.GetBoundingBoxOfItems(resultFeatures);
                    GisEditor.ActiveMap.CurrentExtent = boundingBox;
                    GisEditor.ActiveMap.Refresh();
                }
            }
        }
        private void ViewFilteredData(object sender, RoutedEventArgs e)
        {
            FilterStyle filterStyle = StyleItem.ConcreteObject as FilterStyle;

            if (filterStyle != null)
            {
                ShowFilteredData(styleArguments.FeatureLayer, filterStyle.Conditions);
            }
        }
Ejemplo n.º 4
0
        private static void SetDrawingLevelForStyle(Style style)
        {
            AreaStyle       areaStyle       = style as AreaStyle;
            LineStyle       lineStyle       = style as LineStyle;
            PointStyle      pointStyle      = style as PointStyle;
            CompositeStyle  compositeStyle  = style as CompositeStyle;
            FilterStyle     filterStyle     = style as FilterStyle;
            ValueStyle      valueStyle      = style as ValueStyle;
            ClassBreakStyle classBreakStyle = style as ClassBreakStyle;

            if (areaStyle != null)
            {
                areaStyle.SetDrawingLevel();
            }
            else if (lineStyle != null)
            {
                lineStyle.SetDrawingLevel();
            }
            else if (pointStyle != null)
            {
                pointStyle.SetDrawingLevel();
            }
            else if (filterStyle != null)
            {
                foreach (var item in filterStyle.Styles)
                {
                    SetDrawingLevelForStyle(item);
                }
            }
            else if (classBreakStyle != null)
            {
                foreach (var item in classBreakStyle.ClassBreaks.SelectMany(v => v.CustomStyles))
                {
                    SetDrawingLevelForStyle(item);
                }
            }
            else if (valueStyle != null)
            {
                foreach (var item in valueStyle.ValueItems.SelectMany(v => v.CustomStyles))
                {
                    SetDrawingLevelForStyle(item);
                }
            }
            else if (compositeStyle != null)
            {
                foreach (var subStyle in compositeStyle.Styles)
                {
                    SetDrawingLevelForStyle(subStyle);
                }
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Adds a filter style to various categories of the Frisco Crime layer
        /// </summary>
        private void AddFilterStyle(ShapeFileFeatureLayer layer)
        {
            // Create a filter style based on the "Drugs" Offense Group
            var drugFilterStyle = new FilterStyle()
            {
                Conditions = { new FilterCondition("OffenseGro", "Drugs") },
                Styles     =
                {
                    new PointStyle(PointSymbolType.Circle, 28, GeoBrushes.White, GeoPens.Red),
                    new PointStyle(new GeoImage(@"../../../Resources/drugs_icon.png"))
                    {
                        ImageScale = .60
                    }
                }
            };

            // Create a filter style based on the "Weapons" Offense Group
            var weaponFilterStyle = new FilterStyle()
            {
                Conditions = { new FilterCondition("OffenseGro", "Weapons") },
                Styles     =
                {
                    new PointStyle(PointSymbolType.Circle, 28, GeoBrushes.White, GeoPens.Red),
                    new PointStyle(new GeoImage(@"../../../Resources/weapon_icon.png"))
                    {
                        ImageScale = .25
                    }
                }
            };

            // Create a filter style based on the "Vandalism" Offense Group
            var vandalismFilterStyle = new FilterStyle()
            {
                Conditions = { new FilterCondition("OffenseGro", "Vandalism") },
                Styles     =
                {
                    new PointStyle(PointSymbolType.Circle, 28, GeoBrushes.White, GeoPens.Red),
                    new PointStyle(new GeoImage(@"../../../Resources/vandalism_icon.png"))
                    {
                        ImageScale = .25
                    }
                }
            };

            // Add the filter styles to the CustomStyles collection
            layer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(drugFilterStyle);
            layer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(weaponFilterStyle);
            layer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(vandalismFilterStyle);
            layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
        }
 public FilterStyleItem(FilterStyle style)
     : base(style)
 {
     CanRename        = true;
     CanAddInnerStyle = true;
     filterStyle      = style;
     if (filterStyle != null)
     {
         foreach (var innerStyle in filterStyle.Styles.Reverse())
         {
             StyleLayerListItem styleItem = GisEditor.StyleManager.GetStyleLayerListItem(innerStyle);
             Children.Add(styleItem);
         }
     }
 }
 public FilterStyleViewModel(FilterStyle filterStyle, StyleBuilderArguments requiredValues)
     : base(filterStyle)
 {
     filterStyleMatchTypeToStringConverter = new FilterStyleMatchTypeToStringConverter();
     HelpKey = "FilterStyleHelp";
     this.actualFilterStyle = filterStyle;
     this.requiredValues    = requiredValues;
     this.filterConditions  = new ObservableCollection <FilterConditionViewModel>();
     this.filterConditions.CollectionChanged += FilterConditions_CollectionChanged;
     this.availableStylePlugins = new Dictionary <StylePlugin, Style>();
     this.InitializeConditions(filterStyle.Conditions);
     this.InitializeAvailablePlugins(requiredValues.FeatureLayer);
     this.InitializeCommands();
     FilterConditions_CollectionChanged(null, null);
     InitializeColumnNameTypes(requiredValues);
 }
Ejemplo n.º 8
0
        private void ViewDataMenuItem_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            MenuItem      menuItem      = (MenuItem)sender;
            LayerListItem layerListItem = (LayerListItem)menuItem.Tag;
            LayerListItem tempItem      = layerListItem;

            while (!(tempItem.ConcreteObject is FeatureLayer))
            {
                tempItem = tempItem.Parent;
            }
            FeatureLayer selectedLayer = tempItem.ConcreteObject as FeatureLayer;

            if (selectedLayer != null)
            {
                FilterStyle filterStyle = (FilterStyle)layerListItem.ConcreteObject;
                FilterStyleViewModel.ShowFilteredData(selectedLayer, filterStyle.Conditions, layerListItem.Name);
            }
        }
Ejemplo n.º 9
0
        public Settings(
            float panelPosX,
            float panelPosY,
            bool brushShapesOpen,
            bool brushEditOpen,
            bool brushOptionsOpen,
            bool showTreeMeshData,
            TreeSorting sorting,
            SortingOrder sortingOrder,
            FilterStyle filterStyle,
            IEnumerable <Brush> forestBrushes,
            string selectedBrush,
            SavedInputKey toggleTool,
            bool keepTreesInNewBrush,
            bool ignoreVanillaTrees,
            bool showInfoTooltip,
            bool playEffect,
            bool chargeMoney
            )
        {
            this.PanelPosX           = panelPosX;
            this.PanelPosY           = panelPosY;
            this.BrushShapesOpen     = brushShapesOpen;
            this.BrushEditOpen       = brushEditOpen;
            this.BrushOptionsOpen    = brushOptionsOpen;
            this.ShowTreeMeshData    = showTreeMeshData;
            this.Sorting             = sorting;
            this.SortingOrder        = sortingOrder;
            this.FilterStyle         = filterStyle;
            this.ToggleTool          = toggleTool;
            this.KeepTreesInNewBrush = keepTreesInNewBrush;
            this.IgnoreVanillaTrees  = ignoreVanillaTrees;
            this.ShowInfoTooltip     = showInfoTooltip;
            this.PlayEffect          = playEffect;
            this.ChargeMoney         = chargeMoney;
            this.Brushes             = forestBrushes.ToList();
            if (this.Brushes.Count == 0)
            {
                var defaultBrush = Brush.Default();
                this.Brushes.Add(defaultBrush);
            }

            this.SelectBrush(selectedBrush);
        }
Ejemplo n.º 10
0
        private string SortString(bool htmltags)
        {
            string cssSet   = "";
            string cssClose = "";

            if (htmltags)
            {
                cssSet   = "<span class = \"filterset\">";
                cssClose = "</span>";
            }

            using (StringWriter sortWriter = new StringWriter())
            {
                sortWriter.Write($"Sort: Atrribute-");
                sortWriter.Write($" {CLEMModel.DisplaySummaryValueSnippet(AttributeTag, "Not set", HTMLSummaryStyle.Filter, htmlTags: htmltags)}");
                sortWriter.Write($" {cssSet}{FilterStyle.ToString().ToLower()}{cssClose}");
                sortWriter.Write($" {cssSet}{SortDirection.ToString().ToLower()}{cssClose}");
                return(sortWriter.ToString());
            }
        }
        private void ExportItem_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            MenuItem      menuItem         = (MenuItem)sender;
            LayerListItem layerListItem    = (LayerListItem)menuItem.Tag;
            LayerListItem featureLayerItem = layerListItem;

            while (!(featureLayerItem.ConcreteObject is FeatureLayer))
            {
                featureLayerItem = featureLayerItem.Parent;
            }
            GisEditor.LayerListManager.SelectedLayerListItem = featureLayerItem;
            FeatureLayer selectedLayer = featureLayerItem.ConcreteObject as FeatureLayer;

            if (selectedLayer != null)
            {
                Collection <Feature> resultFeatures = new Collection <Feature>();
                selectedLayer.SafeProcess(() =>
                {
                    resultFeatures = selectedLayer.QueryTools.GetAllFeatures(ReturningColumnsType.AllColumns);
                });

                FilterStyle filterStyle = (FilterStyle)layerListItem.ConcreteObject;
                foreach (var condition in filterStyle.Conditions)
                {
                    resultFeatures = condition.GetMatchingFeatures(resultFeatures);
                }

                if (resultFeatures.Count > 0)
                {
                    Collection <FeatureSourceColumn> columns = selectedLayer.FeatureSource.GetColumns();

                    FeatureLayerPlugin sourcePlugin = GisEditor.LayerManager.GetLayerPlugins(selectedLayer.GetType()).FirstOrDefault() as FeatureLayerPlugin;
                    if (sourcePlugin != null)
                    {
                        WellKnownType type = selectedLayer.FeatureSource.GetFirstFeaturesWellKnownType();
                        ExportToShapeFile(resultFeatures, columns, sourcePlugin, type);
                    }
                }
            }
        }
        protected override void InitializeMap()
        {
            MapView.CurrentExtent = new RectangleShape(-13768645, 7689721, -9044012, 110621);

            ShapeFileFeatureLayer statesLayer  = new ShapeFileFeatureLayer(SampleHelper.GetDataPath("states.shp"));
            LayerOverlay          layerOverlay = new LayerOverlay();

            layerOverlay.Layers.Add(statesLayer);
            MapView.Overlays.Add("LayerOverlay", layerOverlay);

            filterStyle = new FilterStyle();
            SimpleFilterCondition newCondition = new SimpleFilterCondition("STATE_NAME", SimpleFilterConditionType.Equal, "Texas");

            filterStyle.Conditions.Add(newCondition);

            GeoColor fillColor    = GeoColor.FromArgb(130, GeoColor.FromHtml("#ffb74c"));
            GeoColor outlineColor = GeoColor.FromHtml("#333333");

            filterStyle.Styles.Add(AreaStyles.CreateSimpleAreaStyle(fillColor, outlineColor));
            statesLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(filterStyle);
            statesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Gets an overlay applied with Filter style.
        /// </summary>
        public static LayerOverlay GetOverlayWithFilterStyle()
        {
            // Get the file path name from its relative path.
            string shpFilePathName = GetFullPath(@"App_Data/usStatesCensus2010.shp");

            ShapeFileFeatureLayer shapeFileFeatureLayer = new ShapeFileFeatureLayer(shpFilePathName);

            shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            // Create the FilterStyle.
            FilterStyle filterStyle = new FilterStyle();

            filterStyle.Conditions.Add(new FilterCondition("Population", ">2967297"));
            filterStyle.Styles.Add(AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(130, GeoColor.FromHtml("#ffb74c")), GeoColor.FromHtml("#333333")));
            shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(filterStyle);

            // Apply projection to the shape file which is used for display
            shapeFileFeatureLayer.FeatureSource.Projection = GetProjection();

            LayerOverlay layerOverlay = new LayerOverlay();

            layerOverlay.Layers.Add(shapeFileFeatureLayer);
            return(layerOverlay);
        }
Ejemplo n.º 14
0
        public FilterStyleUserControl(FilterStyle style, StyleBuilderArguments requiredValues)
        {
            StyleBuilderArguments = requiredValues;
            InitializeComponent();

            filterStyle = style;

            viewModel   = new FilterStyleViewModel(style, requiredValues);
            DataContext = viewModel;
            textEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("C#");

            string helpUri = GisEditor.LanguageManager.GetStringResource("FilterStyleHelp");

            if (!string.IsNullOrEmpty(helpUri))
            {
                HelpUri = new Uri(helpUri);
            }


            ScriptComboBox.ItemsSource        = Enum.GetNames(typeof(FilterStyleScriptType)).Where(e => e != "None");
            textEditor.TextArea.TextEntering += new TextCompositionEventHandler(TextArea_TextEntering);
            textEditor.TextArea.TextEntered  += new TextCompositionEventHandler(TextArea_TextEntered);
        }
 private static bool ValidateFeature(Feature feature, FilterStyle filterStyle)
 {
     return(filterStyle.Conditions.FirstOrDefault().GetMatchingFeatures(new Feature[] { feature }).Count > 0);
 }
Ejemplo n.º 16
0
        public static bool CheckIsValid(this Style style)
        {
            AreaStyle       areaStyle       = style as AreaStyle;
            LineStyle       lineStyle       = style as LineStyle;
            PointStyle      pointStyle      = style as PointStyle;
            TextStyle       textStyle       = style as TextStyle;
            DotDensityStyle dotDensityStyle = style as DotDensityStyle;
            ClassBreakStyle classBreakStyle = style as ClassBreakStyle;
            RegexStyle      regexStyle      = style as RegexStyle;
            FilterStyle     filterStyle     = style as FilterStyle;
            CompositeStyle  componentStyle  = style as CompositeStyle;

            bool isStyleValid = style.IsActive && !string.IsNullOrEmpty(style.Name);

            if (areaStyle != null)
            {
                isStyleValid &= (!areaStyle.FillSolidBrush.Color.IsTransparent ||
                                 !areaStyle.OutlinePen.Color.IsTransparent ||
                                 areaStyle.Advanced.FillCustomBrush != null);
            }
            else if (lineStyle != null)
            {
                isStyleValid &= (!lineStyle.CenterPen.Color.IsTransparent ||
                                 !lineStyle.OuterPen.Color.IsTransparent ||
                                 !lineStyle.InnerPen.Color.IsTransparent);
            }
            else if (pointStyle != null)
            {
                switch (pointStyle.PointType)
                {
                case PointType.Symbol:
                    isStyleValid &= (!pointStyle.SymbolPen.Color.IsTransparent ||
                                     pointStyle.Image != null ||
                                     !pointStyle.SymbolSolidBrush.Color.IsTransparent ||
                                     pointStyle.Advanced.CustomBrush != null);
                    break;

                case PointType.Bitmap:
                    isStyleValid &= pointStyle.Image != null;
                    break;

                case PointType.Character:
                    isStyleValid &= pointStyle.CharacterFont != null &&
                                    (!pointStyle.CharacterSolidBrush.Color.IsTransparent ||
                                     pointStyle.Advanced.CustomBrush != null);
                    break;

                default:
                    break;
                }
            }
            else if (textStyle != null)
            {
                isStyleValid &= !string.IsNullOrEmpty(textStyle.TextColumnName) &&
                                (!textStyle.HaloPen.Color.IsTransparent ||
                                 !textStyle.TextSolidBrush.Color.IsTransparent ||
                                 textStyle.Advanced.TextCustomBrush != null);
            }
            else if (dotDensityStyle != null)
            {
                isStyleValid &= !string.IsNullOrEmpty(dotDensityStyle.ColumnName) &&
                                (dotDensityStyle.CustomPointStyle != null &&
                                 CheckIsValid(dotDensityStyle.CustomPointStyle) &&
                                 dotDensityStyle.PointToValueRatio != 0);
            }
            else if (classBreakStyle != null)
            {
                isStyleValid &= !string.IsNullOrEmpty(classBreakStyle.ColumnName) &&
                                classBreakStyle.ClassBreaks.Count != 0;
            }
            else if (regexStyle != null)
            {
                isStyleValid &= !string.IsNullOrEmpty(regexStyle.ColumnName) &&
                                regexStyle.RegexItems.Count != 0;
            }
            else if (filterStyle != null)
            {
                isStyleValid &= filterStyle.Conditions.Count > 0;
            }
            else if (componentStyle != null)
            {
                isStyleValid = true;
            }
            return(isStyleValid);
        }
Ejemplo n.º 17
0
        private string GetErrorMessage()
        {
            StringBuilder errorMessage = new StringBuilder();

            if (viewModel.FilterConditions.Where(f => f.MatchType.Key != FilterConditionType.DynamicLanguage).Any(c => string.IsNullOrEmpty(c.ColumnName)))
            {
                errorMessage.AppendLine("Column name cannot be empty.");
            }

            int bracketIndentify = 0;

            foreach (var condition in viewModel.FilterConditions)
            {
                if (condition.IsLeftBracket)
                {
                    bracketIndentify += 1;
                }
                if (condition.IsRightBracket)
                {
                    bracketIndentify -= 1;
                }

                if (bracketIndentify < 0)
                {
                    break;
                }
            }
            if (bracketIndentify != 0)
            {
                errorMessage.AppendLine("The closing bracket must pair with the nearest preceding opening bracket.");
            }

            FilterStyle style = viewModel.ActualObject as FilterStyle;

            if (style != null)
            {
                try
                {
                    var result = style.GetRequiredColumnNames().All(c => viewModel.RequiredValues.ColumnNames.Contains(c));
                    if (!result)
                    {
                        errorMessage.AppendLine(GisEditor.LanguageManager.GetStringResource("FilterStyleUserControlColumnMessage"));
                    }
                    else
                    {
                        Collection <Feature>  features  = new Collection <Feature>();
                        ScriptFilterCondition condition = style.Conditions.OfType <ScriptFilterCondition>().FirstOrDefault();
                        if (condition != null)
                        {
                            condition.GetMatchingFeatures(features);
                        }
                    }
                }
                catch (Exception ex)
                {
                    errorMessage.AppendLine(ex.Message);
                    GisEditor.LoggerManager.Log(LoggerLevel.Debug, ex.Message, new ExceptionInfo(ex));
                }
            }

            return(errorMessage.ToString());
        }
Ejemplo n.º 18
0
 public void AddFilterStyle(FilterStyle filterStyle)
 {
     filterStyles.Add(filterStyle);
 }
Ejemplo n.º 19
0
 public void RemoveFilterStyle(FilterStyle filterStyle)
 {
     filterStyles.Remove(filterStyle);
 }