Example #1
0
        internal static bool HasRelationship(this ArcGIS.Core.Geometry.IGeometryEngine engine,
                                             ArcGIS.Core.Geometry.Geometry geom1,
                                             ArcGIS.Core.Geometry.Geometry geom2,
                                             ArcGIS.Core.Data.SpatialRelationship relationship)
        {
            switch (relationship)
            {
            case ArcGIS.Core.Data.SpatialRelationship.Intersects:
                return(engine.Intersects(geom1, geom2));

            case ArcGIS.Core.Data.SpatialRelationship.IndexIntersects:
                return(engine.Intersects(geom1, geom2));

            case ArcGIS.Core.Data.SpatialRelationship.EnvelopeIntersects:
                return(engine.Intersects(geom1.Extent, geom2.Extent));

            case ArcGIS.Core.Data.SpatialRelationship.Contains:
                return(engine.Contains(geom1, geom2));

            case ArcGIS.Core.Data.SpatialRelationship.Crosses:
                return(engine.Crosses(geom1, geom2));

            case ArcGIS.Core.Data.SpatialRelationship.Overlaps:
                return(engine.Overlaps(geom1, geom2));

            case ArcGIS.Core.Data.SpatialRelationship.Touches:
                return(engine.Touches(geom1, geom2));

            case ArcGIS.Core.Data.SpatialRelationship.Within:
                return(engine.Within(geom1, geom2));
            }
            return(false);//unknown relationship
        }
        protected override Task <bool> OnSketchCompleteAsync(ArcGIS.Core.Geometry.Geometry geometry)
        {
            //Simple check for selected layer
            if (MappingModule.ActiveTOC.SelectedLayers.Count == 0)
            {
                System.Windows.MessageBox.Show("Select a layer in the toc");
                return(Task.FromResult(true));
            }

            //jump to CIM thread
            return(QueuedTask.Run(async() =>
            {
                //Get the selected layer in toc
                var featLayer = MappingModule.ActiveTOC.SelectedLayers[0] as FeatureLayer;

                //find feature oids under the sketch for the selected layer
                var features = await MapView.Active.HitTestAsync(geometry, CancelableProgressor.None);
                var featOids = features.Where(x => x.Item1 == featLayer).Select(x => x.Item2).First();

                //update the attributes of those features
                var fi = new FeatureInspector(true);
                await fi.FillAsync(featLayer, featOids);
                await fi.Attributes.Where(a => a.FieldName == "PARCEL_ID").First().SetValueAsync(42);

                //create and execute the edit operation
                var op = new EditOperation();
                op.Name = "The ultimate answer";
                op.SelectModifiedFeatures = true;
                op.SelectNewFeatures = false;
                op.Modify(fi);
                return await op.ExecuteAsync();
            }));
        }
Example #3
0
        protected override Task <bool> OnSketchCompleteAsync(ArcGIS.Core.Geometry.Geometry geometry)
        {
            //Simple check for selected layer
            if (MapView.Active.GetSelectedLayers().Count == 0)
            {
                MessageBox.Show("Please select a layer in the toc", "Update attributes with sketch");
                return(Task.FromResult(true));
            }

            //Run on MCT
            return(QueuedTask.Run(() =>
            {
                //Get the selected layer in toc
                var featLayer = MapView.Active.GetSelectedLayers().First() as FeatureLayer;

                //find feature oids under the sketch for the selected layer
                var features = MapView.Active.GetFeatures(geometry);
                var featOids = features[featLayer];

                //update the attributes of those features
                var insp = new Inspector();
                insp.Load(featLayer, featOids);
                insp["PARCEL_ID"] = 42;

                //create and execute the edit operation
                var op = new EditOperation();
                op.Name = "Update parcel";
                op.SelectModifiedFeatures = true;
                op.SelectNewFeatures = false;
                op.Modify(insp);
                return op.Execute();
            }));
        }
 public PickableFeatureClassItem(FeatureClass featureClass, esriGeometryType geometryType,
                                 List <FeatureLayer> belongingFeatureLayers)
 {
     _itemText              = featureClass.GetName();
     _geometry              = null;
     _itemImageUri          = GetImagePath(geometryType);
     BelongingFeatureLayers = belongingFeatureLayers;
 }
        /// <summary>
        /// Performs a spatial query against the table/feature class.
        /// </summary>
        /// <remarks>It is assumed that the feature class and the search geometry are using the same spatial reference.</remarks>
        /// <param name="searchTable">The table/feature class to be searched.</param>
        /// <param name="searchGeometry">The geometry used to perform the spatial query.</param>
        /// <param name="spatialRelationship">The spatial relationship used by the spatial filter.</param>
        /// <returns></returns>
        public static RowCursor Search(this Table searchTable, Geometry searchGeometry, SpatialRelationship spatialRelationship)
        {
            // define a spatial query filter
            ArcGIS.Core.Data.SpatialQueryFilter spatialQueryFilter = new ArcGIS.Core.Data.SpatialQueryFilter();
            // pasing the search geometry to the spatial filter
            spatialQueryFilter.FilterGeometry = searchGeometry;
            // define the spatial relationship between search geometry and feature class
            spatialQueryFilter.SpatialRelationship = spatialRelationship;

            // apply the spatial filter to the feature class in question
            return(searchTable.Search(spatialQueryFilter));
        }
