private static void ShapeFileMenuitem_Click(object sender, RoutedEventArgs e)
        {
            var overlay = GisEditor.SelectionManager.GetSelectionOverlay();
            Dictionary <FeatureLayer, GeoCollection <Feature> > group = overlay.GetSelectedFeaturesGroup();

            if (group.Count > 1)
            {
                ChooseExportLayerWindow chooseExportLayerWindow = new ChooseExportLayerWindow(overlay.TargetFeatureLayers, overlay.TargetFeatureLayers);
                if (chooseExportLayerWindow.ShowDialog().GetValueOrDefault())
                {
                    FeatureLayer sourceLayer = chooseExportLayerWindow.SelectedSourceFeatureLayer;
                    sourceLayer.Open();
                    var allColumns = sourceLayer.FeatureSource.GetColumns();
                    Collection <Feature> features = GisEditor.SelectionManager.GetSelectedFeatures(sourceLayer);
                    FeatureLayerPlugin   plugin   = (FeatureLayerPlugin)GisEditor.LayerManager.GetLayerPlugins(sourceLayer.GetType()).FirstOrDefault();
                    ExportToShapeFile(features, allColumns, plugin, sourceLayer.FeatureSource.GetFirstFeaturesWellKnownType());
                }
            }
            else if (group.Count == 1)
            {
                FeatureLayer layer = group.First().Key;
                layer.Open();
                Collection <Feature> features = group.First().Value;
                var allColumns            = layer.FeatureSource.GetColumns();
                FeatureLayerPlugin plugin = (FeatureLayerPlugin)GisEditor.LayerManager.GetLayerPlugins(layer.GetType()).FirstOrDefault();
                ExportToShapeFile(features, allColumns, plugin, layer.FeatureSource.GetFirstFeaturesWellKnownType());
            }
        }
        private void InitializeColumnNameTypes(StyleBuilderArguments requiredValues)
        {
            columnNameTypes = new Dictionary <string, IntermediateColumnType>();
            if (RequiredValues.FeatureLayer != null)
            {
                FeatureLayerPlugin resultLayerPlugin = GisEditor.LayerManager.GetLayerPlugins(RequiredValues.FeatureLayer.GetType()).LastOrDefault() as FeatureLayerPlugin;

                if (resultLayerPlugin != null)
                {
                    Collection <IntermediateColumn> columns = resultLayerPlugin.GetIntermediateColumns(requiredValues.FeatureLayer.FeatureSource);
                    foreach (var item in columns)
                    {
                        columnNameTypes[item.ColumnName] = item.IntermediateColumnType;
                    }
                }
            }
        }
        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);
                    }
                }
            }
        }
 public ShapeFileBuildIndexAdapter(FeatureLayerPlugin layerPlugin)
     : base(layerPlugin)
 {
     layersInBuildingIndex = new Collection <FeatureLayer>();
 }
        private void InitializeCommands()
        {
            addConditionCommand = new RelayCommand(() =>
            {
                FilterConditionWindow newFilterConditionWindow = new FilterConditionWindow();
                FilterConditionViewModel itemViewModel         = new FilterConditionViewModel(RequiredValues);
                itemViewModel.PropertyChanged       += ItemViewModel_PropertyChanged;
                newFilterConditionWindow.DataContext = itemViewModel;
                foreach (var item in columnNameTypes)
                {
                    newFilterConditionWindow.ViewModel.ColumnNameTypes[item.Key] = item.Value;
                }

                newFilterConditionWindow.ViewModel.SelectedColumnName = newFilterConditionWindow.ViewModel.ColumnNames.FirstOrDefault();
                if (newFilterConditionWindow.ShowDialog().GetValueOrDefault())
                {
                    var stylePlugin = GisEditor.StyleManager.GetDefaultStylePlugin(requiredValues.AvailableStyleCategories);

                    filterConditions.Add(newFilterConditionWindow.ViewModel);
                    SyncConditions();
                    RaisePropertyChanged("FilterConditions");
                }
            });

            editConditionCommand = new RelayCommand <FilterConditionViewModel>(v =>
            {
                var clonedViewModel = v.CloneDeep();
                clonedViewModel.ColumnNameTypes.Clear();

                foreach (var item in columnNameTypes)
                {
                    clonedViewModel.ColumnNameTypes[item.Key] = item.Value;
                }

                FilterConditionWindow newFilterConditionWindow = new FilterConditionWindow(clonedViewModel);

                FeatureLayerPlugin resultLayerPlugin = GisEditor.LayerManager.GetLayerPlugins(RequiredValues.FeatureLayer.GetType()).LastOrDefault() as FeatureLayerPlugin;

                if (resultLayerPlugin != null)
                {
                    Collection <IntermediateColumn> columns = resultLayerPlugin.GetIntermediateColumns(requiredValues.FeatureLayer.FeatureSource);
                    foreach (var item in columns)
                    {
                        newFilterConditionWindow.ViewModel.ColumnNameTypes[item.ColumnName] = item.IntermediateColumnType;
                    }
                }

                if (newFilterConditionWindow.ShowDialog().Value)
                {
                    var index = FilterConditions.IndexOf(v);
                    if (index != -1)
                    {
                        v = clonedViewModel;
                        FilterConditions.RemoveAt(index);
                        FilterConditions.Insert(index, v);
                    }
                }

                SyncConditions();
            });

            removeConditionCommand = new RelayCommand <FilterConditionViewModel>(v =>
            {
                if (FilterConditions.Contains(v))
                {
                    var messageBoxResult = System.Windows.Forms.MessageBox.Show(GisEditor.LanguageManager.GetStringResource("FilterStyleViewModelConditionRemovedMessage")
                                                                                , "Alert"
                                                                                , System.Windows.Forms.MessageBoxButtons.YesNo);

                    if (messageBoxResult == System.Windows.Forms.DialogResult.Yes)
                    {
                        FilterConditions.Remove(v);
                        SyncConditions();
                        RaisePropertyChanged("FilterConditions");
                    }
                }
            });

            testScriptCommand = new RelayCommand(() =>
            {
                try
                {
                    var result = actualFilterStyle.GetRequiredColumnNames().All(c => requiredValues.ColumnNames.Contains(c));
                    if (!result)
                    {
                        MessageBox.Show(GisEditor.LanguageManager.GetStringResource("FilterStyleUserControlColumnMessage"));
                    }
                    else
                    {
                        Collection <Feature> features   = new Collection <Feature>();
                        ScriptFilterCondition condition = actualFilterStyle.Conditions.OfType <ScriptFilterCondition>().FirstOrDefault();
                        if (condition != null)
                        {
                            condition.GetMatchingFeatures(features);
                        }
                        MessageBox.Show(GisEditor.LanguageManager.GetStringResource("TestPassMessage"));
                    }
                }
                catch (Exception ex)
                {
                    GisEditor.LoggerManager.Log(LoggerLevel.Debug, ex.Message, new ExceptionInfo(ex));
                    MessageBox.Show(ex.Message);
                }
            });

            viewDataCommand = new RelayCommand(() =>
            {
                DataViewerUserControl content = new DataViewerUserControl();
                content.ShowDialog();
            });

            showResultsCommand = new ObservedCommand(() =>
            {
                ShowFilteredData(requiredValues.FeatureLayer, FilterConditions.Select(f => f.FilterCondition), "");
            }, () => filterConditions.Count > 0);
        }
 public DelimitedTextBuildIndexAdapter(FeatureLayerPlugin layerPlugin)
     : base(layerPlugin)
 {
 }
 protected BuildIndexAdapter(FeatureLayerPlugin layerPlugin)
 {
     this.layerPlugin = layerPlugin;
     this.backgroundBuildingCallbacks = new Dictionary <string, Action>();
 }
        private static void ExportToShapeFile(Collection <Feature> resultFeatures, Collection <FeatureSourceColumn> columns, FeatureLayerPlugin sourceLayerPlugin, WellKnownType type)
        {
            int count = resultFeatures.Count;

            if (count > 0)
            {
                ShapeFileFeatureLayerPlugin targetLayerPlugin = GisEditor.LayerManager.GetActiveLayerPlugins <ShapeFileFeatureLayerPlugin>().FirstOrDefault();
                FeatureLayer        resultLayer        = null;
                GetLayersParameters getLayerParameters = new GetLayersParameters();

                if (targetLayerPlugin != null)
                {
                    ConfigureFeatureLayerParameters parameters = targetLayerPlugin.GetCreateFeatureLayerParameters(columns);
                    if (parameters != null && sourceLayerPlugin != null)
                    {
                        bool needColumns = false;
                        Collection <string> tempColumns = new Collection <string>();
                        if (parameters.CustomData.ContainsKey("Columns"))
                        {
                            tempColumns = parameters.CustomData["Columns"] as Collection <string>;
                        }
                        else
                        {
                            needColumns = true;
                        }

                        var featureColumns = columns.Where(c => needColumns || tempColumns.Contains(c.ColumnName));
                        if (targetLayerPlugin.CanCreateFeatureLayerWithSourceColumns(sourceLayerPlugin))
                        {
                            foreach (var item in featureColumns)
                            {
                                FeatureSourceColumn column = new FeatureSourceColumn(item.ColumnName, item.TypeName, item.MaxLength);
                                if (column.TypeName.Equals("c", StringComparison.InvariantCultureIgnoreCase))
                                {
                                    column.TypeName = "Character";
                                }
                                parameters.AddedColumns.Add(column);
                            }
                        }
                        else
                        {
                            var geoColumns = sourceLayerPlugin.GetIntermediateColumns(featureColumns);
                            foreach (var item in geoColumns)
                            {
                                if (item.TypeName.Equals("c", StringComparison.InvariantCultureIgnoreCase))
                                {
                                    item.TypeName = "Character";
                                }
                                parameters.AddedColumns.Add(item);
                            }
                        }


                        parameters.WellKnownType = type;
                        //parameters.CustomData["SourceLayer"] = featureLayer;

                        getLayerParameters.LayerUris.Add(parameters.LayerUri);
                        foreach (var item in parameters.CustomData)
                        {
                            getLayerParameters.CustomData[item.Key] = item.Value;
                        }

                        Proj4Projection proj4 = new Proj4Projection();
                        proj4.InternalProjectionParametersString = parameters.Proj4ProjectionParametersString;
                        proj4.ExternalProjectionParametersString = GisEditor.ActiveMap.DisplayProjectionParameters;
                        proj4.SyncProjectionParametersString();
                        proj4.Open();

                        foreach (var item in resultFeatures)
                        {
                            Feature feature = proj4.ConvertToInternalProjection(item);
                            parameters.AddedFeatures.Add(feature);
                        }
                        if (parameters.MemoColumnConvertMode == MemoColumnConvertMode.ToCharacter)
                        {
                            foreach (var item in parameters.AddedColumns.Where(c => c.TypeName.Equals("Memo", StringComparison.InvariantCultureIgnoreCase)).ToList())
                            {
                                //parameters.AddedColumns.Remove(item);
                                item.TypeName  = "Character";
                                item.MaxLength = 254;
                                DbfColumn tmpDbfColumn = item as DbfColumn;
                                if (tmpDbfColumn != null)
                                {
                                    tmpDbfColumn.ColumnType = DbfColumnType.Character;
                                    tmpDbfColumn.Length     = 254;
                                }
                            }
                        }

                        resultLayer = targetLayerPlugin.CreateFeatureLayer(parameters);
                        resultLayer.FeatureSource.Projection = proj4;
                        resultLayer = targetLayerPlugin.GetLayers(getLayerParameters).FirstOrDefault() as FeatureLayer;
                    }
                }

                if (resultLayer != null)
                {
                    GisEditorMessageBox messageBox = new GisEditorMessageBox(MessageBoxButton.YesNo);
                    messageBox.Owner = Application.Current.MainWindow;
                    messageBox.WindowStartupLocation = WindowStartupLocation.CenterOwner;
                    messageBox.Title        = GisEditor.LanguageManager.GetStringResource("NavigatePluginAddToMap");
                    messageBox.Message      = GisEditor.LanguageManager.GetStringResource("DoYouWantToAddToMap");
                    messageBox.ErrorMessage = string.Empty;
                    if (messageBox.ShowDialog().Value)
                    {
                        GisEditor.ActiveMap.AddLayerToActiveOverlay(resultLayer);
                        GisEditor.ActiveMap.RefreshActiveOverlay();
                        RefreshArgs refreshArgs = new RefreshArgs(null, "LoadToMapCore");
                        InvokeRefreshPlugins(GisEditor.UIManager, refreshArgs);
                        GisEditor.ActiveMap.Refresh();
                    }
                }
            }
            else
            {
                System.Windows.Forms.MessageBox.Show("There's no features in this layer.", "Export File");
            }
        }
