public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is QueryMatchMode)
            {
                QueryMatchMode matchMode = (QueryMatchMode)value;
                switch (matchMode)
                {
                case QueryMatchMode.Any:
                    return(GisEditor.LanguageManager.GetStringResource("FindFeaturesWindowAdvancedQueryAny"));

                case QueryMatchMode.All:
                default:
                    return(GisEditor.LanguageManager.GetStringResource("FindFeaturesWindowAdvancedQueryAll"));
                }
            }
            else
            {
                return(Binding.DoNothing);
            }
        }
예제 #2
0
 /// <summary>
 /// Sets the match mode for this query, which is by default <see cref="QueryMatchMode.All"/>.
 /// This should be called before adding any other queries.
 /// </summary>
 public QueryWrapper <T> SetMode(QueryMatchMode mode)
 {
     Mode = mode;
     return(this);
 }
        public IEnumerable <Feature> FindFeatures(ObservableCollection <QueryConditionViewModel> conditions, QueryMatchMode queryMatchMode)
        {
            IEnumerable <Feature> filteredFeatures = new Collection <Feature>();

            switch (queryMatchMode)
            {
            case QueryMatchMode.All:
                var featuresGroup = conditions.Select(condition => AdvancedQueryViewModel.FilterFeatures(condition)).ToArray();

                for (int i = 0; i < featuresGroup.Length; i++)
                {
                    if (i == 0)
                    {
                        filteredFeatures = featuresGroup[i];
                    }
                    else
                    {
                        return(Intersect(featuresGroup[i - 1], featuresGroup[i]));
                    }
                }
                break;

            case QueryMatchMode.Any:
                filteredFeatures = conditions.SelectMany(condition => AdvancedQueryViewModel.FilterFeatures(condition));
                Dictionary <string, Feature> result = new Dictionary <string, Feature>();
                foreach (var item in filteredFeatures)
                {
                    Feature newFeature = GisEditor.SelectionManager.GetSelectionOverlay().CreateHighlightFeature(item, (FeatureLayer)item.Tag);
                    if (!result.ContainsKey(newFeature.Id))
                    {
                        result.Add(newFeature.Id, newFeature);
                    }
                }
                return(result.Values);
            }

            return(filteredFeatures);
        }