Example #6
0
        public static SpatialQueryFilter CreateSpatialFilter(
            [NotNull] ArcGIS.Core.Geometry.Geometry filterGeometry,
            SpatialRelationship spatialRelationship = SpatialRelationship.Intersects,
            SearchOrder searchOrder = SearchOrder.Spatial)
        {
            Assert.ArgumentNotNull(filterGeometry, nameof(filterGeometry));

            return(new SpatialQueryFilter
            {
                FilterGeometry = filterGeometry,
                SpatialRelationship = spatialRelationship,
                SearchOrder = searchOrder
            });
        }
        /// <summary>
        /// Called when the sketch is finished.
        /// </summary>
        protected override async Task <bool> OnSketchCompleteAsync(ArcGIS.Core.Geometry.Geometry geometry)
        {
            // Clear any previous selection using the built-in Pro button/command
            // TRICKY: Must be called here before the QueuedTask so runs on Main UI Thread
            ProSymbolUtilities.ClearMapSelection();

            return(await QueuedTask.Run(() =>
            {
                //Return all the features that intersect the sketch geometry
                var result = MapView.Active.GetFeatures(geometry);

                if ((result != null) && (result.Count > 0))
                {
                    MapView.Active.SelectFeatures(geometry, SelectionCombinationMethod.New);
                }

                return true;
            }));
        }
        /// <summary>
        /// Called when the sketch is finished.
        /// </summary>
        protected override async Task <bool> OnSketchCompleteAsync(ArcGIS.Core.Geometry.Geometry geometry)
        {
            //Get the instance of the ViewModel from the dock pane
            var featureSelVM = Module1.FeatureSelectionVM;

            if (featureSelVM == null || featureSelVM.SelectedLayer == null)
            {
                return(true);
            }

            return(await QueuedTask.Run(() =>
            {
                //Return all the features that intersect the sketch geometry
                var result = MapView.Active.GetFeatures(geometry);
                var layerSelection = result.FirstOrDefault(kvp => kvp.Key == featureSelVM.SelectedLayer);

                //Clear the selection if no features where returned
                if (!result.ContainsKey(featureSelVM.SelectedLayer))
                {
                    featureSelVM.SelectedLayer.Select(null, SelectionCombinationMethod.Subtract);
                    return true;
                }

                //Construct a query filter using the OIDs of the features that intersected the sketch geometry
                var oidList = result[featureSelVM.SelectedLayer];
                var oid = featureSelVM.SelectedLayer.GetTable().GetDefinition().GetObjectIDField();
                var qf = new ArcGIS.Core.Data.QueryFilter()
                {
                    WhereClause = string.Format("({0} in ({1}))", oid, string.Join(",", oidList))
                };

                //Add to the clause using the where clause specified in the dock pane.
                if (featureSelVM.WhereClause != "" && featureSelVM.WhereClause != null)
                {
                    qf.WhereClause += string.Format(" AND ({0})", featureSelVM.WhereClause);
                }

                //Return if the expression is not valid.
                if (!featureSelVM.ValidateExpresion(false))
                {
                    return true;
                }

                //Change the method depending on the hot keys that are pressed.
                var method = SelectionCombinationMethod.New;
                if (_ctrlPressed && _shiftPressed)
                {
                    method = SelectionCombinationMethod.And;
                }
                else if (_ctrlPressed)
                {
                    method = SelectionCombinationMethod.Subtract;
                }
                else if (_shiftPressed)
                {
                    method = SelectionCombinationMethod.Add;
                }

                try
                {
                    //Create the new selection
                    featureSelVM.SelectedLayer.Select(qf, method);
                }
                catch (Exception) {} //May occur if expression validates but is still invalid expression.
                return true;
            }));
        }