예제 #9
0
 public TabFileBuildIndexAdapter(FeatureLayerPlugin layerPlugin)
     : base(layerPlugin)
 {
 }
        private void AutoGenerate()
        {
            if (string.IsNullOrEmpty(ColumnName))
            {
                System.Windows.Forms.MessageBox.Show(GisEditor.LanguageManager.GetStringResource("ValueStyleViewModelColumnCanntEmptyMessage"), "Column is Empty");
            }
            else
            {
                FeatureLayer       featureLayer       = RequiredValues.FeatureLayer;
                FeatureLayerPlugin featureLayerPlugin = GisEditor.LayerManager.GetLayerPlugins(featureLayer.GetType()).FirstOrDefault() as FeatureLayerPlugin;
                if (featureLayerPlugin == null)
                {
                    return;
                }

                string selectedColumnName = ColumnName;

                featureLayer.Open();
                if (featureLayer.FeatureSource.CanGetCountQuickly())
                {
                    int count = featureLayer.FeatureSource.GetCount();
                    if (count > 500000)
                    {
                        //MessageBoxResult result = MessageBox.Show(string.Format("{0} contains a large amount of records, it might spend too much time to process. Do you want to continue?", featureLayer.Name), "Info", MessageBoxButton.YesNo, MessageBoxImage.Information);
                        //if (result == MessageBoxResult.No)
                        //{
                        //    return;
                        //}
                    }
                }

                //Collection<DistinctColumnValue> distinctColumnValues = null;
                if (distinctColumnValues == null)
                {
                    featureLayer.SafeProcess(() =>
                    {
                        distinctColumnValues = featureLayer.FeatureSource.GetDistinctColumnValues(selectedColumnName);
                    });
                }
                if (distinctColumnValues != null && distinctColumnValues.Count() > 0)
                {
                    SimpleShapeType shpType = SimpleShapeType.Unknown;
                    featureLayer.SafeProcess(() =>
                    {
                        shpType = featureLayerPlugin.GetFeatureSimpleShapeType(featureLayer);
                    });

                    foreach (var columnValue in distinctColumnValues)
                    {
                        switch (shpType)
                        {
                        case SimpleShapeType.Point:
                            InitValueItem <PointStyle>(StyleCategories.Point, columnValue, selectedColumnName);
                            break;

                        case SimpleShapeType.Line:
                            InitValueItem <LineStyle>(StyleCategories.Line, columnValue, selectedColumnName);
                            break;

                        case SimpleShapeType.Area:
                            InitValueItem <AreaStyle>(StyleCategories.Area, columnValue, selectedColumnName);
                            break;

                        case SimpleShapeType.Unknown:
                            InitValueItem <Style>(StyleCategories.Composite, columnValue, selectedColumnName);
                            break;
                        }
                    }
                    var itemSourceList = ValueItems.OrderBy(itemValue => itemValue.ValueItem.Value).ToList();
                    ValueItems.Clear();
                    foreach (var item in itemSourceList.Where(i => !String.IsNullOrEmpty(i.MatchedValue)))
                    {
                        ValueItems.Add(item);
                    }
                    foreach (var item in itemSourceList.Where(i => String.IsNullOrEmpty(i.MatchedValue)))
                    {
                        ValueItems.Add(item);
                    }

                    SyncActualValueItems();
                    RaisePropertyChanged("ValueItems");
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show(GisEditor.LanguageManager.GetStringResource("ValueStyleViewModelColumnNoValueMatchedMessage"));
                }
            }
        }
예제 #11
0
 public TobinBasBuildIndexAdapter(FeatureLayerPlugin layerPlugin)
     : base(layerPlugin)
 {
 }