public static void CopyToEditLayer(Collection <FeatureLayer> selectionLayers)
        {
            GisEditorEditInteractiveOverlay overlay = GisEditor.ActiveMap.FeatureLayerEditOverlay;

            if (overlay != null)
            {
                FeatureLayer editingLayer = overlay.EditTargetLayer;
                Collection <FeatureLayer> sourceLayers = new Collection <FeatureLayer>(selectionLayers.Except(editingLayer).ToList());
                if (sourceLayers.Count > 1)
                {
                    ChooseExportLayerWindow chooseExportLayerWindow = new ChooseExportLayerWindow(sourceLayers, new Collection <FeatureLayer> {
                        editingLayer
                    });
                    chooseExportLayerWindow.SelectedTargetFeatureLayer = editingLayer;
                    if (chooseExportLayerWindow.ShowDialog().GetValueOrDefault())
                    {
                        AddSelectedFeaturesToEditingLayer(chooseExportLayerWindow.SelectedSourceFeatureLayer);
                    }
                    else
                    {
                        return;
                    }
                }
                else if (selectionLayers.Count == 1)
                {
                    AddSelectedFeaturesToEditingLayer(selectionLayers[0]);
                }
                else if (selectionLayers.Count == 2 && sourceLayers.Count == 1)
                {
                    AddSelectedFeaturesToEditingLayer(sourceLayers[0]);
                }
            }
        }
        private static void AddSelectedFeaturesToEditingLayer(FeatureLayer sourceLayer)
        {
            GisEditorEditInteractiveOverlay overlay = GisEditor.ActiveMap.FeatureLayerEditOverlay;

            if (overlay != null)
            {
                FeatureLayer         editingLayer = overlay.EditTargetLayer;
                Collection <Feature> features     = GisEditor.SelectionManager.GetSelectedFeatures(sourceLayer);
                foreach (var feature in features)
                {
                    feature.Id = Guid.NewGuid().ToString();
                    overlay.NewFeatureIds.Add(feature.Id);
                    overlay.EditShapesLayer.InternalFeatures.Add(feature);
                }
                sourceLayer.SafeProcess(() =>
                {
                    Collection <FeatureSourceColumn> columns = sourceLayer.FeatureSource.GetColumns();
                    overlay.EditShapesLayer.Columns.Clear();
                    foreach (var column in columns)
                    {
                        overlay.EditShapesLayer.Columns.Add(column);
                    }
                });

                overlay.TakeSnapshot();
                overlay.Refresh();
                GisEditor.SelectionManager.ClearSelectedFeatures(sourceLayer);
            }
        }
        protected override Collection <MenuItem> GetMapContextMenuItemsCore(GetMapContextMenuParameters parameters)
        {
            cursorWorldPoint = parameters.WorldCoordinates;
            Collection <MenuItem>           menuItems   = new Collection <MenuItem>();
            GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay;

            if (editOverlay != null && !editOverlay.IsEmpty)
            {
                var intersectingFeatures = editOverlay.GetEditingFeaturesInterseting();
                if (intersectingFeatures.Count > 0)
                {
                    selectedFeature = intersectingFeatures.OrderBy(f => f.GetShape().GetDistanceTo(editOverlay.CurrentWorldCoordinate, GeographyUnit.Meter, DistanceUnit.Meter)).FirstOrDefault();

                    foreach (var item in GetEditMenuItems(selectedFeature, editOverlay.CanReshape, intersectingFeatures.Count))
                    {
                        menuItems.Add(item);
                    }
                }
                else if (clickCopy)
                {
                    InitializeCopyPasteMenuItems();
                    menuItems.Add(copyFeatureMenuItem);
                    menuItems.Add(pasteFeatureMenuItem);
                }
                else
                {
                    selectedFeature = null;
                }
            }
            else
            {
                selectedFeature = null;
            }
            return(menuItems);
        }
        private void GridCellEditing(DataGridCellEditEndingEventArgs e)
        {
            GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay;
            InMemoryFeatureLayer            layer       = editOverlay != null ? editOverlay.EditShapesLayer : null;

            if (layer != null)
            {
                try
                {
                    FeatureViewModel entity      = featuresList.SelectedValue as FeatureViewModel;
                    string           columnName  = ((DataRowView)e.Row.Item)[0].ToString();
                    string           columnValue = (e.EditingElement as TextBox).Text;

                    if (columnValue != originalColumnValue)
                    {
                        layer.Open();
                        Feature feature = layer.QueryTools.GetFeatureById(entity.FeatureId, layer.GetDistinctColumnNames());
                        feature.ColumnValues[columnName] = columnValue;
                        if (!layer.EditTools.IsInTransaction)
                        {
                            layer.EditTools.BeginTransaction();
                        }
                        layer.EditTools.Update(feature);
                        TransactionResult result = layer.EditTools.CommitTransaction();
                        if (result.TotalFailureCount != 0)
                        {
                            string failureReasonString = null;
                            Dictionary <string, string> failureReasons = result.FailureReasons;
                            foreach (string key in failureReasons.Keys)
                            {
                                failureReasonString += "\r\n\r\n" + failureReasons[key];
                            }
                            System.Windows.Forms.MessageBox.Show(GisEditor.LanguageManager.GetStringResource("FeatureAttibuteWindowUpdateFailedText") + failureReasonString, GisEditor.LanguageManager.GetStringResource("FeatureAttibuteWindowUpdateFailedCaption"));
                            (e.EditingElement as TextBox).Text = originalColumnValue;
                        }
                        else
                        {
                            // Update the selected value
                            entity.Feature.ColumnValues[columnName] = columnValue;
                        }
                    }
                }
                catch (UnauthorizedAccessException unauthorizedAccessException)
                {
                    GisEditor.LoggerManager.Log(LoggerLevel.Debug, unauthorizedAccessException.Message, new ExceptionInfo(unauthorizedAccessException));
                    System.Windows.Forms.MessageBox.Show(string.Format("{0} {1}", unauthorizedAccessException.Message, GisEditor.LanguageManager.GetStringResource("FeatureAttributeWindowRestartAdminText")), GisEditor.LanguageManager.GetStringResource("MessageBoxWarningTitle"), System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);
                }
                catch (Exception ex)
                {
                    GisEditor.LoggerManager.Log(LoggerLevel.Debug, ex.Message, new ExceptionInfo(ex));
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                }
                finally
                {
                    layer.Close();
                }
            }
        }
        private void removeVertexMenuItem_Click(object sender, RoutedEventArgs e)
        {
            GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay;

            if (editOverlay != null && selectedFeature.GetShape() != null)
            {
                editOverlay.RemoveVertex(cursorWorldPoint);
                editOverlay.CalculateVertexControlPoints();
                GisEditor.ActiveMap.Refresh();
            }
        }
        private static void ClearEditOverlay(GisEditorEditInteractiveOverlay editOverlay)
        {
            editOverlay.EditTargetLayer.FeatureIdsToExclude.Clear();

            editOverlay.EditShapesLayer.InternalFeatures.Clear();
            editOverlay.AssociateControlPointsLayer.InternalFeatures.Clear();
            editOverlay.ReshapeControlPointsLayer.InternalFeatures.Clear();

            editOverlay.EditShapesLayer.BuildIndex();
            editOverlay.AssociateControlPointsLayer.BuildIndex();
            editOverlay.ReshapeControlPointsLayer.BuildIndex();

            GisEditor.ActiveMap.Refresh(editOverlay);
        }
        private void IdentifyMenuItem_Click(object sender, RoutedEventArgs e)
        {
            GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay;

            if (editOverlay != null && selectedFeature.GetShape() != null)
            {
                var identifyWindow = FeatureInfoWindow.Instance;
                identifyWindow.Show(DockWindowPosition.Right);
                Dictionary <FeatureLayer, Collection <Feature> > features = new Dictionary <FeatureLayer, Collection <Feature> >();
                features[editOverlay.EditTargetLayer] = new Collection <Feature>()
                {
                    selectedFeature
                };
                identifyWindow.Refresh(features);
            }
        }
        private static void AddFeaturesToEditingLayer(IEnumerable <Feature> features)
        {
            GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay;

            if (editOverlay != null)
            {
                FeatureLayer editingLayer = editOverlay.EditTargetLayer;

                foreach (var feature in features)
                {
                    feature.Id = Guid.NewGuid().ToString();
                    editOverlay.NewFeatureIds.Add(feature.Id);
                    editOverlay.EditShapesLayer.InternalFeatures.Add(feature);
                }
                editOverlay.TakeSnapshot();
                editOverlay.Refresh();
            }
        }
        private void RemoveMenuItem_Click(object sender, RoutedEventArgs e)
        {
            GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay;

            if (editOverlay != null && selectedFeature.GetShape() != null)
            {
                lock (editOverlay.EditShapesLayer)
                {
                    if (!editOverlay.EditShapesLayer.IsOpen)
                    {
                        editOverlay.EditShapesLayer.Open();
                    }
                    editOverlay.EditShapesLayer.EditTools.BeginTransaction();
                    editOverlay.EditShapesLayer.EditTools.Delete(selectedFeature.Id);
                    editOverlay.EditShapesLayer.EditTools.CommitTransaction();
                }

                editOverlay.ClearVertexControlPoints();
                editOverlay.TakeSnapshot();
                editOverlay.Refresh();
            }
        }
Пример #10
0
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            ValidationResult result = null;

            double inputValue = 0;
            bool   isDouble   = double.TryParse(value.ToString(), out inputValue);

            if (isDouble && GisEditor.ActiveMap != null)
            {
                GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay;
                if (editOverlay != null)
                {
                    SnappingDistanceUnit unit = editOverlay.SnappingDistanceUnit;
                    if (distanceMaxValues.ContainsKey(unit))
                    {
                        double maxValue = distanceMaxValues[unit];
                        if (inputValue > maxValue)
                        {
                            result = new ValidationResult(false, null);
                        }
                        else
                        {
                            result = new ValidationResult(true, null);
                        }
                    }
                    else
                    {
                        result = new ValidationResult(true, null);
                    }
                }
            }
            else
            {
                result = new ValidationResult(false, null);
            }

            return(result);
        }